RealEstate[com.au & co.nz] πŸ’°$1πŸ’° Search By URLs and Keywords avatar

RealEstate[com.au & co.nz] πŸ’°$1πŸ’° Search By URLs and Keywords

Pricing

from $1.00 / 1,000 results

Go to Apify Store
RealEstate[com.au & co.nz] πŸ’°$1πŸ’° Search By URLs and Keywords

RealEstate[com.au & co.nz] πŸ’°$1πŸ’° Search By URLs and Keywords

realestate.com.au listings from official services APIs. Input: buy/rent/sold list URLs or direct property pages. Output: one row per listing with flat columns (title, price, agents, images, address) plus full listing and withIdsResponse; includes originalSearchUrl and apiRequestUrl.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

25

Total users

20

Monthly active users

2 days ago

Last modified

Share

Overview

Extract structured property listings from Australia and New Zealand:

  • Australia β€” realestate.com.au via services.realestate.com.au: buy / rent / sold search URLs (or direct property pages), listings/search/byUrl, pagination via _links.next, then listings/withIds per listing.
  • New Zealand β€” realestate.co.nz via platform.realestate.co.nz: residential (and related) search URLs on www.realestate.co.nz (HTML once for suburb ids), then GET /search/v1/listings for search pages, and two detail calls per listing: GET /search/v1/listings/{id} (full card: title, price, address, photos, agents) and GET /search/v1/listings/{id}/listing-fibre (broadband plans). Fibre failures are non-fatal; the property row is still saved.

The default pipeline uses an internal Impit-based handler (no Cheerio for those requests). Optional CheerioCrawler + Impit remains for AU when REALESTATE_USE_INTERNAL_HANDLER is disabled.

You get one dataset row per listing with country: AU or NZ, flat columns when flattenOutput is true (the default), plus nested payloads (listing + withIdsResponse for AU; listing + nzListingResponse / listingFibreResponse for NZ).

Use it to monitor markets, export price and agency data, or warehouse raw API payloads with traceable originalSearchUrl and request URLs.


Features

  • Multiple entry URLs (all routed automatically):

    • Search / list pages: https://www.realestate.com.au/buy/…, /rent/…, /sold/… β€” paths like …/list-1?… (and source=refinement when present). First request: search/byUrl with path + query; next pages: _links.next β†’ search?query=… until maxItems listings are queued or there is no next link.
    • Direct property URL: numeric id path or property-…-{id} β€” one withIds call only.
  • New Zealand (www.realestate.co.nz):

    • Search URLs β€” Paths such as /residential/sale/…, /residential/rent/…, rural/commercial variants supported by the mapper. Suburb filters are read from listing HTML (filter[suburbId][]), then the platform listings search API is paginated.
    • Direct listing URL β€” Property pages whose first path segment is a listing id (numeric or slug) trigger detail-only requests (same dual listings/{id} + listing-fibre flow).
    • Headers β€” Mobile-style reconz-app fingerprint by default (User-Agent, x-application, x-device-id). Override with REALESTATE_NZ_CLIENT=browser, REALESTATE_NZ_DEVICE_ID, etc.
    • Output β€” NZ rows use source: "realestate_nz_listing". Flat columns align with the AU export where possible (title, price as display string, agents, images as mediaserver.realestate.co.nz URLs, …). listing holds a competitor-friendly shape in places (e.g. listing.price.display, structured listing.address). dateSold is not populated yet; advertising is absent. Fibre columns (fibreProducts, …) appear when listing-fibre returns 200.
  • Pagination:

    • Search pages chained via _links.next.href (absolute or relative URLs supported).
    • Safety cap: env REALESTATE_MAX_SEARCH_PAGES (default 500) per run.
  • Listing IDs:

    • Collected from every tieredResults tier (organic and any sponsored-style rows that use the same card shape), preferring listingId on each card.
  • Output modes (flattenOutput in input):

    • true (default): flat spreadsheet-style fields plus nested payloads β€” AU: listing + withIdsResponse; NZ: listing + nzListingResponse (full listing JSON:API) + listingFibreResponse when fibre succeeds, and rawResponse as an alias of the main listing body for compatibility.
    • false: AU: listing + withIdsResponse without duplicate flat columns. NZ: attributes, rawResponse, nzListingResponse, listingFibreResponse, fibreStatusCode, fibreApiRequestUrl.
  • HTTP client: Crawlee CheerioCrawler with Impit + REA iOS-style headers for services.realestate.com.au.


How to Use

  1. Set Up: Apify account and this actor (or run locally with apify run / npm run start:dev).
  2. Provide Input: Use either website URLs under startUrls (and optional extraStartUrls / ttt) or leave all of those empty and set searchByFilters for a single AU/NZ location. If any URL is set, URL mode wins and searchByFilters is ignored. startUrls accepts www.realestate.com.au (AU) and/or www.realestate.co.nz (NZ). Optional url1, url2, … on the same object (see input schema).
  3. Configure: Set maxItems (cap on listing detail requests), flattenOutput, concurrency, retries, and proxy (recommended for production).
  4. Run & Export: Download JSON from the dataset for full nested data. CSV export in the actor’s local data.csv path unions top-level keys β€” nested listing / withIdsResponse are poor fit for CSV; prefer JSON for complete payloads.

Usage Limitations

Free / non-paying Apify users may be subject to platform limits on dataset items or charges. Paid users typically get higher limits; adjust maxItems to control how many withIds calls run per execution. REA may rate-limit abusive patternsβ€”proxy is recommended. Dataset rows may contain personal data (emails, phones); handle per your privacy policy.


Input Configuration

Example input:

{
"startUrls": [
{
"url": "https://www.realestate.com.au/rent/property-unit+apartment-villa-in-sydney+cbd,+nsw/list-1?maxBeds=3&source=refinement"
},
{
"url": "https://www.realestate.com.au/sold/property-land-between-0-50000-in-adelaide+-+greater+region,+sa/list-1?source=refinement"
},
{
"url": "https://www.realestate.com.au/property-unit-vic-macleod-150434352"
}
],
"flattenOutput": true,
"maxItems": 500,
"maxConcurrency": 10,
"minConcurrency": 1,
"maxRequestRetries": 3,
"proxy": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

New Zealand–only example (single search seed; adjust maxItems as needed):

{
"startUrls": [
"https://www.realestate.co.nz/residential/sale/auckland/auckland-city/blockhouse-bay"
],
"flattenOutput": true,
"maxItems": 100,
"maxConcurrency": 10,
"proxy": { "useApifyProxy": false }
}

Shared filter example (use when startUrls / extraStartUrls / ttt are all empty; one object β†’ one compiled search URL):

{
"searchByFilters": {
"country": "NZ",
"channel": "buy",
"cityOrRegion": "Auckland",
"district": "Auckland City",
"suburb": "Blockhouse Bay"
},
"flattenOutput": true,
"maxItems": 100
}

Input Fields Explanation

  • startUrls (startUrls): Objects whose url, url1, url2, … fields are collected in order. AU: https://www.realestate.com.au/ list URLs (buy / rent / sold) or a property URL. NZ: https://www.realestate.co.nz/ listing search paths (residential/sale, rent, rural/commercial where supported) or a property URL with listing id in the path.
  • searchByFilters (searchByFilters): Optional single object with country, channel, cityOrRegion, district, and suburb. Used only when no start URL is provided (see startUrls); compiled into one website search URL. (Legacy runs that pass an array still work: only the first element is used, with a console warning.)
    • AU: best results when cityOrRegion is a short region / state label such as VIC, NSW, and district is the market label used in REA URLs (for example Melbourne - Northern Region).
    • NZ: use cityOrRegion = region, district = district / city, suburb = suburb. All three are required for NZ filter rows; sold NZ filters are skipped.
  • flattenOutput (flattenOutput): When true (default), AU rows include flat columns and listing + withIdsResponse. NZ rows include flat columns aligned with AU where possible and listing, nzListingResponse, optional listingFibreResponse, fibre plan fields when available. When false, shapes are minimal/nested as described in Output modes above.
  • maxItems (maxItems): Maximum number of listings to queue for withIds (shared across all search pagination). Does not limit search pages except indirectly once the cap is reached.
  • maxConcurrency / minConcurrency / maxRequestRetries: Crawlee concurrency and retries (Impit may cap effective concurrency when a single proxy URL is shared β€” see logs).
  • proxy (proxy): Apify proxy or custom proxyUrls for outbound requests.
  • Environment: REALESTATE_MAX_SEARCH_PAGES β€” max search API pages per run (default 500). NZ: REALESTATE_NZ_PAGE_LIMIT, REALESTATE_NZ_META_AGGS, REALESTATE_NZ_DEBUG, REALESTATE_NZ_CLIENT, REALESTATE_NZ_DEVICE_ID β€” see realestate-nz-mapper.ts / internal-handler-nz.ts.

Output Structure

The dataset contains one row per listing after detail requests (AU: withIds; NZ: listings/{id} Β± listing-fibre).

  • realestate_detail β€” source: "realestate_detail", country: "AU" β€” Australian listings.
  • realestate_nz_listing β€” source: "realestate_nz_listing", country: "NZ" β€” New Zealand listings.

Filter with source / country when consuming mixed inputs.

When flattenOutput is false, the same source values apply; top-level shape differs (fewer flat columns).

NZ vs competitor-style fields

NZ flat rows reuse many of the same top-level names as the AU export (title, description, agents, images, channel, propertyType, …) so CSV column unions work across countries. Some Australian competitor JSON shapes differ: e.g. top-level price is a string (AU parity); nested listing.price.display matches a { display } style. generalFeatures on the row is represented as bedrooms / bathrooms / carSpaces plus listing.features.general. advertising is not provided; dateSold is null until we parse it from NZ data.

Sample: realestate_nz_listing (NZ β€” flattenOutput: true)

After a local run, data.json is written from the dataset (see main.ts). If that file is not in the repo, use the same shape as below: it was generated with buildNzPropertyListingFlatRow for listing 43004474 from the live platform.realestate.co.nz APIs (property + fibre). nzListingResponse, listingFibreResponse, rawResponse, and listing are truncated / stubbed in this block; a real export contains the full JSON:API bodies and nested listing object. description is shortened here; the live field is the full plain-text marketing copy.

{
"source": "realestate_nz_listing",
"country": "NZ",
"listingId": "43004474",
"title": "Four Homes, Endless Possibilities",
"propertyType": "House",
"status": "active",
"price": "Negotiation",
"address": "42 Bolton Street",
"suburb": "Blockhouse Bay",
"postcode": "0600",
"state": "Auckland",
"latitude": -36.9201449,
"longitude": 174.6980028,
"bedrooms": 9,
"bathrooms": 5,
"carSpaces": 2,
"propertyFeatures": {},
"description": "An outstanding and truly unique opportunity awaits in popular Bolton Street…",
"featured": true,
"constructionStatus": "established",
"agencyListingId": "MLB61353",
"modifiedDate": "2026-03-12T12:28:58+13:00",
"dateSold": null,
"signature": true,
"productDepth": "",
"channel": "buy",
"url_slug": "43004474/residential/sale/42-bolton-street-blockhouse-bay",
"isSold": false,
"isBuy": true,
"isRent": false,
"isProject": false,
"tier_signature": true,
"tier_midtier": false,
"tier_standard": true,
"tier_isClassicProject": false,
"tier_isSignatureProject": false,
"tier_isProject": false,
"isExactMatch": null,
"isSurroundingMatch": null,
"url": "https://www.realestate.co.nz/43004474/residential/sale/42-bolton-street-blockhouse-bay",
"inspections": [],
"statementOfInformation": null,
"agencyName": "Anne Duncan Real Estate Ltd (Licensed: REAA 2008) - Ray White Mt Albert",
"agencyPhone": "(09) 846 9470",
"agencyEmail": "mtalbert.nz@raywhite.com",
"agencyWebsite": "",
"agencyAddress": "",
"agencyAddress_streetAddress": "",
"agencyAddress_suburb": "",
"agencyAddress_state": "",
"agencyAddress_postcode": "",
"agencyAddress_raw": {},
"agencyProfileUrl": null,
"agencyLogo": "https://mediaserver.realestate.co.nz/per_orgs/6104/bcf30b21eb0a703a94ac421a4a4520e4.crop.105x134.jpg",
"agents": [
{
"agentId": "6111",
"name": "Anne Duncan",
"jobTitle": "",
"phoneNumber": "021 996 426",
"emails": ["anne.duncan@raywhite.com"],
"powerProfile": false,
"profileUrl": "https://www.realestate.co.nz/agent/anne-duncan/",
"image": "https://mediaserver.realestate.co.nz/per_orgs/6111/66cc397a7c57d45b4a4b4b4f026fc843.crop.160x160.jpg"
}
],
"images": [
"https://mediaserver.realestate.co.nz/listings/43004474/594e1c909577f0a4e0c6f78d7552cd78.crop.800x600.jpg"
],
"scrapedAt": "2026-04-11T19:42:12.941Z",
"originalSearchUrl": "https://www.realestate.co.nz/residential/sale/auckland/auckland-city/blockhouse-bay",
"statusCode": 200,
"apiRequestUrl": "https://platform.realestate.co.nz/search/v1/listings/43004474",
"flattenOutput": true,
"nzListingResponse": { "_readme_note": "Omitted: full JSON:API document from GET /search/v1/listings/{id}." },
"listingFibreResponse": { "_readme_note": "Omitted: full JSON:API document from GET /search/v1/listings/{id}/listing-fibre." },
"fibreStatusCode": 200,
"fibreApiRequestUrl": "https://platform.realestate.co.nz/search/v1/listings/43004474/listing-fibre",
"rawResponse": { "_readme_note": "Omitted: same payload as nzListingResponse (alias for tooling)." },
"listing": { "_readme_note": "Omitted: nested compat object β€” title, price.display, address, features.general, etc." },
"landSize": 2344,
"landSizeUnit": "SQM",
"hasOnt": false,
"currentConnection": null,
"standardInstall": true,
"ontUpgradeLink": "https://www.chorus.co.nz/residential/fibre-products/hyperfibre/upgrading",
"standardInstallLink": "https://www.chorus.co.nz/getting-fibre/installation",
"fibreProductCount": 6,
"fibreProducts": [
{
"id": "fibre-starter-43004474",
"name": "Fibre Starter 100",
"upSpeedMbps": 100,
"downSpeedMbps": 20,
"priceCents": 6000,
"available": false,
"requiresOntUpgrade": false
}
],
"lister": {
"agentId": "6111",
"name": "Anne Duncan",
"jobTitle": "",
"phoneNumber": "021 996 426",
"emails": ["anne.duncan@raywhite.com"],
"powerProfile": false,
"profileUrl": "https://www.realestate.co.nz/agent/anne-duncan/",
"image": "https://mediaserver.realestate.co.nz/per_orgs/6111/66cc397a7c57d45b4a4b4b4f026fc843.crop.160x160.jpg"
}
}

NZ sample β€” field-by-field (every top-level key)

FieldMeaning
sourceAlways "realestate_nz_listing" for NZ listing rows from this actor.
country"NZ".
listingIdListing id used on platform.realestate.co.nz (GET …/listings/{id}).
titleMarketing headline from attributes.header.
propertyTypee.g. House from listing-sub-type.
statusPlatform listing-status (e.g. active).
priceHuman-readable price-display string (not { display } at top level; see listing.price).
addressStreet line (number + street name) for spreadsheets.
suburbSuburb name.
postcodeNZ postcode string.
stateRegion (e.g. Auckland) β€” AU uses state codes; NZ uses region as the column value.
latitude / longitudeParsed from address.latitude / address.longitude.
bedroomsbedroom-count.
bathroomsbathrooms-total-count (fallback bathroom-count).
carSpacesSum of garage + covered + other parking counts when any present.
propertyFeaturesMap of feature-string arrays; often generalFeatures from attributes.features (empty {} if none).
descriptionFull description with HTML stripped to plain text.
featuredtrue if is-featured or is-super-featured.
constructionStatusnew if is-new-construction, else established.
agencyListingIdAgency reference (listing-no).
modifiedDatepublished-date or created-date from the API.
dateSoldnull until sold-date parsing is implemented.
signaturetrue when is-showcased.
productDepthReserved; empty string (no NZ analogue mapped yet).
channelbuy, rent, or sold (from category + status heuristics).
url_slugPath after domain (website-slug without leading slash).
isSold / isBuy / isRentBooleans aligned with channel.
isProjectfalse for current NZ mapper.
tier_signatureMirrors showcase / signature-style flags (is-showcased).
tier_midtierNot used on NZ; false.
tier_standardtrue when featured tier applies.
tier_isClassicProject / tier_isSignatureProject / tier_isProjectAU parity columns; false unless extended.
isExactMatch / isSurroundingMatchnull (search-context fields; not on detail card).
urlPublic listing URL (website-full-url).
inspectionsCopy of open-homes when present.
statementOfInformationnull (AU-specific PDF link not mapped for NZ).
agencyNameOffice name from included office resource.
agencyPhone / agencyEmailOffice contact fields.
agencyWebsiteNot populated from current JSON:API slice; may be empty.
agencyAddress / agencyAddress_* / agencyAddress_rawFlattened office address (often empty if not in payload).
agencyProfileUrlnull if no profile link extracted.
agencyLogoResolved logo URL on mediaserver.realestate.co.nz.
agentsArray of agent objects (see below).
imagesAbsolute photo URLs (.crop.800x600.jpg on mediaserver).
scrapedAtISO time when the row was pushed.
originalSearchUrlNZ www search URL that started this branch.
statusCodeHTTP status of GET …/listings/{id} (e.g. 200).
apiRequestUrlExact listing detail URL (not the public url).
flattenOutputtrue when input had flattening enabled.
nzListingResponseFull JSON:API body for GET /search/v1/listings/{id} (omitted in sample).
listingFibreResponseFull fibre JSON:API body when fibre HTTP 200; null if fibre failed.
fibreStatusCodeHTTP status of the fibre request (0 if request failed before response).
fibreApiRequestUrlExact …/listing-fibre URL.
rawResponseSame as nzListingResponse (compatibility alias).
listingNested object with title, price.display, structured address, features.general { value, type, label } blocks, etc. (omitted in sample).
landSize / landSizeUnitLand area land-area and unit (SQM, m2, …) when present.
hasOntFibre: ONT present (has-ont).
currentConnectionFibre: current connection tier string or null.
standardInstallFibre: standard-install.
ontUpgradeLink / standardInstallLinkChorus / install help URLs.
fibreProductCountNumber of plans in fibreProducts.
fibreProductsArray of plan objects (id, name, speeds, priceCents, available, requiresOntUpgrade).
listerFirst element of agents (convenience).

NZ β€” each key inside agents[] / lister

KeyMeaning
agentIdAgent resource id from JSON:API.
nameDisplay name.
jobTitleEmpty if not provided by NZ payload.
phoneNumberMobile preferred, else DDI.
emailsArray of email strings.
powerProfilefalse (AU parity; NZ may not expose equivalent).
profileUrlhttps://www.realestate.co.nz/agent/{slug}/.
imageAgent photo URL on mediaserver.

NZ β€” each key inside fibreProducts[]

KeyMeaning
idJSON:API resource id for the plan.
nameRetail plan name.
upSpeedMbps / downSpeedMbpsAdvertised sync speeds.
priceCentsMonthly-style price in cents (ISP plan, not property price).
availableWhether the plan is offered for this address.
requiresOntUpgradeWhether an ONT upgrade is required.

Sample: realestate_detail (first object in data.json)

The JSON below is based on the first record of a real export. listing, withIdsResponse, and long images arrays are omitted here for size; the on-disk file contains the full nested objects. _readme_note is documentation-only and does not appear in live output.

{
"source": "realestate_detail",
"listingId": "441571884",
"title": "1 BEDROOM APARTMENT DARLING HABOUR VIEW @HAYMARKET",
"propertyType": "unit",
"price": "$900 per week",
"address": "Address available on request",
"suburb": "Sydney",
"postcode": "2000",
"state": "NSW",
"latitude": null,
"longitude": null,
"bedrooms": 1,
"bathrooms": 1,
"carSpaces": 0,
"propertyFeatures": {},
"description": "Perfect for Couples or Friends \n\nThis versatile bed can be easily split into two…",
"featured": false,
"constructionStatus": "",
"agencyListingId": "32AFEDF4-6156-4C0A-B412-877FC1A360BA",
"productDepth": "signature",
"channel": "rent",
"url_slug": "property-unit-nsw-sydney-441571884",
"isSold": false,
"isBuy": false,
"isRent": true,
"isProject": false,
"tier_signature": true,
"tier_midtier": false,
"tier_standard": false,
"tier_isClassicProject": false,
"tier_isSignatureProject": false,
"tier_isProject": false,
"isExactMatch": null,
"isSurroundingMatch": null,
"url": "https://www.realestate.com.au/property-unit-nsw-sydney-441571884",
"inspections": [],
"statementOfInformation": null,
"agencyName": "Bondi Beach International Agency",
"agencyPhone": "02 412468335",
"agencyEmail": "rosio@bbiagency.com.au",
"agencyWebsite": "",
"agencyAddress": "Shop 3, 11-21 Flinders Street, Surry Hills, NSW, 2010",
"agencyAddress_streetAddress": "Shop 3, 11-21 Flinders Street",
"agencyAddress_suburb": "Surry Hills",
"agencyAddress_state": "NSW",
"agencyAddress_postcode": "2010",
"agencyAddress_raw": {
"streetAddress": "Shop 3, 11-21 Flinders Street",
"suburb": "Surry Hills",
"state": "NSW",
"postcode": "2010"
},
"agencyProfileUrl": "https://www.realestate.com.au/agency/bondi-beach-international-agency-YMPIPK",
"agencyLogo": "https://i3.au.reastatic.net/160x30/97d210b8fb2e818b4395402385458b66ca52dbb7de4a0b5ebd7e852754042e83/logo.jpg",
"agents": [
{
"agentId": "2362406",
"name": "Rosio Flynn",
"jobTitle": "Director",
"phoneNumber": "0412468335",
"emails": ["rosio@bbiagency.com.au"],
"powerProfile": false,
"profileUrl": "https://www.realestate.com.au/agent/2362406",
"image": "https://i3.au.reastatic.net/160x160/22650177724dfe89c0e697c50c8cd6169fb42ee392f826ceb11f98c37c41f18e/main.jpg"
}
],
"images": [
"https://i3.au.reastatic.net/800x600-fit,format=webp/c3008b05521617c72ae1dc68fd5f807127821612e628bae00fdec7028c9b4c6f/image.jpg",
"https://i3.au.reastatic.net/800x600-fit,format=webp/c3cb58b454deba92246fdac094d3fbcb0b75502cdd772f581ce254680ca82d95/image.jpg"
],
"scrapedAt": "2026-04-04T22:10:04.036Z",
"originalSearchUrl": "https://www.realestate.com.au/rent/property-unit+apartment-villa-in-sydney+cbd,+nsw/list-1?maxBeds=3&source=refinement",
"statusCode": 200,
"apiRequestUrl": "https://services.realestate.com.au/services/listings/withIds?id=441571884",
"_readme_note": "Omitted here: full `listing` object, full `withIdsResponse`, and remaining `images` URLs β€” all present in live dataset when flattenOutput is true."
}

Output fields (realestate_detail) β€” field-by-field

Row identity and request metadata

  • source β€” Always "realestate_detail" for listing rows from this actor.
  • listingId β€” REA numeric listing id (string), same id used in withIds.
  • scrapedAt β€” ISO timestamp when the row was pushed to the dataset.
  • originalSearchUrl β€” The www.realestate.com.au URL from input that started this crawl branch (search/list page or direct property URL); null if not set.
  • statusCode β€” HTTP status of the withIds response (200 when OK).
  • apiRequestUrl β€” Exact withIds request URL for this row (includes id= query).

Flat property core (convenience columns)

  • title β€” Listing headline from the API (same idea as on the website card).
  • propertyType β€” REA property type string (e.g. unit, house, residential land).
  • price β€” Human-readable display price from price.display (e.g. $900 per week, Price on Application).
  • address β€” Street / unit line from address.streetAddress (may be β€œAddress available on request”).
  • suburb β€” Suburb (from address.suburb or address.locality).
  • postcode β€” Postcode (from address.postcode or address.postCode).
  • state β€” State (e.g. NSW, Vic).
  • latitude / longitude β€” Coordinates from address.location when present; else null.
  • bedrooms / bathrooms / carSpaces β€” From features.general (bedrooms, bathrooms, parkingSpaces).
  • propertyFeatures β€” Object grouping feature strings by section from propertyFeatures[] (e.g. indoorFeatures, outdoorFeatures). Empty {} when none.
  • description β€” Plain text description (HTML <br/> collapsed to newlines in the flat export).
  • featured β€” true when the card is marked featured in the API.
  • constructionStatus β€” e.g. established when provided; may be empty string if absent.
  • agencyListingId β€” Agency’s internal listing reference (string or UUID-style).
  • productDepth β€” REA product tier string for the card (e.g. standard, signature).
  • channel β€” buy, rent, or sold (from API).
  • url_slug β€” prettyUrl slug segment (used in canonical property paths).
  • url β€” Canonical property URL on www.realestate.com.au (from _links.prettyUrl.href when available).
  • inspections β€” Copy of inspectionsAndAuctions from the API (often []).
  • statementOfInformation β€” URL string for PDF / statement when statementOfInformation.href exists; else null.
  • landSize / landSizeUnit β€” Present on land listings when landSize.value exists (e.g. 80900, m2); omitted on non-land rows.

Boolean flags (flat)

  • isSold / isBuy / isRent β€” From isSoldChannel, isBuyChannel, isRentChannel.
  • isProject β€” From API isProject when present.
  • tier_signature / tier_midtier / tier_standard β€” From signature, midtier, standard booleans on the card.
  • tier_isClassicProject / tier_isSignatureProject β€” From classicProject, signatureProject.
  • tier_isProject β€” Mirrors isProject in the flat mapper.
  • isExactMatch / isSurroundingMatch β€” null in withIds output (those flags apply to search context; not returned on the detail card).

Agency (flat)

  • agencyName β€” Office name.
  • agencyPhone β€” Phone string.
  • agencyEmail β€” Email when provided.
  • agencyWebsite β€” Website URL; may be empty string if missing.
  • agencyAddress β€” Single comma-joined office address line.
  • agencyAddress_streetAddress / agencyAddress_suburb / agencyAddress_state / agencyAddress_postcode β€” Split office address parts.
  • agencyAddress_raw β€” Object with the same four parts for machine parsing.
  • agencyProfileUrl β€” Link to the agency profile on realestate.com.au.
  • agencyLogo β€” Resolved logo image URL (default size variant when multiple exist).

Agents (flat array)

  • agents β€” Array of agent objects (from listers / lister). Each element:
    • agentId β€” REA agent id.
    • name β€” Display name.
    • jobTitle β€” Role / title.
    • phoneNumber β€” Best available phone (mobile or office).
    • emails β€” Array of email strings (often one).
    • powerProfile β€” REA power profile flag.
    • profileUrl β€” Agent profile URL.
    • image β€” Photo URL (160Γ—160 transform on CDN).

Images (flat)

  • images β€” Array of absolute photo URLs (800Γ—600, webp transform). Hero / main image is prepended when mainImage exists; duplicates removed.

listing (full API card β€” nested object)

When flattenOutput is true, listing is the complete first (and only) listing object from withIds results[0] β€” same schema REA returns for a property card. Top-level keys you will typically see (names only may vary slightly by listing type):

  • prettyUrl β€” Slug path segment for the property.
  • standard / midtier / signature β€” Listing tier flags.
  • lister β€” Primary agent object (id, name, email, phones, mainPhoto, _links to profile).
  • listers β€” Array of all agents on the listing (when multiple).
  • featured β€” Featured flag.
  • _links β€” HAL-style links: prettyUrl, self (services listing URL), short, contactAgent, calculator, marketInfo, ad / tracking templates, etc. Some href values are templated ({width}, {platform}, …).
  • channel β€” buy | rent | sold.
  • description β€” Raw HTML description (<br/> etc.).
  • showAgencyLogo β€” Whether the UI shows agency branding prominently.
  • title β€” Title string.
  • features β€” Structured general counts (bedrooms, bathrooms, parkingSpaces, …) and any other feature blocks REA includes.
  • generalFeatures β€” Labelled feature entries (bedrooms, bathrooms, …) with label, type, value.
  • price β€” display and any other price subfields REA returns.
  • propertyType β€” Type string.
  • productDepth β€” Product depth (standard, signature, …).
  • calculator β€” Mortgage / rent calculator UI block (title, subtitle, brandingColors, _links.callToAction, …).
  • images β€” Array of { server, name, uri } (and optional flags like resize) β€” not the same as the flat images URLs; join server + uri for raw CDN paths.
  • mainImage β€” Primary hero image descriptor (server, uri).
  • address β€” Full address object: streetAddress, suburb, locality, postcode, postCode, state, subdivisionCode, location (latitude, longitude), showAddress, etc.
  • classicProject / signatureProject β€” Project-related flags when applicable.
  • agency β€” Full agency object: name, phoneNumber, email, website, address, brandingColors, branded, agencyId, logo (images[], links), _links (agencyProfile, …).
  • isSoldChannel / isBuyChannel / isRentChannel β€” Channel booleans.
  • agencyListingId β€” Agency listing id.
  • listingId β€” Numeric listing id (string or number in JSON).
  • propertyFeatures β€” Array of { section, label, features[] } blocks (source for flat propertyFeatures).
  • inspectionsAndAuctions β€” Inspection / auction schedule entries when present.
  • dateAvailable β€” For rent, often { date, dateDisplay } when provided.
  • landSize β€” For land, { value, unit, display, … } when present.
  • modifiedDate β€” Change metadata when REA sends it.
  • applyOnline β€” Apply-online flag when present.
  • Other occasional keys β€” REA may add fields (e.g. project links, eco data); they appear here unchanged.

withIdsResponse (full API envelope)

  • totalResultsCount β€” Number of listings in this withIds response (usually 1 for a single id).
  • results β€” Array of listing objects; for our actor typically one element, identical in content to listing when both are present.

When flattenOutput is false

Rows include source, listingId, url (request URL), statusCode, originalSearchUrl, scrapedAt, listing (or full body fallback), and withIdsResponse, without the duplicate flat competitor-style fields above.


Benefits

  • One row per listing with flat columns for quick filters plus full nested payloads (AU: withIdsResponse; NZ: nzListingResponse / listingFibreResponse).
  • Official JSON APIs for listing data (AU services; NZ platform β€” HTML only once per NZ search seed for suburb ids).
  • Pagination β€” AU via _links.next; NZ via page[offset|limit] β€” both with a hard cap on search pages (REALESTATE_MAX_SEARCH_PAGES).
  • Traceability: originalSearchUrl, apiRequestUrl, scrapedAt, country, source.

Why Choose This Actor?

Built for Australian and New Zealand residential (and related) research: realestate.com.au and realestate.co.nz, pagination, and rich listing payloads for analytics, alerts, or CRM enrichment.

Use cases:

  • Track new / changed listings for a saved search URL (AU or NZ).
  • Export agency + agent + media with coordinates when exposed.
  • Store raw JSON (withIdsResponse / nzListingResponse) for schema changes without losing fields.
  • NZ: Optional fibre / broadband plan data per listing alongside the property card.

Technical Implementation

Default (internal Impit handler β€” main.ts + internal-handler.ts):

  1. URL routing (realestate-mapper.ts, realestate-nz-mapper.ts, main.ts): AU .com.au vs NZ .co.nz hosts; shared dedupe pushedListingIds across seeds.
  2. AU (internal-handler.ts): Search chain buildSearchByUrlApiUrl β†’ extractListingIdsFromSearchJson β†’ fetchAndPushDetail (buildWithIdsApiUrl). Flat rows from buildRealestateFlatListingRow (realestate-flat-export.ts).
  3. NZ (internal-handler-nz.ts): Search chain loads HTML for suburb ids β†’ buildNzListingsSearchApiUrl β†’ ids from data[] β†’ Promise.all per listing: buildNzListingFullApiUrl + buildNzListingDetailApiUrl (fibre). Flat rows from buildNzPropertyListingFlatRow (realestate-nz-listing-flat-export.ts); fibre columns from appendNzFibreFlatFields (realestate-nz-flat-export.ts).

Optional Cheerio path (REALESTATE_USE_INTERNAL_HANDLER=0):

  1. CheerioCrawler requests (main.ts) with userData (maxItems, flattenOutput, realestateOriginalUrl, …).
  2. Search handler (routes.ts β€” REALESTATE_SEARCH): tieredResults, enqueue REALESTATE_DETAIL, _links.next, maxItems, REALESTATE_MAX_SEARCH_PAGES.
  3. Detail handler (routes.ts β€” REALESTATE_DETAIL): withIds JSON; buildRealestateFlatListingRow + withIdsResponse when flattenOutput.

Explore More Scrapers

If you found this actor useful, check out other scrapers at memo23's Apify profile.


Support


Additional Services