Private Property APIprivateproperty.co.za ↗
Search South African property listings for sale and rent via the Private Property API. Filter by location, price, bedrooms, and features. Get full listing details.
What is the Private Property API?
The Private Property South Africa API gives developers access to property listings across South Africa through 3 endpoints. Use search_properties to query active for-sale and rental listings with filters for bedrooms, bathrooms, floor size, and property category, then call get_property_details with a listing URL to retrieve structured address data, photos, and a full feature breakdown for any individual property.
curl -X GET 'https://api.parse.bot/scraper/592f3ef0-16de-44df-bb76-d5fcfc5bbaeb/get_location_suggestions?query=Sandton' \ -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 privateproperty-co-za-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.private_property_south_africa_api import PrivateProperty, ListingType
pp = PrivateProperty()
# Search for locations matching "Sandton"
for location in pp.locations.search(query="Sandton"):
print(location.text, location.descriptor_text, location.item_id)
# Search for properties for sale in that area
for listing in pp.propertysummaries.search(
location_id="34",
listing_type=ListingType.FOR_SALE,
beds=2,
limit=5,
):
print(listing.title, listing.price, listing.address, listing.locality)
# Get full property details
detail = listing.details()
print(detail.price_text, detail.address.address_locality, detail.address.address_region)
for photo in detail.photo:
print(photo.content_url)
Search for location suggestions to use in property searches. Returns location names and IDs that serve as the location_id parameter in search_properties. Query matches against suburb, city, and region names across South Africa.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search phrase for location (e.g. 'Sandton', 'Cape Town') |
{
"type": "object",
"fields": {
"data": "array of location suggestion objects each containing text (location name), descriptorText (parent area), and itemId (numeric location identifier)"
},
"sample": {
"data": {
"data": [
{
"text": "Sandton",
"itemId": 34,
"descriptorText": "Johannesburg"
},
{
"text": "Sandton Central",
"itemId": 3184,
"descriptorText": "Sandton"
}
]
},
"status": "success"
}
}About the Private Property API
Location Resolution
Before running a property search, use get_location_suggestions with a plain-text query (e.g. 'Sandton' or 'Cape Town') to retrieve an array of location objects. Each object contains a human-readable text label, a descriptorText providing context (such as suburb or city), and an itemId. Pass that itemId as the location_id parameter in search_properties to scope results to a specific area.
Searching Listings
search_properties returns paginated results with each listing exposing url, address, locality, region, bedrooms, bathrooms, price, and title. You can filter by beds, baths, min_floor/max_floor (in square meters), category (e.g. 'commercial', 'farms', 'developments'), and features (e.g. 'SecurityPost', 'OnShow'). The response also includes total_on_page and the current page string, allowing straightforward pagination. No listing_type filter is required — the listing_type field in the response reflects what the search returned.
Property Details
Pass a full listing url from search_properties results into get_property_details to retrieve the complete record. The response includes a photo array of image objects with contentUrl fields, an address object broken into streetAddress, addressLocality, and addressRegion, a main_features array covering bedrooms, bathrooms, parking, and floor size, and a property_features object mapping feature names to their values (e.g. property type, erf size, levies). This structured breakdown suits display UIs, valuation tools, or data pipelines that need more than the summary fields from search.
The Private Property API is a managed, monitored endpoint for privateproperty.co.za — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when privateproperty.co.za 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 privateproperty.co.za 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 portal filtered by suburb using location IDs from get_location_suggestions
- Aggregate rental listings by region and bedroom count for a South African rental market tracker
- Populate a property comparison tool with address, price, and floor size from search_properties
- Feed a CRM with structured listing data including photos and feature breakdowns from get_property_details
- Monitor 'OnShow' or 'BankAssistedSales' listings using the features filter in search_properties
- Extract property_features fields for valuation or investment analysis pipelines
- Build a map-based interface using addressLocality and addressRegion from property detail responses
| 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.