Historical sports odds and results by API
Get win rate, ROI and market calibration as JSON for any slice of historical odds and results. The Explorer runs on the same data
Querying the API
Send your key and filters and get the metrics back as JSON. Base URL https://flintstat.com/api/v1
curl https://flintstat.com/api/v1/query \
-H "Authorization: Bearer $FLINTSTAT_KEY" \
-H "Content-Type: application/json" \
-d '{
"sport": "basketball",
"filters": {
"is_favorite": ["false"]
},
"min_odds": 2,
"max_odds": 5
}'{
"data": {
"bets": 15433,
"suppressed": false,
"win_rate_pct": 35.2,
"roi_pct": -3.33,
"roi_se_pct": 1.1,
"roi_avg_pct": -3.33,
"roi_avg_se_pct": 1.1,
"books_avg": 1,
"implied_prob_pct": 36.33,
"avg_odds": 2.917,
"seasons_total": 16,
"seasons_positive": 1,
"roi_std_pct": 2.45,
"roi_worst_pct": -6.47,
"roi_by_season": [
{
"season": "2007-08",
"bets": 975,
"roi_pct": -1.81,
"roi_avg_pct": -1.81
}
],
"calibration": [
{
"bucket": "2.0-2.5",
"bets": 5477,
"suppressed": false,
"implied_pct": 45.4,
"actual_pct": 43.91,
"roi_pct": -3.14,
"roi_avg_pct": -3.14
}
]
},
"sources": [
{
"sport": "basketball",
"title": "NBA Betting Data",
"author": "cviaxmiwnptr on Kaggle",
"url": "https://www.kaggle.com/datasets/cviaxmiwnptr/nba-betting-data-october-2007-to-june-2024",
"licence": "CC0 1.0",
"licence_url": "https://creativecommons.org/publicdomain/zero/1.0/",
"origin": "SportsbookReviewsOnline (sportsbookreviewsonline.com), the original source of the odds",
"notice": null,
"note": "Modified, team names unified and aggregates computed"
}
]
}What you get
Metrics
- Bets, win rate and ROI at the best and at the average price for any slice
- Standard error of ROI, to tell noise from an edge
- Market calibration by odds range
- ROI season by season
- Leagues with favorite win rate and bookmaker margin
- Teams, players and fighters with their ROI
Limits
- Test gives 100 requests in total, 10 per minute
- The monthly quota resets at midnight UTC on the 1st of each month, not on the billing date
- Metrics stay hidden for cells under 20 bets
- Two requests at a time per account
License
Personal, non-commercial use
Credit Data by Flintstat and the sources below. Do not resell the data as a dataset or feed
Endpoints
| Method | Path | Returns |
|---|---|---|
| GET | /api/v1/sports | Each sport with its bets, events and first and last season |
| GET | /api/v1/sports/{sport}/filters | A sport's filters with their values and the odds range |
| POST | /api/v1/facets | The filter values still available for a selection |
| POST | /api/v1/query | Count, win rate, ROI at the best and average price, calibration by odds range and ROI per season for a filtered slice |
| GET | /api/v1/leagues | Each league with its favorite win rate, ROI and bookmaker margin |
| GET | /api/v1/sports/{sport}/entities | Teams, players and fighters with their ROI, page by page |
Sources
Every API answer names its sources. Their licenses ask you to credit them wherever you show the data
NBA
MLB
The information used here was obtained free of charge from and is copyrighted by Retrosheet. Interested parties may contact Retrosheet at "www.retrosheet.org".
UFC
NFL
Free test key
Test keys are free, for personal, non-commercial use with credit to Data by Flintstat
| Plan | Price | Requests |
|---|---|---|
| TestFor evaluation, no card neededGet a test key | $0 | 100 in total |
- Every served sport, full history
- Every filter and metric
- JSON responses
- Hard limit, no overage
API terms
- Personal, non-commercial use
- Credit Data by Flintstat and the dataset sources
- No resale or redistribution of the data as a dataset or feed
- Fair use of the quota
- We may revoke keys for abuse
Questions
How do I get a key?
Sign in, confirm your email and create a key on the keys page. The Test plan gives 100 requests in total and 10 per minute, no card needed
What is in the dataset?
Historical odds and results in one schema, with the price, the implied probability and whether each outcome won
What format does the API return?
JSON, one plain object per response
How do you work out the metrics?
We back every bet in a slice at the best and at the average price and count every win and loss, with no model. ROI is the average profit per unit staked. Few bettors always get the best price, so the average price is the realistic baseline
What can I do with the data?
Use it for your own, non-commercial work and credit Data by Flintstat and the sources. Reselling or republishing the data as a dataset or feed is not allowed