TradeMe APItrademe.co.nz ↗
Search New Zealand residential property listings on TradeMe. Filter by location, price, bedrooms, and bathrooms. Access coordinates, size, and suburb data.
What is the TradeMe API?
The TradeMe Property API provides access to residential-for-sale listings across New Zealand via 2 endpoints. The search_properties endpoint returns paginated listing results with fields including address, price in NZD, bedroom and bathroom counts, land/floor size, and geographic coordinates. A companion get_localities endpoint exposes the full region-district-suburb hierarchy, letting you resolve valid location paths for targeted searches.
curl -X GET 'https://api.parse.bot/scraper/dc94d41b-ec3a-4ee9-9899-91e8b50f254b/search_properties?page=1&rows=5&location=%2Fproperty%2Fresidential%2Fsale%2Fcanterbury%2Fchristchurch-city&price_max=2000000&price_min=100000&bedrooms_max=5&bedrooms_min=2&bathrooms_max=3&bathrooms_min=1&property_type=House&search_string=renovated' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace trademe-co-nz-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: TradeMe Property Listings — search properties across New Zealand."""
from parse_apis.trademe_property_listings_api import TradeMe, PropertyType, PropertyNotFound
client = TradeMe()
# List all regions to discover the locality hierarchy
for region in client.regions.list(limit=3):
print(region.name, f"({len(region.districts)} districts)")
# Search for houses in Christchurch with bedroom/price filters
for prop in client.properties.search(
location="/property/residential/sale/canterbury/christchurch-city",
property_type=PropertyType.HOUSE,
bedrooms_min=3,
price_max=900000,
limit=5,
):
print(prop.title, prop.price_display, prop.bedrooms, prop.suburb)
# Drill into one result
listing = client.properties.search(
location="/property/residential/sale/auckland",
property_type=PropertyType.APARTMENT,
limit=1,
).first()
if listing:
print(listing.title, listing.address, listing.latitude, listing.longitude)
# Typed error handling
try:
results = client.properties.search(
location="/property/residential/sale/canterbury/christchurch-city",
search_string="pool",
limit=3,
)
for prop in results:
print(prop.listing_id, prop.title, prop.price_display)
except PropertyNotFound as exc:
print(f"Not found: {exc}")
print("exercised: regions.list / properties.search (multiple filters, drill-down, error handling)")
Search residential properties for sale on TradeMe with optional filters for location, price, bedrooms, bathrooms, property type, and keyword. Returns paginated results with property details including address, price, size, and coordinates. Paginates via integer page number. Each listing carries geo-coordinates and a canonical TradeMe URL.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-based). |
| rows | integer | Number of results per page. |
| location | string | Canonical path for location filter (e.g. /property/residential/sale/canterbury/christchurch-city, /property/residential/sale/auckland). Determines region, district, and optionally suburb. |
| price_max | integer | Maximum price in NZD. |
| price_min | integer | Minimum price in NZD. |
| bedrooms_max | integer | Maximum number of bedrooms. |
| bedrooms_min | integer | Minimum number of bedrooms. |
| bathrooms_max | integer | Maximum number of bathrooms. |
| bathrooms_min | integer | Minimum number of bathrooms. |
| property_type | string | Property type filter. |
| search_string | string | Keyword search within listings. |
{
"type": "object",
"fields": {
"page": "integer - current page number",
"listings": "array of property listing objects",
"page_size": "integer - results per page",
"total_count": "integer - total matching listings",
"total_pages": "integer - total pages available"
}
}About the TradeMe API
Endpoints
The API exposes two endpoints. search_properties accepts optional filters for location (a canonical path such as /property/residential/sale/canterbury/christchurch-city), price_min, price_max, bedrooms_min, bedrooms_max, bathrooms_max, and a keyword. Results are paginated using an integer page parameter and a rows parameter to control page size. Each response includes total_count, total_pages, page_size, and the current page number alongside the listings array.
Listing Data
Each object in the listings array contains property-level fields: full address, asking price in NZD, number of bedrooms and bathrooms, property type, lot/floor size, and latitude/longitude coordinates. These fields are suitable for building map-based search UIs, price-per-bedroom analysis, or area comparison tools.
Locality Lookup
get_localities takes no parameters and returns the complete New Zealand locality hierarchy. Each region contains an array of districts, and each district contains an array of suburbs with their corresponding IDs and names. Use the resulting paths to construct valid location values for search_properties, or to populate filter menus in a property search application.
Coverage Notes
The API covers residential properties listed for sale. It does not currently include rental listings, commercial properties, or sold/historical price data. Pagination is 1-based via the page integer input.
The TradeMe API is a managed, monitored endpoint for trademe.co.nz — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when trademe.co.nz changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official trademe.co.nz API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a suburb-level price comparison tool using price_min/price_max filters and the localities hierarchy
- Map available listings in a specific district by plotting latitude/longitude coordinates returned in search results
- Alert users when new listings appear in a target suburb by polling search_properties with a location path and tracking total_count
- Aggregate bedroom-to-price ratios across regions using bedrooms_min, bedrooms_max, and price fields
- Populate dynamic location dropdowns in a property search UI using get_localities region/district/suburb data
- Track listing volume trends across Christchurch or Auckland districts over time using total_count from paginated results
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does TradeMe have an official developer API?+
What does the location parameter in search_properties accept?+
/property/residential/sale/canterbury/christchurch-city or /property/residential/sale/auckland. Use get_localities to discover valid region, district, and suburb slugs before constructing a location filter.Does the API cover rental listings or sold property history?+
How does pagination work in search_properties?+
page parameter. Each response includes total_count, total_pages, and page_size so you can calculate the full result set and iterate through pages. Set rows to control how many listings are returned per page.