Private Property Scraper
Pricing
from $3.00 / 1,000 results
Private Property Scraper
Scrape PrivateProperty.co.za - a major South African property portal. Search for-sale and to-rent listings by province, property type, price, and bedrooms/bathrooms, or fetch full listing detail pages: description, exact property details, room-by-room features, and photo galleries.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Scrape Private Property, one of South Africa's major property portals — for-sale and to-rent listings across every province, property type (house, apartment, townhouse, vacant land, farm, commercial), price range, and bedroom/bathroom count. Fetch search results in bulk, or pull full listing detail pages: description, exact property details, room-by-room features, and photo galleries. No login, no cookies, no paid API key.
What this actor does
- Two modes:
search(browse/filter listings) andbyUrls(exact lookup by listing URL) - All 9 South African provinces, or nationwide — Gauteng, Western Cape, KwaZulu-Natal, Eastern Cape, Free State, Limpopo, Mpumalanga, North West, Northern Cape, or "All of South Africa" to search the whole country in one run
- 7 property types — house, apartment/flat, townhouse, vacant land/plot, farm/smallholding, commercial, or any
- For sale or to rent
- Bank-assisted sales & repossessions — search Private Property's dedicated repossessed-property category instead of the regular market
- Filters: price range, minimum bedrooms, minimum bathrooms
- Optional deep data: full description, exact property details table (listing number, property type, listing date, land/floor size), and every room-by-room feature (bedrooms, bathrooms, lounges, garages, pool, security, etc.)
- Empty fields are omitted — you only ever see fields with real data
Output per listing
Always present (search mode):
listingId,listingUrl,sourceUrltransactionType,propertyTypelocation,provincetitleText,price(orpriceOnApplication),pricePeriod(rentals only —perMonth/perDay/perWeek/perYear; standard rentals areperMonth, short-term/holiday lets areperDay/perWeek)bedrooms,bathrooms,garagesimageUrlisBankRepossession(only whenbankRepossessionsOnly: true)recordType: "propertyListing",scrapedAt
With includeFullDetails: true or mode: byUrls, additionally:
title,descriptionparkingSpaces,landSizeSqm,floorSizeSqmpropertyDetails— listing number, property type, listing date, land size, floor size, and any other fields the agent filled in (varies by listing type)features— full room-by-room and amenity breakdown (bedrooms, bathrooms, lounges, dining areas, garage parking, pool, security, pet friendly, built-in braai, etc.) as reported by the agentlistingNumberimages[]— full gallery of listing photosprimaryImageUrl
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | search | search / byUrls |
transactionType | string | forSale | forSale / toRent |
propertyType | string | any | any / house / apartment / townhouse / land / farm / commercial |
province | string | gauteng | Any of the 9 SA provinces, or southAfrica for a nationwide search |
priceMin / priceMax | int | – | Price range in ZAR |
bedroomsMin / bathroomsMin | int | – | Minimum room counts |
bankRepossessionsOnly | bool | false | Search Private Property's Bank Assisted Sales & Repossessions category instead of the regular market (forces transactionType to forSale) |
sortBy | string | default | default / priceLowToHigh / priceHighToLow / mostBedrooms |
listingUrls | array | – | Private Property listing URLs (mode=byUrls) |
includeFullDetails | bool | false | Fetch full detail page per listing (1 extra request each) |
maxItems | int | 20 | Hard cap (1–500) |
Example: 3+ bedroom houses for sale in Western Cape under R3.5M
{"mode": "search","transactionType": "forSale","propertyType": "house","province": "westernCape","priceMax": 3500000,"bedroomsMin": 3,"includeFullDetails": true,"maxItems": 50}
Example: apartments to rent in Gauteng, cheapest first
{"mode": "search","transactionType": "toRent","propertyType": "apartment","province": "gauteng","sortBy": "priceLowToHigh","maxItems": 30}
Example: full details for a specific listing
{"mode": "byUrls","listingUrls": ["https://www.privateproperty.co.za/for-sale/gauteng/east-rand/alberton/alberton-north/T5580463"]}
Note: individual listings sell/get delisted over time — if a URL you saved earlier no longer resolves, the actor reports "None of the given listingUrls could be resolved" (0 records, no crash) rather than fabricating data. Re-run
mode: searchto get current listing URLs.
Example: bank-repossessed houses in KwaZulu-Natal
{"mode": "search","bankRepossessionsOnly": true,"propertyType": "house","province": "kwazuluNatal","maxItems": 30}
Use cases
- Real estate market research — track average prices and inventory by province and property type
- Investment analysis — filter for yield-friendly price/bedroom combinations
- Relocation / home search — build a shortlist of matching listings with full property details
- Portfolio monitoring — re-run
byUrlson saved listings to track price changes over time - Content & comparison sites — pull structured listing data (features, images, descriptions) for aggregation
Limitations
- Agent/agency contact details are loaded by the live site via client-side JavaScript after the page renders, so they are not present in the server-rendered HTML the actor fetches and are not included in the output.
- Price/bedroom/bathroom filters are applied by the actor after fetching listings (not sent as query parameters to Private Property) for reliability — the actor always fetches the plain, unfiltered category page and filters client-side.
- Private Property's servers occasionally return a transient error on a specific page of results even after all retry tiers (automatic retries, Apify Proxy escalation, and a TLS-impersonating fallback client are all in place). When this happens the actor keeps whatever it already gathered and stops early rather than hanging or returning broken data.
imageUrl/images[]values are served by images.pp.co.za, which returns405 Method Not AllowedforHEADrequests but200 image/jpegfor normalGETrequests (the same way a browser or<img>tag loads them) — this is a CDN quirk, not a broken link.bedrooms/bathroomsare scraped faithfully from what the listing agent entered on Private Property. On rare listings the agent's own numeric entry is inconsistent with the listing's free-text description (e.g. a "3.5 bathrooms" description next to a raw bathroom count field the agent typed without the decimal point) — the actor reports the site's own structured value rather than guessing a corrected number from the description text.
FAQ
Is this official Private Property data? Yes — it's parsed directly from Private Property's own listing and search-result pages, including their structured Residence schema.org markup.
Do I need an account or API key? No. The actor requires no login, cookies, or user-supplied credentials.
Why do some listings show priceOnApplication instead of a price? Some sellers/agents list "Price on Application" or "Contact agent" instead of a fixed price — the actor reports this instead of guessing a number.
Why do some toRent listings have a pricePeriod of perDay or perWeek instead of perMonth? Most Private Property rentals are standard monthly leases, but a minority are short-term/holiday lets priced per day or per week — the actor reports the site's own period label so a R1,800/day short-let isn't mistaken for an ultra-cheap R1,800/month lease. priceMin/priceMax compare the raw number regardless of period, so mixed-period results are possible in toRent searches; check pricePeriod on each record before comparing prices across listings.
Why do propertyDetails/features fields vary between listings? Private Property lets agents fill in different fields per property type (e.g. "Land size" for houses, "Levies" for sectional-title units). The actor passes through whatever the agent actually filled in — no invented values.
What's the difference between search and byUrls? search browses/filters by province, property type, and price/bedrooms. byUrls does an exact lookup for listing URLs you already have (e.g. from a previous search run) and always includes full details.
What is bankRepossessionsOnly? Private Property runs a dedicated "Bank Assisted Sales & Repossessions" category for properties banks are selling after repossession — typically priced below market. Setting bankRepossessionsOnly: true searches that category instead of the regular market; listings themselves are otherwise normal for-sale properties (same detail pages, same fields), just tagged isBankRepossession: true.
How often does this data change? Private Property listings, prices, and availability are live — the actor always fetches current data, no caching.