Property24 Scraper & New-Listing Monitor - South Africa avatar

Property24 Scraper & New-Listing Monitor - South Africa

Pricing

from $0.57 / 1,000 listing returneds

Go to Apify Store
Property24 Scraper & New-Listing Monitor - South Africa

Property24 Scraper & New-Listing Monitor - South Africa

Turn monitoring on and every later run returns only the listings it has not returned before, so you are never charged for the same property twice. Every Property24.com listing as clean JSON: price with its meaning, bedrooms, bathrooms, floor and erf size, suburb. Decoy tiles dropped. Unofficial.

Pricing

from $0.57 / 1,000 listing returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

Share

Property24 Scraper - South Africa Homes for Sale & Rent

Pull property listings from Property24.com — South Africa's largest property portal — as clean JSON: the price as a number with its meaning, bedrooms, bathrooms, parking, floor and erf size, suburb, city and province, the agency, Property24's badges and the main image, for sale or to rent, for any city or suburb Property24 covers.

Unofficial. This Actor is not affiliated with, endorsed by, or sponsored by Property24. All product names are trademarks of their respective owners.

No API key. Reads the same public pages a visitor sees.


Run it tomorrow and you only get what is new

Schedule this Actor with monitoringMode: true and each run returns only the listings it has not returned before. Not "here is everything again, please de-duplicate it yourself" — the Actor remembers what it already gave you, so a daily feed of a 4,000-listing search costs you the handful of new homes, not 4,000 rows every morning. You are never charged for the same property twice.

Listings your filters removed are remembered too, so widening a filter later does not resurrect them as false "new" listings. Listings that did not fit under your limit are not remembered, so they are still waiting on the next run instead of being silently lost.


Why this one is different

The decoy tiles are dropped

Every Property24 list page carries one listing tile that visitors never see: it is pushed thousands of pixels off-screen by a stylesheet rule with a random class name (measured on all four pages fetched on 2026-09-05, one hidden tile each). A scraper that reads the raw HTML returns it as if it were a real listing — and marks itself as a scraper. This Actor reads the stylesheet, finds those rules and drops the hidden tiles before anything is delivered or charged.

Both tile layouts are read

Property24 renders two different tiles: a promotional layout (most of page one) that carries the price only as text, and a standard layout (most of page two onward) that carries the price as structured data plus the street address, an excerpt of the description and the agency name. The tile containers carry random, shuffled class names. This Actor reads both layouts by their meaning rather than by position — measured on 65 live tiles, every one came back with an id, heading, URL, type, price text, suburb, city, province and image.

The price means what it says

price is a number in rand; priceType says whether it is a sale price, a monthly-rent, a rent-per-sqm (commercial and industrial space is often let per square metre — 4 of the 42 rentals measured — and that unit is read from the tile, never assumed to be a month), a weekly, daily or yearly rent, or a development's sale-range / rent-range, which comes back as priceFrom / priceTo with the number of units. rentalTerm carries the unit for every rental. Price filters compare monthly rents and sale prices only; a per-m² rent is never compared with a monthly budget. A listing marked POA keeps price: null and priceText: "POA" — it is never turned into a zero. Medians in the 63 priced listings measured: R 2,822,500 for sale, R 40,000 a month to rent.

No agent's personal name

Standard tiles carry the listing agent's personal name and photo. This Actor returns the agency name only (agencyName, when Property24 writes it as text — on 28 of the 65 tiles measured; a tile that shows only a logo has agencyName: null and the logo URL), never the person. Phone numbers and e-mail addresses written into the excerpt are removed.

Suburb, city and province from the address, not the caption

Each listing's URL carries the suburb, city, province and Property24's area id (/for-sale/sea-point/cape-town/western-cape/11021/117538814). Those are returned as suburb, city, province and areaId — so a search across a whole city still tells you the suburb of every home, and the area id is exactly what you need to search that suburb next.

One property, five agencies — counted, not repeated

When several agencies list the same property, Property24 shows it once with a "grouped listings" link. This Actor returns that listing once and reports agentsListingSameProperty (5 in the measured case) so you can tell a sole mandate from a widely listed home.

Filters run here

Every filter — price, bedrooms, bathrooms, parking, floor and erf size, property type, suburb, auction, reduced, on show, developments, keywords, agency — runs on the rows already fetched. Only the place is sent to Property24 (plus the newest-first sort in monitoring mode). Nothing extra is requested and nothing extra is charged. A listing is never dropped for a value Property24 did not publish.


Input

Either paste a Property24 listing page URL, or build one from the fields below.

FieldTypeDefaultDescription
searchUrlstringe.g. https://www.property24.com/for-sale/cape-town/western-cape/432. Only the place is kept; sort and price parameters are dropped
channelstringsalesale (/for-sale) or rent (/to-rent)
locationstringcape-townA city Property24 lists on its home page (cape-town, johannesburg, pretoria, durban, sandton, centurion, stellenbosch, gqeberha …) or an area path with its id copied from any Property24 address, e.g. sea-point/cape-town/western-cape/11021. Property24 answers 404 without the id, so an unknown city is refused before anything is requested
maxListingsinteger201-1000. One listing = one row = one charged event. 20 listings per page; Cape Town for sale runs to 180 pages
maxPagesinteger0Hard cap on requests; 0 = decide from maxListings. Reading pages is free
useProxybooleanfalseOff by default — Property24 answers Apify's network directly. Switches on by itself if blocked
keywords / keywordMatch / excludeKeywordsarray / string / arrayMatch on heading, type, suburb, city, province, agency and price text
agencyNamesarrayKeep only these agencies (partial match; tiles without a written agency name are kept)
minPrice / maxPriceinteger0ZAR. Sale price or monthly rent. A POA listing is kept, a per-m² / weekly / daily rent is kept (not comparable), and a development is kept whenever any part of its range fits
requirePricebooleanfalseDrop POA listings
minBedrooms / maxBedroomsinteger-1-1 = off. Property24 lists studios as 0.5 bedrooms. An unpublished count is kept
minBathroomsnumber0Half bathrooms exist (3.5)
minParkingSpacesinteger0
minFloorSizeSqm / maxFloorSizeSqminteger0
minErfSizeSqm / maxErfSizeSqminteger0m² (erf = plot)
propertyTypesarrayPartial match on Property24's words: Apartment, House, Townhouse, Vacant Land, Farm, Commercial Property, Industrial Property (house also matches Townhouse)
suburbsarrayPartial match on the suburb from the listing address
excludeDevelopmentsbooleanfalseDrop development tiles (a block of units with a From/To range)
excludeAuctionsbooleanfalseDrop listings with the AUCTION badge
onlyReducedbooleanfalseKeep only listings with the Reduced banner
onlyOnShowbooleanfalseKeep only listings with an On Show banner (the date comes back as onShowDate)
monitoringModebooleanfalseRead newest-first and return only listings not returned on a previous run
resetMonitoringStatebooleanfalseOne-shot: forget what was already returned
{ "channel": "sale", "location": "sea-point/cape-town/western-cape/11021", "maxListings": 100,
"minBedrooms": 2, "maxPrice": 6000000, "excludeAuctions": true, "excludeDevelopments": true }

Monitoring mode turns this into a daily feed

Property24's default order puts paid placements first, not the newest listings. In monitoring mode this Actor reads the search in Property24's own newest-first order (?sp=so%3dNewest; on 2026-09-05 only one of the 22 tiles on the default first page was among the 22 newest) and returns only the listings it has not returned before, reading on past the ones it already knows — up to 60 pages, or maxPages — until it has maxListings new ones. Listings removed by your filters are remembered too, so changing a filter later does not resurrect them as false "new" listings — and listings that simply did not fit under maxListings, or were cut off by the run's charge limit, are not remembered, so they are still waiting for you on the next run rather than being silently lost.

Measured on 2026-09-05: 3,600 homes for sale in Cape Town (180 pages); 7,213 to rent (361 pages).


Output

One row per listing:

{
"source": "property24.com",
"status": "ok",
"listingId": "117560550",
"title": "0.5 Bedroom Apartment / flat on auction in Gardens - Cape Town",
"url": "https://www.property24.com/for-sale/gardens/cape-town/western-cape/9145/117560550",
"searchedLocation": "Cape Town, Western Cape",
"transactionType": "sale",
"propertyType": "Apartment",
"isDevelopment": false,
"developmentUnits": null,
"listingTier": "boosted",
"agentsListingSameProperty": null,
"description": "Certified and Transparent Non-Distressed Auction Platform. Live Auction 17 September 2026 at 10am. No Buyer Commission. Make an offer to stop the auction or register to bid on ...",
"price": 1995000,
"priceCurrency": "ZAR",
"priceType": "sale",
"priceFrom": null,
"priceTo": null,
"priceText": "R 1 995 000",
"rentalTerm": null,
"bedrooms": 0.5,
"bathrooms": 1,
"parkingSpaces": null,
"floorSizeSqm": 26,
"erfSizeSqm": null,
"address": "506 72 On Kloof, 5 Nicol",
"suburb": "Gardens",
"city": "Cape Town",
"province": "Western Cape",
"areaId": "9145",
"labels": ["AUCTION", "On Show"],
"isOnShow": true,
"onShowDate": "06 SEP",
"isReduced": false,
"isAuction": true,
"hasNoTransferDuty": false,
"agencyName": "Harcourts Atlantic",
"agencyLogoUrl": "https://images.prop24.com/213885973/Ensure528x153",
"mainImageUrl": "https://images.prop24.com/385418221/Crop600x400",
"scrapedAt": "2026-09-05T10:17:08.708Z"
}

Measured across 65 live tiles (63 distinct listings — a premium placement can repeat a listing) on 2026-09-05 — 42 homes for sale and 21 to rent in Cape Town plus 2 developments: id, heading, URL, type, price text, suburb, city, province, area id and image on 65 of 65; a price as a number on 63 (the two developments carry a range instead); bedrooms on 50 and bathrooms on 51 (commercial and industrial listings, and a few flats, have none); parking on 40; floor size on 41; erf size on 13; a street address on 18 and a description excerpt on 23 (standard tiles only); an agency name written as text on 28; a logo on 57. A development tile comes back with isDevelopment: true, priceType: "sale-range" (or "rent-range" on a rental search), priceFrom / priceTo and developmentUnits.

Rows that are never charged

statuswhen
no-resultsProperty24 reports zero listings for this search. That is its answer, not a failure
no-such-searchProperty24 answered HTTP 404 — what it does for an area path or id it does not know. Not a claim that there is nothing there
no-filter-matchListings were read, but your filters removed all of them. The row says how many were read
no-new-listingsMonitoring mode: nothing new since the previous run
unreadableThe page could not be read, its tiles were missing, or it claimed a total above zero while yielding nothing

Pricing

Pay per listing returned. Rows that report an empty search, an unknown area, a filter that matched nothing, or a page that could not be read are not charged. Hidden decoy tiles are dropped before delivery and never charged.


Notes

  • robots.txt was read in full on 2026-09-05. It disallows the advanced-search pages, autocomplete, grouped-listing and map handlers, agent zone, login and account pages. This Actor requests only /for-sale/... or /to-rent/... listing pages with their page number and, in monitoring mode, the newest-first sort.
  • Only public pages are read. No login, no API key.