Historical Odds Archive

Multi-source historical betting data for backtesting. Prices are real book rows only. Result-only archives are labeled separately so modelers know exactly what is price history and what is match history.

Historical product matrix

Use the endpoint that matches the evidence you need. We keep price archives, closing lines, result archives, and forward line movement separate on purpose.

DatasetEndpointBest forGuarantee
Point-in-time odds/v1/historical/sports/{sport_key}/oddsTOA-style historical pullsReal historical price rows inside the tier window.
Closing odds/v1/historical/sports/{sport_key}/closing-oddsPregame backtestsLast real price before commence where we have that archive.
Matches/results/v1/historical/sports/{sport_key}/matchesSchedules, teams, scores, esports training setsEach row exposes has_odds; result-only rows are not odds history.
Line movement/v1/sports/{sport_key}/line-movementCLV and before/after movementForward capture from our live tables, not a backfilled simulation.

Current esports status: CS2, Dota 2, and Valorant have match/result archives plus forward Pinnacle price rows from May 2026 onward. They do not yet have deep historical odds movement for prior years.

Total rows
odds rows in archive
Sports
covered
Sources
distinct data sources
Score coverage
rows with final result

Cross-source verification

Every claim a backtester wants to make rests on: are the prices real, do the games settle correctly, and is more than one source telling me the same thing? We pre-deduplicated and cross-tabulated for you.

Unique games
distinct (date, sport, teams)
2+ sources
games with 2+ books quoted
5+ sources
games with 5+ books quoted
10+ sources
games with 10+ books quoted

Where the data comes from

Six independent feeds, none derived or interpolated. Every row is a real endpoint reading.

loading…

Sports coverage

Top sports by row count. Each sport lists how many distinct sources we have prices from. Soccer leagues get the deepest cross-source coverage thanks to football-data.co.uk's bookmaker grid.

SportRowsSourcesFirst dateLast date
loading…

Source breakdown

Each source is a distinct upstream. pinnacle and pinnacle_open are our own forward-going daily snapshots from the live Pinnacle endpoint. draftkings_espn is the DraftKings closing line as published by ESPN. nflverse_pbp is the canonical community NFL play-by-play archive (MIT licensed) covering 1999-2024. hoopr_nba is sportsdataverse's NBA betting-lines archive (MIT) going back to 2017. cfbd_consensus and the per-book cfbd_* entries come from collegefootballdata.com's /lines API across 11 NCAAF seasons. Each is an independent read of the market.

SourceRowsSportsFirst dateLast date
loading…

How to query it

Same auth as the rest of the API. The endpoint is paginated; you can filter by date range, source, and sport.

# Example: NBA closing lines from any source, last 30 days
curl "https://parlay-api.com/v1/historical/sports/basketball_nba/odds?\
start=2026-04-01&end=2026-04-30" \
  -H "X-API-Key: YOUR_KEY"

# Filter to a specific source for an apples-to-apples backtest
curl "https://parlay-api.com/v1/historical/sports/baseball_mlb/odds?\
source=draftkings_espn&start=2026-04-01" \
  -H "X-API-Key: YOUR_KEY"

# Coverage report (no auth required)
curl "https://parlay-api.com/v1/historical/coverage"