Domain.com.au Scraper: Sold Prices, Schools & Suburb Trends
Pricing
from $1.60 / 1,000 listings
Domain.com.au Scraper: Sold Prices, Schools & Suburb Trends
Scrape domain.com.au sale, rent and sold property listings by suburb. Rows carry price, beds, baths, parking, land size, sale method and inspection times; detail pages add school catchments, suburb medians, clearance rate, owner-occupier mix and agent phones.
Pricing
from $1.60 / 1,000 listings
Rating
0.0
(0)
Developer
Tuyen Tran
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 minutes ago
Last modified
Categories
Share
Live Sample Dataset & Verified Run Benchmark
Two runs on 3 November 2026 on Apify Cloud, build 0.1.14. Both datasets are public: open the JSON or CSV link in a browser, no login and no run needed.
Multi-state list run — IbR4vKezpggCQ6aqT · 30 rows · 68 columns · 65.4 s · charged apify-actor-start 1, listing-scraped 30.
JSON · CSV
Detail run — guWDXXVQesCUXp1ij · 3 rows · 68 columns · 45.5 s · charged apify-actor-start 1, listing-scraped 3, detail-scraped 3.
JSON · CSV
Coverage: Sydney NSW 8 rows, Melbourne VIC 8, Brisbane QLD 8, Perth WA 6. All fetched live.
| # | Address | Price | Beds | Baths | Sale method | Source |
|---|---|---|---|---|---|---|
| 1 | 46/155-161 Macquarie Street, Sydney NSW 2000 | Guide $5,500,000 | 3 | 2 | Private treaty | Open |
| 2 | 1804/281 Elizabeth Street, Sydney NSW 2000 | Contact Agent | 2 | 2 | Private treaty | Open |
| 3 | 301/45 Shelley Street, Sydney NSW 2000 | Buyer guide: $850,000 to $900,000 | 1 | 1 | Private treaty | Open |
Compare the three rows with the source pages. That is the whole test, under five minutes.
What does the Domain.com.au Scraper do?
Scrape domain.com.au sale, rent and sold listings by suburb without opening each page by hand. One row per property carries the address, price, bedrooms, bathrooms, parking, land size, sale method, inspection times and agent phone.
Domain.com.au is the second-largest property portal in Australia and the parent company of allhomes.com.au. It publishes three things the smaller portals do not put in one place: suburb performance numbers, neighbourhood demographics and school catchment zones. This actor puts all three on the row, next to the listing itself.
The actor reads public result and detail pages. It does not log in, does not bypass a paywall and does not invent a value. "Contact Agent" and "Price Withheld" stay as text, with an empty number.
Why scrape domain.com.au with this Actor?
| # | Feature | What it means for you | Measured on live runs |
|---|---|---|---|
| 1 | Three channels | Sale, rent and sold results share one input shape and one output shape | 30 rows across NSW, VIC, QLD and WA in one run |
| 2 | Suburb insight block | Median price, average days on market and auction clearance rate arrive on the row | 3/3 detail rows carried a median and a clearance rate |
| 3 | Neighbourhood demographics | Owner-occupier share and renter share as percentages | 3/3 detail rows, one decimal |
| 4 | School catchments | Every government and independent school with distance and catchment flag | 12 to 13 schools per Sydney detail page |
| 5 | Inspection schedule | Open-for-inspection windows as ISO timestamps | 100% of the 10 buy rows in the sample |
| 6 | Sale method | "Sold at auction", "Sold by private treaty", "Sold prior to auction" | 10/10 sold rows |
| 7 | Change tracking | Price drops, previous price and percent change across runs | Daily mode with a stable state key |
| 8 | Flat output | CSV, JSON, Sheets, API, webhooks, n8n, Make, Zapier, MCP | 68 columns, 0 duplicate names |
What data can you extract from domain.com.au?
| Group | Fields | List mode | Needs detail |
|---|---|---|---|
| Identity | listing id, source portal, channel, status, listing URL | Yes | No |
| Address | full address, street, suburb, state, postcode, latitude, longitude | Yes | No |
| Price | price display, price numeric, price history, previous price, change percent | Yes | No |
| Sale | sold date, auction date, sale method | Sold rows | Sold detail |
| Property | property type, bedrooms, bathrooms, car spaces, land size | Yes | No |
| Agent | agent name, agent phone, agency name, agency phone | No | Yes |
| Schools | school list, school count, closest school name | No | Yes |
| Suburb | median price, average days on market, clearance rate, owner-occupier share, renter share | No | Yes |
| Content | description, features, images, sale and price history, inspection times | No | Yes |
| Lifecycle | days on market, new listing flag, price changed flag, direction, change count | Yes | No |
Six fields belong to this portal:
- Neighbourhood demographics.
owner_occupier_pctandrenter_pctseparate a family market from an investor market, both as percentages. - Suburb performance.
suburb_median_price,suburb_avg_days_on_marketandsuburb_clearance_rate_pctcome from the detail page, not a separate report. - School catchment zones.
schools_count,closest_school_nameandschoolscarry name, type, sector, year range, distance and catchment flag. - Open for inspection.
inspection_timesis a list of ISO windows, ready for a calendar tool. - Sale method.
sale_methodseparates an auction result from a private treaty sale when you compare clearance rates. - Exact listing date.
posted_atis the printed listing date, sodaysOnMarketis real even on a first run with details on.
Price honesty rules are strict. A number is taken only when the card prints a dollar figure. "Auction Saturday 14 Nov", "Price Withheld", "Contact Agent", "EOI" and "Tender" never become a price. An auction time becomes auction_date, never priceNumeric. A sold row takes its price and method from the sold record, not from the current asking price.
How to scrape domain.com.au listings and price history
- Pick a channel: sale, rent or sold.
- Enter suburb, state and postcode; Domain needs all three in the URL.
- Set
maxItems. One page carries 20 cards. - Turn on detail pages for agent phones, schools and suburb numbers. They are cached.
- Schedule daily with a stable
stateKeyto track first and last seen dates.
For several suburbs in one run, pass the hidden suburbs array through the API. The row cap is split across entries, so the first suburb cannot eat the run.
Brisbane is the one slug that differs from the obvious spelling: Domain uses brisbane-city-qld-4000. The actor maps it for you; a hand-built URL with brisbane-qld-4000 returns HTTP 404, which is why the mapping exists.
Price history is built across runs. The first run records the price, the second compares. A drop appends a priceHistory entry with old price, new price, date and percent change.
How much does it cost to scrape domain.com.au?
| Event | Standard tier | Discounted tiers |
|---|---|---|
| Actor start, per run | $0.005 | $0.004 |
| One list row | $0.002 | $0.0016 |
| One detail row | $0.006 | $0.0048 |
A 1,000-row list run costs $2.005 at the standard tier: $0.005 start plus $2.00 for rows. With details on every row it costs $8.005: $0.005, $2.00 listings, $6.00 details. Discounted tiers: about $1.60 and $6.40.
The three-row detail test cost $0.029: $0.005 start, three listings, three details. Exact charge, not an estimate.
A detail row is billed whether it was opened live or served from cache, because the data is delivered either way. A list-only run never pays for a detail it does not ship.
The Free plan returns up to 50 rows per run. The start event is charged once per run.
100% of the platform compute and proxy cost is already inside the event price. There is no separate infrastructure line and no surprise at month end. You pay for events; the container and unblocker proxy come out of that price.
Pre-calculated 1,000-listing total (one actor start plus the rows):
- List only,
includeDetails: false: $2.005 on Standard (Free/Bronze), $1.604 on Silver+. - Full details,
includeDetails: true: $8.005 on Standard (Free/Bronze), $6.404 on Silver+.
Input parameters and configuration examples
| Parameter | Type | Default | What it does |
|---|---|---|---|
channel | select | buy | Sale, rent or sold results |
suburb | text | Sydney | Suburb name |
state | select | NSW | State code |
postcode | text | 2000 | Four digit postcode |
propertyTypes | multi-select | empty | Keep only the printed types |
minPrice | number | empty | Keep rows at or above this price |
maxPrice | number | empty | Keep rows at or below this price |
minBeds | number | empty | Minimum bedrooms |
minDaysOnMarket | number | 0 | Keep older listings; falls back with a warning instead of returning nothing |
maxItems | number | 20 | Row cap for the run |
maxPages | number | 1 | Result pages to read, 20 cards each |
includeDetails | checkbox | false | Open detail pages for agent, schools and suburb numbers |
maxDetails | number | 50 | Cap on detail pages |
onlyEmitChanges | checkbox | false | Emit only new, repriced or removed rows |
startUrls | text | empty | Paste search URLs to skip the suburb form |
stateKey | text | default | Separate history for each customer |
A typical daily job:
{"channel": "buy","suburb": "Brisbane","state": "QLD","postcode": "4000","maxItems": 40,"includeDetails": true,"onlyEmitChanges": true,"stateKey": "brisbane-daily"}
A light test with no detail pages:
{"channel": "rent","suburb": "Perth","state": "WA","postcode": "6000","maxItems": 10}
Output example
{"listingId": "2021293805","channel": "buy","propertyType": "apartment / unit / flat","fullAddress": "46/155-161 Macquarie Street, Sydney NSW 2000","suburb": "Sydney","state": "nsw","postcode": "2000","priceDisplay": "Guide $5,500,000","priceNumeric": 5500000,"sale_method": "Private treaty","auction_date": "","inspection_times": ["2026-11-04T12:00:00 - 2026-11-04T12:30:00"],"bedrooms": 3,"bathrooms": 2,"carSpaces": 2,"landSizeSqm": null,"schools_count": 13,"closest_school_name": "St Mary's Cathedral College","suburb_median_price": 3199000,"owner_occupier_pct": 30.7,"renter_pct": 69.3,"agent1_phone": "0414 990 990","posted_at": "2026-11-02","daysOnMarket": 1,"listingUrl": "https://www.domain.com.au/46-155-161-macquarie-street-sydney-nsw-2000-2021293805"}
Every key there is a dataset column. The schema declares 68 columns and a live row carries 68, so the export adds nothing and hides nothing.
🇦🇺 Australian Real Estate Data Suite (6 Portals)
| # | Portal | Actor | Best for |
|---|---|---|---|
| 1 | realestate.com.au | Realestate.com.au Scraper | Largest listing base and agent phones |
| 2 | property.com.au | Property.com.au Scraper | Sold history, estimates and rent estimates |
| 3 | realcommercial.com.au | Realcommercial.com.au Scraper | Commercial, industrial and retail |
| 4 | onthehouse.com.au | OnTheHouse.com.au Scraper | Valuations and multi-decade history |
| 5 | allhomes.com.au | Allhomes.com.au Scraper | Canberra, EER ratings and land value |
| 6 | domain.com.au | This actor | Suburb performance, demographics and school catchments |
All six actors share the same 25 core column names, so a workbook can union their output without renaming anything.
Frequently Asked Questions (FAQ) & Legal Disclaimer
Does this actor need a Domain account? No. It reads public result and detail pages.
Why is the price empty on some rows? Domain prints "Contact Agent", "Price Withheld" or an auction time. The actor keeps the printed text and leaves the number empty instead of guessing.
Why did a suburb return nothing? A wrong slug or postcode returns HTTP 404. Brisbane needs brisbane-city; the actor maps it.
What happens with minDaysOnMarket on a new suburb? If no listing is old enough, the actor logs a warning and returns the full list sorted by days on market, so a first run is never empty.
Is the detail cache shared between customers? Yes. It is keyed by listing, so a second customer needs no new fetch. Each keeps a separate history through stateKey.
Legal note. Domain.com.au is operated by Domain Group. Its terms and robots rules restrict automated collection. This actor reads public pages and returns printed facts. You are responsible for how you use the data. Do not republish an entire portal.