Trade Me API & Scraper
The Trade Me API returns New Zealand's largest marketplace as clean JSON, in NZD, from one engine.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
search returns up to 100 listings a page with the listing id, title, the headline price and what that price is (current bid, start price, Buy Now or asking price), the Buy Now price, bid count, whether the reserve is met, the closing time, condition, region and suburb, pick-up and free-shipping flags, was-price and discount, and the paid upgrades each listing bought - filtered by condition, Buy Now, shipping, clearance, region, category, price within a category and $1 reserve auctions, sorted by best match, price, Buy Now price, most bids, latest, closing soon, title or discount. Sponsored listings that Trade Me injects into every page are separated and counted. listing returns the full record live or closed: description, every photo, start price, current bid and minimum next bid, bid history amounts, reserve state, status and how a closed auction ended, quantity left, shipping options with prices, payment methods, questions and answers, the seller's feedback score and positive percentage, and the store, car dealer or real-estate agency. cars/search adds make, model, year, odometer, fuel, transmission, body style, dealer or private and auction or classified filters; real_estate/search covers houses for sale (with how each is being sold) and rentals (weekly rent, bedrooms, bathrooms, available date); seller_listings and seller_feedback cover a member's listings and feedback. In the final live run 110 calls across all eight actions returned 110 successes, and on 18 listings in nine categories the title, price, listing type, region, seller and feedback score matched the raw record, the search row and the member's profile 18 of 18. No account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.
Half of Trade Me's houses for sale publish no price at all - and that is not a missing field
On Trade Me Property the price of a house for sale is a sentence, not a number. We counted 500 listings on 2026-09-16: exactly half say how the house is being sold instead of what it costs. The API returns price null for those - never 0 - and tells you the sale method on every listing.
| What the listing says | Listings of 500 | price returned | price_type / sale_method |
|---|---|---|---|
| Price by negotiation | 158 | null | null / negotiation |
| Asking price $525,000 | 139 | 525000 | asking / asking_price |
| Enquiries over $789,000 | 111 | 789000 | enquiries_over / enquiries_over |
| Auction on 30 Sept, 4:00 pm | 48 | null | null / auction |
| Deadline sale by 8 Oct | 37 | null | null / deadline_sale |
| For sale by tender | 7 | null | null / tender |
Rentals are different and simpler: 500 of 500 rental listings were priced per week, so rent_per_week is a number on every rental. price_display always carries Trade Me's own wording, so nothing the site shows is lost. One more trap at the other end: sorting houses by lowest price opens with listings whose asking price is a few hundred dollars - a placeholder, returned as published.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/trademe/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "bike",
"limit": 20
}
}{
"ok": true,
"meta": {
"api": "trademe",
"endpoint": "search",
"mode": "live",
"latency_ms": 956,
"record_count": 20,
"bytes": 27563,
"cache_hit": false,
"pagination": {
"page": 1,
"has_more": true,
"page_size": 20,
"total": 75390
}
},
"data": {
"query": "bike",
"sort": "relevance",
"results": [
{
"listing_id": 6132450878,
"title": "Trek 2026 Marlin 4 Mountain Bike",
"subtitle": null,
"url": "https://www.trademe.co.nz/a/listing/6132450878",
"vertical": "marketplace",
"listing_type": "buy_now",
"category": {
"number": "[redacted-phone]-7146-",
"path": "/Sports/Cycling/Mountain-bikes/Front-suspension"
},
"price": 873,
"price_type": "buy_now",
"price_display": "$873.00 per item",
"currency": "NZD",
"start_price": null,
"current_bid": null,
"minimum_next_bid": null,
"buy_now_price": 873,
"asking_price": null,
"rent_per_week": null,
"was_price": 979,
"discount_percent": 11,
"bid_count": null,
"reserve_state": null,
"reserve_met": null,
"is_clearance": true,
"condition": "new",
"region": "Canterbury",
"suburb": "Christchurch City",
"start_date": "2026-09-14T23:50:24.667000Z",
"search_index_end_date": "2026-09-21T23:50:24.667000Z",
"image": "https://trademe.tmcdn.co.nz/photoserver/thumb/2283305070.jpg",
"images": [
"https://trademe.tmcdn.co.nz/photoserver/thumb/2283305078.jpg",
"https://trademe.tmcdn.co.nz/photoserver/thumb/2283305083.jpg",
"https://trademe.tmcdn.co.nz/photoserver/thumb/2283305088.jpg"
],
"seller_id": 5062316,
"is_super_seller": true,
"is_dealer": null,
"dealer_name": null,
"pickup": "required",
"free_shipping": false,
"suggested_shipping": null,
"has_afterpay": false,
"has_ping": true,
"has_variants": true,
"is_featured": false,
"is_super_featured": false,
"has_gallery": false,
"is_bold": false,
"is_highlighted": false,
"sponsored": false
},
{
"listing_id": 6125536684,
"title": "Youth 22\" Mountain Bike Full Suspension MTB",
"subtitle": null,
"url": "https://www.trademe.co.nz/a/listing/6125536684",
"vertical": "marketplace",
"listing_type": "buy_now",
"category": {
"number": "[redacted-phone]-7146-",
"path": "/Sports/Cycling/Mountain-bikes/Front-suspension"
},
"price": 625,
"price_type": "buy_now",
"price_display": "$625.00",
"currency": "NZD",
"start_price": null,
"current_bid": null,
"minimum_next_bid": null,
"buy_now_price": 625,
"asking_price": null,
"rent_per_week": null,
"was_price": 800,
"discount_percent": 22,
"bid_count": null,
"reserve_state": null,
"reserve_met": null,
"is_clearance": true,
"condition": "new",
"region": "Auckland",
"suburb": "Manukau",
"start_date": "2026-09-10T09:07:46.843000Z",
"search_index_end_date": "2026-09-17T09:00:00Z",
"image": "https://trademe.tmcdn.co.nz/photoserver/thumb/2202682274.jpg",
"images": [
"https://trademe.tmcdn.co.nz/photoserver/thumb/2202682278.jpg",
"https://trademe.tmcdn.co.nz/photoserver/thumb/2202682287.jpg",
"https://trademe.tmcdn.co.nz/photoserver/thumb/2202682292.jpg"
],
"seller_id": 6047537,
"is_super_seller": true,
"is_dealer": null,
"dealer_name": null,
"pickup": "required",
"free_shipping": false,
"suggested_shipping": null,
"has_afterpay": false,
"has_ping": true,
"has_variants": false,
"is_featured": false,
"is_super_featured": false,
"has_gallery": false,
"is_bold": false,
"is_highlighted": false,
"sponsored": false
},
{
"listing_id": 6124974992,
"title": "Giant 2025 Talon 3 Mountain Bike",
"subtitle": null,
"url": "https://www.trademe.co.nz/a/listing/6124974992",
"vertical": "marketplace",
"listing_type": "buy_now",
"category": {
"number": "[redacted-phone]-7146-",
"path": "/Sports/Cycling/Mountain-bikes/Front-suspension"
},
"price": 879,
"price_type": "buy_now",
"price_display": "$879.00 per item",
"currency": "NZD",
"start_price": null,
"current_bid": null,
"minimum_next_bid": null,
"buy_now_price": 879,
"asking_price": null,
"rent_per_week": null,
"was_price": 1099,
"discount_percent": 20,
"bid_count": null,
"reserve_state": null,
"reserve_met": null,
"is_clearance": true,
"condition": "new",
"region": "Canterbury",
"suburb": "Christchurch City",
"start_date": "2026-09-10T02:47:20.807000Z",
"search_index_end_date": "2026-09-17T02:47:20.807000Z",
"image": "https://trademe.tmcdn.co.nz/photoserver/thumb/2260806888.jpg",
"images": [
"https://trademe.tmcdn.co.nz/photoserver/thumb/2260806892.jpg",
"https://trademe.tmcdn.co.nz/photoserver/thumb/2260806893.jpg",
"https://trademe.tmcdn.co.nz/photoserver/thumb/2260806896.jpg"
],
"seller_id": 5062316,
"is_super_seller": true,
"is_dealer": null,
"dealer_name": null,
"pickup": "required",
"free_shipping": false,
"suggested_shipping": null,
"has_afterpay": false,
"has_ping": true,
"has_variants": false,
"is_featured": false,
"is_super_featured": false,
"has_gallery": false,
"is_bold": false,
"is_highlighted": false,
"sponsored": false
}
],
"count": 20,
"total_results": 75390,
"page": 1,
"limit": 20,
"has_more": true,
"sponsored_count": 0,
"sponsored_dropped": 0,
"did_you_mean": null,
"category_facets": [
{
"number": "0005-",
"id": 5,
"name": "Sports",
"count": 54605
},
{
"number": "0001-",
"id": 1,
"name": "[redacted-name]",
"count": 13922
},
{
"number": "0193-",
"id": 193,
"name": "Books",
"count": 1201
}
],
"fallback_results_dropped": 0,
"filters": {}
}
}What the Trade Me API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Trade Me marketplace listings by keyword, category or seller: listing id, title, the current bid, start price, Buy Now price and what the headline price is, bid count, reserve met or not, closing time, condition, region and suburb, pick-up and free shipping, suggested shipping price, was-price and discount, and the paid upgrades each listing bought. Sponsored listings are separated. Filter by condition, Buy Now, shipping, clearance, region, price (with a category), $1 reserve; sort by best match, price, Buy Now price, most bids, latest, closing soon, title or discount. | Price-intelligence teams call search to search Trade Me marketplace listings by keyword, category or seller. | query, category, condition, buy_now_only, shipping, ... |
| listing | One Trade Me listing in full, live or closed: title, description, every photo, the start price, current bid, minimum next bid, Buy Now price or asking price, bid count and bid history amounts, reserve met or not, closing time, time left, status (active or closed) and how a closed auction ended, quantity left, condition, brand, SKU and attributes, shipping options with prices, pick-up, payment methods, questions and answers, the seller's feedback score and positive percentage, the store, car dealer or real-estate agency, and car or property facts. | Classifieds aggregators call listing to get one Trade Me listing in full, live or closed. | listing_id, max_rotations |
| cars/search | Used and new cars on Trade Me Motors: make, model, year, odometer, fuel, transmission, body style, engine size, owners, import history, WoF and registration expiry, plate and VIN, asking price or auction bids, dealer or private seller. Filter by make, model, year, odometer, price, body style, fuel, transmission, condition, dealer/private, auction/classified and region. | Resale and arbitrage tools call cars/search to get used and new cars on Trade Me Motors. | query, make, model, year_min, year_max, ... |
| real_estate/search | property on Trade Me Property, for sale or for rent: address, suburb, district, region, property type, bedrooms, bathrooms, land and floor area, parking, how it is being sold (asking price, enquiries over, negotiation, auction, tender, deadline sale) or the weekly rent, available date, agency and open homes. Filter by region, district, price, bedrooms, bathrooms, property type and sale method. | Lead-generation teams call real_estate/search to get property on Trade Me Property, for sale or for rent. | purpose, query, region, district_id, price_min, ... |
| seller_listings | A Trade Me member's profile and current marketplace listings: nickname, member since, feedback score, positive and negative counts and positive percentage, address verified, in-trade flag, store, then their listings with the same row fields and sorts as search. | Price-intelligence teams call seller_listings to get a Trade Me member's profile and current marketplace listings. | seller_id, sort, page, limit, include_sponsored, ... |
| seller_feedback | Feedback left for a Trade Me member, newest first: positive or negative, the comment, date, whether a buyer or a seller left it, the listing and price it was for, and the member's reply. | Classifieds aggregators call seller_feedback to get feedback left for a Trade Me member, newest first. | seller_id, page, limit, max_rotations |
| categories | The Trade Me category tree one level at a time: a category's number, name and path and its sub-categories, with whether each carries classified ads. | Resale and arbitrage tools call categories to get the Trade Me category tree one level at a time. | category, max_rotations |
| suggest | Trade Me's own search suggestions for the start of a keyword, with suggested categories. | Lead-generation teams call suggest to get trade Me's own search suggestions for the start of a keyword, with suggested categories.. | query, max_rotations |
Call search from your stack
curl -X POST https://api.reefapi.com/trademe/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"bike","limit":20}'import requests
r = requests.post(
"https://api.reefapi.com/trademe/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "bike",
"limit": 20
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/trademe/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "bike",
"limit": 20
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.trademe.search with {"query":"bike","limit":20}.Who uses this API and why
- Resale and flipping tools watch auctions closing soon in a category, compare the current bid against the Buy Now price and skip auctions whose reserve is not met.
- Price-intelligence teams track New Zealand second-hand and retail prices by category, with was-price, discount and Buy Now figures kept apart from bids.
- Car dealers and valuation tools pull used cars by make, model, year and odometer, split dealer and private sellers and auctions from classifieds, and read registration and WoF expiry from each listing.
- Property and rental analysts pull houses by region, district, bedrooms and sale method, and weekly rents by suburb, knowing which listings publish a number and which do not.
Questions developers ask before integrating
What is the price on an auction - the current bid or the Buy Now price?
Both are returned, separately, and price_type says which one price is. On an auction with bids, price is the current bid, with the start price, the minimum next bid and the Buy Now price (if the seller offers one) beside it. Before the first bid, price is the start price and current_bid is null. On a Buy Now listing, price is the Buy Now price. On a car classified it is the asking price. One thing to know when sorting: Trade Me's price sorts order an auction by its Buy Now price when it has one, so an auction at $2,200 with Buy Now $2,500 sits among the $2,500 listings.
Does it show whether the reserve has been met?
Yes: reserve_state is no_reserve, met, not_met or not_applicable (Buy Now and classifieds), and reserve_met is true or false where it applies. It matters: among the 500 most-bid sports auctions on 2026-09-16, 54 had not met their reserve despite having bids, and among 500 car auctions 252 had not. A $1 reserve auction shows no_reserve until someone bids. Trade Me does not publish the reserve amount itself, so it is not returned.
What are sponsored listings, and why are there more rows than I asked for?
Trade Me injects sponsored listings into every search page on top of the results you asked for: on a keyword search 5 to 7 of them at fixed slots (1st, 4th, 7th and so on), and the same sponsored listings repeat on page 2 and page 3. They are left out by default and counted in sponsored_dropped, so count is exactly the organic rows you requested; include_sponsored true returns them flagged sponsored. Listings that paid for a featured, bold, gallery or highlight upgrade are real results and stay in, with each upgrade flagged.
Can I get closed auctions?
Yes, by listing id. A listing that has ended keeps answering - a listing that closed in November 2024 still did on 2026-09-16 - and it comes back with status closed, time_left_seconds 0 and closed_result: no_bids, reserve_not_met or highest_bid_met_reserve, with the last bid and bid count. Trade Me does not show logged-out visitors who won or whether the sale completed, so the API never says sold.
Why does a search row's closing time sometimes differ from the listing's by an hour?
Because Trade Me's search results and its listing pages disagree around a daylight-saving change. For listings closing after New Zealand's clocks went forward on 27 September 2026, the search result's closing time was one hour later than the listing's own in 10 of 10 pairs we checked, and identical in 9 of 9 closing before it. The row field is named search_index_end_date so this is visible, and listing returns end_date from the listing itself, which keeps the local closing time.
Can I filter a search by price?
Yes, together with a category. Trade Me ignores a price range on a keyword-only search - the same 35,580 laptop results came back with or without it - so the API rejects that combination with a clear error instead of returning unfiltered results. With a category (for example 0002-0356- for laptops) the range works: 100 to 200 dollars returned 2,844 listings and every row on the page was inside it. cars/search and real_estate/search take price ranges directly; for rentals the range is per week.
Which regions can I filter by?
Every Trade Me region, by name: auckland, wellington, canterbury, otago and so on. Marketplace and car searches use Trade Me's seller regions (19, including Wairarapa, Timaru - Oamaru and International); property uses Trade Me Property's regions (15, with Manawatu / Whanganui and Nelson / Tasman combined) and can narrow to a district. The two lists are numbered differently on Trade Me - Auckland is a different number in each - and the API sends the right one for you.
What does Trade Me NOT publish?
No product rating or review count - Trade Me rates members, so the seller's feedback score, positive and negative counts and positive percentage come back instead, and rating is null on a listing. No reserve amount, and no winner or sold flag on a closed auction. A barcode (GTIN) was empty on 18 of 18 verified listings. Half of the houses for sale publish no price (see above). Bidders and people asking questions are masked by Trade Me, so only bid amounts, dates and the question-and-answer text are returned.
What is the Trade Me API?
Trade Me API is a ReefAPI endpoint group for new zealand's marketplace: auctions and buy now listings, cars and property, prices in nzd. It returns live JSON through POST requests under /trademe/v1.
Is the Trade Me API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Trade Me calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Trade Me login or account?
No login to Trade Me is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Trade Me data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Trade Me API use?
Trade Me actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Trade Me from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call trademe actions with the same key, credit pool and JSON envelope used by normal REST requests.