Developers

Build on it.

A free, keyless JSON API over every price on this site, the same one the pages read. Search a product, pull its history, list the stores in a town, compare the chains.

Base URL
https://api.supertracker.nz/api/v1
Auth
none
Format
JSON, any origin
Limits
300/min · 10,000/day
Endpoints
25

Start here

Four calls cover most questions. The first one opens in a browser.

shell
# Find the product; every result carries a product_id and one offer per chain.
curl "https://api.supertracker.nz/api/v1/search?q=anchor+blue+milk+2l"

# Today's price at every chain, plus alternatives, for one product id.
curl "https://api.supertracker.nz/api/v1/products/285"

# Every national price span since it was first seen, per chain (columnar).
curl "https://api.supertracker.nz/api/v1/products/285/history"

# The stores in one town, with each store's price level against its own chain.
curl "https://api.supertracker.nz/api/v1/stores?town=Tokoroa"

Documentation

The same reference three ways: for people, for machines, and for models.

The shape of things

  • Money is integer cents, NZD. price is the shelf price; when promo_price is set, promo_kind says who gets it: 1 special (everyone), 2 club price (loyalty card), 3 multibuy (multibuy_qty for multibuy_price in total), 4 clearance.
  • Days are New Zealand dates, YYYY-MM-DD; timestamps are UTC.
  • A listing is one chain's product; a product is the same item across chains. Ids are integers and stable. A listing carries product_id once it has been matched.
  • Series are columnar: parallel arrays (from[], to[], price[]) rather than arrays of objects. A span runs from the day a price appeared to the day it changed.
  • National prices are the median across a chain's stores; store prices are exact.
  • Images are paths on the API host to 720 px AVIFs; put _t before .avif for the 200 px thumbnail.
  • Errors are JSON: { "error": { "status": 404, "message": "No such product" } }.

Fair use

Each address may make 300 requests a minute and 10,000 a day. Every response carries RateLimit-* headers so a client can pace itself; going over gets a 429 with Retry-After.

The API is for looking things up. If you want everything, it is already packaged: the nightly exports are the same tables as Parquet and CSV, with no limit at all. Crawling the history endpoints one id at a time will hit the daily budget long before it finishes; the exports never will.

Data is CC BY 4.0: attribute Super Tracker (supertracker.nz) and acknowledge the source retailers. Prices are as advertised online by each supermarket; in-store may differ. The food-price index is a nowcast, not an official statistic.

Endpoints

Read live from the API's own description. A path without an id opens the live JSON; the others open in the reference.