Homes.co.nz $1๐ฐ URL | Search | Property Scraper
Pricing
from $1.00 / 1,000 results
Homes.co.nz $1๐ฐ URL | Search | Property Scraper
From $1/1K. Scrape Homes.co.nz listings via search or URL. Supports multiple locations or links per run with forward pagination. Extract enriched data, including property details, agents, branch info, valuations, media, open homes, and filters for status, price, beds, and baths.
Pricing
from $1.00 / 1,000 results
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
14
Total users
7
Monthly active users
2 days ago
Last modified
Categories
Share
Homes.co.nz Scraper
Collect rich residential listing data from homes.co.nz using structured site data.
What it does
- Supports
searchmode from plain location names such asWellington. - Supports
urlmode for detail URLs and map URLs. - Accepts multiple locations or multiple URLs in one run.
- Advances forward across structured result pages without relying on DOM pagination.
- Pulls structured listing data directly from the site's underlying data sources.
- Enriches each listing with property card data, agent and branch details, title metadata, valuations, media, and open home schedules.
- Applies structured filters for listing status, bedrooms, bathrooms, and price range.
- Supports output sorting by publication time or numeric price when available.
Why this actor is different
The actor is structured-data first:
- Detail pages are resolved from the page's server-rendered state and then enriched with listing data.
- Map pages are resolved from the page's server-rendered state and then expanded into individual listings.
- Property enrichment adds valuation, title, branch, and agent data.
That keeps extraction faster and more stable than page-structure parsing.
Input
mode:searchorurllocations: one or more location names for search modeurls: one or more Homes detail or map URLs for URL modelistingStatus:for_sale,for_rent,just_sold, oroff_marketminBedrooms,minBathrooms,minPrice,maxPrice: structured query filterssortBy: default ordering, newest, oldest, highest price, or lowest pricemaxListings: maximum number of listings to output (default 20; the sole soft cap on a run โ 0 = unlimited)maxPages: output pages to emit per search target. Leave empty (0) to walk every result page โ bounded only bymaxListingsand the site's own candidate ceiling. Set a number only for an explicit page cap.pageSize: listings to emit per output pageresumeFromRunId: optional. Paste a previous run ID or dataset ID to continue a large walk-all pull โ listings already saved by that run are loaded before scraping starts and skipped, so this run only appends new listings. Independent ofincrementalModebelow.fetchPropertyCards: whether to include extra property enrichmentincludeRawApiResponses: include raw structured payloads in output for debugging
Resume & recurring updates
resumeFromRunId(see Input above) continues one interrupted crawl.incrementalMode(defaultfalse) is for recurring/scheduled monitoring of the same search or URLs: the actor remembers the previous run itself (a key-value baseline keyed on the tracked search, not a run ID you paste) and tags each listing with:changeType:NEW,UPDATED,UNCHANGED,REAPPEARED, orEXPIREDchangedFields: which top-level fields differ from the previous run (empty for NEW/UNCHANGED/REAPPEARED/EXPIRED)firstSeenAt/lastSeenAt: UTC timestamps for this state key
stateKey(optional): override the auto-derived tracked-search identity. Auto-derivation hashesmode+locations/urls+listingStatus/minBedrooms/minBathrooms/minPrice/maxPrice+fetchPropertyCards(toggling this changes the comparable field set, so it must start a new baseline). It deliberately excludesmaxListings,maxPages,pageSize,sortBy(output caps/ordering, not scope), proxy/debug/notification fields, and the resume/incremental controls themselves.emitUnchanged(defaultfalse): when off, a listing identical to the last run is not pushed again โ a recurring run only bills for what changed. Turning it on returns (and bills) a row for every unchanged listing too.emitExpired(defaultfalse): when on, and only after a run completes a full pass of the tracked search (a capped/partial/resumed run never does this), a listing that dropped out since the last run is pushed once more withchangeType: EXPIRED. This bills an extra row per dropped listing.- The identity key across runs is the same listing id the in-run dedup set already uses (
listingId, falling back toidโ same underlying value). - Combining
incrementalModewithresumeFromRunIdis only supported for the first incremental run for a given state key (bootstraps the resumed ids as known-present placeholders); once a real incremental baseline exists, combining the two fails fast rather than guessing. - A field transition where either side is missing/null is never treated as a change โ only a genuine
value โ different valuetransition counts. This also protects against a failed detail fetch: it never enters the tracked baseline (no falseUPDATED/billing on a transient error), and a leaner-but-successful fetch that happens to omit a field carries the prior value forward instead of looking like a change.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape โ the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each record โ not the full JSON. Each item becomes one entry with a title (the listing's name / address) and its key fields flattened to plain text (price, beds/baths, agent, URL, โฆ). Nested objects are collapsed to their main value (e.g. an address object โ its full-address text) and long lists are trimmed to the first few names. The complete, full-fidelity record always stays in the Apify dataset โ the connector copy is a readable digest for browsing in your app.
- Notion โ one page per item (title + a summary body), created under the page you set in
notionParentPageUrl. - Linear / Airtable / other โ one record/issue per item with the same title + fields.
How to enable:
- Authorize a connector once under Apify โ Settings โ Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip โ the export only runs when a connector is selected.
Output highlights
Each item contains the standard listing fields plus richer structured sections such as:
openHomesimagesmediaagentsbranchpropertyDetailsvaluationsestimatestitleRecordsourceEndpointsseedContext
In incrementalMode, each item also carries changeType, changedFields, firstSeenAt, and lastSeenAt โ see Resume & recurring updates above.
Notes
- This actor is tuned for structured site data first.
- If a Homes URL changes shape, the fallback is still the page's embedded state rather than page selectors.