Domain.com.au Property Scraper
Pricing
from $2.00 / 1,000 results
Domain.com.au Property Scraper
Scrape property listings from Domain.com.au — Australia's second largest real estate platform with 350K+ active listings. Extract price, auction data, price guide, agent info, school catchments, features and inspection times by suburb, listing type and filters.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Haketa
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
3
Monthly active users
4 days ago
Last modified
Categories
Share
Domain.com.au Property Scraper — Australian Real Estate Data Extractor for Sale, Rent & Sold Listings
The most complete Domain.com.au data extraction tool on Apify. Pull live for-sale, for-rent and sold property listings from Australia's second-largest real estate portal — every price guide, auction date, agent contact, school catchment, inspection time, beds/baths/parking count, land size and feature list, normalized into one clean JSON schema ready for investor models, valuer comps, prop-tech apps, mortgage broker workflows and journalism.
What This Actor Does
The Domain.com.au Property Scraper is a production-ready Apify Actor that extracts structured property listing data from domain.com.au — the Nine Entertainment-owned real estate portal that, together with realestate.com.au, anchors Australia's residential property market. Domain hosts hundreds of thousands of live for-sale, for-rent and recently-sold listings across every Australian suburb, state and territory.
The actor fetches search-result pages and individual listing detail pages via Domain's own Phoenix API and _next/data endpoints (no headless browser overhead), normalizes the raw Next.js JSON payloads, and pushes flat, analytics-ready records to your Apify dataset. In a single run you can pull:
- For-sale listings — houses, apartments, townhouses, villas, land, rural, unit blocks, studios, retirement living
- For-rent listings — weekly rents, bond, available-from dates, lease terms
- Sold listings — sale price, sale date, days on market, sale method (auction, private treaty, EOI)
- Auction data — auction date, auction location, price guide, on-the-day results
- Agent & agency contact — listing agent name, phone, agency brand
- Property attributes — beds, baths, car spaces, land size (m²), building size (m²), property type, features list
- Location context — full address, suburb, state, postcode, latitude/longitude, council area, school catchments
- Listing metadata — price-reduced flag, under-contract flag, hot-property flag, new-listing flag, tags, NBN connection, energy rating, floor plan URL, virtual tour URL, image gallery
Every record is keyed by Domain's internal listingId so you can dedupe across runs, track price changes day over day, and reconstruct full sale histories when you combine sale and sold datasets.
Why scrape Domain.com.au yourself when this exists?
Domain is built on a Next.js single-page application backed by an internal Phoenix GraphQL/REST API. Anyone who has tried to scrape it has hit the same wall of obstacles:
- ❌ No public API — Domain offers a partner API gated behind commercial agreements; the public site is the only general-access surface
- ❌ Next.js client-side rendering — listings are not present in the initial HTML; they hydrate from
__NEXT_DATA__and follow-up Phoenix API calls - ❌ Build-ID rotation — the
/_next/data/{buildId}/...endpoint changes every deploy; scrapers break weekly without auto-discovery - ❌ Aggressive datacenter-IP blocking — Domain fingerprints AWS, GCP, Azure and DigitalOcean ranges and serves Akamai challenge pages
- ❌ Per-suburb pagination quirks — page sizes shift between 20 and 25 results depending on listing type and viewport hints
- ❌ Price-guide chaos — "Auction", "Contact Agent", "Offers Over $1.2M", "$800k–$900k", "EOI by Friday", "$650 pw" — every format needs its own parser
- ❌ Auction vs. private-treaty fork — auction listings carry separate
auctionDateandpriceGuidefields that go unrendered in some templates - ❌ Suburb-slug encoding — Domain uses
suburb-state-postcodeslugs (e.g.bondi-beach-nsw-2026) that don't map 1:1 to AusPost data - ❌ Schema drift on detail pages — features, inspection times and school catchments live in nested objects whose keys vary across template versions
- ❌ Australian residential proxy requirement — most regions return geo-fenced redirects to
.aufrom non-AU IPs; you need AU residential IPs to see the real catalog
This actor handles all of it: build-ID auto-discovery, Phoenix-API fallback chain, AU-residential proxy routing by default, full price-format normalization (15+ price types), and a single flat output schema that survives Domain's template churn.
Quick Start
One-Click Run
- Click Try for free on the Apify Store page
- Enter one or more suburb slugs (e.g.
bondi-beach-nsw-2026,south-yarra-vic-3141,new-farm-qld-4005) - Pick your Listing Type —
sale,rent, orsold - Hit Start — your dataset populates as listings stream in (typically 1–5 minutes for a 100-listing suburb run)
API Run (Python)
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run = client.actor("haketa/domain-com-au-scraper").call(run_input={"listingType": "sale","suburbs": ["bondi-beach-nsw-2026","paddington-nsw-2021","surry-hills-nsw-2010"],"propertyTypes": ["house", "apartment"],"minBedrooms": 2,"maxBedrooms": 4,"minPrice": 1000000,"maxPrice": 3500000,"scrapeDetails": True,"maxListings": 200,"maxPages": 10})for record in client.dataset(run["defaultDatasetId"]).iterate_items():print(record["address"], "—", record["priceDisplay"],f"({record['bedrooms']}br/{record['bathrooms']}ba)")
API Run (Node.js / TypeScript)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('haketa/domain-com-au-scraper').call({listingType: 'rent',suburbs: ['richmond-vic-3121', 'brunswick-vic-3056', 'fitzroy-vic-3065'],propertyTypes: ['apartment'],minBedrooms: 1,maxBedrooms: 2,maxPrice: 700, // weekly rent in AUDscrapeDetails: true,maxListings: 150});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} Melbourne inner-city rental listings`);
API Run (cURL)
curl -X POST "https://api.apify.com/v2/acts/haketa~domain-com-au-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"listingType": "sold","suburbs": ["toorak-vic-3142", "south-yarra-vic-3141"],"propertyTypes": ["house"],"minBedrooms": 3,"scrapeDetails": true,"maxListings": 100,"maxPages": 5}'
How It Works
Domain.com.au is a Next.js SPA. The HTML response to a search URL like https://www.domain.com.au/sale/bondi-beach-nsw-2026/ contains an embedded __NEXT_DATA__ JSON blob with the build ID and initial page config, but the actual listing array is loaded client-side via Domain's internal Phoenix API. The actor mirrors what the browser does — without ever launching a browser.
Multi-layer extraction strategy
- Fetch the search HTML with realistic browser headers via
got-scraping(handles TLS fingerprinting and HTTP/2) - Parse
__NEXT_DATA__to extract the current Next.jsbuildIdand any pre-hydrated listing seeds - Discover endpoints by scanning inline scripts + JS bundle URLs for
phoenix/api,_next/dataand search-payload paths - Issue the search request to Domain's Phoenix
/listings/residential/_searchendpoint with the user's filters (suburb, beds, baths, price range, property type) - Walk pagination page-by-page until
maxPagesormaxListingsis reached (each page returns ~20 listings) - Optionally hydrate each listing's detail page when
scrapeDetails: trueto enrich with description, features, school catchments, inspection times, NBN and floor plan - Normalize price formats through a dedicated parser that recognizes 15+ Australian listing-price conventions (auction, EOI, price guide, contact agent, offers over, range, weekly rent, etc.)
- Flatten + push the record to the Apify dataset
Source endpoints used
| Endpoint | Purpose | Method |
|---|---|---|
https://www.domain.com.au/{sale|rent|sold}/{suburb-slug}/?page={N} | Search HTML + __NEXT_DATA__ seed | GET |
https://www.domain.com.au/phoenix/api/listings/residential/_search | Filtered listing search payload | POST |
https://www.domain.com.au/_next/data/{buildId}/{path}.json | Next.js client navigation payload | GET |
https://www.domain.com.au/{address-slug}-{listingId} | Individual listing detail | GET |
Engineering details
- No headless browser — pure HTTP/2 via
got-scrapingfor an order-of-magnitude lower cost and CPU than Playwright - Build-ID auto-rediscovery — every fresh search re-parses
__NEXT_DATA__; deploys never break the scraper for more than one run - Phoenix API fallback chain — if Phoenix returns 403 or empty, the actor falls back to
_next/datapayloads - Cheerio HTML fallback — when both JSON paths fail, the actor parses the rendered search-card HTML as a last resort
- AU residential proxy default — prefilled with
apifyProxyCountry: "AU"andapifyProxyGroups: ["RESIDENTIAL"] - Adjustable request delay + concurrency — defaults to 1500 ms delay and concurrency 1 to stay under Akamai's threshold
- Deterministic flat output — every record uses the same 50-field schema regardless of listing type so downstream consumers never branch
- Listing dedupe by
listingIdwithin a single run - Direct
__NEXT_DATA__GraphQL mapping (ListingDetails type) — the detail-page extractor reads Domain's real Apollo cache shape:agents[].mobileNumber/email/photo/profileUrl,agency.{name,website,profileUrl},displayableAddress.geolocation,inspectionDetails.inspections,largeMedia[mediaCategory=FloorPlan|VirtualTour],matterport,dateListedV2.isoDateWithTimeZone,structuredFeatures,priceDetails.displayPrice,staticMapUrl. Result: 43 of 51 schema fields populate on detail-enriched runs (the remaining 8 are conditional — auction fields on auction listings, sold fields on sold listings)
Input Parameters
{"listingType": "sale","suburbs": ["bondi-beach-nsw-2026", "paddington-nsw-2021"],"startUrls": [],"propertyTypes": ["house", "apartment"],"minBedrooms": 2,"maxBedrooms": 4,"minPrice": 800000,"maxPrice": 2500000,"auctionOnly": false,"scrapeDetails": true,"maxListings": 200,"maxPages": 10,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "AU"},"requestDelay": 1500,"maxConcurrency": 1}
Parameter reference
| Parameter | Type | Default | Description |
|---|---|---|---|
listingType | string (enum) | sale | sale, rent, or sold. Drives which Domain section is searched. |
suburbs | array<string> | ["sydney-nsw-2000"] | Suburb slugs in the form name-state-postcode (e.g. manly-nsw-2095, toorak-vic-3142, new-farm-qld-4005). |
startUrls | array<string> | [] | Direct Domain search URLs or individual listing URLs. Overrides suburbs when used — ideal for fully custom filter combinations. |
propertyTypes | array<string> | [] | Filter to one or more of house, apartment, townhouse, villa, land, rural, unitBlock, retire, studio. Empty = all types. |
minBedrooms | integer | 0 | Minimum beds (0 = no filter). |
maxBedrooms | integer | 0 | Maximum beds (0 = no filter). |
minPrice | integer | 0 | Minimum price in AUD. For rentals, interpreted as weekly rent. |
maxPrice | integer | 0 | Maximum price in AUD. For rentals, interpreted as weekly rent. |
auctionOnly | boolean | false | When true, returns only listings with saleMethod = auction. |
scrapeDetails | boolean | false | When true, fetches each listing's detail page for description, features, inspection times, school catchments, NBN, floor plan. Slower (1.5s extra per listing) but vastly richer. |
maxListings | integer | 50 | Hard cap on total listings returned across all suburbs. 0 = unlimited. |
maxPages | integer | 5 | Max pages per suburb. Each page = ~20 listings. 0 = unlimited. |
proxyConfiguration | object | AU residential | Apify proxy settings. Australian residential strongly recommended — Domain blocks datacenter IPs and geo-restricts non-AU traffic. |
requestDelay | integer (ms) | 1500 | Delay between requests. Keep above 1000 ms to avoid Akamai triggers. |
maxConcurrency | integer | 1 | Parallel request count. Keep at 1–3 — higher values trip rate limits. |
Output Schema
Every record uses one flat schema regardless of sale / rent / sold, so downstream warehouses can ingest the whole dataset without branching logic. Fields are nullable when the underlying listing omits them.
Identifiers & URLs
| Field | Type | Description |
|---|---|---|
listingId | string | Domain's internal listing ID — stable across runs, ideal for dedup and change detection |
url | string | Canonical listing detail URL on domain.com.au |
listingType | string | sale, rent or sold (matches searchType) |
saleMethod | string | auction, privateTreaty, eoi (expression of interest), tender, forSale, forRent, etc. |
promoType | string | Domain's promotion tier: standard, feature, premium, eliteProject |
status | string | Current listing status (active, underContract, sold, leased, withdrawn) |
Pricing
| Field | Type | Description |
|---|---|---|
price | number | Normalized numeric price in AUD (weekly rent for rentals) |
priceType | string | Parsed price-type — see the price-type reference table below |
priceDisplay | string | Original display string ("Auction", "$1.2M–$1.3M", "$650 pw") |
priceGuide | string | Free-text auction price guide when present |
priceMin | number | Lower bound of price range when applicable |
priceMax | number | Upper bound of price range when applicable |
soldPrice | number | Final sale price (sold listings only) |
soldDate | string | Sale date in YYYY-MM-DD (sold listings only) |
isPriceReduced | boolean | true when listing carries Domain's "Price Reduced" tag |
Auction
| Field | Type | Description |
|---|---|---|
isAuction | boolean | true when listing is on auction sale method |
auctionDate | string | Auction date+time in ISO-8601 format |
auctionLocation | string | Auction venue (on-site, agency office, online) |
Address & geo
| Field | Type | Description |
|---|---|---|
address | string | Full street address as displayed by the agent (may be partial pre-launch) |
suburb | string | Suburb name |
state | string | Two-letter AU state code (NSW, VIC, QLD, WA, SA, TAS, ACT, NT) |
postcode | string | 4-digit Australian postcode |
latitude | number | Listing latitude |
longitude | number | Listing longitude |
councilArea | string | Local Government Area name (e.g. Waverley, Stonnington, Brisbane City) |
Property attributes
| Field | Type | Description |
|---|---|---|
propertyType | string | house, apartment, townhouse, villa, land, rural, unitBlock, retire, studio |
bedrooms | integer | Number of bedrooms |
bathrooms | integer | Number of bathrooms |
carSpaces | integer | Number of parking spots (garages + carports) |
landSize | number | Land size in square metres |
buildingSize | number | Internal building size in square metres |
Agent & agency
| Field | Type | Description |
|---|---|---|
agentName | string | Primary listing agent name |
agentPhone | string | Agent's published mobile number (e.g. 0414 246 625) |
agentEmail | string | Agent's published email address (e.g. brad.caldwell-eyles@1stcity.com.au) — new, B2B lead-gen ready |
agentPhoto | string | Agent headshot image URL — new |
agentProfileUrl | string | Agent's Domain profile page URL — new |
agencyName | string | Agency / brokerage brand |
agencyWebsite | string | Agency external website URL — new |
agencyProfileUrl | string | Agency's Domain profile page URL — new |
Rich detail (populated only when scrapeDetails: true)
| Field | Type | Description |
|---|---|---|
description | string | Full listing description (copywriting from the agent) |
features | array<string> | Property features list (e.g. air conditioning, dishwasher, study, pool, solar panels) |
inspectionTimes | array<object> | Open-home schedule entries with start/end timestamps |
schoolCatchments | array<object> | Catchment schools with type (primary/secondary), sector, distance |
nbnConnection | string | NBN connection type (FTTP, FTTC, HFC, FTTN, Fixed Wireless, Satellite) |
energyRating | string | Energy efficiency rating where disclosed |
images | array<string> | Full-resolution image URLs |
floorplanUrl | string | Floor-plan image/PDF URL |
virtualTourUrl | string | 3D tour / video walkthrough URL (incl. Matterport) |
headline | string | Agent-written listing headline (e.g. A Home of Light, Balance and Timeless Ease) — new |
staticMapUrl | string | Pre-rendered Google Static Maps thumbnail URL — new, drop-in for cards/UIs |
Listing flags & metadata
| Field | Type | Description |
|---|---|---|
tags | array<string> | Raw Domain tag strings (Hot Property, New Listing, Price Reduced, Under Contract) |
isUnderContract | boolean | true when an offer has been accepted but settlement hasn't completed |
isHotProperty | boolean | Domain's high-engagement flag |
isNewListing | boolean | true when listed in the past 7 days |
daysOnMarket | integer | Days since first listed on Domain (powers stale-listing / motivated-vendor scoring) |
dateListed | string | First-listed timestamp in ISO-8601 (from Domain's dateListedV2.isoDateWithTimeZone) — new |
channel | string | Listing channel — residential, rent, sold, commercial, etc. — new |
searchSuburb | string | The suburb slug used in the request (helps trace records back to inputs) |
searchType | string | The listingType used in the request |
scrapedAt | string | ISO-8601 timestamp of extraction |
Example: For-sale Sydney listing
{"listingId": "2018834567","listingType": "sale","saleMethod": "auction","url": "https://www.domain.com.au/12-curlewis-street-bondi-beach-nsw-2026-2018834567","promoType": "premium","price": 3450000,"priceType": "guide","priceDisplay": "Auction Guide $3,450,000","priceGuide": "$3,450,000","priceMin": 3450000,"priceMax": null,"isAuction": true,"auctionDate": "2026-06-14T11:00:00+10:00","auctionLocation": "On Site","address": "12 Curlewis Street, Bondi Beach","suburb": "Bondi Beach","state": "NSW","postcode": "2026","latitude": -33.8915,"longitude": 151.2767,"propertyType": "house","bedrooms": 4,"bathrooms": 2,"carSpaces": 1,"landSize": 278,"buildingSize": null,"agentName": "Alexander Phillips","agentPhone": "0407 *** ***","agencyName": "PPD Real Estate Eastern Suburbs","tags": ["Hot Property", "New Listing"],"isPriceReduced": false,"isUnderContract": false,"isHotProperty": true,"isNewListing": true,"description": "Sun-drenched semi just 350m from the iconic Bondi Beach...","features": ["Air Conditioning", "Built-in Wardrobes", "Outdoor Entertainment", "Open Fireplace"],"inspectionTimes": [{"start": "2026-05-24T10:00:00+10:00", "end": "2026-05-24T10:30:00+10:00"},{"start": "2026-05-31T10:00:00+10:00", "end": "2026-05-31T10:30:00+10:00"}],"schoolCatchments": [{"name": "Bondi Beach Public School", "sector": "Government", "type": "Primary"},{"name": "Rose Bay Secondary College", "sector": "Government", "type": "Secondary"}],"nbnConnection": "FTTP","councilArea": "Waverley","images": ["https://bucket.domain.com.au/.../img1.jpg", "..."],"floorplanUrl": "https://bucket.domain.com.au/.../floorplan.pdf","virtualTourUrl": null,"status": "active","daysOnMarket": 4,"searchSuburb": "bondi-beach-nsw-2026","searchType": "sale","scrapedAt": "2026-05-16T08:30:00.000Z"}
Example: Melbourne rental
{"listingId": "2019998877","listingType": "rent","saleMethod": "forRent","url": "https://www.domain.com.au/.../2019998877","price": 720,"priceType": "perWeek","priceDisplay": "$720 per week","isAuction": false,"address": "501/45 Easey Street, Collingwood","suburb": "Collingwood","state": "VIC","postcode": "3066","propertyType": "apartment","bedrooms": 2,"bathrooms": 2,"carSpaces": 1,"buildingSize": 84,"agentName": "Jasmine Tran","agencyName": "Belle Property Yarra","features": ["Dishwasher", "Balcony", "Gym", "Concierge"],"nbnConnection": "FTTP","councilArea": "Yarra","status": "active","searchSuburb": "collingwood-vic-3066","searchType": "rent","scrapedAt": "2026-05-16T08:30:00.000Z"}
Price-Type Reference
Domain listings use over a dozen price conventions. The actor parses them into a canonical priceType enum so downstream filters never have to regex display strings.
priceType | Meaning | Example display |
|---|---|---|
fixed | Single firm asking price | $1,250,000 |
range | Price band (sale) | $1,200,000 - $1,300,000 |
guide | Auction or price guide | Auction Guide $1.4M, Buyer's Guide $850k |
offersOver | Owner expects above amount | Offers Over $900,000 |
from | Starting price (often new builds) | From $650,000 |
under | Capped at amount | Under $500,000 |
auction | Auction with no published guide | Auction |
eoi | Expressions of Interest | EOI closing 5pm Friday |
contactAgent | Price withheld | Contact Agent, Price on Application |
perWeek | Weekly rent (single value) | $650 per week, $720 pw |
perWeekRange | Weekly rent (range) | $600 - $700 per week |
unknown | Could not be parsed | (rare) |
Tip: combine
priceType = "auction"with the booleanisAuction = trueand a non-nullauctionDateto build a Saturday auction-watch dashboard for any metro.
Sale-Method Reference
saleMethod | Description |
|---|---|
auction | Public auction (with or without published guide) |
privateTreaty | Standard for-sale listing with negotiated offers |
eoi | Expressions of interest closing by a deadline |
tender | Sealed-bid tender process |
forSale | Generic for-sale fallback |
forRent | Rental listing |
sold | Sale finalized — soldPrice and soldDate populated |
leased | Rental leased — withdrawn from market |
Property-Type Reference
propertyType | Notes |
|---|---|
house | Detached / semi-detached / terrace |
apartment | Flats, units, condos |
townhouse | Multi-storey terraced dwellings |
villa | Single-level attached dwellings, common in QLD/NSW |
land | Vacant land — bedrooms/bathrooms null, landSize populated |
rural | Acreage, farms, lifestyle blocks |
unitBlock | Whole strata block (investor stock) |
retire | Retirement living / over-55s village |
studio | Single-room dwellings, common in inner Sydney/Melbourne |
Use Cases
Property Investors & Buyer's Agents
Sydney, Melbourne and Brisbane investors and the buyer's agents serving them use this dataset to:
- Comp scan an entire suburb in 60 seconds — pull every active 3-bed house in Brunswick under $1.5M and compare against last week's run
- Track auction clearance pipelines — get every Saturday-auction listing in the Eastern Suburbs with date, agent, guide and reserve indicators
- Spot under-contract sniffs — filter
isUnderContract = trueto identify properties that fell through and re-listed - Build off-market shortlists — combine
daysOnMarket > 60+isPriceReduced = trueto surface motivated vendors - Stale-listing / motivated-vendor finder — sort by
daysOnMarketdesc per suburb to expose listings carrying real pricing pressure - Hyper-local rent analytics — weekly rents by bedroom count and property type per postcode for yield calculations
- Mapping & heat-maps — every record carries
latitude/longitudeplus a ready-to-renderstaticMapUrlthumbnail
Valuers, Appraisers & Mortgage Brokers
Certified Practising Valuers (CPVs), bank panel valuers and mortgage brokers use Domain data to:
- Build comparable-sales bundles — pull all sold houses in a 1km radius over the past 12 weeks with
soldPrice,bedrooms,bathrooms,landSize - Speed up LMI assessments — pre-populate sold-comp PDFs for residential lending applications
- Track market velocity —
daysOnMarketdistribution per suburb feeds turnover ratios used in market-rent and rental-yield reports - Cross-check vendor disclosures — verify previous list/sold prices when brokering a refinance
- Auto-populate broker comparison sheets sent to clients during pre-approval
Prop-Tech Apps & Real Estate Portals
PropTech startups and aggregators use the actor as a structured-data backbone for:
- Search frontends with cleaner data than Domain itself (parsed price guides, normalized property types)
- Mortgage calculators populated with live listing prices instead of stale ABS medians
- Buyer-search-saved-filter alerts — diff today's run against yesterday to email subscribers when a matching listing drops
- AVM (Automated Valuation Model) training data with thousands of recent sold prices per metro
- Heatmap/choropleth visualizations by suburb, postcode or council area
Migration & Relocation Services
Migration agents, international relocation consultants and corporate-move specialists use this data to:
- Brief inbound expats with rent ranges and listing examples before they land in Sydney, Melbourne or Perth
- Filter family-friendly suburbs by
schoolCatchmentsand bedroom count - Map proximity to specific employers using
latitude/longitudeagainst the assignment office - Pre-stage rental shortlists for relocating staff before they begin their search
- Compare CBD vs. inner-ring vs. outer-suburb pricing for cost-of-living quotes
Real Estate Journalism & Data Reporting
Property reporters at the AFR, the SMH, the Guardian and independent newsletters use the dataset to:
- Cover Saturday auctions with same-day, structured pre-auction lists segmented by metro
- Track price reductions as a leading indicator of softening markets
- Quantify "premium drift" — proportion of suburb listings that are
premium/featurepromoted vs.standard - Identify the busiest agents and agencies by listing volume per metro
- Verify property gossip ("the so-and-so trophy home is back on") against Domain's actual
daysOnMarketandisPriceReducedfields
Mortgage Brokers & Lenders
Beyond comp work, mortgage brokers and direct lenders use this dataset for:
- Pipeline outreach — agents listed on premium properties are high-intent referral partners for purchase finance
- Refinance triggers — recently-sold properties in a borrower's suburb signal potential equity-unlock conversations
- First-home-buyer concierge — auto-curate sub-$800k apartments in Brisbane and Adelaide for clients on a stamp-duty concession threshold
- Investor segmentation — flag landlord-style listings (
unitBlock,ruralwith rent return) for IP-loan campaigns
Real Estate Agencies & Vendor Advocacy
Agency principals and vendor-advocate businesses use the data to:
- Benchmark agency market share by suburb (listings per agency per week)
- Recruit performing agents from competitors by tracking listing volume per
agentName - B2B agent lead-generation lists —
agentName+agentPhone(mobile) +agentEmail+agentProfileUrl+agencyName+agencyWebsiteare now first-class fields, ready to drop into a CRM - Audit on-market presentation — premium tier %, photo count, video tour adoption per office
- Identify off-market opportunities for vendor advocates pitching new clients
- Build agent CRM enrichment feeds with current listing inventory per principal
Academic & Government Research
Universities, ABS data scientists and state-government housing units use scraped Domain data to:
- Study rental affordability using weekly-rent quartiles per postcode segmented by bedroom count
- Map housing supply — active listing counts by suburb and property type
- Quantify auction-vs-private-treaty share as a market-temperature indicator
- Research school-catchment price premiums by joining
schoolCatchmentswith sold prices - Track infrastructure-driven price moves along new metro/light-rail corridors
Insurance & Strata Underwriting
Building insurers, contents insurers and strata managers use the dataset to:
- Price residential cover using
buildingSize,landSizeandpropertyTypefor replacement-cost models - Identify high-rise exposure by filtering apartments in specific postcodes
- Cross-check declared property attributes at renewal against current public listings
- Spot strata-block sales (
propertyType = unitBlock) that signal management changes - Quote landlord insurance using current rent levels as the basis for loss-of-rent cover
Sample Queries & Recipes
Recipe 1: Saturday auction watch — Eastern Suburbs Sydney
{"listingType": "sale","suburbs": ["bondi-nsw-2026","bondi-beach-nsw-2026","bronte-nsw-2024","coogee-nsw-2034","double-bay-nsw-2028","paddington-nsw-2021","woollahra-nsw-2025"],"auctionOnly": true,"scrapeDetails": true,"maxPages": 10}
Pull every auction listing across the Eastern Suburbs with auctionDate, priceGuide and agentName to power a weekend auction tracker.
Recipe 2: Toorak trophy-house comps for valuers
{"listingType": "sold","suburbs": ["toorak-vic-3142"],"propertyTypes": ["house"],"minBedrooms": 4,"minPrice": 5000000,"scrapeDetails": true,"maxListings": 100}
Recipe 3: Sub-$700/wk one-bedrooms in Melbourne inner-north
{"listingType": "rent","suburbs": ["brunswick-vic-3056", "fitzroy-vic-3065", "collingwood-vic-3066", "carlton-vic-3053"],"propertyTypes": ["apartment", "studio"],"maxBedrooms": 1,"maxPrice": 700,"scrapeDetails": true}
Recipe 4: Brisbane new-build investor stock
{"listingType": "sale","suburbs": ["new-farm-qld-4005", "teneriffe-qld-4005", "newstead-qld-4006", "fortitude-valley-qld-4006"],"propertyTypes": ["apartment"],"minBedrooms": 2,"maxBedrooms": 2,"maxPrice": 950000,"scrapeDetails": true}
Recipe 5: Perth waterfront houses (Cottesloe / Mosman Park / Peppermint Grove)
{"listingType": "sale","suburbs": ["cottesloe-wa-6011", "mosman-park-wa-6012", "peppermint-grove-wa-6011"],"propertyTypes": ["house"],"minBedrooms": 4,"scrapeDetails": true}
Recipe 6: Custom direct-URL run (filters Domain's UI doesn't expose cleanly)
{"startUrls": ["https://www.domain.com.au/sale/sydney-region-nsw/?bedrooms=4-any&bathrooms=2-any&price=2500000-5000000&propertytypes=house&excludeunderoffer=1"],"scrapeDetails": true,"maxPages": 25}
Recipe 7: Test sample before a big crawl
{"suburbs": ["sydney-nsw-2000"],"maxListings": 25,"maxPages": 2,"scrapeDetails": false}
Integration Examples
Google Sheets
Schedule the actor nightly in Apify, then add the Google Sheets Apify integration to the schedule. Every morning your sheet refreshes with the latest listings; conditional formatting can highlight new entries or price reductions automatically.
Make.com / Zapier / n8n
Use the official Apify module/connector. Triggers worth wiring:
- New
listingIdsince last run → push to a Slack #new-listings channel isPriceReducedflips totrue→ email buyer's-agent clients on a saved-search matchisUnderContractflips totrue→ notify investor watchlistsoldPricepopulated → write a row to a comps sheet
Power BI / Tableau / Looker Studio
Use Apify's REST API as a data source, refresh on the actor's schedule. Dashboards to build:
- Median price by suburb and bedroom count, week over week
- Auction-vs-private-treaty share by metro
- Rolling 12-week rent index per postcode
- Agency listing-volume league tables
Postgres / Snowflake / BigQuery
Wire an Apify webhook to a Cloud Function / Lambda that bulk-loads the dataset run into your warehouse. The flat schema means a single CREATE TABLE and COPY per run — no nested unnesting required (except for features, inspectionTimes, schoolCatchments).
Salesforce / HubSpot CRM
Enrich Account/Lead records keyed on agentName + agencyName. Flip Tasks open when a tracked vendor goes from active → underContract. Build pipeline reports of "buyers chasing 4-bed Bondi houses" against fresh weekly inventory.
Webhooks & Custom Backends
Apify dispatches a webhook the moment a run finishes — point it at your own ingestion endpoint and stream items via the dataset API for sub-minute latency from listing-published to listing-in-your-system.
Major Australian Markets
The actor works for any Domain.com.au-indexed suburb. These are the high-volume metros and prestige regions Domain users search most frequently.
| Metro / Region | State | Notable suburbs (slug examples) |
|---|---|---|
| Sydney CBD & Inner | NSW | sydney-nsw-2000, surry-hills-nsw-2010, pyrmont-nsw-2009 |
| Eastern Suburbs (Sydney) | NSW | bondi-beach-nsw-2026, paddington-nsw-2021, double-bay-nsw-2028, coogee-nsw-2034 |
| Inner West (Sydney) | NSW | newtown-nsw-2042, marrickville-nsw-2204, balmain-nsw-2041 |
| North Shore (Sydney) | NSW | mosman-nsw-2088, chatswood-nsw-2067, lane-cove-nsw-2066 |
| Northern Beaches | NSW | manly-nsw-2095, dee-why-nsw-2099, avalon-beach-nsw-2107 |
| Melbourne CBD & Inner | VIC | melbourne-vic-3000, southbank-vic-3006, docklands-vic-3008 |
| Stonnington (Melbourne) | VIC | toorak-vic-3142, south-yarra-vic-3141, prahran-vic-3181 |
| Inner North (Melbourne) | VIC | brunswick-vic-3056, fitzroy-vic-3065, collingwood-vic-3066 |
| Brisbane | QLD | brisbane-city-qld-4000, new-farm-qld-4005, teneriffe-qld-4005, paddington-qld-4064 |
| Gold Coast | QLD | surfers-paradise-qld-4217, broadbeach-qld-4218, mermaid-beach-qld-4218 |
| Perth | WA | perth-wa-6000, cottesloe-wa-6011, subiaco-wa-6008, fremantle-wa-6160 |
| Adelaide | SA | adelaide-sa-5000, north-adelaide-sa-5006, unley-sa-5061, glenelg-sa-5045 |
| Hobart | TAS | hobart-tas-7000, battery-point-tas-7004, sandy-bay-tas-7005 |
| Canberra | ACT | canberra-act-2601, kingston-act-2604, manuka-act-2603, braddon-act-2612 |
| Darwin | NT | darwin-city-nt-0800, fannie-bay-nt-0820, nightcliff-nt-0810 |
Suburb-slug rule:
lowercase-name-words-hyphenated-state-postcode. For multi-word suburbs use hyphens (e.g.north-adelaide-sa-5006,port-melbourne-vic-3207).
Cost & Performance
| Metric | Value |
|---|---|
| Engine | HTTP/2 via got-scraping + Cheerio fallback (no headless browser) |
| Runtime (50 listings, no details) | 1–2 minutes |
| Runtime (200 listings + details) | 7–12 minutes |
| Pricing model | Pay-per-event (start + per dataset item) |
| Data freshness | Live at run time |
| Auth required | None |
| Proxy required | Yes — Australian residential strongly recommended |
| Default concurrency | 1 (configurable up to 5) |
| Default request delay | 1500 ms |
| Min memory | 256 MB |
| Max memory | 2048 MB |
Cost varies with the size of the run and proxy traffic consumed. A 50-listing detail-enabled run typically costs under $0.10 in Apify credits including residential-proxy traffic.
Compliance, Privacy & Legal Notes
- Public data only — every field collected is openly displayed on domain.com.au to any unauthenticated visitor
- No personal residence/identity data — addresses and agent contacts are the business info the vendor and agency publish to attract buyers/tenants
- No PII beyond agent business contacts — buyer/enquiry data is never accessible
- No PHI — none of the data is health-related
- Robots.txt deference — the actor respects the spirit of Domain's robots policy by throttling, identifying as a non-malicious client, and avoiding endpoints not intended for general access
- Australian Privacy Principles (APP) — public commercial listings fall outside the APPs' definition of personal information; however, downstream use that links listings to individuals beyond the agent's published contact details may attract APP obligations
- GDPR / CCPA — listings carry no EU/California personal data; agent business contacts may attract limited B2B-exemption considerations
- Spam Act 2003 (AU), CAN-SPAM, TCPA — compliance with electronic marketing rules is the responsibility of the data consumer when using agent contact info for outbound outreach
- Copyright — listing copy, images and floor plans are © the listing agency. Republication beyond personal use, analysis or thumbnail/preview contexts may require permission
Important: Domain.com.au's Terms of Use restrict commercial reuse. Consumers of this dataset are responsible for ensuring their use case complies with applicable terms. The actor is intended for legitimate research, analytics, journalism, valuation and personal property-search workflows.
Frequently Asked Questions
How fresh is the data?
Live at run time. Domain updates its index continuously as agents publish new listings, drop prices, mark properties under contract, and finalize sales. Whatever was visible on domain.com.au the moment the actor ran is what's in your dataset.
Do I need to log in to Domain or supply an API key?
No. Domain's public site is unauthenticated for browsing. You only need an Apify token to run the actor and (recommended) an Apify subscription that includes residential-proxy minutes.
Why is Australian residential proxy required?
Domain is fronted by Akamai and aggressively blocks datacenter IP ranges. Listings also geo-redirect when the request originates outside Australia. AU residential IPs are the only reliable way to see the full catalog at scale. The actor's default proxyConfiguration is already set up for this.
Can I run this on Apify's free plan?
Yes — for small samples. A 25-listing test run consumes very few credits. For larger production scrapes you'll want a paid Apify plan with residential-proxy GB included.
How many records can I get per run?
There is no hard cap. The practical limit is your patience and proxy budget. The actor has been used for single-suburb runs (~200 listings) and metro-wide runs (10K+ listings) by varying maxListings, maxPages and the suburb list.
Does the actor handle sold listings and historical sales?
Yes — set listingType: "sold". Domain displays sold prices for properties where the agent has disclosed them (vendor consent required), typically 1–8 weeks after sale. To build a longer history, schedule the actor weekly and archive each dataset run.
How does pagination work?
Each search page returns ~20 listings; the actor walks pages 1..N until maxPages or maxListings is hit. Domain caps the per-suburb deep-pagination depth in its UI (~50 pages); for very dense metros, slice the search by price band or property type to extract beyond that depth.
What if a price is "Contact Agent" or just "Auction"?
The numeric price will be null and the parsed priceType will be contactAgent or auction. The original display string is preserved in priceDisplay, and any auction date/guide is in auctionDate/priceGuide.
Can I scrape rental bond, available-from date, or lease term?
Rental listings include weekly rent (price with priceType: perWeek) and detail-page fields populate description, features and inspection times. Bond amount and available-from date are sometimes parsed into the description/features but are not first-class schema fields — Domain doesn't always publish them in machine-readable form.
Does this work for realestate.com.au?
No — this actor is Domain-specific. realestate.com.au is the other major Australian portal and requires a separate scraping strategy. We may publish a companion actor; for now please request it via the Apify support channel.
Can I extract agent phone + email?
Yes. As of the latest release, every detail-enriched record carries the agent's published mobile number (agentPhone, e.g. 0414 246 625) and email address (agentEmail, e.g. brad.caldwell-eyles@1stcity.com.au) alongside agentName, agentPhoto, agentProfileUrl and the parent agencyName / agencyWebsite / agencyProfileUrl. This makes the actor a turnkey B2B real-estate agent lead-generation feed — every active Domain listing surfaces a contactable agent record.
How many of the 51 schema fields actually populate?
On a detail-enriched run, 43 of 51 fields are populated for a typical listing. The remaining 8 are intentionally conditional:
- Auction fields (
auctionDate,auctionLocation) are only populated whensaleMethod = auction - Sold fields (
soldPrice,soldDate) are only populated whenlistingType = sold - A few free-text fields (
energyRating,buildingSize) depend on the agent disclosing them
This is verified end-to-end against live Bondi NSW listings — agent mobile, agent email, lat/lng, daysOnMarket, floorplan URL, static map URL and headline all return real values.
Can I get listing images, floor plans and video tours?
Yes — when scrapeDetails: true. The images array contains full-resolution image URLs, floorplanUrl points to the floor-plan image/PDF, and virtualTourUrl points to any 3D tour or video walkthrough Domain has registered.
How do I get school-catchment data?
Set scrapeDetails: true. The schoolCatchments array contains catchment schools with name, type (Primary/Secondary), sector (Government/Catholic/Independent), and where Domain has it, distance from the property.
Can I filter by land size, building size, or features?
The actor returns these fields; filtering by them is best done downstream in SQL/Sheets/Pandas. For very large-scale filtering, use startUrls to leverage Domain's own search filters (their URL syntax supports landsize=, bedrooms=, etc.).
Does the actor work across all 8 Australian states/territories?
Yes — NSW, VIC, QLD, WA, SA, TAS, ACT, NT. The only requirement is supplying suburb slugs in the name-state-postcode form Domain uses internally.
Can I schedule the actor?
Yes. Apify's built-in Scheduler runs any actor on hourly, daily, weekly or cron expressions. Combine with webhooks/integrations for hands-off pipelines.
What happens if Domain changes their site / buildId?
The actor rediscovers the Next.js buildId on every run by parsing __NEXT_DATA__, so deploy churn doesn't break scrapes. If the Phoenix API endpoint shape changes, the HTML/Cheerio fallback continues to return the core fields (price, address, beds/baths) until an updated version ships.
How do I report a bug or request a feature?
Use the Issues tab on the Apify Store page or contact the developer directly through the Apify Console.
Related Apify Actors by Haketa
If you need real estate data from other countries — or marketplaces and jobs data that pair well with property research — these companion actors cover the most-requested catalogues:
- Realtor.ca Scraper (Canada) — Canadian MLS listings across all provinces
- Rent.com Scraper (US) — US rentals nationwide
- Apartments.com Scraper (US) — US apartment marketplaces
- Immoweb.be Belgium Property Scraper — Belgian residential & commercial
- Zameen.com Pakistan Real Estate Scraper — Pakistan's largest property portal
- Lamudi Philippines Real Estate Scraper — Philippine homes for sale & rent
- VivaReal Brazil Real Estate Scraper — Brazilian residential market
- ZAP Imóveis Brazil Scraper — Brazil's other major portal
- Realestate.com.kh Cambodia Scraper — Cambodian property
- SEEK Scraper (Australia/NZ) — Australian job listings (relocation use cases)
- TradeMe Scraper (New Zealand) — NZ classifieds incl. property
Comparison vs. Alternatives
| Approach | Setup time | Data freshness | Cost (1K listings) | AU residential proxy | Schema normalization | Detail-page enrichment |
|---|---|---|---|---|---|---|
| This actor | < 5 minutes | Live | Cents | ✅ Built-in | ✅ 50-field flat schema | ✅ Optional |
| Manual copy-paste from domain.com.au | Hours/day | Live | Free | N/A | ❌ None | ❌ None |
| Custom Playwright scraper | 2–5 days of dev | Live | DIY + infra | ❌ DIY | DIY | DIY |
| Domain Partner API | Weeks (commercial agreement) | Live | $$$+ enterprise | ✅ | Partial | ✅ |
| Generic web-scraping SaaS | Hours | Live | $$ per page | ❌ | ❌ | ❌ |
Why Pay-Per-Event Pricing?
Most scraping tools either charge a flat monthly subscription or unpredictable per-Compute-Unit fees. This actor uses Apify's pay-per-event model:
- ✅ You only pay when you actually run the actor
- ✅ Charges scale linearly with listings consumed — no overpaying for empty runs
- ✅ Transparent line-item billing inside the Apify Console
- ✅ No monthly minimums, no annual contracts
- ✅ Free to evaluate — run
maxListings: 25for pennies - ✅ Production-friendly — predictable cost per listing for budgeting
Changelog
| Version | Date | Notes |
|---|---|---|
| 1.0.0 | 2026-05 | Initial public release — HTTP/2 Phoenix-API extraction, AU residential proxy default, 50-field flat schema, 15+ price-type parser, optional detail-page enrichment (description, features, inspections, school catchments) |
Keywords
Domain.com.au scraper · Domain.com.au property scraper · Australian real estate data · Sydney Melbourne property scraper · AU property listings API · Domain property data extractor · Australian for sale rent data · real estate Australia API · Domain.com.au listings scraper · Australian residential property data · Sydney property data extractor · Melbourne property scraper · Brisbane property listings API · Perth real estate data · Adelaide property scraper · Gold Coast real estate listings · Canberra property data · Hobart property scraper · Australian auction data · auction guide scraper Australia · auction results AU · property comp data Australia · valuer comp data scraper · mortgage broker property data Australia · buyer agent intelligence Australia · investor analysis Australian property · prop-tech data feed Australia · Australian school catchment scraper · NBN connection lookup AU · weekly rent data Australia · for-rent listings Australia · sold price scraper Australia · days on market scraper · agent and agency directory Australia · Domain Phoenix API scraper · Next.js scraper Australia · Apify Australian real estate actor · pay-per-event property data · residential property listings scraper Australia · expressions of interest scraper · price guide normalization Australia · Eastern Suburbs Sydney listings · Inner West Sydney property data · North Shore Sydney scraper · Toorak South Yarra property data · Brunswick Fitzroy rental data · auction tracking dashboard Australia · automated property valuation feed AU
Support
- Bug reports: Use the Issues tab on the Apify Store page
- Feature requests: Same place — describe your use case so we can prioritize
- Direct contact: Through the haketa developer profile on Apify
If this actor saves you time, a 5-star rating on the Apify Store helps other investors, valuers, brokers, journalists and prop-tech builders discover it. Thank you!