The game-line archive holds 1.7M+ closing lines and includes history from 2005. A separate player-prop archive holds 30M+ rows, but availability varies by sport, market, bookmaker and date. Ask support to verify an exact prop scope before choosing a paid plan.
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 live
game-line numbers for free; it does not report player-prop coverage.
The game-line archive holds 1.7M+ closing lines and includes history from
2005, deepest in NFL and soccer. The player-prop archive holds 30M+ rows, but
availability varies by sport, market, bookmaker and date. Mix game-line and
prop market keys in one flat-cost call.
Use dateFrom/dateTo for a prop date range, with
bookmakers or a player substring to narrow it.
The season filter applies to game lines only.
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 for game history. These summaries do not
establish the date range of a specific player prop.
GET /v1/historical/closing-lines.csv
GET /v1/historical/stats
Start with the free game-history summaries below. They describe game-line coverage, not the availability of each player prop. For a prop backtest, verify the league, market, bookmakers and date range you need before choosing a paid plan. Use the documentation to check your query, or ask support to confirm the requested scope.
Per-sport, per-book depth of the game-line archive - which years and which sources actually have rows. It does not report player-prop coverage.
parlay-api.com/historical-coverage →The free /v1/historical/stats endpoint: live game-line 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 # Verify the exact prop scope first, then supply your backtest date. # 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=${BACKTEST_DATE}&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.
# Ask support to verify the exact sport, market, bookmaker and date scope first. BACKTEST_DATE="YOUR_VERIFIED_DATE" PROP_DATE_FROM="YOUR_VERIFIED_START_DATE" PROP_DATE_TO="YOUR_VERIFIED_END_DATE" curl "https://parlay-api.com/v1/historical/sports/americanfootball_nfl/closing-odds?date=${BACKTEST_DATE}&markets=h2h,spreads,totals,player_pass_yds&bookmakers=pinnacle" \ -H "X-API-Key: YOUR_KEY" # request one player's prop closes for your verified date range curl "https://parlay-api.com/v1/historical/sports/basketball_nba/closing-odds?dateFrom=${PROP_DATE_FROM}&dateTo=${PROP_DATE_TO}&markets=player_points&player=YOUR_PLAYER" \ -H "X-API-Key: YOUR_KEY" # free, no credits: size the game-line archive for your sport 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 game-line archive holds 1.7M+ closing lines and includes history from 2005, deepest in NFL and soccer. The separate player-prop archive holds 30M+ rows, but availability varies by sport, market, bookmaker and date. Free historical stats and coverage endpoints describe game lines only and cannot confirm a specific player prop. Before choosing a paid plan, ask support to verify the exact league, prop market, bookmakers and date range you need.
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, where the requested selections are archived. The player-prop archive
holds 30M+ rows, but sport, market, bookmaker and date coverage can start at
different times or contain gaps. Free historical stats and coverage
endpoints describe game lines only, so ask support to
verify the exact prop scope before choosing a paid plan. 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 select the prop date range with
dateFrom/dateTo. The season filter applies to
game lines only. 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.