# realestate.co.nz Scraper - NZ Listings, Sold Prices & Agents (`sian.agency/realestate-nz-property-scraper`) Actor

Scrape realestate.co.nz, New Zealand's agency-owned property portal: houses for sale and rent, commercial, rural and business listings with agent contacts, school zones, council RV, sold prices and AVM estimates.

- **URL**: https://apify.com/sian.agency/realestate-nz-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.79 / 1,000 property searches

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## realestate.co.nz Scraper — NZ Listings, Sold Prices & Agents 🏡

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![realestate.com.au Scraper](https://img.shields.io/badge/Store-realestate.com.au%20Scraper-E4002B)](https://apify.com/sian.agency/realestate-au-property-scraper?fpr=sian) [![Domain.com.au Scraper](https://img.shields.io/badge/Store-Domain.com.au%20Scraper-47A534)](https://apify.com/sian.agency/domain-au-property-scraper?fpr=sian) [![Sold Prices Forensics](https://img.shields.io/badge/Store-Sold%20Prices%20Forensics-1AE392)](https://apify.com/sian.agency/sold-prices-forensics-scraper?fpr=sian)

#### 🎉 Sold prices, council RV and a current estimate on the same row as the listing

##### Built for NZ agencies, valuers, proptech teams and anyone tired of copying addresses by hand

### 🔎 What is the realestate.co.nz Scraper — and when should you use it?

The **realestate.co.nz Scraper** turns realestate.co.nz, the property portal New Zealand's real-estate industry owns into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** New Zealand homes for sale or to rent, returned as flat rows. Each carries the asking price exactly as the agency published it, plus a parsed number where there is one. Rows also hold the full address with coordinates and postcode, bedrooms, bathrooms, land and floor area in square metres, tenure, council rates, photos, floor plans and videos. Every listing names the licensed salesperson with their direct mobile, office line, email and profile, plus the agency behind them. The schools the property is actually zoned for and the open-home times come on the same row. Commercial, rural and businesses for sale are separate categories of the same search. A second operation returns what an address sold for, when, by which method and how long it took, alongside the council capital and land valuation and a current estimate with a confidence rating.

**Use something else when:** the property is in Australia rather than New Zealand. Use [realestate.com.au Scraper](https://apify.com/sian.agency/realestate-au-property-scraper?fpr=sian) for Australia's largest portal, a completely different operator despite the similar name. Use [Domain.com.au Scraper](https://apify.com/sian.agency/domain-au-property-scraper?fpr=sian) for Australia's second portal, useful when you want two sources on one address. Use [Sold Prices Forensics](https://apify.com/sian.agency/sold-prices-forensics-scraper?fpr=sian) for comparable sales across several countries at once. This is the agency portal, jointly owned by the New Zealand real-estate industry, so every listing on it belongs to a licensed agency. Private sellers list on Trade Me instead and those listings are not here. One other limit worth knowing: the portal stops paginating at 10,000 rows for any single place-and-filter combination, so a nationwide sweep has to be split by district, suburb or price band.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/realestate-nz-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want New Zealand property market data from realestate.co.nz using the Apify Actor `sian.agency/realestate-nz-property-scraper`.

Use it when I need: New Zealand homes for sale or to rent, returned as flat rows. Each carries the asking price exactly as the agency published it, plus a parsed number where there is one. Rows also hold the full address with coordinates and postcode, bedrooms, bathrooms, land and floor area in square metres, tenure, council rates, photos, floor plans and videos. Every listing names the licensed salesperson with their direct mobile, office line, email and profile, plus the agency behind them. The schools the property is actually zoned for and the open-home times come on the same row. Commercial, rural and businesses for sale are separate categories of the same search. A second operation returns what an address sold for, when, by which method and how long it took, alongside the council capital and land valuation and a current estimate with a confidence rating.

Don't use it when: the property is in Australia rather than New Zealand — use realestate-au-property-scraper or domain-au-property-scraper or sold-prices-forensics-scraper instead.

How to call it: give `locations` a list of the portal's place slugs — a region (`auckland`, `canterbury`, `wellington`), a district (`auckland/rodney`), or a suburb (`wellington/wellington-city/te-aro`). Leave `locations` empty to sweep the whole country. Pick a `category`: `res_sale`, `res_rent`, `com_sale`, `com_lease`, `rural_sale` or `biz_sale`. Narrow with `minPrice`, `maxPrice`, `minBedrooms`, `minBathrooms`, `minLandArea`, `minFloorArea`, `propertyTypes`, `keywords`, `openHomesOnly`, `newBuildsOnly`, `mortgageeSalesOnly` and `petFriendlyOnly`, and order with `sortBy`. To expand listings you already have links for, pass them in `listingUrls` — the row and the price per row are identical. For sale prices, council rateable values and current estimates, set `operation` to `sold` and use `soldWithin` and `soldSortBy`.

Start with this input:
{
  "operation": "search",
  "locations": [
    "auckland",
    "wellington"
  ],
  "category": "res_sale",
  "sortBy": "latest",
  "maxResults": 100
}

Ask me which New Zealand region, district or suburb, and whether they want live listings or sale prices, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Find three-bedroom homes for sale in Devonport with an open home this weekend, and tell me what the last five sales on that street went for.*
- *Pull every pet-friendly rental under 600 dollars a week in Wellington City and give me the agent's mobile for each.*
- *Compare the median sale price against the council rateable value for Bayswater over the last twelve months.*
- *List every mortgagee sale live in New Zealand right now with its price, address and listing agency.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/realestate-nz-property-scraper.md](https://apify.com/sian.agency/realestate-nz-property-scraper.md).

### 📋 Overview

**New Zealand's property market, in a spreadsheet.** realestate.co.nz is the portal the NZ real-estate industry owns and every licensed agency feeds. This Actor reads both halves of it. Live listings first: 40,884 homes for sale, 8,420 to rent, 28,391 commercial spaces for lease. Then the records behind them, covering roughly two million New Zealand addresses.

**What you get for the money:**

- ✅ **70+ fields on a real row**: measured, not promised. Price, address, coordinates, every room count, land and floor area, tenure, rates, photos, agent and agency.
- ⚡ **100 listings per request**: a suburb takes one request; a whole region takes a handful.
- 🎯 **Agent contact on every listing**: name, direct mobile, office line, email, profile and photo. This is the agency portal, so that column is full rather than half-empty.
- 💰 **$0.90 per 1,000 listings**: the same price as the cheapest credible actor in this category, for a row roughly three times deeper.
- 💎 **Sold price next to council RV next to the estimate**: the three numbers a New Zealand valuation argument turns on, on one row, with the recent sales nearby already matched to the address.
- ✨ **NEW**: school and childcare zones with an in-zone flag on every listing, and per-photo content hashes so you can tell a genuine change from a refresh.

### ✨ Features

- 🏘️ **Six live categories in one Actor**: homes for sale, homes to rent, commercial for sale, commercial for lease, rural and lifestyle, businesses for sale.
- 💰 **Sold prices and valuations**: achieved price, sale date, sale method, days to sell, full sales history, council capital / land / improvements valuation, and an estimate with a confidence rating.
- 🎓 **School zones that matter**: every listing carries the schools around it with a flag for whether the property is actually inside that school's enrolment zone, plus distance. Childcare centres come the same way.
- 👤 **Licensed agent and agency details**: mobile, office line, email, profile link, photo, current listing count — and the agency's brand, phone, email, website and logo.
- 🗺️ **Coordinates and the portal's own geography keys**: latitude, longitude, postcode, and the region / district / suburb slugs plus neighbouring suburbs, so rows join cleanly to census areas and your own maps.
- 🔨 **Auction, tender and deadline dates**: listings with no price still carry their auction date, time and venue, or the deadline the offers close.
- 🚪 **Open-home times**: every scheduled viewing, with start and end, plus the next one broken out.
- 📐 **Media that is actually usable**: full-size photo URLs, floor plans, videos, virtual walkthroughs — and a content hash per photo for change detection.
- 🎚️ **Filters the portal applies, not us**: price, bedrooms, bathrooms, land area, floor area, property type, keywords, open homes, new builds, mortgagee sales, pet-friendly rentals. A narrower search returns fewer rows and costs less.
- 🔗 **Bring your own listing URLs**: paste realestate.co.nz links or bare listing IDs and get the same row, at the same price per row.

### 🎬 Quick Start

Pick your places, pick a category, run it. The default input works with no editing — press Start and you get Auckland homes for sale, newest first. Everything else is narrowing.

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~realestate-nz-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "search", "locations": ["auckland"], "category": "res_sale", "maxResults": 100}'
```

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose your places

Type a region slug such as `auckland`, `canterbury` or `wellington`. Narrow it with a district (`auckland/rodney`) or a suburb (`wellington/wellington-city/te-aro`). Leave the list empty to sweep the whole country.

#### Step 2: Choose what you are looking at

Property Search for live listings, with a category. Sold Prices & Valuations for what places actually sold for, with a time window.

#### Step 3: Run it and take the data

Results land in the dataset. Export as JSON, CSV or Excel, or read them straight from the API.

**That's it! In under a minute, you'll have:**

- Every matching listing with its price, address, coordinates and photos
- The licensed salesperson and agency behind each one, with contact details
- A run report in your key-value store showing exactly what you paid for

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` for live listings, `sold` for sale prices and valuations. Default `search`. |
| `locations` | array | No | NZ region, district or suburb slugs. Empty means the whole country. |
| `category` | string | No | `res_sale`, `res_rent`, `com_sale`, `com_lease`, `rural_sale`, `biz_sale`. |
| `propertyTypes` | array | No | Narrow by type slug, e.g. `house`, `apartment`, `townhouse`, `section`. |
| `listingUrls` | array | No | Specific realestate.co.nz listing URLs or bare listing IDs. |
| `minPrice` / `maxPrice` | integer | No | NZD. Weekly for rentals, annual for commercial leases. |
| `minBedrooms` / `minBathrooms` | integer | No | Minimum room counts. |
| `minLandArea` / `minFloorArea` | integer | No | Square metres. Hectares are converted for you. |
| `keywords` | string | No | Words the portal matches in the listing text, comma-separated. |
| `openHomesOnly` | boolean | No | Only listings with an open home scheduled. |
| `newBuildsOnly` | boolean | No | Only new construction. |
| `mortgageeSalesOnly` | boolean | No | Only mortgagee sales. |
| `petFriendlyOnly` | boolean | No | Only rentals that accept pets. |
| `sortBy` | string | No | `latest`, `oldest`, `lowest-price`, `highest-price`, `featured`. |
| `soldWithin` | string | No | `3-months`, `6-months`, `12-months`, `24-months`, `any`. |
| `soldSortBy` | string | No | `latest-sale`, `oldest-sale`, `highest-sold-price`, `lowest-sold-price`. |
| `maxResults` | integer | No | Row budget for the whole run. Default 100. |

**Example — homes for sale in two regions:**

```json
{
  "operation": "search",
  "locations": ["auckland", "wellington"],
  "category": "res_sale",
  "sortBy": "latest",
  "maxResults": 500
}
```

**Example — what sold in a suburb this year:**

```json
{
  "operation": "sold",
  "locations": ["auckland/north-shore-city/devonport"],
  "soldWithin": "12-months",
  "soldSortBy": "latest-sale",
  "maxResults": 200
}
```

**Example — specific listings you already have links for:**

```json
{
  "operation": "search",
  "listingUrls": [
    "https://www.realestate.co.nz/43121617/residential/sale/8-kaipara-crescent-helensville",
    "43120064"
  ]
}
```

### 📤 Output

Results are saved to the Apify dataset. A live listing returns **around 70 populated fields**; a property record returns around 50.

| Field | Type | Description |
|-------|------|-------------|
| `fullAddress` | string | Street, suburb, district and region |
| `priceDisplay` | string | Exactly as the agency published it, including "Auction" and "Deadline Sale" |
| `priceValue` | integer | The parsed number, or empty when the listing carries none |
| `priceMethod` | string | Auction, Tender, Deadline Sale, Enquiries Over, Negotiation… |
| `bedrooms` / `bathrooms` | integer | Room counts, with ensuite and WC splits alongside |
| `landAreaSqm` / `floorAreaSqm` | number | Square metres, hectares already converted |
| `titleType` | string | Freehold, Leasehold, Cross Lease, Unit Title, Company |
| `latitude` / `longitude` | number | Coordinates |
| `agentEmail` / `agentMobile` | string | Direct contact for the licensed salesperson |
| `officeName` / `officePhone` | string | The agency behind the listing |
| `schoolsInZone` | array | Schools this property is actually zoned for |
| `openHomes` | array | Every scheduled viewing, start and end |
| `soldPrice` / `saleDate` / `saleMethod` | — | What it sold for, when, and how |
| `councilCapitalValue` / `councilLandValue` | integer | The council rateable valuation |
| `estimateMid` / `estimateConfidence` | integer | Current estimate and how confident it is |

**Example (trimmed):**

```json
{
  "listingId": 43120064,
  "propertyUrl": "https://www.realestate.co.nz/43120064/residential/sale/8-ariho-terrace-devonport",
  "propertyTitle": "A cosy perch on the peninsula",
  "fullAddress": "8 Ariho Terrace, Devonport, North Shore City, Auckland",
  "suburb": "Devonport",
  "region": "Auckland",
  "postcode": "0624",
  "latitude": -36.82167908,
  "longitude": 174.79806209,
  "priceDisplay": "Deadline Sale",
  "priceMethod": "Deadline Sale",
  "deadlineDate": "2026-09-24T16:00:00+12:00",
  "bedrooms": 2,
  "bathrooms": 1,
  "floorAreaSqm": 60,
  "titleType": "Cross Lease",
  "propertyType": "House",
  "schoolsInZone": ["Devonport School", "Belmont Intermediate", "Takapuna Grammar School"],
  "nextOpenHome": "2026-09-05T11:00:00+12:00",
  "agentName": "Natasha Pretorius",
  "agentEmail": "natasha.pretorius@bayleys.co.nz",
  "agentMobile": "021 204 8384",
  "officeName": "Bayleys Real Estate Ltd (Licensed: REAA 2008) - Devonport",
  "officePhone": "09 489 1999",
  "totalImages": 27,
  "daysOnMarket": 3
}
```

### 💼 Use Cases & Examples

#### 1. Agency inventory and competitor watch

**Sales managers tracking who is listing what, week by week.**

**Input:** your region, `sortBy: latest`, on a daily schedule
**Output:** every listing that appeared since the last run, with the agency and named salesperson
**Use:** a live picture of market share in your patch, and a list of the agents winning the listings you wanted

#### 2. Comparable sales and valuation work

**Valuers and buyer's agents building a comps sheet for a suburb.**

**Input:** `operation: sold`, one suburb, `soldWithin: 12-months`
**Output:** achieved price, sale date, method, days to sell, council RV, current estimate, and nearby recent sales already matched to each address
**Use:** a defensible comparables table in one run instead of an afternoon of tab-switching

#### 3. Buyer lead generation for mortgage and legal firms

**Brokers and conveyancers who want the buyers before the offer goes in.**

**Input:** `openHomesOnly: true` across the suburbs you serve
**Output:** the listings your prospects will walk through this weekend, plus school zones and the agent to approach
**Use:** turn open-home traffic into a referral pipeline

#### 4. Rental portfolio and yield analysis

**Property managers and investors pricing a portfolio.**

**Input:** `category: res_rent` for a suburb, then `operation: sold` for the same suburb
**Output:** weekly rent, bond, maximum tenants, furnishing, pets policy and availability date on one side; sale prices and council valuations on the other
**Use:** gross yield per suburb from two runs

#### 5. Distressed and off-market sourcing

**Buyers who want the mortgagee sales the day they appear.**

**Input:** `mortgageeSalesOnly: true`, nationwide, on a schedule
**Output:** the whole mortgagee set — 64 live across New Zealand at the time of writing — with price, address and agent
**Use:** be first, in a category that moves within days

#### 6. Commercial and rural acquisition

**Industrial tenants, farm buyers and commercial agents.**

**Input:** `category: com_lease` with `minFloorArea`, or `category: rural_sale` with `minLandArea`
**Output:** 28,391 commercial spaces for lease filtered by size, or rural blocks split into grazing, dairy, cropping, forestry, horticulture and viticulture
**Use:** a shortlist filtered on the metric that actually matters for the asset class

#### 7. Feeding a property portal or AI assistant

**Proptech teams building on top of NZ data.**

**Input:** whole regions, scheduled, with `maxResults` set high
**Output:** rows carrying coordinates, the portal's own geography keys and per-photo content hashes
**Use:** incremental syncs where "did this listing change?" is a one-line comparison, not a re-scrape

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/realestate-nz-property-scraper').call({
  operation: 'search',
  locations: ['auckland/north-shore-city/devonport'],
  category: 'res_sale',
  maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/realestate-nz-property-scraper').call(
    run_input={
        'operation': 'sold',
        'locations': ['auckland/north-shore-city/devonport'],
        'soldWithin': '12-months',
        'maxResults': 200,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['fullAddress'], item.get('soldPrice'), item.get('councilCapitalValue'))
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~realestate-nz-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "search", "locations": ["wellington"], "category": "res_rent", "petFriendlyOnly": true}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: schedule it daily, or fire on a webhook from your CRM
2. **HTTP Request**: call the Actor API with your places and filters
3. **Process**: handle the JSON rows — dedupe on `listingId`, diff on `imageHashes`
4. **Action**: write to a sheet, push new listings to Slack, or create CRM records from the agent contacts

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 rows** per run — every field, same quality, nothing held back
- No credit card required
- Enough to check the data against a suburb you know before you commit

#### PAID Tier (Production Ready)

- **Unlimited** rows per run
- 100 listings per request, so a region is a handful of requests
- Pay per row returned: a place that matched nothing, and any input we could not read, cost you nothing

💰 **$0.90 per 1,000 listings** — level with the cheapest credible actor in this category, for a row carrying roughly three times the fields. Sold prices and valuations are $1.20 per 1,000, and a run start is $0.005.

🔗 [View current pricing](https://apify.com/sian.agency/realestate-nz-property-scraper?fpr=sian)

### ❓ Frequently Asked Questions

**Q: How is this different from a Trade Me Property scraper?**
A: Different inventory, not the same listings twice. Trade Me is a general marketplace where private sellers list alongside agencies. realestate.co.nz is the agency portal, owned by the New Zealand real-estate industry, so what you get here is licensed-agency inventory with the salesperson and their agency attached to every row. Most serious NZ market work uses both.

**Q: Do I get the sold price of a house?**
A: Yes — that is the Sold Prices & Valuations operation. It returns the achieved price, the date, the sale method, how many days it took to sell and the whole sale history of the address. Alongside it you get the council capital, land and improvements valuation, and a current estimate with a confidence rating.

**Q: Can I get more than 10,000 rows?**
A: Yes, but not from a single place-and-filter combination. The portal stops paginating at 10,000 rows per query, so a nationwide sweep has to be split — by district, by suburb, or by price band. The run log tells you when it has hit that wall.

**Q: Are the agent's email and phone number really included?**
A: Yes, on the search row itself, for every listing with an agent attached. Name, direct mobile, office line, email, profile link, photo, and how many listings that person currently has. The agency comes with it. No second request, no extra charge.

**Q: Does it handle auctions and price-by-negotiation?**
A: Yes. Roughly a third of NZ sale listings carry no number. Every row keeps the exact wording the agency published, adds a machine-readable price method, and leaves the parsed number empty rather than zero — so an average never quietly includes a free house. Auction listings also carry the date, time and venue.

**Q: How current is the data?**
A: It is read live at the moment your run executes. Listings carry their published date, and each row includes how many days it has been on the market.

**Q: Which parts of New Zealand are covered?**
A: All of it — 21 regions, 85 districts and 1,899 suburbs, from Northland to Southland, including Coromandel, Wairarapa, Nelson & Bays, Central Otago / Lakes District and the West Coast.

**Q: What output formats are available?**
A: JSON, CSV and Excel, exported straight from the Apify dataset, or read over the API.

### 🐛 Troubleshooting

**"No listings matched in <place>"**

- Widen the price, bedroom or area filters — several narrow filters together cut hard
- Pick a larger place: a district instead of a suburb, or a region instead of a district
- Check the category. Commercial for lease and homes for sale are different sets

**"<place> matches several places"**

- A suburb name like Hillcrest exists in more than one district. The message prints the full paths — copy one of them in

**Fewer rows than `maxResults`**

- One place-and-filter combination stops at 10,000 rows, and the log says so when it happens. Split the run by district, suburb or price band
- On the FREE tier every run is capped at 25 rows

**Unknown property type**

- Type slugs differ per category: a house for sale is `house`, a warehouse for lease is `warehouse`. The error message prints the valid list for the category you chose

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

realestate.co.nz is a trademark of Realestate.co.nz Limited. This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Realestate.co.nz Limited.

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/realestate-nz-property-scraper/changelog.md

# Actor input Schema

## `operation` (type: `string`):

Pick one per run. Property Search reads live listings — for sale, to rent, commercial, rural and business — and is where the volume is. Sold Prices & Valuations reads the portal's property records instead: what a place actually sold for, its council rateable value and its current estimate, whether or not it is on the market today.

## `locations` (type: `array`):

Region, district or suburb slugs. A region on its own: auckland, canterbury, wellington, waikato, otago, bay-of-plenty, northland, southland. A district: auckland/rodney, canterbury/selwyn. A suburb: wellington/wellington-city/te-aro, auckland/north-shore-city/devonport. One search runs per place, so three places return roughly three times the rows. The full list of 21 regions, 85 districts and 1,899 suburbs is the portal's own; an unrecognised place is reported by name and skipped, never…

## `category` (type: `string`):

Which part of the portal to search. Homes for sale is the largest, at 40,884 live listings nationwide; commercial for lease is second at 28,391, and homes to rent has 8,420. Only used by Property Search — Sold Prices & Valuations reads property records, which are not split by category.

## `propertyTypes` (type: `array`):

Narrow to particular property types, by slug. Homes for sale: house, apartment, townhouse, unit, studio, section, lifestyle-property, lifestyle-section, home-and-income, retirement-living, multiple-properties, carpark, boat-shed. Homes to rent uses the same names. Commercial: office-building, retail-property, industrial-buildings, warehouse, showroom, commercial-land, industrial-land, hotel-motel-leisure, investment-opportunities. Rural: grazing, dairy, cropping, forestry, horticulture,…

## `listingUrls` (type: `array`):

Already know which listings you want? Paste realestate.co.nz listing URLs here — https://www.realestate.co.nz/43121617/residential/sale/8-kaipara-crescent-helensville — or bare listing IDs like 43121617, and Property Search reads exactly those instead of running a place search. Same row, same fields, same price per row as a search result: the portal returns identical data either way, so there is no premium for choosing the listings yourself. Ignored by Sold Prices & Valuations.

## `minPrice` (type: `integer`):

Only listings at or above this price. NZD. For homes to rent this is the weekly rent, so 500 means $500 a week. Leave empty for no lower bound. Listings marked Auction, Tender, Deadline Sale or Price by Negotiation carry no number, and the portal excludes them from a price-filtered search.

## `maxPrice` (type: `integer`):

Only listings at or below this price. NZD, and weekly for rentals. Leave empty for no upper bound.

## `minBedrooms` (type: `integer`):

Only listings with at least this many bedrooms. Leave empty for any. Sections, land and most commercial listings have no bedroom count and drop out when this is set.

## `minBathrooms` (type: `integer`):

Only listings with at least this many bathrooms. Leave empty for any.

## `minLandArea` (type: `integer`):

Only listings with at least this much land, in square metres. 5000 finds lifestyle blocks; 809 is the classic quarter-acre. Rural listings are published in hectares and are converted before the comparison, so one number works across both.

## `minFloorArea` (type: `integer`):

Only listings with at least this much building floor area, in square metres. The main filter for commercial space, where land area is often irrelevant.

## `keywords` (type: `string`):

Free-text words the portal matches against the listing text: sea views, north facing, subdividable, motivated vendor, granny flat. Separate several with commas. Narrows hard — pool alone cuts 40,884 homes for sale to 3,696.

## `openHomesOnly` (type: `boolean`):

Only listings with an open home scheduled. 4,000 homes for sale have one at any time. The open-home start and end times come back on every row regardless.

## `newBuildsOnly` (type: `boolean`):

Only listings the agency has flagged as new construction — 6,647 of the homes currently for sale.

## `mortgageeSalesOnly` (type: `boolean`):

Only mortgagee sales, where the lender is selling. A small, fast-moving set — 64 nationwide at the time of writing — and the one filter distressed-asset buyers ask for first.

## `petFriendlyOnly` (type: `boolean`):

Only rentals that accept pets. Applies to Homes to rent; on a sale category the portal ignores it and the run says so rather than pretending it filtered.

## `sortBy` (type: `string`):

Newest first is what a monitoring job wants: run it on a schedule and the new listings are at the top of every run. Used by Property Search only.

## `soldWithin` (type: `string`):

How far back Sold Prices & Valuations looks. Recent sales are the ones comparable-sales work needs; Any time returns every property record in the area, including ones that have never sold, whose council valuation and estimate are still there. Ignored by Property Search.

## `soldSortBy` (type: `string`):

Ordering for Sold Prices & Valuations. Most recent first tracks a market week by week; highest first surfaces the top of a suburb. Ignored by Property Search.

## `maxResults` (type: `integer`):

Stop after this many rows for the whole run, not per place — a three-place run capped at 100 returns 100 rows, not 300. Rows arrive 100 per request, so the run stops at the first request that crosses your limit. One place-and-filter combination can return at most 10,000 rows because the portal will not paginate past that; to go deeper, split the run by district or suburb, or by price band. The run says so in the log rather than truncating quietly.

## Actor input object example

```json
{
  "operation": "search",
  "locations": [
    "auckland/north-shore-city/devonport"
  ],
  "category": "res_sale",
  "propertyTypes": [
    "house",
    "townhouse"
  ],
  "listingUrls": [],
  "keywords": "sea views",
  "openHomesOnly": false,
  "newBuildsOnly": false,
  "mortgageeSalesOnly": false,
  "petFriendlyOnly": false,
  "sortBy": "latest",
  "soldWithin": "12-months",
  "soldSortBy": "latest-sale",
  "maxResults": 100
}
```

# Actor output Schema

## `realestateCoNzListings` (type: `string`):

Every listing this run returned.

## `scrapingSummary` (type: `string`):

HTML summary showing successful and failed results with key metrics

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "operation": "search",
    "locations": [
        "auckland",
        "wellington"
    ],
    "category": "res_sale",
    "propertyTypes": [],
    "listingUrls": [],
    "openHomesOnly": false,
    "newBuildsOnly": false,
    "mortgageeSalesOnly": false,
    "petFriendlyOnly": false,
    "sortBy": "latest",
    "soldWithin": "12-months",
    "soldSortBy": "latest-sale",
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/realestate-nz-property-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "operation": "search",
    "locations": [
        "auckland",
        "wellington",
    ],
    "category": "res_sale",
    "propertyTypes": [],
    "listingUrls": [],
    "openHomesOnly": False,
    "newBuildsOnly": False,
    "mortgageeSalesOnly": False,
    "petFriendlyOnly": False,
    "sortBy": "latest",
    "soldWithin": "12-months",
    "soldSortBy": "latest-sale",
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/realestate-nz-property-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "operation": "search",
  "locations": [
    "auckland",
    "wellington"
  ],
  "category": "res_sale",
  "propertyTypes": [],
  "listingUrls": [],
  "openHomesOnly": false,
  "newBuildsOnly": false,
  "mortgageeSalesOnly": false,
  "petFriendlyOnly": false,
  "sortBy": "latest",
  "soldWithin": "12-months",
  "soldSortBy": "latest-sale",
  "maxResults": 100
}' |
apify call sian.agency/realestate-nz-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/realestate-nz-property-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/9m01KyqBP0oOaTbAT/builds/QEYHyGJyLd85XdgYH/openapi.json
