๐Ÿ carstats

API (v1)

Versioned, read-only JSON endpoints for everything you see on the site. Free for fair use; rate-limited at the edge.

Endpoints

GET https://carstats.pages.dev/api/v1/index.json โ€” top-level rollup: every model with KPIs, comparative spreads, sold/movers globals.

GET https://carstats.pages.dev/api/v1/{slug}.json โ€” per-model bundle: market_state, pricing_compass, active listings with buy signal + cut probability, mileage tiers, color rollup, spec premium, recent movers, BaT summary.

GET https://carstats.pages.dev/api/v1/dealers.json โ€” 312-dealer leaderboard with archetypes + trust score + flags.

GET https://carstats.pages.dev/api/v1/bat.json โ€” BaT cross-reference: resurfaced VINs, repeat-VIN history, seller scorecard, bid log analytics.

Example

$ curl https://carstats.pages.dev/api/v1/ferrari-296-gtb.json | jq '.market_state'
{
  "state": "Stable",
  "liquidity_score": 44,
  "median_ask": 319998,
  "confidence_adjusted_price": 319900,
  "bat": {
    "bat_model_query": "ferrari-296",
    "median_sold_6mo": 297000,
    "rnm_rate": 0.49
  }
}

Schema notes

Update cadence โ€” bundles refresh nightly via the carstats launchd job. generated_at ISO-8601 timestamp at the root of each bundle.

Schema versioning โ€” this is v1. Breaking changes will publish under /api/v2/. Additive fields will land in v1 without version bump.

Caching โ€” Cloudflare edge cache, ~1h TTL. If you need real-time, you're looking at the wrong endpoint anyway (this is a daily-batch dataset).

VIN data caveat โ€” VINs surface in relisted_vins and bat.resurfaced only. These are scraped from public BaT auction pages where VINs are always public.

List of model slugs

SlugLabelBrandActive
ferrari-296-gtb Ferrari 296 GTB Ferrari 124
ferrari-296-gts Ferrari 296 GTS Ferrari 109
ferrari-sf90-spider Ferrari SF90 Spider Ferrari 76
ferrari-sf90-stradale Ferrari SF90 Stradale Ferrari 82
lambo-aventador-sv-coupe Aventador SV Coupe Lamborghini 4
lambo-aventador-svj-coupe Aventador SVJ Coupe Lamborghini 11
lambo-huracan-evo-awd Huracan EVO AWD Lamborghini 15
lambo-huracan-evo-rwd Huracan EVO RWD Lamborghini 25
lambo-huracan-performante Huracan Performante Lamborghini 7
lambo-huracan-sterrato Huracan Sterrato Lamborghini 14
lambo-huracan-sto Huracan STO Lamborghini 9
lambo-huracan-tecnica Huracan Tecnica Lamborghini 34
mclaren-675lt McLaren 675LT McLaren 3
mclaren-750s-coupe McLaren 750S Coupe McLaren 8
mclaren-750s-spider McLaren 750S Spider McLaren 8
mclaren-765lt-coupe McLaren 765LT Coupe McLaren 13
mclaren-765lt-spider McLaren 765LT Spider McLaren 7
nissan-gtr-2017plus-non-nismo Nissan GT-R 2017+ (non-Nismo) Nissan 43
nissan-gtr-nismo Nissan GT-R Nismo Nissan 4
porsche-911-gt3-992-1-coupe 911 GT3 Coupe (992.1, wing) Porsche 53
porsche-911-gt3-992-2-coupe 911 GT3 Coupe (992.2, wing) Porsche 115
porsche-911-gt3-rs-2024 911 GT3 RS (2024+) Porsche 20
porsche-911-st-2024 911 S/T (2024) Porsche 16
porsche-gt3-touring-992-1 911 GT3 Touring (992.1, 2022โ€“2024) Porsche 34
porsche-gt3-touring-992-2 911 GT3 Touring (992.2, 2025+) Porsche 23

Fair use

Read-only access is free. If you're building a product on top of this data, ping us (GitHub issues) so we know about you and can give a heads-up before schema changes.

Respect the edge cache โ€” there's no upside to bursting requests. The data only changes once a day.