1.7M+ historical game closing lines with continuous coverage back to 2005, plus 30M+ player prop closing lines since June 2022. One flat-cost call can mix moneylines, spreads, totals, and prop keys - the raw material for model backtests and CLV tracking. Free tier, no card required.
Historical is split by product shape so modelers can tell prices from
results - we do not derive or invent missing odds. Both archive counts are
floors that grow daily; /v1/historical/stats reports the live
numbers for free.
1.7M+ game closing lines with continuous coverage from 2005 (deepest in
NFL and soccer) and 30M+ player prop closing lines since June 2022. Mix
game-line and prop market keys freely in one call, filter by
season, date, dateFrom/dateTo,
bookmakers, or a player substring - a flat 10
credits per call.
GET /v1/historical/sports/{sport_key}/closing-odds
Historical odds at a timestamp, on the same date,
regions, and markets parameters and response
shape as the-odds-api's historical endpoint - existing code works after a
base-URL change. Priced like theirs too: 10 × markets ×
regions per call.
GET /v1/historical/sports/{sport_key}/odds?date=…
A match/result archive for schedules, teams, and scores (rows with real
prices carry has_odds=true), and a period-market archive that
replays how quarter, half, and F5 lines moved state by state.
GET /v1/historical/sports/{sport_key}/matches
GET /v1/historical/sports/{sport_key}/period_markets
Daily closing-line exports as CSV or JSON for 1 credit - the cheap path
for warehouse loads. And before you spend anything,
/v1/historical/stats and
/v1/historical/coverage are free: live row counts, per-sport
date ranges, and per-source depth.
GET /v1/historical/closing-lines.csv
GET /v1/historical/stats
Backtests die on silent coverage gaps. These pages and endpoints are free and read from the same archive you'd be buying, so check your sport's depth first.
Per-sport, per-book depth of the closing-line archive - which years and which sources actually have rows.
parlay-api.com/historical-coverage →The free /v1/historical/stats endpoint: live row counts and
earliest/latest dates per sport and bookmaker. No key needed.
Bulk historical datasets and export options, for teams that want files rather than API calls.
parlay-api.com/datasets →the-odds-api's docs state that "The usage quota cost for historical odds is 10 per region per market" (their v4 guide, read 2026-08-25) - so one US snapshot with h2h, spreads, and totals costs 30 credits, per timestamp, and the endpoint is only available on paid usage plans. ParlayAPI's closing-odds archive is a flat 10 credits per call no matter how many markets you mix in - game lines and player props together - and the free tier's 1,000 monthly credits cover 100 closing-odds pulls with no card on file.
# the-odds-api: 10 credits x 1 region x 3 markets = 30 credits per snapshot, # paid plans only (their v4 guide, read 2026-08-25) GET api.the-odds-api.com/v4/historical/sports/americanfootball_nfl/odds?regions=us&markets=h2h,spreads,totals&date=2024-10-18T12:00:00Z # ParlayAPI: whole day of closing lines, game lines + props mixed = flat 10 credits, # works on the free tier GET parlay-api.com/v1/historical/sports/americanfootball_nfl/closing-odds?date=2024-10-18&markets=h2h,spreads,totals,player_pass_yds
the-odds-api's historical product is a genuine strength of theirs: point-in-time snapshots at 10-minute intervals from June 2020 and 5-minute intervals from September 2022 (per the same guide, read 2026-08-25). If your research needs intraday line movement across several years - not just closing prices - that snapshot density beats our archive, whose line-movement history only starts when we began capturing a given market. Our own the-odds-api-compatible snapshot endpoint also prices the same way theirs does (10 × markets × regions); the flat pricing above is specific to the closing-line archive. Full comparison: ParlayAPI vs the-odds-api.
Endpoint shapes below are the real ones from the API docs.
Auth is either the-odds-api-style apiKey= query param or an
X-API-Key header.
curl "https://parlay-api.com/v1/historical/sports/americanfootball_nfl/closing-odds?date=2024-10-18&markets=h2h,spreads,totals,player_pass_yds&bookmakers=pinnacle" \ -H "X-API-Key: YOUR_KEY" # a whole season of one player's prop closes curl "https://parlay-api.com/v1/historical/sports/basketball_nba/closing-odds?season=2023-24&markets=player_points&player=jokic" \ -H "X-API-Key: YOUR_KEY" # free, no credits: size the archive for your sport first curl "https://parlay-api.com/v1/historical/stats"
import requests BASE = "https://parlay-api.com" H = {"X-API-Key": "YOUR_KEY"} # 1) When you place (or nearly place) a bet, snapshot the live price live = requests.get(f"{BASE}/v1/sports/americanfootball_nfl/odds", params={"regions": "us", "markets": "spreads"}, headers=H).json() my_price = -108 # the price you actually took # 2) After kickoff, pull the closing line for the same game/market/book closes = requests.get( f"{BASE}/v1/historical/sports/americanfootball_nfl/closing-odds", params={"date": "2024-10-18", "markets": "spreads", "bookmakers": "pinnacle"}, headers=H).json() # 3) CLV = your price vs the closing price. Beat the close over 200+ bets # and the model is real. For batch grading, POST /v1/clv scores a whole # bet list against closing lines in one call.
SDK on GitHub:
JacobiusMakes/parlay-api-python
(MIT-licensed). Building with an AI agent instead? There's an official
MCP server with 22 tools:
pip install parlayapi-mcp.
The closing-line archive holds 1.7M+ historical game closing lines with
continuous coverage back to 2005 (deepest in NFL and soccer), plus 30M+
player prop closing lines going back to June 2022. Both counts are floors
that grow daily. GET /v1/historical/stats is free and returns
the live row count and per-sport date ranges, so you can size the archive for
your exact sport before spending a credit.
A closing-odds call is a flat 10 credits, no matter how many markets you
request - you can mix h2h, spreads,
totals, and player prop keys in one call. For comparison,
the-odds-api's docs state its historical usage cost is 10 per region per
market, so a 3-market US call is 30 credits there per snapshot
(their
v4 guide, read 2026-08-25), and its historical endpoint is only available
on paid plans. ParlayAPI's free tier includes 1,000 credits per month with no
card - enough for 100 closing-odds pulls. Note our the-odds-api-compatible
snapshot endpoint prices the same way theirs does (10 × markets
× regions); the flat price is on the closing-line archive.
Yes. The archive holds 30M+ player prop closing lines going back to June
2022. Query /v1/historical/sports/{sport_key}/closing-odds with
prop market keys like player_points or
player_strikeouts, filter to a single player with the
player parameter, and pull whole seasons with
season or dateFrom/dateTo - all inside the same
flat 10-credit call as game lines. More on the
player props API page.
Yes. GET /v1/historical/sports/{sport_key}/odds mirrors
the-odds-api's historical snapshot endpoint - same date,
regions, and markets parameters, same response
shape - so existing the-odds-api historical code works after a base-URL
change. One difference you must handle: on this endpoint
last_update and commence_time are nullable, and are
null on most rows today; a null means the capture time was not recorded,
never that the price is bad.
Snapshot your price at bet time from
/v1/sports/{sport_key}/odds, then after the game starts pull the
closing price from
/v1/historical/sports/{sport_key}/closing-odds and compare. For
batch grading there is a dedicated POST /v1/clv endpoint that
scores a list of bets against closing lines in one call. Tracked over a few
hundred bets, cumulative CLV is the standard test of whether a betting model
has real edge.
CFB Week 0 kicks off August 29 and the NFL follows September 9. Sign up free - 1,000 credits a month, no card required - and run your first closing-line backtest today.