WorldPrice
API v1

Programmatic access.

REST endpoints over the WorldPrice dataset — 23 countries, 45 items, 895 prices, 25 years of Big Mac history. Open, no key required for now. CDN-cached for 24h. Rate limited by the cache, not by you.

JSON + CSV

REST JSON via /api/v1/*. Bulk CSV via /api/download/*.

Daily-refreshed

FX rates 06:00 UTC. Weekly snapshots in price_history.

Open CORS

Allow-Origin *. Use from browsers, servers, notebooks.

Endpoints

GET/api/v1
GET/api/v1/countries
GET/api/v1/countries/{code}
GET/api/v1/items
GET/api/v1/items/{slug}
GET/api/v1/prices?country=KR&item=bigmac&limit=500
GET/api/v1/indices/big-mac
GET/api/v1/indices/iphone
GET/api/v1/indices/rent
GET/api/v1/exchange-rates

Bulk download (CSV)

GET/api/download/prices
GET/api/download/big-mac-history
GET/api/download/items
GET/api/download/countries

Examples

cURL
curl https://worldprice.live/api/v1/indices/big-mac \
  -H "Accept: application/json"
JavaScript
const r = await fetch('https://worldprice.live/api/v1/items/big-mac');
const { data, meta } = await r.json();
console.log(`${meta.count} markets, cheapest = ${data.prices[0].country_code}`);
Python
import requests
r = requests.get('https://worldprice.live/api/v1/countries/KR')
country = r.json()['data']
print(country['country']['name_en'], len(country['prices']), 'prices')
Pandas
import pandas as pd
df = pd.read_csv('https://worldprice.live/api/download/big-mac-history')
df.groupby('country_code')['price_usd'].agg(['min', 'max']).head()

Response shape

{
  "data": [ /* the actual payload */ ],
  "meta": {
    "api_version": "1",
    "generated_at": "2025-04-15T06:00:00.000Z",
    "count": 23,
    "limit": 500,
    "offset": 0
  }
}

Errors return { "error": { "status": 404, "message": "..." } }.

License & attribution

Attribute as "WorldPrice (worldprice.live)" for derived charts/articles. Re-distribution permitted for rows where data_license is own or public. Restricted-license rows (Big Mac Index, Apple) include source URLs — link there instead.

Full methodology