Data coverage

Coverage you can
verify before buying.

Check whether your competition and season include the data your app needs. An available endpoint does not mean every match has statistics, lineups, or player data.

Available endpoints
Check coverage before integrating
Competitions✓Catalog and country metadata
Seasons✓Historical labels, available date ranges and tournament groups
Teams✓Stats API IDs and name search
Fixtures✓Dates, rounds, participants
Results✓Full-time scores
Match statistics✓Shots, possession, cards and nullable xG where supplied
Players & squads✓Profiles, team squads, and match and season player statistics, with started and played flags per match
Team season statistics✓Season totals where supplied; unknown fields stay null
Lineups & events✓Starting teams and match timelines, in the provider’s order, where covered
Availability flags✓Every match says which details are stored: timeline, lineups, team statistics and player statistics
Standings & absences✓Season tables and reported injuries or suspensions where covered
Referees✓Referee name for a match where ingested
Odds✓Pre-match odds (Bet365 and Pinnacle) and short-lived live odds, each with freshness and expiry fields; bookmaker and market coverage varies
Not currently available
Plan around these limits
Shot maps—Shot coordinates for a match. On the roadmap, not in the contract
Heat maps—Player touch maps for a match or a season. On the roadmap, not in the contract
Predictions—Ready-made outcome probabilities or betting picks
Guaranteed live timing—No sub-minute delivery or freshness SLA
Coverage varies by competition

Inspect coverage
competition by competition.

These guides describe specific historical fixtures-and-results datasets. For current seasons and richer fields, query /api/v1/coverage/leagues, then check the coverage flags returned for your chosen match.

Source policy

Swap the feed, keep the contract.

Coverage is not uniform, and we publish that rather than hide it. Fixtures and results reach far more competitions than match statistics do: a competition can carry results while carrying no corners, shots or possession. Every statistics response therefore states coverage.statistics_available for the match you asked about, so an uncovered competition returns an explicit answer instead of an error. Every match also carries details_available, which says whether Stats API holds a timeline, lineups, team statistics and player statistics for that exact match, so you can check before you ask. OpenFootball’s community-maintained CC0 data remains a historical bootstrap, not a live feed. The API serves each dataset as Stats API observed it at the latest successful ingestion, with no promised maximum age or refresh interval. GET /api/v1/coverage/summary reports that ingestion and artifact-retrieval time, while source_updated_at stays null and freshness_guaranteed stays false.

Source mappings support reviewed provider migrations. Unique reschedules and corrections can keep a stable ID; ambiguous matches are never guessed. If a fixture disappears from a complete snapshot, it is hidden as an inactive tombstone rather than mislabeled as canceled, and the same ID is restored if it reappears.

See the available endpoint contract →