Property24 APIproperty24.com ↗
Access Property24 listings, suburb price trends, and sold prices via API. Search for sale and rental properties across South Africa with 5 endpoints.
What is the Property24 API?
The Property24 API gives developers structured access to South Africa's leading property marketplace through 5 endpoints covering listing search, full property details, suburb price trends, and street-level sold prices. The search_properties endpoint returns paginated results filterable by province, city, suburb, bedrooms, bathrooms, and price ceiling. Location IDs needed across all endpoints are resolved via autocomplete_location.
curl -X GET 'https://api.parse.bot/scraper/f39afc08-705e-4f09-bd62-730a2900bdd7/autocomplete_location?query=rondebosch' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace property24-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.property24_api import Property24, SearchType
p24 = Property24()
# Search for locations to find area IDs
for loc in p24.locations.search(query="rondebosch"):
print(loc.name, loc.parent_name, loc.id)
# Construct a suburb and search for properties for sale
rondebosch = p24.suburb("rondebosch")
for listing in rondebosch.search(search_type=SearchType.FOR_SALE, city="cape-town", province="western-cape", area_id="8682"):
print(listing.listing_number, listing.price, listing.bedrooms)
# Get full property details
detail = listing.details()
print(detail.title, detail.description, detail.images)
break
# Get suburb market trends
trends = rondebosch.trends(city="cape-town", area_id="8682")
print(trends.annual_sale_and_listing_trends_graph, trends.age_profile_graph)
# Get sold price data by street
for street in rondebosch.sold_prices(city="cape-town", province="western-cape", area_id="8682"):
print(street.street, street.url)
Search for locations by name to get IDs for other endpoints. Returns suburbs, cities, provinces matching the query. Each result includes an id (used as area_id in other endpoints), name, type, and parentName. Results are filtered from a cached full location list based on substring match.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Location search term (e.g., 'rondebosch', 'sandton', 'constantia') |
{
"type": "object",
"fields": {
"locations": "array of location objects with id, name, type, parentName, normalizedName"
},
"sample": {
"data": {
"locations": [
{
"id": 8682,
"name": "Rondebosch",
"type": 1,
"source": 0,
"parentName": "Cape Town",
"normalizedName": "rondebosch",
"normalizedParentName": "cape town"
}
]
},
"status": "success"
}
}About the Property24 API
Location Resolution and Search
All area-based endpoints accept city, suburb, province, and area_id parameters. The autocomplete_location endpoint is the entry point: pass a partial place name (e.g., 'rondebosch' or 'sandton') and receive an array of matching location objects, each carrying an id, name, type, parentName, and normalizedName. Feed that id into area_id on any downstream endpoint to ensure accurate area targeting. search_properties additionally accepts bedrooms, bathrooms, max_price, and page for paginated, filtered results; the response exposes a results array alongside page and total_count.
Property Detail
get_property_detail takes a listing_id sourced from search_properties results and returns a single listing object with fields including ListingNumber, Title, Price, Description, Features, Images, and Location. Passing the matching suburb, city, province, and area_id alongside the listing_id avoids routing errors; search_type accepts 'for-sale' or 'to-rent' to disambiguate listing category.
Market Intelligence Endpoints
get_suburb_property_trends returns historical market data for a suburb: annualSaleAndListingTrendsGraph, propertiesOnSaleGraph, averageListPriceVsBedroomsGraph, and soldPropertiesGraph, along with buyer/seller age demographic data. This makes it suitable for time-series analysis of a neighbourhood's price trajectory. get_sold_prices returns street-level sold price data for an area — the response includes a results array of street objects and a title — useful for granular property valuation work.
The Property24 API is a managed, monitored endpoint for property24.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when property24.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official property24.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a property search tool filtered by province, city, bedrooms, and max price using
search_properties - Aggregate suburb-level price trend charts using
annualSaleAndListingTrendsGraphandaverageListPriceVsBedroomsGraphfromget_suburb_property_trends - Enrich a CRM with full listing details — description, features, images — via
get_property_detail - Map street-level sold prices across Cape Town neighbourhoods using
get_sold_prices - Power a location autocomplete widget backed by
autocomplete_locationto resolve suburb and city IDs - Track rental vs. sale inventory shifts over time by comparing paginated
search_propertiesresults across periods - Analyze buyer and seller age demographics per suburb using the demographic fields in
get_suburb_property_trends
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Property24 have an official developer API?+
What does `get_suburb_property_trends` actually return, and how granular is the pricing data?+
get_sold_prices endpoint.Why do some `get_property_detail` calls fail, and how can I avoid errors?+
listing_id, suburb, city, province, and area_id. Omitting or passing incorrect slug values for those location parameters can result in 404-equivalent routing failures. Always use the slug and ID values returned directly from the corresponding search_properties result for the same listing.Does the API cover commercial properties or only residential?+
search_properties accepts bedrooms, bathrooms, max_price, and area parameters but no property-type selector. You can fork the API on Parse and revise it to add a property-type filter endpoint.Are agent or agency details returned for listings?+
get_property_detail response fields (ListingNumber, Title, Price, Description, Features, Images, Location). You can fork the API on Parse and revise it to add an endpoint that surfaces agent information where it appears on listing pages.