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.

Matches in play at snapshot
1

Real football only; esoccer excluded. Matches the feed left in a running state more than 4 hours after kickoff are not counted.

Newest live-stat write
23s ago

Age of the most recent write to in-play statistics (attacks, shots, possession) across all matches in play, relative to now.

Newest in-play odds tick
15 min ago

Age of the most recent bookmaker price change stored for a match in play, relative to now.

In-play odds refresh, last 60 min
median 2689s · p95 23539s

Gap between consecutive price changes for the same match; 127 samples from 60 runs.

Results settled, last 24 h
697 / 730 95.5%

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.

Standings last written
74s ago

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.