Property24 Scraper - South Africa Property Data
Pricing
from $0.88 / 1,000 property searches
Property24 Scraper - South Africa Property Data
Scrape Property24 listings across South Africa, Namibia, Botswana, Zambia, Zimbabwe, Mozambique and Kenya: price, beds, baths, erf and floor size, levies, rates, suburb, agency and agent. For sale and to rent. JSON, CSV or Excel.
Pricing
from $0.88 / 1,000 property searches
Rating
0.0
(0)
Developer
SIÁN OÜ
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Property24 Scraper - South Africa Property Data & API 🏘️
🎉 Seven Property24 country sites in one Actor. About 21 properties per request, from $1.00 per 1,000 rows.
For South African market analysts, estate agencies, buy-to-let investors and anyone tracking Cape Town, Johannesburg, Pretoria or Durban asking prices
Property24 advertises roughly 222,000 South African homes for sale and 86,000 to rent, and it publishes no API. This Actor reads the site's own results pages and hands back every advert as a flat row: price as a number, bedrooms, bathrooms, erf and floor size, suburb, and the agency holding the mandate. You type a place name and press Start. The same run works on the Namibian, Botswanan, Zambian, Zimbabwean, Mozambican and Kenyan editions, which no other Property24 Actor on the Store documents.
🔎 What is the Property24 Scraper — and when should you use it?
The Property24 Scraper turns any Property24 search across South Africa and its six African editions into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.
Use it when you need: asking prices as numbers with the currency alongside, bedrooms, bathrooms, parking, erf size and floor size each with their own unit, and the suburb and agency on every row. Listings for sale and to rent are both covered, on property24.com and on the Namibian, Botswanan, Zambian, Zimbabwean, Mozambican and Kenyan editions of the same platform. Turning on the listing detail adds the full advert text, every photo, the agency and each named agent with their job title and profile link, the listing date, levies, rates and taxes, and price per square metre. Auction, show-day and bank-repossessed adverts are flagged on the row.
Use something else when: the property is outside Southern and East Africa. Use Bayut Scraper for the UAE, Saudi Arabia and Egypt. Use Zoopla Property Scraper for the United Kingdom, with EPC ratings and agent contacts. Use MagicBricks Property Scraper for India, with carpet area and RERA registration. This actor reads live Property24 adverts only. It does not return sold-price history or points of interest, which Property24 keeps on separate pages, and it returns no per-property GPS pin because Property24 publishes none — areaLatitude and areaLongitude are the centre of the area that was searched, not the building. For a second South African portal, PrivateProperty and Pam Golding are not covered by any SIÁN actor yet.
🤖 Use with AI agents
Already connected to the Apify MCP server? Just ask for this Actor by name: sian.agency/property24-property-scraper
Your agent can pay for its own runs. This Actor is eligible for agentic payments, so an agent can discover it, run it and settle the bill over x402 (USDC on Base) or Skyfire — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.
Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want to research the South African property market, or any of the six African markets Property24 also runs using the Apify Actor `sian.agency/property24-property-scraper`.Use it when I need: asking prices as numbers with the currency alongside, bedrooms, bathrooms, parking, erf size and floor size each with their own unit, and the suburb and agency on every row. Listings for sale and to rent are both covered, on property24.com and on the Namibian, Botswanan, Zambian, Zimbabwean, Mozambican and Kenyan editions of the same platform. Turning on the listing detail adds the full advert text, every photo, the agency and each named agent with their job title and profile link, the listing date, levies, rates and taxes, and price per square metre. Auction, show-day and bank-repossessed adverts are flagged on the row.Don't use it when: the property is outside Southern and East Africa — use bayut-property-scraper or zoopla-property-scraper or magicbricks-property-scraper instead.How to call it: give `locations` a list of plain place names written the way a person says them — `Cape Town`, `Sandton`, `Pretoria`, `Durban`, `Stellenbosch`, or `Windhoek` and `Nairobi` on the other editions — and each one is matched against Property24's own browse index before the search runs, so no numeric area id is needed. Write `Suburb, City` to go a level deeper, for example `Sea Point, Cape Town`. Set `country` to one of `za`, `na`, `bw`, `zm`, `zw`, `mz` or `ke`, and `listingType` to `for-sale` or `to-rent`. Narrow with `minPrice`, `maxPrice`, `minBedrooms`, `maxBedrooms`, `minBathrooms` and `propertyType` (`House`, `Apartment / Flat`, `Townhouse`, `Vacant Land`, `Farm`, `Commercial Property`, `Industrial Property`), order the results with `sortBy`, and cap the run with `maxResults`. `includeDetails` opens each property's own page for the full description, every photo, the agents, levies and rates, at an extra charge per property. To expand listings you already have, set `operation` to `detail` and pass `listingUrls` as `[{"url": "…"}]`; to reuse a search you built on the site itself, paste it into `searchUrls` in the same shape — URLs from different editions can be mixed in one run.Start with this input:{"country": "za","listingType": "for-sale","locations": ["Cape Town","Sandton"],"propertyType": "House","minBedrooms": 3,"maxResults": 120}Ask me which areas they want, whether they are buying or renting, and which of the seven Property24 country sites they mean, then run the Actor and summarise the results as a table.
Things you can ask your agent for:
- Pull every three-bedroom house for sale in Sandton over R5 million and tell me which agency is holding the most stock.
- Compare asking rent per square metre for apartments in Sea Point against Green Point and say which is better value.
- Find bank-repossessed and on-auction listings across Gauteng this week and give me the agency contact for each.
- Run the same search for houses in Windhoek and Nairobi, and show the prices side by side with their own currencies.
Machine-readable API, MCP config and OpenAPI definition for this Actor are published at apify.com/sian.agency/property24-property-scraper.md.
📋 Overview
South Africa's housing market runs on one website, and that website has no public API. This Actor reads Property24's own results pages and returns every live advert as a flat row. For sale and to rent, from a single suburb up to a whole province, on all seven country sites.
Why professionals choose it:
- ✅ Seven editions, one row shape: South Africa plus Namibia, Botswana, Zambia, Zimbabwe, Mozambique and Kenya. Kenya's index alone reports about 157,000 listings.
- ⚡ About 21 properties per request, up to 20,000 in a run. A whole city is one job.
- 🎯 Place names instead of area ids: "Cape Town", "Sandton", "Western Cape" or "Sea Point, Cape Town". The site's internal area number is looked up for you.
- 💰 $1.00 per 1,000 properties, charged per row delivered and never for a failed one.
- 💎 Numbers arrive as numbers: price, bedrooms, bathrooms, erf size, floor size, levies, rates and price per square metre. No parsing "R 3 150 000" on your side.
- 🔨 Auction, on-show and repossessed flags on every row, so distressed stock is a filter rather than a reading exercise.
- 💱 The currency is stamped on each row, so one dataset can hold Sandton, Windhoek and Nairobi without the prices colliding.
✨ Features
- 🌍 Country picker: property24.com plus the Namibian, Botswanan, Zambian, Zimbabwean, Mozambican and Kenyan sites.
- 🏷️ For sale and to rent on every edition, with rentals priced per month.
- 📍 Suburb, city or province in one field. Write "Umhlanga, Durban" to go a level deeper, or leave the list empty to sweep the country.
- 🎛️ Filters that run before you are billed: price band, bedrooms, bathrooms and property type. Rows you excluded are never written and never charged.
- 🆕 Sort by most recent and run it daily. New adverts land on page one.
- 📄 Detail option: full advert text, every photo, the agency and each named agent, listing date, levies, rates and taxes, and price per square metre.
- 📐 Sizes carry their own unit, because Kenya quotes land in acres where South Africa uses square metres.
- 🔗 Paste a search URL built on the site itself and every filter on it is kept. Links from different editions can be mixed in one run.
- 🧭 Zero infrastructure settings: no proxy picker, no concurrency dial, no retry count.
- 📊 Flat JSON rows: export as CSV, Excel or JSON, or pull them over the API.
🎬 Quick Start
Pick a country, type a place name, press Start. Rows land in the dataset as they are found, and a run report is written to the key-value store. Nothing else to configure.
curl -X POST "https://api.apify.com/v2/acts/sian.agency~property24-property-scraper/runs?token=YOUR_TOKEN" \-H 'Content-Type: application/json' \-d '{"operation":"search","country":"za","listingType":"for-sale","locations":["Cape Town"],"maxResults":100}'
🚀 Getting Started (3 Simple Steps)
Step 1: Choose the country
South Africa is the default and the largest. Switch to Namibia, Botswana, Zambia, Zimbabwe, Mozambique or Kenya from the same dropdown.
Step 2: Name your areas
Type plain place names: "Cape Town", "Sandton", "Stellenbosch", "Windhoek", "Nairobi". A suburb goes in as "Sea Point, Cape Town". A province works too. An empty list sweeps the whole country.
Step 3: Press Start
Add a price band, a bedroom count or a property type if you want them. Switch on the detail option when you need descriptions, photos, agents, levies and rates.
That's it. Within a minute or two you'll have:
- Every matching property as a spreadsheet row
- The agency holding each mandate, with auction and repossession flags
- A run report showing what was found and what it cost
📥 Input Configuration
| Field | Type | Required | Description |
|---|---|---|---|
operation | string | No | search (default) or detail |
country | string | No | za, na, bw, zm, zw, mz or ke |
listingType | string | No | for-sale (default) or to-rent |
locations | array | No | Plain place names. Empty list sweeps the whole country |
maxResults | integer | No | Stop after this many properties across all areas, up to 20,000 |
includeDetails | boolean | No | Add descriptions, photos, agents, levies and rates |
minPrice / maxPrice | integer | No | Price bounds in the edition's own currency, per month for rentals |
minBedrooms / maxBedrooms | integer | No | Bedroom bounds. 0 means no bound |
minBathrooms | integer | No | Fewest bathrooms to include |
propertyType | string | No | House, Apartment / Flat, Townhouse, Vacant Land, Farm, Commercial Property, Industrial Property |
sortBy | string | No | default, newest, price-low, price-high or size |
searchUrls | array | No | Paste results URLs instead of filling the fields above. Over the API, pass them as [{"url": "..."}] |
listingUrls | array | No | Property URLs to expand with the detail operation. Over the API, pass them as [{"url": "..."}] |
Example — three-bedroom houses for sale in Cape Town between R2m and R5m:
{"operation": "search","country": "za","listingType": "for-sale","locations": ["Cape Town"],"propertyType": "House","minPrice": 2000000,"maxPrice": 5000000,"minBedrooms": 3,"maxResults": 200}
Example — new rentals in two Johannesburg suburbs, with levies and rates:
{"operation": "search","country": "za","listingType": "to-rent","locations": ["Bryanston, Sandton", "Rosebank, Johannesburg"],"sortBy": "newest","includeDetails": true,"maxResults": 100}
Example — Kenya and Namibia in one run, from pasted search URLs:
{"operation": "search","searchUrls": [{ "url": "https://www.property24.co.ke/property-for-sale-in-nairobi-c1890" },{ "url": "https://www.property24.co.na/property-for-sale-in-windhoek-c2268" }],"maxResults": 300}
Example — expand properties you already have:
{"operation": "detail","listingUrls": [{ "url": "https://www.property24.com/for-sale/cape-town-city-centre/cape-town/western-cape/9138/117401013" }]}
📤 Output
Every row is flat JSON with 55 fields. The ones people use most:
| Field | Type | Description |
|---|---|---|
listingNumber | string | Property24's own listing number |
url | string | Link back to the advert |
propertyTitle | string | Headline as advertised, e.g. "3 Bedroom House" |
propertyType | string | House, Apartment, Townhouse and so on |
listingType | string | for-sale or to-rent |
price | number | Asking price as a number, per month for rentals |
currency | string | The currency the price was advertised in |
priceText | string | The price exactly as the page shows it |
bedrooms / bathrooms | number | Room counts |
erfSize / erfSizeUnit | number / string | Land size and its unit |
floorSize / floorSizeUnit | number / string | Building size and its unit |
pricePerSqm | number | Price per square metre |
levies / ratesAndTaxes | number | Monthly levy and municipal rates |
suburb / country | string | Where the property sits |
areaLatitude / areaLongitude | number | Coordinates of the searched area, not of the property |
agencyName / agentName | string | Agency holding the mandate, and the listing agent |
agents | array | Every named agent with job title and profile |
isAuction / isOnShow / isRepossessed | boolean | Auction, show day and bank-repossessed flags |
descriptionText / features | string / array | Full advert text and the feature list |
imageUrl / photos / photoCount | string / array / number | First photo, all photos, and how many |
Example row (a Cape Town search result):
{"listingNumber": "117319818","url": "https://www.property24.com/for-sale/fresnaye/cape-town/western-cape/11016/117319818","propertyTitle": "3 Bedroom House","propertyType": "House","listingType": "for-sale","price": 24000000,"priceText": "R 24 000 000","currency": "R","bedrooms": 3,"bathrooms": 3,"erfSize": 597,"erfSizeUnit": "m²","suburb": "Fresnaye","country": "za","areaLatitude": -33.9249,"areaLongitude": 18.4241,"agencyName": "Rawson Properties Camps Bay - Atlantic Seaboard","isAuction": false,"isOnShow": false,"isRepossessed": false,"mandateId": "39880766","imageUrl": "https://images.prop24.com/381319485/Crop525x350","sourceUrl": "https://www.property24.com/for-sale/cape-town/western-cape/432","scrapedAt": "2026-09-06T09:14:22.104Z"}
Switching on the detail option fills in the rest of the row:
- The advert itself:
descriptionText,features,photos,photoCount,listingDate,breadcrumb,streetAddress - The costs:
pricePerSqm,levies,specialLevy,ratesAndTaxes - The property:
receptionRooms,garages,parking,garden,pool,petsAllowed - The people:
agents, each with job title and profile - Rentals only:
furnished,leasePeriod,availableFrom,deposit
💼 Use Cases & Examples
1. South African Property Market Analysis
Analysts and economists tracking asking prices by suburb, city or province.
Input: A city or province, the for-sale section, run weekly. Output: Asking price, erf and floor size, price per square metre, levies and rates on every row, typed as numbers rather than as "R 3 150 000". Use: Build a suburb-level price index. Run the same area again next week and the price movement is a subtraction.
2. Estate Agent & Agency Lead Lists
Sales teams selling software, photography or marketing to South African agencies.
Input: An area and a price band, with the detail option on. Output: The agency holding each mandate, plus every named agent with their job title and profile. Use: See exactly who is transacting in a patch and how much stock each agency carries, then rank the call list by inventory.
3. Rental Yield & Buy-to-Let Screening
Investors and letting agents pricing a purchase against its rent.
Input: The same suburb twice, once for sale and once to rent. Output: Floor size, levies and rates on the for-sale rows; monthly asking rent on the rental rows. Use: Put the two exports side by side and gross and net yield fall out of the arithmetic.
4. Auction, On-Show and Repossession Watch
Distressed-property buyers and bank mandate specialists.
Input: A province sorted by most recent, on a daily schedule. Output: Every row flagged for auction, show day and bank-repossessed stock. Use: The properties that entered distress this week arrive on their own, without anyone refreshing a results page.
5. Pan-African Portfolio Coverage
Funds and developers holding property in more than one African market.
Input: The same run shape against Namibia, Botswana, Zambia, Zimbabwe, Mozambique or Kenya. Output: Rows stamped with their country and the currency the price was advertised in. Use: One dataset can hold Windhoek, Nairobi and Sandton at once. Each price says what it is denominated in, so nothing has to be untangled after export.
6. Relocation & Site Sourcing
Relocating buyers, corporate mobility teams and developers comparing towns.
Input: Several place names at once with a price band and a bedroom count. Output: A shortlist with photos, suburb and size on every row. Use: Compare Stellenbosch against Somerset West on price per square metre without opening a browser tab per town.
🔗 Integration Examples
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('sian.agency/property24-property-scraper').call({operation: 'search',country: 'za',listingType: 'for-sale',locations: ['Cape Town', 'Sandton'],minBedrooms: 3,maxResults: 200,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('sian.agency/property24-property-scraper').call(run_input={'operation': 'search','country': 'za','listingType': 'to-rent','locations': ['Sea Point, Cape Town'],'includeDetails': True,'maxResults': 100,})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(item['propertyTitle'], item['price'], item.get('suburb'))
cURL
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~property24-property-scraper/runs?token=YOUR_TOKEN' \-H 'Content-Type: application/json' \-d '{"operation":"search","country":"ke","listingType":"for-sale","locations":["Nairobi"],"maxResults":200}'
Automation Workflows (N8N / Zapier / Make)
- Trigger: a daily schedule
- HTTP Request: call the Actor with the sort order set to most recent
- Process: keep the rows that match your own criteria, such as the repossessed flag
- Action: append to Google Sheets, push to a CRM, or send a Slack alert
📊 Performance & Pricing
FREE Tier (Try It Now)
- 25 properties per run, with every field and every filter
- 10 expanded listings per run on the detail operation
- No credit card needed. Enough to check the data is what you need
PAID Tier (Production Ready)
- Unlimited properties per run, up to the 20,000 cap you set yourself
- Pay per successful row. Failed items are never charged
- About 21 properties per request, following the site's own next-page link
💰 $1.00 per 1,000 properties. Expanding a property to its full description, photo set, agents, levies and rates costs $1.20 per 1,000 on top, and only when you ask for it. A small start fee applies per run.
❓ Frequently Asked Questions (FAQ)
Q: Do I need an API key, a login, or a proxy? A: No. Choose a country, type a place name and press Start. The network path is handled inside the Actor and is priced into the per-result fee.
Q: How do I search a suburb rather than a whole city? A: Write it as "Suburb, City": "Sea Point, Cape Town", "Umhlanga, Durban", "Bryanston, Sandton". The city is matched first, then the suburb inside that city's own list, so any suburb the site knows about works.
Q: Which countries does this cover? A: All seven Property24 editions: South Africa, Namibia, Botswana, Zambia, Zimbabwe, Mozambique and Kenya. Pick one per run with the country field, or mix them freely by pasting search URLs from different editions.
Q: Does it return the coordinates of each property?
A: No, and no Actor honestly can. Property24 publishes no map pin on the listing page. What every row does carry is the latitude and longitude of the search area, named areaLatitude and areaLongitude so it is never mistaken for the building's own position.
Q: Does it return sold prices? A: No. Property24 keeps sold-price history on separate suburb pages that this Actor does not read. Everything returned here is live, currently advertised stock. Points of interest are not returned for the same reason.
Q: What is the difference between erf size and floor size? A: Erf size is the land, floor size is the building. South African adverts quote both in square metres. Kenyan adverts often quote land in acres, which is why every row carries the unit next to the number instead of assuming one.
Q: Why do some rows have no agency or bedroom count? A: Because the advert does not carry one. Featured placements on the first results page omit the agency, and vacant land has no bedrooms. Switching on the detail option fills in the agency and the agents from the property's own page.
Q: How many results can one run return? A: As many as you set with Max properties, up to 20,000. Rows are collected page by page, about 21 at a time, following the site's own next-page link. A whole city is a normal run rather than something that needs splitting.
Q: Can I track properties that were taken down? A: Not directly. Run the same search on a schedule and compare two datasets on the listing number to see what has gone.
Q: What output formats are available? A: JSON, CSV and Excel. Export straight from the dataset, or pull the rows over the API.
🐛 Troubleshooting
"No properties matched" for an area
- The filters are too narrow. Widen the price band or drop the bedroom minimum.
- Check the country: a Cape Town search on the Kenyan edition matches nothing.
An area name was not recognised
- The run log prints the alternatives that were actually found. Pick one of those.
- For a suburb, write it as "Suburb, City" so the city can be matched first.
- If in doubt, build the search on the site and paste the link into the search URLs field.
Fewer rows than I asked for
- The area genuinely has fewer live adverts than your limit. The run log prints the total the site advertises before it starts paging.
- On the FREE tier every search run stops at 25 rows, and the detail operation at 10.
No descriptions, photos, agents, levies or rates
- Those live on the property's own page. Switch on "Add descriptions, photos, agents, levies and rates".
A run ends early or says it will retry
- The site occasionally declines a burst of requests. The Actor paces itself and retries; if a run still ends short, start it again shortly afterwards.
⚖️ Is it legal to scrape data?
Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.
However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.
You can also read Apify's blog post on the legality of web scraping.
🤝 Support
Join our active support community
- For issues or questions, open an issue on the actor's Issues tab
- Check the SIÁN Agency Store for more automation tools
- 📧 apify@sian-agency.online
Property24 is a trademark of Property24.com (Pty) Ltd, part of the OLX Group. This actor is not affiliated with, endorsed by, or sponsored by Property24.
Built by SIÁN Agency | More Tools