Football stats API

Football stats API
for fixtures and results.

Query football fixtures, results, competitions, seasons, teams and match statistics — corners, shots, possession, cards and expected goals — through a stable JSON REST API. Every dataset and unavailable capability is described before you integrate.

Why Stats API

Football data your product can query without guessing.

Stats API turns enabled sources into normalized competition, season, team, fixture, result, statistic, lineup, timeline, standing, and player resources. Search by a human name once, retain the stable Stats API IDs, and use those IDs in later filters and joins.

Every response carries explicit source and ingestion timestamps. Statistics, lineups, timelines, standings, squads and injuries are available where the coverage flag says so — and the flag is in the payload, so a gap is never something you have to guess at. Odds, heat maps and season player aggregates are not published yet.

01

Stable resource IDs

Competition, season, team, and match IDs stay inside the public contract instead of exposing source-specific identifiers.

02

Fixture and result filters

Query matches by competition, season, team, status, or an inclusive UTC date window.

03

Match and player statistics

Corners, possession, shots, cards and expected goals per team and per appearance.

04

Coverage in the payload

Every statistics response states whether the competition is covered and when it was last observed.

05

Inspectable JSON contract

OpenAPI 3.1, predictable errors, pagination, UTC timestamps, and copy-ready requests make integration behavior visible.

Current football data coverage

Supported resources, with the gaps left visible.

The public contract and coverage ledger are the source of truth. Every statistics response carries a coverage flag and an observed ingestion time, so a gap is always visible in the payload rather than inferred.

Available now
25 of 35 endpoints
Competitions and seasons Search enabled competitions and list their seasons with stable IDs.
Teams and squads Normalised teams, rosters, and player records keyed by durable identifiers.
Fixtures and results Filter match records by competition, season, team, status, or date.
Match statistics Corners, possession, shots, cards and expected goals per team and per player.
Lineups and timelines Formations, starters, benches, and minute-stamped goals, cards and substitutions.
Standings and availability League tables by season or team, plus injuries and suspensions.
Contract and provenance Pagination, UTC timestamps, errors, cache headers, and observed ingestion times.
Not available today
Requires another source
Odds and predictions No bookmaker markets, betting signals, or model predictions.
Heat maps and shot maps Positional and spatial data is not published.
Season player aggregates Per-match player rows are available; season totals are yours to compute.
Sub-minute streaming In-play endpoints are polled on a schedule, not pushed. Read the observed time.
Football stats API example

Discover stable IDs, then filter the match collection.

Search by a human competition name once. Store the returned Stats API ID, pass it to the matches endpoint, and paginate using the documented response metadata.

Read the match endpoint guide →
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