Snapshot taken 2026-08-24 05:41:02 UTC · 22s ago · collector runs every minute
Status & data freshness
A collector measures the database /v1 serves from once a minute and publishes the result here.
Every figure is measured — none is a target, an estimate or a promise. When something cannot be measured, it says so.
Real football only; esoccer excluded. Matches the feed left in a running state more than 4 hours after kickoff are not counted.
Age of the most recent write to in-play statistics (attacks, shots, possession) across all matches in play, relative to now.
Age of the most recent bookmaker price change stored for a match in play, relative to now.
Gap between consecutive price changes for the same match; 127 samples from 60 runs.
Matches that kicked off between 27 h and 3 h before the snapshot and carry a final (FT-90) result. The remainder were postponed, abandoned, or not finalised by the feed.
Most recent write to the league, corner and card tables served by /v1/standings, relative to now.
API availability
Application health endpoint: /up (200 when the app is serving). Independent third-party uptime history is not published yet; the freshness figures above are the current signal of pipeline health.
Definitions
Snapshot. A scheduled collector runs every minute, reads the source tables and stores one compact record; this page shows the newest record and its age. If the age exceeds 10 minutes the page flags the snapshot as stale.
Age / delay. Seconds between the timestamp the source database stored on a row and the moment this page rendered. It is a measurement of the pipeline at that moment, not a service level.
Live scores and statistics. Written as events arrive from the feed. "Newest live-stat write" is the single most recent write across every match in play.
Odds ticks. One row per bookmaker price change. The refresh figure is the gap between consecutive ticks for the same match, pooled over up to 10 in-play matches per run and all runs in the last 60 minutes; median and 95th percentile are reported with the sample size. Pre-match prices move far less often than in-play prices.
Results. Final-time score after 90 minutes plus stoppage; extra time and penalties are excluded (the betting convention). A match counts as settled only when the feed marks it finished — a final score is never inferred.
Standings. Recomputed by the feed after results settle; the figure is the newest row in the standings tables.
Known limitations
Matches the feed never finalises — abandoned, postponed mid-way, or lost to a source outage — are never auto-marked finished. In /v1 such a fixture currently keeps an in_play status with the raw feed code in status_code. Build settlement logic on status = "finished" only.
Coverage depth is not uniform. Top competitions carry live statistics and full odds; smaller ones may have fixtures and results only. The league coverage list shows what each competition includes.
Not included: injuries, transfers, player profiles, player-level statistics and xG. We do not claim parity with providers that offer those.
Machine-readable twin of this page: /status.json.
Query it yourself
Grab a free key and hit /v1/fixtures?status=live — what you see here is what you get.