Property24 Scraper icon

Property24 Scraper

From $1/1K. Extract structured property listings from Property24, South Africa’s largest property portal. Search by location or use Property24 URLs.…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Property24 Scraper at a glance

Property24 Scraper is a ready-to-run Apify actor from abotapi for collecting real estate data. Its documented output includes listing #, title, type, price and price (display), which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Real Estate, Developer Tools, Automation
Pricing
$2.00 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
37 options
Run success
100.0% of completed public runs in the last 30 days

From $1/1K. Extract structured property listings from Property24, South Africa’s largest property portal. Search by location or use Property24 URLs. Get 50+ fields including price, beds, baths, sizes, GPS coordinates, photos, property details, and agent/agency information.

What Property24 Scraper can do

  • More fields per listing. GPS latitude and longitude, numeric floor and erf size, postal code, the complete grouped property overview (rooms, external features, building, security), nearby suburbs, listing date and full multi-size photo URLs, alongside the standard price, beds, baths and description.
  • Two ways to find listings. Search by any suburb, city or province name, resolved automatically, or paste Property24 URLs directly: search pages paginate forward, single-listing URLs are fetched directly.
  • Filters that actually narrow the data. Price, bedroom and bathroom filters are sent in the search request and re-checked on the returned records; property type is matched on the results; sort and amenity filters are applied through the search request. Results match what you asked for even if the site ignores a parameter.
  • Cost under your control. Turn detail-page fetching off for a cheaper search-result-only run, or on for full listing depth, and cap any run with Max Listings.
  • Only new listings on repeat runs. Point a run at a previous run or dataset ID and already-collected listings are skipped, so you only pay for what's new.
  • Built for an unreliable site. The actor automatically tries a different connection when a request is refused, so runs keep making progress instead of stopping at the first blocked page.

Choose what to collect

These inputs let you configure Property24 Scraper - Properties, Prices, Agents & Listings. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredHow to find listings. 'Search by Location' builds Property24 search URLs from the fields below. 'Direct URLs' scrapes the Property24 search or listing URLs you paste.

Choices: search, url

listingTypestringWhich Property24 vertical to search (Search mode only). Buy and Rent are residential; the two Commercial options search Property24's separate commercial-property vertical.

Choices: for-sale, to-rent, commercial-for-sale, commercial-to-rent

locationsarrayPlace names to search (Search mode only). Type a suburb, city or province, e.g. 'Cape Town', 'Sandton', 'Western Cape', 'Umhlanga'. Each name is resolved to the matching Property24 area automatically. Multiple locations supported.
propertyTypestringNarrow to one property type (Search mode only). Applied to results.

Choices: any, house, apartment, townhouse, vacant-land, farm, commercial, industrial

minPriceintegerMinimum price in Rand (Search mode only). Applied both in the search URL and to results.
maxPriceintegerMaximum price in Rand (Search mode only). Applied both in the search URL and to results.
minBedroomsintegerMinimum number of bedrooms (Search mode only). Applied both in the search URL and to results.
Show 30 more inputs
More input fields
InputWhat it controls
maxBedroomsintegerMaximum number of bedrooms (Search mode only). Applied to results.
sortBystringResult ordering (Search mode only).

Choices: default, newest, price-asc, price-desc, size

onShowOnlybooleanOnly listings with a scheduled show day (Search mode only).
auctionsOnlybooleanOnly properties going to auction (Search mode only).
minBathroomsintegerMinimum number of bathrooms (Search mode only). Applied in the search URL and to results.
parkingSpacesintegerMinimum parking spaces or garages (Search mode only).
minErfSizeintegerMinimum erf (land) size in square metres (Search mode only).
minFloorSizeintegerMinimum floor size in square metres (Search mode only).
hasPoolbooleanOnly listings with a swimming pool (Search mode only).
hasGardenbooleanOnly listings with a garden (Search mode only).
hasFlatletbooleanOnly listings with a flatlet / granny flat (Search mode only).
petFriendlybooleanOnly pet-friendly listings (Search mode only).
securityEstatebooleanOnly listings inside a security estate (Search mode only).
repossessedbooleanOnly bank-repossessed properties (Search mode only).
retirementbooleanOnly retirement listings (Search mode only).
urlsarrayProperty24 search-result or single-listing URLs to scrape (URL mode only). Supported: for-sale, to-rent and commercial searches (city, suburb, province, /pN pages?sp= filters and sorting), single listings, and the m.property24.com host. New-development, estate-agent and estate-agency pages are skipped with a warning. Filter fields are ignored in this mode. Search pagination starts at the page in the URL and walks forward.
startUrlsarrayAlias of Property24 URLs. When filled it replaces Property24 URLs and switches the run to URL mode.
fetchDetailsbooleanOpen each listing to add GPS coordinates, full description, all photos, agent and agency details, the full property overview (erf and floor size, rooms, features, security), and points of interest. Turn off for a faster, cheaper run with search-result fields only.
maxPagesintegerOptional bound on result pages walked per search (about 45 listings per page). Leave empty to walk every result page; the run size is controlled by Max Listings, which this field defers to.
maxListingsintegerTHE run cap: maximum listings to return across all searches. Default 20. Set 0 for unlimited. For large pulls, add many locations or price bands; a single Property24 search exposes a finite number of pages.
maxItemsintegerAlias of Max Listings. When filled it replaces Max Listings. 0 means unlimited.
resumeFromRunIdstringOptional. ID of a previous run of this actor (or a dataset ID). Listings already in that dataset are skipped, so this run returns only NEW listings (a delta). Combine both runs' datasets for the full set. Max Listings then counts only the new listings.
incrementalModebooleanRemember the listings from earlier runs of the same search and label every row as NEW, UPDATED, REAPPEARED or EXPIRED. Listings that did not change are not returned and not charged. Leave off for a plain scrape. A run that stops at Max Listings, a page limit or a failed page never marks anything EXPIRED.
stateKeystringName of the saved baseline. Leave empty to derive it from your search settings, so the same search always continues the same baseline. Set it to share or separate baselines on purpose.
emitUnchangedbooleanReturn listings that did not change, labelled UNCHANGED. They are never charged. Only applies when Incremental mode is on.
emitExpiredbooleanReturn one EXPIRED row for each listing that was in the baseline but is gone from a complete scan. EXPIRED rows are never charged. Only applies when Incremental mode is on.
ignoreFieldsForChangesarrayTop-level field names that must not make a listing count as UPDATED (for example photoCount). The scrape time is always ignored. Only applies when Incremental mode is on.
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

listingNumberListing # (text)
titleTitle (text)
listingTypeType (text)
pricePrice (number)
displayPricePrice (display) (text)
bedroomsBeds (number)
bathroomsBaths (number)
garagesGarages (number)
floorSizeFloor m2 (number)
erfSizeErf m2 (number)
propertyTypeProperty type (text)
suburbNameSuburb (text)
Show 23 more fields
cityNameCity (text)
provinceNameProvince (text)
latitudeLat (number)
longitudeLng (number)
agencyNameAgency (text)
agentNameAgent (text)
photoCountPhotos (number)
urlURL (link)
descriptionHeaderHeadline (text)
descriptionDescription (text)
keyFeaturesKey features (array)
propertyOverviewProperty overview (object)
photosPhotos (array)
floorPlansfloorPlans
streetAddressStreet address (text)
agentProfileUrlAgent profile (link)
contactsContacts (array)
nearbySuburbsNearby suburbs (array)
datePostedPosted (date)
changeTypeChange (text)
changedFieldsChanged fields (array)
firstSeenAtFirst seen (date)
lastSeenAtLast seen (date)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "listingNumber": "100000001",
  "url": "https://www.property24.com/for-sale/sample-suburb/sample-city/western-cape/0000/100000001",
  "listingType": "For Sale",
  "title": "3 Bedroom House for sale in Sample Suburb",
  "price": 2600000,
  "displayPrice": "R 2 600 000",
  "currency": "ZAR",
  "priceOnApplication": false,
  "bedrooms": 3,
  "bathrooms": 2,
  "garages": 2,
  "floorSize": 248,
  "erfSize": 554,
  "propertyType": "House",
  "suburbName": "Sample Suburb",
  "cityName": "Sample City",
  "provinceName": "Western Cape",
  "provinceId": "9",
  "latitude": -33,
  "longitude": 18,
  "descriptionHeader": "Sample headline for the listing.",
  "description": "Full listing description text appears here when Fetch Detail Pages is on.",
  "agencyName": "Sample Agency",
  "agentName": "Agent Name",
  "contacts": [
    {
      "id": 0,
      "name": "Agent Name",
      "contactType": "Agent",
      "jobTitle": "Property Practitioner",
      "hasContactNumber": true
    }
  ],
  "keyFeatures": [
    "Bedrooms 3",
    "Bathrooms 2",
    "Garden"
  ],
  "propertyOverview": {
    "Type of Property": "House",
    "Erf Size": "554 m2"
  },
  "photos": [
    {
      "imageIdentifier": "000000000",
      "imageUrl": "https://images.prop24.com/000000000/Ensure960x540"
    }
  ],
  "photoCount": 1,
  "datePosted": "2026-01-01",
  "scrapedAt": "2026-01-01T00:00:00.000000+00:00"
}

Ways to use this data

  • Property portals and listing aggregators: pull fresh Property24 listings into your own search index or comparison site.
  • Real estate agencies and agents: monitor competing listings and price positioning by suburb or city.
  • Investors and analysts: track price per square metre, erf size and inventory across South African suburbs over time.
  • PropTech and CRM integrations: feed listings and agent and agency details into your CRM or lead pipeline, including through MCP connectors.
  • Market researchers and journalists: build historical datasets of pricing and listing volume for reporting.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Property24 Scraper return?

The documented output for Property24 Scraper includes listing #, title, type, price, price (display), beds, baths and garages. Availability of each field depends on the source page and the selected mode.

How much does Property24 Scraper cost?

It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new listings on a schedule?

Yes. Switch on Incremental mode (incrementalMode) and schedule the actor with the same search: each row is labelled NEW, UPDATED (with changedFields), REAPPEARED or EXPIRED, and unchanged listings are skipped. resumeFromRunId remains available as a simple one-way delta against a past run.

Why are GPS coordinates, photos or the full description missing from my results?

Those fields only populate when Fetch Detail Pages is on. With it off, you get the faster, cheaper search-result fields only (price, beds, baths, floor and erf size, suburb, a short excerpt and a main image).

Why did my run return an empty dataset instead of failing?

An empty dataset usually means none of your Locations could be resolved to a Property24 area, or none of your Property24 URLs were valid or reachable; check the run log for "Could not resolve location" or similar warnings. The run fails outright only when resumeFromRunId points to a run or dataset it cannot read, since continuing would risk re-collecting and re-charging listings you already have.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Ready to collect with Property24 Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.