§ data coverage

What we actually have.

Every field in the foot.io schema, with its live fill-rate. No marketing averages — this page pulls the raw numbers every time it loads. If a column says 23% coverage, it's because 77% of rows have it null. We'd rather show you the real floor than promise a ceiling.

Database totals

§ row counts across the key tables
Loading…

How to read the coverage tables below

STRONG

≥ 70% coverage

Fill-rate table-stakes. You can safely rely on this field being present when building against our API.

MEDIUM

20% – 69% coverage

Populated for most well-documented entities (top leagues, famous players) but sparse on the long tail.

SPARSE

1% – 19% coverage

Narrow-source fields (open event data, top-5 league advanced stats, FPL Premier League only). Expect gaps.

EMPTY

< 1% coverage

Schema exists, ingester scaffolded or running. Check back soon — or subscribe to the changelog.

Player field coverage

§ of 54,257 players · refreshed from data_coverage_snapshot
Loading…

Team field coverage

§ of 4,213 clubs + national teams
Loading…

Competition field coverage

§ across every competition in the DB
Loading…

National-team rankings

§ elo + FIFA rankings coverage on national teams
Loading…

Match field coverage

§ section-by-section indexing across every finished match
Loading…

Match-data depth by competition

§ of matches that were played (final score recorded), what % have lineups / events / per-player stats — the competitions with the deepest indexing first. Full per-season detail: GET /rest/v1/competition_season_coverage
Loading…

Referee field coverage

§ across every referee in the DB
Loading…

Manager field coverage

§ across every manager / head-coach in the DB
Loading…

Stadium field coverage

§ across every stadium in the DB
Loading…

Season field coverage

§ across every competition-season pair in the DB
Loading…

Modelled metrics · xG v1i

§ live coverage of shot_events.xg (published) and xg_modeled (foot.io v1)

For every shot with location coordinates, we either have a published xG value or fill the gap with our own model. The split below shows how much of the table is currently in each state.

Loading…
Loading…

Refresh cadence

This page reads from data_coverage_snapshot, a materialized view refreshed nightly by our scheduled data-quality pipeline. If you want to know exactly what the DB holds right this second, use the query below.

GET /rest/v1/data_coverage_snapshot?select=*
     ↳ live fill-rate per (entity, field) pair — the source of this page

POST /rest/v1/rpc/refresh_data_coverage
     ↳ force a coverage refresh (service-role only)