# Trade Me Property Scraper - NZ Listings, Rentals & Agents (`sian.agency/trademe-property-scraper`) Actor

Scrape trademe.co.nz property: houses for sale, rentals, lifestyle, rural and commercial listings across New Zealand, with agent contacts and rateable values.

- **URL**: https://apify.com/sian.agency/trademe-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 $2.64 / 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

## Trade Me Property Scraper — NZ Listings, Rentals & Agent Data 🇳🇿

[![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) [![Rightmove Property Scraper](https://img.shields.io/badge/Store-Rightmove%20Property%20Scraper-00DEB6)](https://apify.com/sian.agency/rightmove-property-scraper?fpr=sian) [![Domain Agent Scraper](https://img.shields.io/badge/Store-Domain%20Agent%20Scraper-1AE392)](https://apify.com/sian.agency/domain-au-agent-scraper?fpr=sian)

#### 🇳🇿 Nine Trade Me property sections in one dropdown, 500 listings a request, no page ceiling

##### Houses for sale, rentals, lifestyle blocks, rural, commercial and 10,672 licensed agents, as clean rows

Trade Me carries the largest property audience in New Zealand, and it is the only major NZ portal where an owner can list without an agent. This scraper covers the available listing sections. Ask for houses for sale and you get price, address, bedrooms, bathrooms, floor and land area in m², coordinates, the council rateable value where the listing shows one, and the agency's phone. Ask for rentals and the same rows arrive priced per week, with the availability date, the maximum tenants and whether pets are accepted.

Type a place the way you would on the site — Auckland, Queenstown-Lakes, Ponsonby, Mount Maunganui — and it resolves against Trade Me's own place index before the search runs. There is no location id to look up and no login to hold. Test it with 25 listings free.

### 🔎 What is the Trade Me Property Scraper — and when should you use it?

The **Trade Me Property Scraper** turns every live listing in the nine property sections of trademe.co.nz and every licensed agent in its directory 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:** price, address, bedrooms, bathrooms, land and floor area, coordinates, rateable value and the listing agency's phone on any New Zealand property. The Agent Directory returns 10,672 licensed agents with office and mobile numbers, agency and their live and sold counts. Switch on the detail option and each row also carries the full written description, every full-size photo, the view count, open-home times and the recent nearby sale prices Trade Me prints beside the listing.

**Use something else when:** you need a property market outside New Zealand. Use [realestate.com.au Scraper](https://apify.com/sian.agency/realestate-au-property-scraper?fpr=sian) for Australian homes to buy and rent, with the sold and auction archive behind them. Use [Rightmove Property Scraper](https://apify.com/sian.agency/rightmove-property-scraper?fpr=sian) for UK homes for sale and to let, with the sold-price history sitting behind each address. Use [Domain Agent Scraper](https://apify.com/sian.agency/domain-au-agent-scraper?fpr=sian) for Australian agents and agencies, the across-the-Tasman equivalent of the Agent Directory here. This actor reads what trademe.co.nz publishes to the public. Trade Me's sold-price archive sits behind a member login, so what comes back instead is the recent nearby sales and the area average printed beside a live listing. Motors, jobs and the general marketplace are out of scope, and so are the New Zealand homes that only ever appear on realestate.co.nz or OneRoof.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/trademe-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 listings, rentals and real-estate agent contacts from Trade Me using the Apify Actor `sian.agency/trademe-property-scraper`.

Use it when I need: price, address, bedrooms, bathrooms, land and floor area, coordinates, rateable value and the listing agency's phone on any New Zealand property. The Agent Directory returns 10,672 licensed agents with office and mobile numbers, agency and their live and sold counts. Switch on the detail option and each row also carries the full written description, every full-size photo, the view count, open-home times and the recent nearby sale prices Trade Me prints beside the listing.

Don't use it when: you need a property market outside New Zealand — use realestate-au-property-scraper or rightmove-property-scraper or domain-au-agent-scraper instead.

How to call it: put a place in `location` — a region such as Auckland, a district such as Queenstown-Lakes, or a suburb such as Ponsonby — and pick an `operation`. `search` returns live listings, `detail` expands trademe.co.nz addresses you already hold via `listingUrls`, and `agents` returns the licensed agent directory. On a search, `listingType` chooses the section: `residential`, `rental`, `lifestyle`, `rural`, `newhomes`, `commercialsale`, `commerciallease`, `retirement` or `openhomes`. Narrow with `propertyType`, `priceMin` and `priceMax`, `bedroomsMin` and `bedroomsMax`, `bathroomsMin`, `floorAreaMinSqm`, `landAreaMinSqm`, `keywords` and `listedSince`, then order the result with `sort`. On the rental section the price fields mean dollars per week and `petsAllowed` keeps only tenancies that take pets. `includeDetails` adds the description, the full photo set and the nearby sale prices to every row for an extra charge.

Start with this input:
{
  "operation": "search",
  "listingType": "residential",
  "location": "Auckland",
  "maxResults": 100
}

Ask me which place in New Zealand to cover, and whether they want houses for sale, rentals or the agent directory, then run the Actor and summarise the results as a table.
```

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

- *Pull every house listed in Christchurch in the last 7 days with its price, land area and the listing agency's phone number.*
- *Give me Wellington rentals under 700 dollars a week that accept pets, with the availability date and the maximum tenants on each.*
- *List the licensed real-estate agents in Canterbury with their mobile numbers and how many properties each one has sold.*

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

### 📋 Overview

**Pick a section, type a place, press Run** — this Trade Me scraper turns a New Zealand property search into a spreadsheet, usually in under a minute.

**Why professionals choose this Trade Me property scraper:**

- 🏘️ **Nine sections from one dropdown**: houses for sale (~44,000 live), rentals (~12,000), lifestyle blocks (~5,200), rural (~940), new homes (~8,300), commercial for sale (~3,800), commercial for lease (~29,000), retirement villages (~380) and this week's open homes (~4,000)
- ⚡ **No page ceiling**: 500 listings per request, and a search runs as deep as the section goes — the whole national for-sale index is one run rather than a job split suburb by suburb
- 🙋 **Private sellers included and flagged**: owners can list on Trade Me without an agent, and `isPrivateSeller` marks those rows so you can keep them or drop them
- 👤 **10,672 licensed NZ agents**: office phone, mobile, agency, profile photo and their live and sold counts, as an operation of its own
- 🗺️ **Place names, not ids**: a region, a district or a suburb, matched against Trade Me's own place index
- 💰 **From $3.00 per 1,000 listings**: pay per row delivered, never for a failed one
- 🏛️ **Rateable value beside the asking price**: the council RV on every listing that publishes one
- 🔓 **Nothing to configure**: no proxy picker and no third-party key. Type a place and press Run

### ✨ Features

- 🔍 **Property Search**: every live listing in a section, filtered by place, price, bedrooms, bathrooms, floor area and land area
- 📄 **Listing Detail**: the full written description, every full-size photo, the view count, open-home times and the named agents on the listing
- 👤 **Agent Directory**: licensed New Zealand agents with office and mobile numbers, agency, profile photo and their live and sold counts
- 🏘️ **Nearby recent sales**: the comparable sale prices and the area average that Trade Me prints beside a live listing
- 🔑 **Rentals treated as a first-class section**: rent per week, availability date, maximum tenants and a pets filter
- 📍 **Coordinates on every row**: latitude and longitude, so results drop straight onto a map
- 🗓️ **Listed-within window**: return only what appeared in the last day, three days, week, fortnight or month
- 📸 **Full photo sets**: the thumbnail, every full-size photo URL and a count, plus flags for video and 3D tours
- 🔗 **Paste-a-listing mode**: hand it trademe.co.nz addresses you already have and get the expanded record back
- 📊 **Export anywhere**: JSON, CSV, Excel, or straight into your own code via the API

### 🎬 Quick Start

Choose an operation and name a place in New Zealand. There is no account to create and no proxy to configure, so the first rows arrive within seconds of pressing Run.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~trademe-property-scraper/runs?token=[YOUR_TOKEN] \
-d '{"operation": "search", "listingType": "residential", "location": "Auckland"}'
```

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose what you want back

Property Search returns live listings. Listing Detail expands trademe.co.nz addresses you already hold. Agent Directory returns licensed agents with their contact numbers.

#### Step 2: Name the section and the place

Pick a section — houses for sale, rentals, lifestyle blocks, rural, new homes, commercial, retirement or open homes. Then type a region, a district or a suburb. Add a price band, a bedroom floor or a keyword if you want one.

#### Step 3: Press Run

The first rows land in seconds. Download them as CSV, JSON or Excel, or pull them from the API.

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

- Every matching listing with price, address, bedrooms, bathrooms, land and floor area, and coordinates
- The listing agency, its phone number and the agents named on each property
- A run report telling you what you got and exactly what it cost

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| operation | string | No | `search` (live listings), `detail` (expand listing URLs) or `agents` (agent directory) |
| listingType | string | No | Section to search: `residential`, `rental`, `lifestyle`, `rural`, `newhomes`, `commercialsale`, `commerciallease`, `retirement`, `openhomes` |
| location | string | No | A place in New Zealand: region, district or suburb. Empty searches the whole country |
| propertyType | string | No | `any`, `House`, `Apartment`, `Townhouse`, `Unit`, `Dwelling`, `Section`, `BareLand` |
| priceMin / priceMax | integer | No | Price band in NZD, or dollars per week on the rental section. 0 means no bound |
| bedroomsMin / bedroomsMax | integer | No | Bedroom band, 0 to 10. 0 means no bound |
| bathroomsMin | integer | No | Fewest bathrooms, 0 to 10 |
| floorAreaMinSqm | integer | No | Smallest building floor area in m² |
| landAreaMinSqm | integer | No | Smallest section size in m² — 600 for a suburban section, 10000 for a hectare |
| keywords | string | No | Free text against the listing title and description: villa, do-up, north facing, subdividable |
| listedSince | string | No | `any`, `1`, `3`, `7`, `14` or `30` days |
| openHomesOnly | boolean | No | Keep only listings with an open home scheduled |
| includeAdjacentSuburbs | boolean | No | Widen a suburb search to the suburbs next to it |
| petsAllowed | boolean | No | Rentals only: keep tenancies that accept pets |
| sort | string | No | `newest`, `featured`, `closingSoonest`, `priceAsc`, `priceDesc`, `earliestOpenHome` |
| maxResults | integer | No | Stop after this many rows, 1 to 50000 (default 100) |
| includeDetails | boolean | No | Add the description, full photo set, view count, open homes and nearby sale prices to each row |
| listingUrls | array | No | trademe.co.nz listing addresses for the `detail` operation |

**Example — three-bedroom houses for sale in Ponsonby:**

```json
{
  "operation": "search",
  "listingType": "residential",
  "location": "Ponsonby",
  "propertyType": "House",
  "bedroomsMin": 3,
  "priceMax": 2500000,
  "sort": "newest",
  "maxResults": 500
}
```

**Example — pet-friendly rentals in Wellington under $700 a week:**

```json
{
  "operation": "search",
  "listingType": "rental",
  "location": "Wellington",
  "priceMax": 700,
  "petsAllowed": true,
  "maxResults": 1000
}
```

**Example — licensed agents in Canterbury:**

```json
{
  "operation": "agents",
  "location": "Canterbury",
  "maxResults": 500
}
```

**Example — expand listings you already have:**

```json
{
  "operation": "detail",
  "listingUrls": [
    "https://www.trademe.co.nz/a/listing/6119038125"
  ]
}
```

### 📤 Output

Results are saved to the Apify dataset with **55 fields** including:

| Field | Type | Description |
|-------|------|-------------|
| listingId | string | Trade Me listing number |
| listingUrl | string | Link back to the listing on trademe.co.nz |
| listingSection | string | Which section the row came from |
| propertyTitle | string | Listing headline as Trade Me publishes it |
| priceDisplay | string | The price exactly as shown, including "Auction on 6 Oct" and "Price by negotiation" |
| priceNzd | number | Asking price in NZD, where the listing carries a number |
| rentPerWeekNzd | number | Rent per week on rental listings |
| saleMethod | string | Auction, tender, negotiation or a fixed price |
| rateableValueNzd | number | Council rateable value where the listing publishes one |
| address / suburb / district / region | string | Where the property is |
| latitude / longitude | number | Exact coordinates |
| propertyType | string | House, Apartment, Townhouse, Unit, Section and the rest |
| bedrooms / bathrooms / lounges | integer | Room counts |
| totalParking / parking | integer, string | Parking spaces and how they are described |
| floorAreaSqm / landAreaSqm | integer | Floor area and land area in m² |
| listedAt / expiresAt | string | When the listing went live and when it closes |
| availableFrom / maxTenants | string, integer | Rental availability date and tenant cap |
| openHomes | array | Scheduled open-home times |
| agencyName / agencyPhone / agencyWebsite | string | The agency behind the listing |
| agentNames / agentPhones | array | The agents named on the listing |
| agentName / agentMobile / agentOfficePhone / agentProfileUrl | string | Agent Directory contact fields |
| agentLiveListings / agentSoldListings | integer | How much an agent currently carries and has sold |
| thumbnailUrl / photoUrls / photoCount | string, array, integer | The thumbnail, every full-size photo and a count |
| has3dTour / hasVideo | boolean | Whether the listing carries a virtual tour or video |
| listingDescription | string | The full written description (detail) |
| viewCount | integer | How many times the listing has been viewed (detail) |
| nearbyRecentSales | array | Recent sale prices near the property (detail) |
| nearbyAverageSalePriceNzd | number | Average sale price for the area (detail) |
| isPrivateSeller | boolean | True where an owner listed without an agency |

**Example row:**

```json
{
  "listingId": "6119038125",
  "listingUrl": "https://www.trademe.co.nz/a/listing/6119038125",
  "recordType": "listing",
  "listingSection": "Houses for sale",
  "propertyTitle": "Family favourite",
  "priceDisplay": "Auction on 6 Oct, 3:00 pm",
  "saleMethod": "Auction",
  "address": "33 McNally Road",
  "suburb": "Pukekohe",
  "district": "Franklin",
  "region": "Auckland",
  "latitude": -37.2080968,
  "longitude": 174.886938,
  "propertyType": "House",
  "bedrooms": 4,
  "bathrooms": 2,
  "totalParking": 2,
  "parking": "2 car garaging",
  "floorAreaSqm": 147,
  "landAreaSqm": 401,
  "listedAt": "2026-09-06T05:40:40.907Z",
  "expiresAt": "2026-11-01T05:40:40.907Z",
  "agencyName": "Bayleys Pukekohe, (Licensed: REAA 2008)",
  "agencyPhone": "+64-9-2385313",
  "agencyWebsite": "https://www.bayleys.co.nz",
  "agentNames": ["Mike Murphy", "Spencer Menzies"],
  "agentPhones": ["(021) 404189", "(021) 404249"],
  "thumbnailUrl": "https://trademe.tmcdn.co.nz/photoserver/thumb/2327489815.jpg",
  "photoCount": 18,
  "viewCount": 118,
  "nearbyRecentSales": [
    { "address": "4 Matawai Puna Drive Pukekohe Auckland - Franklin", "salePriceNzd": 905000 },
    { "address": "25 McNally Road Pukekohe Auckland - Franklin", "salePriceNzd": 1667000 }
  ],
  "nearbyAverageSalePriceNzd": 1030439,
  "isPrivateSeller": false,
  "scrapedAt": "2026-09-06T06:13:21.648Z",
  "status": "success"
}
```

### 💼 Use Cases & Examples

#### 1. New Zealand Market Monitoring

**Analysts, agencies and journalists tracking a region week by week.**

**Input:** a region, `sort: "newest"`, `listedSince: "7"`, on a schedule
**Output:** the listings that appeared since your last run, with price, bedrooms, land area, coordinates and the agency
**Use:** because a search runs as deep as the section goes, the same job covers one suburb or the whole country without being split.

#### 2. Real-Estate Agent Lead Generation

**Proptech vendors, recruiters and franchise groups selling to NZ agencies.**

**Input:** `operation: "agents"` with a region
**Output:** 10,672 licensed agents with office phone, mobile, agency, and their live and sold counts
**Use:** a contact list ranked by how much stock each agent actually carries. Every search row also carries its agency's phone, so the same run tells you who is selling what.

#### 3. Rental Yield and Tenancy Research

**Buy-to-let investors and build-to-rent teams sizing a suburb.**

**Input:** `listingType: "rental"` for one sweep, `residential` for another, same place
**Output:** rent per week, bedrooms, bathrooms, maximum tenants, availability and pets, beside asking prices
**Use:** both halves of a gross-yield calculation for every property in the suburb, from two runs.

#### 4. Valuation and Comparable Sales

**Valuers and agents pricing a home against the street.**

**Input:** a shortlist with `includeDetails: true`
**Output:** the recent nearby sale prices, the area average and the council rateable value where the listing shows one
**Use:** the numbers a New Zealand valuation argument is built from, gathered per address instead of by hand.

#### 5. Lifestyle, Rural and Commercial Search

**Farm buyers, developers and commercial brokers working outside residential stock.**

**Input:** `listingType: "lifestyle"`, `"rural"`, `"commercialsale"` or `"commerciallease"`, with a land-area floor
**Output:** the same flat rows, with land area in m², sale method and the agency on each
**Use:** 29,000 live commercial leases and 5,200 lifestyle blocks are searchable the same way houses are.

#### 6. Proptech and CRM Feeds

**Product teams building valuation models, maps and comparison sites.**

**Input:** several regions or price bands across scheduled runs
**Output:** flat rows with coordinates, land and floor area, price, agency contacts and photo URLs
**Use:** New Zealand has no open property API. This is the feed underneath the product, as JSON, CSV or Excel.

### 🔗 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/trademe-property-scraper').call({
  operation: 'search',
  listingType: 'residential',
  location: 'Christchurch',
  bedroomsMin: 3,
  maxResults: 500
});

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/trademe-property-scraper').call(
    run_input={
        'operation': 'search',
        'listingType': 'rental',
        'location': 'Wellington',
        'priceMax': 700,
        'petsAllowed': True
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['address'], item['rentPerWeekNzd'], item['bedrooms'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~trademe-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "agents", "location": "Canterbury", "maxResults": 500}'
```

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

1. **Trigger**: a daily schedule, or a webhook from your own app
2. **HTTP Request**: call the actor with a section, a place and `listedSince`
3. **Process**: keep the rows whose `listedAt` is newer than your last run
4. **Action**: write to Sheets or a database, or alert the team when a price changes

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 listings** per run — every field, every operation, same quality
- No credit card, no API key, no proxy
- Enough to see real Auckland listings with their agency contacts before you spend anything

#### PAID Tier (Production Ready)

- **Unlimited** listings per run
- 500 listings per request, so a whole-region sweep finishes fast
- Pay-per-result: charged for rows delivered, never for a failure

💰 **$3.00 per 1,000 listings** on Property Search, with nothing to buy alongside it: no proxy subscription, no third-party account, no per-request surcharge. Listing Detail is $6.00 per 1,000 expanded rows and is charged only when you switch the detail option on. Agent Directory is $5.00 per 1,000 agents.

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

### ❓ Frequently Asked Questions

**Q: Do I need an API key, a login or a proxy?**
A: No. Type a place name and press Run.

**Q: How many listings can one run return?**
A: As many as the section holds. There is no page ceiling, so a run can walk all 44,000 live for-sale listings, 500 to a request. The only limit is the Max results number you set.

**Q: Does it cover rentals as well as houses for sale?**
A: Yes, and lifestyle blocks, rural, new homes, commercial for sale, commercial for lease, retirement villages and this week's open homes. Each is a separate section you pick at the top of the form.

**Q: Does it include private-seller listings?**
A: Yes. Trade Me is the one large New Zealand portal where owners can list without an agent, and those listings come back alongside the agency ones. Rows with no agency attached are flagged as private sellers.

**Q: Does it return sold prices?**
A: Not as an archive. Trade Me's sold-price service sits behind a member account and is out of reach here. What the detail option does return is the recent nearby sale prices and the area average that Trade Me prints beside a live listing — comparable evidence for one address, rather than a searchable sold history.

**Q: How do I search a suburb rather than a whole city?**
A: Type the suburb. Ponsonby, Riccarton, Mount Maunganui and Papamoa all resolve, because the name is matched against Trade Me's own place index. Turn on neighbouring suburbs to widen it.

**Q: Which fields need the detail option?**
A: The written description, full-size photos, the view count, the open-home schedule, the named agents and the nearby recent sale prices. Price, address, bedrooms, bathrooms, land and floor area, coordinates, agency phone and thumbnails all arrive with the search row at no extra charge.

**Q: Why is my price filter dropping listings?**
A: New Zealand sells a lot of property by auction, tender or price by negotiation, and those listings carry no number to filter on. Leave the price fields at 0 to keep them, and read the price-as-shown column for what the listing actually says.

**Q: Are the agent phone numbers real?**
A: Yes. Trade Me publishes the agency's line and each agent's mobile on the listing and on the agent's public directory profile, and those are the fields returned. They are business contacts, not relay numbers.

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

### 🐛 Troubleshooting

**A place name did not match**

- Write it the way Trade Me does: Auckland, Canterbury, Queenstown-Lakes, Ponsonby, Mount Maunganui
- Districts and suburbs both resolve. If a suburb name is ambiguous, search the district instead

**A search returned fewer rows than you expected**

- Check the filters. A bedroom floor drops sections, bare land and most commercial listings, because those carry no bedroom count
- A price floor drops every auction, tender and price-by-negotiation listing, since none of them publishes a number

**Bedrooms, floor area or rateable value came back empty**

- Those are genuinely absent on a share of listings rather than a failure. Private sellers often skip areas, and not every property has a published RV

**Descriptions, full photos and nearby sales are missing**

- Those live on the listing page. Switch on the detail option, or run the `detail` operation against the listing URLs

**Pets allowed had no effect**

- That filter exists on the rental section only. On the sale sections Trade Me has nothing to match it against

**A run stopped at 25 rows**

- That is the free-tier cap. Paid runs are uncapped

### ⚖️ 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/).

### 🤝 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)**

Trade Me is a trademark of Trade Me Limited. This actor is not affiliated with, endorsed by, or sponsored by Trade Me.

# Changelog

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

# Actor input Schema

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

Pick one per run. Property Search returns every live listing in the section you choose - houses for sale, rentals, lifestyle blocks, rural, new homes, commercial or retirement - filtered by place, price, bedrooms and size. Listing Detail takes trademe.co.nz listing addresses and returns the full record, including the written description, every photo, the view count and the recent comparable sales Trade Me shows beside it. Agent Directory returns licensed New Zealand agents with their office…

## `listingType` (type: `string`):

Which part of Trade Me Property to search. These are the site's own sections, and each one has its own index: Houses for sale holds about 44,000 live listings, Rentals about 12,000, Lifestyle blocks about 5,200 and Commercial for lease about 29,000. Rentals price in dollars per week rather than a sale price. Used by Property Search only.

## `location` (type: `string`):

Where to search. Type it the way you would on Trade Me: a region (Auckland, Wellington, Canterbury, Otago), a district (Franklin, Queenstown-Lakes, Tauranga) or a suburb (Ponsonby, Mount Maunganui, Riccarton). The name is matched against Trade Me's own place index, so nothing has to be looked up by hand. Leave it empty to search the whole country. The Agent Directory uses this field too, at region level.

## `propertyType` (type: `string`):

Narrow the search to one kind of property. These are Trade Me's own categories and only these values are recognised - anything else is quietly ignored by the site and you get the unfiltered list back, which is why this is a fixed list rather than a text box. Applies to the for-sale sections; Rentals uses the same names but has fewer of them.

## `priceMin` (type: `integer`):

Lowest price to include, in New Zealand dollars. On the Rentals section this is dollars per week, not a sale price, because that is how Trade Me prices rentals. 0 means no lower bound. Listings advertised as auction, tender or price-by-negotiation carry no number, so a price floor drops them.

## `priceMax` (type: `integer`):

Highest price to include, in New Zealand dollars - dollars per week on the Rentals section. 0 means no upper bound.

## `bedroomsMin` (type: `integer`):

Fewest bedrooms to include. 0 means no lower bound. Sections, bare land and most commercial listings have no bedroom count and are dropped by any bedroom floor.

## `bedroomsMax` (type: `integer`):

Most bedrooms to include. 0 means no upper bound.

## `bathroomsMin` (type: `integer`):

Fewest bathrooms to include. 0 means no lower bound.

## `floorAreaMinSqm` (type: `integer`):

Smallest building floor area in square metres. 0 means no lower bound. Many private listings leave floor area blank and are dropped by any floor-area floor.

## `landAreaMinSqm` (type: `integer`):

Smallest section size in square metres - 600 for a standard quarter-acre-ish suburban section, 10000 for a hectare. Trade Me itself measures this filter in hectares; the conversion is done for you so both this field and the landAreaSqm column in your results are in square metres. 0 means no lower bound.

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

Free text matched against the listing title and description, the same box as Trade Me's own keyword search. Useful for the things that are not filters: villa, do-up, north facing, subdividable, motivated vendor.

## `listedSince` (type: `string`):

Only return listings that went live in this window. This is the field to set when the actor runs on a schedule: you pay for what is new since your last run instead of re-buying the same market every morning.

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

Keep only listings that have an open home scheduled. The open-home times come back on every row that has them, so this is about narrowing the list rather than unlocking a field.

## `includeAdjacentSuburbs` (type: `boolean`):

Widen a suburb search to the suburbs Trade Me considers adjacent to it. Only does anything when the place you typed resolved to a suburb - a region or district search already covers everything inside it.

## `petsAllowed` (type: `boolean`):

Rentals only: keep only tenancies that accept pets. It is ignored on the sale sections, where the site has no such filter, so leave it off unless you are searching Rentals.

## `sort` (type: `string`):

Newest first is what you want for monitoring a market on a schedule, and it is the default here even though the site's own default is featured first - featured means the agent paid for placement, which is not an ordering you want in a dataset.

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

Stop after this many rows. Each request returns up to 500 rows, so the run stops at the first request that crosses your limit. Trade Me sets no ceiling of its own - the whole for-sale index of roughly 44,000 listings is reachable in one run - so this number is your budget, not a technical limit.

## `includeDetails` (type: `boolean`):

Expand every listing with what the search results do not carry: the full written description, every full-size photo rather than the thumbnails, the view count, the open-home schedule, the named agents on the listing, and the recent nearby sale prices Trade Me publishes beside it. Costs one extra request per listing and is billed as one Listing Detail event per expanded row, so turn it on for a shortlist rather than a whole city.

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

Used by the Listing Detail operation: trademe.co.nz listing addresses to expand, for example https://www.trademe.co.nz/a/listing/6119038125. Paste the full address - Apify validates this field as URLs and rejects a bare listing number before the run starts. Long addresses that carry the region and suburb in the path are fine; the number at the end is what is read.

## Actor input object example

```json
{
  "operation": "search",
  "listingType": "residential",
  "location": "Auckland",
  "propertyType": "any",
  "priceMin": 0,
  "priceMax": 0,
  "bedroomsMin": 0,
  "bedroomsMax": 0,
  "bathroomsMin": 0,
  "floorAreaMinSqm": 0,
  "landAreaMinSqm": 0,
  "keywords": "",
  "listedSince": "any",
  "openHomesOnly": false,
  "includeAdjacentSuburbs": false,
  "petsAllowed": false,
  "sort": "newest",
  "maxResults": 100,
  "includeDetails": false,
  "listingUrls": []
}
```

# Actor output Schema

## `tradeMePropertyListings` (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",
    "listingType": "residential",
    "location": "Auckland",
    "propertyType": "any",
    "priceMin": 0,
    "priceMax": 0,
    "bedroomsMin": 0,
    "bedroomsMax": 0,
    "bathroomsMin": 0,
    "floorAreaMinSqm": 0,
    "landAreaMinSqm": 0,
    "keywords": "",
    "listedSince": "any",
    "openHomesOnly": false,
    "includeAdjacentSuburbs": false,
    "petsAllowed": false,
    "sort": "newest",
    "maxResults": 100,
    "includeDetails": false,
    "listingUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/trademe-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",
    "listingType": "residential",
    "location": "Auckland",
    "propertyType": "any",
    "priceMin": 0,
    "priceMax": 0,
    "bedroomsMin": 0,
    "bedroomsMax": 0,
    "bathroomsMin": 0,
    "floorAreaMinSqm": 0,
    "landAreaMinSqm": 0,
    "keywords": "",
    "listedSince": "any",
    "openHomesOnly": False,
    "includeAdjacentSuburbs": False,
    "petsAllowed": False,
    "sort": "newest",
    "maxResults": 100,
    "includeDetails": False,
    "listingUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/trademe-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",
  "listingType": "residential",
  "location": "Auckland",
  "propertyType": "any",
  "priceMin": 0,
  "priceMax": 0,
  "bedroomsMin": 0,
  "bedroomsMax": 0,
  "bathroomsMin": 0,
  "floorAreaMinSqm": 0,
  "landAreaMinSqm": 0,
  "keywords": "",
  "listedSince": "any",
  "openHomesOnly": false,
  "includeAdjacentSuburbs": false,
  "petsAllowed": false,
  "sort": "newest",
  "maxResults": 100,
  "includeDetails": false,
  "listingUrls": []
}' |
apify call sian.agency/trademe-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/trademe-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/SWVMt3py3XgSvldqL/builds/Ga2824cFf6qZyUTbm/openapi.json
