Research use case

Football API for betting models
with joins that survive a provider change.

Fixtures, results, match and season statistics, standings, and dated odds observations joined through stable identifiers.

Why Stats API

Clean match inputs for model research.

Join fixtures, results, match and season statistics, standings and locally collected odds through the documented Stats API competition, season, team, player and match IDs. Inspect null fields, availability and observation times before including a row in research.

That last point is the one that bites researchers. A backtest joined on team names or upstream identifiers quietly fragments when a provider renumbers or renames, and the damage is invisible until results stop reproducing. Stats API identifiers are generated locally and mapped internally, so a historical series stays joinable.

Treat coverage explicitly in the feature pipeline. Statistics reach far fewer competitions than fixtures do, so a naive join produces silent nulls that a model will happily learn from. Filter on the coverage flag, and record which competitions contributed to a fitted parameter.

Use scheduled fixtures and completed scores as reproducible inputs for research, feature engineering, and evaluation pipelines.

Odds, lineups and nullable expected goals are available where observed. Predictions and betting signals are not supplied. Named bookmaker and player-market coverage varies; the live odds feed has no verified bookmaker attribution.

01

Reproducible inputs

Stable IDs help join match results across collection runs.

02

Explicit boundaries

No implied betting edge, prediction claim, or undocumented odds field.

03

Export-friendly JSON

Date filters support incremental server-side research collection.

Research scope

Model inputs with explicit availability.

Build from observed football records and odds snapshots. Keep missing fields, source timestamps, expiry and market suspension visible. Predictions and a betting edge are not supplied.

Model inputs
Available now
Fixtures and results ✓ Scheduled and completed matches filterable by competition, season, team and UTC date.
Team match statistics ✓ Corners, shots, possession, cards and expected goals per side.
Player match statistics ✓ Per-appearance rows for minutes, shots, passing and duels where observed.
Standings ✓ League tables by season or team for form and position features.
Stable identifiers ✓ Locally generated IDs, so a historical series stays joinable across provider changes.
Source elsewhere
Not published today
Complete odds history — Current observations are not a guaranteed archive of closing lines or every bookmaker.
Predictions — No model output, ratings, or betting signals.
Shot and heat maps — Positional data is not published.
Uniform statistics coverage — Statistics reach fewer competitions than fixtures. Filter on the coverage flag.
Research workflow

Build a reproducible training set.

Pull completed matches for a season, join team statistics on the match ID, and record which competitions carried statistics. That last column is what makes a backtest reproducible a year later.

Review the match contract →
1 · Find a competition ID
curl --silent --show-error \
  "https://stats-api.com/api/v1/football/competitions?q=Premier%20League" \
  -H "Authorization: Bearer ${STATS_API_KEY}" \
  -H "Accept: application/json"
2 · Fetch its completed matches
curl --silent --show-error \
  "https://stats-api.com/api/v1/football/matches?competition_id=${COMPETITION_ID}&status=finished" \
  -H "Authorization: Bearer ${STATS_API_KEY}" \
  -H "Accept: application/json"
Build with football data

One key. One contract.
A clearer path to production.

View pricing →