Domain APIdomain.com.au ↗
Access Domain.com.au property listings for sale, rent, and sold properties. Get agent profiles, suburb demographics, and median price data via 7 endpoints.
What is the Domain API?
The Domain.com.au API provides 7 endpoints covering property listings for sale, rent, and recent sales across Australia, plus agent profiles and suburb market statistics. Use search_properties_for_sale to filter by location, price range, bedroom count, and property type, or call get_suburb_profile to retrieve median prices, demographics, and school data for any suburb slug.
curl -X GET 'https://api.parse.bot/scraper/974154e5-ea89-4a21-b5a4-dff744547193/search_properties_for_sale?page=1&location=melbourne-vic-3000&max_price=2000000&min_price=500000&max_bedrooms=5&min_bedrooms=1&min_bathrooms=1&property_type=townhouse' \ -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 domain-com-au-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.
"""Walkthrough: Domain Australia Real Estate API — search listings, agents, suburb profiles."""
from parse_apis.Domain_Australia_Real_Estate_API import Domain, PropertyNotFound
client = Domain()
# Search for sale listings in Pyrmont — limit caps total items fetched
for listing in client.search_results.for_sale(location="pyrmont-nsw-2009", limit=3):
print(listing.id, listing.listing_type)
# Search rental listings and take the first one
rental = client.search_results.for_rent(location="sydney-nsw-2000", limit=1).first()
if rental:
print(rental.id, rental.listing_type)
# Search sold listings in a suburb
for sold in client.search_results.sold(location="sydney-nsw-2000", limit=3):
print(sold.id, sold.listing_type)
# Find agents in an area
agent = client.agents.search(location="sydney-nsw-2000", limit=1).first()
if agent:
print(agent.name, agent.agency_name, agent.average_sold_price)
# Get a suburb profile by location slug
suburb = client.suburb_profiles.get(location="sydney-nsw-2000")
print(suburb.url_slug)
# Typed error handling: catch a not-found property
try:
detail = client.property_details.get(slug="nonexistent-slug-0000000000")
print(detail.address, detail.agency)
except PropertyNotFound as exc:
print(f"Property not found: {exc}")
print("exercised: search_results.for_sale / for_rent / sold / agents.search / suburb_profiles.get / property_details.get")
Search properties listed for sale on Domain.com.au by suburb location. Returns paginated results including listing details (id, address, price, features, branding, images). Supports filtering by price range, bedrooms, bathrooms, and property type. Paginates via integer page number; totalPages in meta indicates last page.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| locationrequired | string | Suburb, state and postcode slug (e.g., 'sydney-nsw-2000', 'pyrmont-nsw-2009', 'melbourne-vic-3000'). |
| max_price | integer | Maximum price filter. |
| min_price | integer | Minimum price filter. |
| max_bedrooms | integer | Maximum number of bedrooms (1-5). |
| min_bedrooms | integer | Minimum number of bedrooms (1-5). |
| min_bathrooms | integer | Minimum number of bathrooms (1-3). |
| property_type | string | Property type filter. Accepted values include 'house', 'unit', 'townhouse', 'villa', 'land', 'acreage', 'rural', 'block-of-units'. |
{
"type": "object",
"fields": {
"meta": "object containing totalListings, totalPages, currentPage, suburb info",
"page": "integer current page number",
"results": "array of property listing objects with id, listingType, listingModel containing url, price, address, features, branding, images",
"location": "string location slug used"
},
"sample": {
"data": {
"meta": {
"totalPages": 47,
"currentPage": 1,
"totalListings": 957
},
"page": 1,
"results": [
{
"id": 4839,
"listingType": "project",
"listingModel": {
"url": "/project/4839/111-castlereagh-sydney-nsw/",
"address": {
"state": "NSW",
"street": "Castlereagh",
"suburb": "Sydney",
"postcode": "2000"
},
"promoType": "premium",
"projectName": "111 Castlereagh",
"displayAddress": "111 CASTLEREAGH STREET, SYDNEY, NSW 2000"
}
}
],
"location": "sydney-nsw-2000"
},
"status": "success"
}
}About the Domain API
Property Search and Listings
Three search endpoints cover the main listing categories on Domain.com.au. search_properties_for_sale accepts a required location slug (e.g., pyrmont-nsw-2009) plus optional filters for min_price, max_price, min_bedrooms, max_bedrooms, min_bathrooms, and property_type. Results are paginated and each listing object includes an id, address, price, feature summary, branding, and image URLs. search_properties_for_rent follows the same structure but prices reflect weekly rent. search_sold_properties returns sold price and sale date alongside property details, useful for building comparable sales datasets.
Property and Agent Detail
get_property_details accepts a listing slug (the full URL slug including the numeric listing ID) and returns a property object with bedrooms, bathrooms, agency, and agent names, plus a pageProps object containing the full page payload: gallery images, school catchment zones, and suburb insights nested under componentProps. search_agents searches for agents in a given suburb and returns each agent's totalForSale, averageSoldPrice, and reputation score. get_agent_profile takes an agent slug from those results and returns the full profile including biography, listing history, sales statistics, and reviews via the __APOLLO_STATE__ payload inside pageProps.
Suburb Profiles
get_suburb_profile takes a location slug and returns three top-level keys. layout includes the page title, description, canonical URL, and breadcrumbs. details includes a Google Maps image URL and session token. __APOLLO_STATE__ contains the richest data: suburb statistics, property category breakdowns, median sale and rental prices, nearby schools, and surrounding suburb listings. Coverage varies — some smaller suburbs return limited market data where Domain.com.au itself has insufficient transaction volume.
Pagination and Location Slugs
All search endpoints share a consistent response envelope: a meta object with totalListings, totalPages, and currentPage, plus the results array and the location slug echoed back. The page parameter controls pagination across all three search endpoints. Location slugs follow the pattern suburb-state-postcode (e.g., melbourne-vic-3000), matching the URL structure used on Domain.com.au directly.
The Domain API is a managed, monitored endpoint for domain.com.au — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when domain.com.au 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 domain.com.au 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?+
- Aggregate active for-sale listings in a suburb filtered by bedroom count and price band for a buyer alert tool.
- Track weekly rent prices across multiple Sydney suburbs by paginating through
search_properties_for_rentresults. - Build a comparable sales report by pulling sold price and sale date from
search_sold_propertiesfor a given postcode. - Enrich a property listing with school catchment zones and suburb median prices using
get_property_details. - Score agents in a target suburb by comparing
averageSoldPriceandreputationfields fromsearch_agents. - Populate a suburb comparison dashboard with median prices, demographics, and surrounding suburb data from
get_suburb_profile. - Compile an agent's full listing history and review score from
get_agent_profilefor a vendor selection tool.
| 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 Domain.com.au have an official developer API?+
What does `get_property_details` return beyond basic listing info?+
pageProps object that contains school catchment zones, a full gallery array, agent contact details, and suburb insights. This data is nested under componentProps inside pageProps. Note that the depth of suburb insight data varies by listing.What is the format for the `location` parameter across search endpoints?+
sydney-nsw-2000 or fitzroy-vic-3065. This matches the URL path format used on Domain.com.au listing pages. Passing an incorrectly formatted slug will typically return zero results or an empty meta object.Does the API cover commercial property listings or off-market properties?+
How reliable is the suburb profile data for smaller regional areas?+
get_suburb_profile endpoint notes that some locations return limited market data — this occurs when Domain.com.au itself has insufficient transaction history for a suburb. The __APOLLO_STATE__ object will still be returned but median price and category breakdown fields may be sparse or absent for low-volume suburbs.