DEV Community

Cover image for Sold Property Prices by Suburb: Pull realestate.com.au Listings as JSON in 2026 (Python, MCP, No-Code)
Truffle Pig Data
Truffle Pig Data

Posted on

Sold Property Prices by Suburb: Pull realestate.com.au Listings as JSON in 2026 (Python, MCP, No-Code)

You can look up what one house sold for on realestate.com.au, but nothing there lets you pull a whole suburb's sales into a table. There is no public API, and the price on a sold listing is usually an estimate, not a disclosed figure. I'll show the manual route and where it breaks, then the shortcut: the Realestate.com.au Property API on Apify, which takes a suburb and returns sold, rental, or for-sale listings as JSON.

Disclosure: the Apify links in this post are affiliate links. If you run the Actor, I may earn a referral commission at no extra cost to you.

Does realestate.com.au have an API?

Not a public one. There is no open developer API to sign up for and no key to request, so "realestate.com.au api" searches are mostly people asking for access that does not exist. In practice it means a scraper you consume like an API: suburb in, listing rows out as JSON.

What the Realestate.com.au Property API returns

The Realestate.com.au Property API returns one row per listing as structured JSON: address, property type, beds, baths, parking, land size, a price estimate, the confirmed sold date and selling agency on sold rows, the advertised rent on rental rows, agent details, and coordinates.

Field Example Notes
soldDate 2021-08-03T00:00:00.000Z Confirmed, on sold rows
estimatedPrice $585,000 The source's estimate; estimatedPriceValue is 585000
lastSoldAgency Harcourts RG - Gold Coast Selling agency
bedrooms 4 bathrooms and parking too
landSizeValue 454 Parsed from 454m²
rentPrice $650 per week Rental rows, with rentCurrency

Every row also carries a one-line summary an AI agent can read as is.

Who this is for

Buyer's agents and investors researching a suburb's sold market before they bid. Analysts benchmarking the Australian rental market by suburb. Agency principals who want to know which office holds a suburb's market share.

The manual way, and where it breaks

The DIY version is to build the sold-listings URL for a suburb, fetch each results page, and parse the cards. Pagination has to be walked by hand. Prices arrive as text, often "Contact Agent" or "AUCTION" on for-sale listings, so your parser needs a null path from day one. Several Australian suburbs share a name, so a bare suburb quietly gives you the wrong market. The markup shifts and your selectors rot with it. Add blocking and retries, and you own infrastructure to get a table of sales.

The faster way: run the Realestate.com.au Property API

Documented input in, documented rows out, no listing URL to find first.

Apify Console

  1. Open the Realestate.com.au Property API and click Try for free.
  2. Leave Mode on search, set Listing type to sold, and enter Coomera, QLD, 4209.
  3. Run it. The Sold properties view shows dates and agencies; export as JSON, CSV, or Excel.

REST

curl -X POST "https://api.apify.com/v2/acts/johnvc~realestate-au-property-api/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "mode": "search", "listingType": "sold", "locations": ["Coomera, QLD, 4209"], "maxResultsPerSearch": 50 }'
Enter fullscreen mode Exit fullscreen mode

Run endpoint reference: the Apify API docs.

Get sold property prices in Python

Call the Actor with apify-client:

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("johnvc/realestate-au-property-api").call(
    run_input={
        "mode": "search",
        "listingType": "sold",
        "locations": ["Coomera, QLD, 4209"],
        "maxResultsPerSearch": 50,
    }
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item.get("result_type") != "listing":
        print("no listings:", item.get("error_message"))
        continue
    print(item["streetAddress"], item.get("soldDate"), item.get("estimatedPrice"), item.get("lastSoldAgency"))
Enter fullscreen mode Exit fullscreen mode

The result_type check is the piece I'd keep even in a throwaway script. An empty search comes back as one row with result_type: "error" and a plain-language error_message, with no listing charged, so a zero for a suburb is verifiable rather than a guess.

Realestate.com.au property data as JSON, any listing type

The general-purpose starting point is Realestate.com.au Property Data API: Listings as JSON: any suburb, buy, rent, or sold, one output shape for all three. Up to 20 locations fit in one run, and maxResultsPerSearch (1 to 2000) is the cost dial.

Check sold property prices in any Australian suburb

Check Sold Property Prices in Any Australian Suburb is the flagship: every recent sale the source holds for a suburb, up to your cap, with date, agency, and estimate. Run it weekly and keep each dataset, and after a couple of months the weekly sold count and median estimate become a trendline. The trendline is the product; the one-off check is the demo.

Track the Australian rental market by suburb

Flip listingType to rent and the same suburb returns current rentals with rentPrice and rentCurrency beside beds, baths, and parking, which is what a yield calculation needs. Track Weekly Rent Prices by Australian Suburb is built to be scheduled. The sold and rental searches also exist as Chinese-language tasks: sold listings and price estimates and rental listings and weekly rents.

Find which agency sold each home in a suburb

Sold rows carry lastSoldAgency, so a sold search grouped by that field is an agency market-share table, which is what Find Which Agency Sold Each Home in an Australian Suburb does. The agents block adds phone, rating, and review count; the individual agent's name is often missing, so group at agency level.

Export an Australian property dataset to CSV or Excel

Not everything needs code. Export an Australian Property Dataset to CSV or Excel pulls a suburb into a spreadsheet from the Console through the two built-in views; grab the full JSON export when you need land size, coordinates, or agents.

Use it from Claude and other MCP clients

Apify exposes the Actor through the Model Context Protocol, so Claude, Claude Code, and Cursor can run a suburb search mid-conversation and answer "which agency handled the most sales in Coomera QLD last year" with real rows. In Claude Code it is one command:

claude mcp add --transport http realestate-au "https://mcp.apify.com/?tools=actors,docs,johnvc/realestate-au-property-api"
Enter fullscreen mode Exit fullscreen mode

Get Australian Sold Property Data in Claude via MCP is the shortest path to trying it, and you can read more about Claude Code at claude.ai.

The example repo

GitHub logo johnisanerd / Apify-Realestate-AU-Property-API

Realestate.com.au Property API on Apify: sold property prices, rentals, and for-sale listings by suburb as structured JSON. Python (uv) quick-start plus MCP install guides for Claude, Cursor, and ChatGPT.

🏡 Realestate.com.au Property API: sold property prices, rentals, and for-sale listings by suburb

Give it an Australian suburb. Get back structured JSON: sold property prices with confirmed sale dates, rental listings with advertised rent, and for-sale stock, all from one API with no listing URL to find first.

Actor page: apify.com/johnvc/realestate-au-property-api Input schema: apify.com/johnvc/realestate-au-property-api/input-schema

This repo is a working Python client for the Realestate.com.au Property API on Apify. The API turns Australian property listings into clean rows: street address, suburb, state, postcode, property type, beds, baths, parking, land size, floor area, agent details, photo URLs, and latitude and longitude. Ask it for sold and you get sold property prices with a confirmed soldDate and the selling agency. Ask it for rent and you get the advertised rent, which is how you track the australia rental market suburb by suburb. Ask it for buy and you get current australian property listings.

A working Python client with four example runs (sold, rent, buy, and URL mode), each capped at 3 listings so a first run costs almost nothing, plus MCP install walkthroughs for Claude Cowork, Claude Code, Cursor, and ChatGPT.

FAQ about scraping realestate.com.au

What does the realestate.com.au scraper cost, and is there a free tier?

Billing is per event: one listing-scraped event per listing pushed to the dataset, plus a tiny actor-start event. A search that returns nothing is not charged, and maxResultsPerSearch caps a run's cost before it starts. Current rates are on the Store card, and new Apify accounts come with free platform credit.

How do I check what a property sold for with this scraper?

Set listingType to sold and search the suburb with its state and postcode. Each row carries the confirmed soldDate, the lastSoldAgency, and the price estimate. For one address, switch mode to url and pass the listing page in listingUrls.

Does the scraper return the actual sale price or an estimate?

An estimate. The sold date is confirmed; the price is the source's displayed estimate, because Australian sale prices are frequently not disclosed. Sold and rental rows almost always carry a number, for-sale rows often do not, so filter on a non-null estimatedPriceValue before averaging a buy search. There is no automated valuation in the output.

Will this scraper find commercial property sold prices?

No. It covers the residential listings on realestate.com.au, where buy, rent, and sold come from. Commercial stock in Australia lives on a separate site and is out of scope.

Does the scraper work as an MCP tool in Claude or Cursor?

Yes. Point any MCP client at the Apify MCP server with the URL above and the Actor appears as a callable tool in Claude, Claude Code, Claude Cowork, or Cursor; the example repo has the install steps for each.

How do I schedule the scraper to build a sold-price history?

Save one task per suburb or listing type, open Actions, choose Schedule, and attach a cron string such as 0 9 * * 1 for a Monday review; one schedule can trigger many tasks. Diff each run's dataset against the last on propertyId: a property that moves from buy to sold is a sale. Start from the Realestate.com.au Property API.

More from Truffle Pig Data

Related Actors with the same kind of JSON output: the Zoopla UK Property API for listings and sold house prices in Britain, the Google Maps Places Scraper for the schools, cafes, and transport around a shortlisted address, and the Google Maps Directions API for commute times from a shortlist.

Wrapping up

There is no public realestate.com.au API, but sold property prices, rentals, and for-sale stock for any suburb are one JSON call away. Try the Realestate.com.au Property API, or clone the example repo and point it at your own suburbs.

Top comments (0)