Built and run by one person.

Data validation

The cricket data served by db-mcp.tigzig.com is checked on a schedule and every result is published here, pass or fail. The same battery runs against both database engines behind the API and compares them row for row.

All 12 checks passed · last run 21 Aug 2026, 17:00 IST (11:30 UTC)

Checks

CheckWhat it provesResultBoth enginesRemarks
matches_without_ballsEvery ODI and T20 match has ball-by-ball data behind it.PASSpostgres: 3 rows, duckdb: 3 rowsTest matches show no ball data because only ODI and T20 ball-by-ball is served. Expected, not a gap.
negative_or_absurd_runsNo delivery scores below 0 or above 7 runs.PASSpostgres: 2 rows, duckdb: 2 rows
null_densityNo missing venue, bowler, striker, runs or season.PASSpostgres: 2 rows, duckdb: 2 rows
orphan_ballsNo ball belongs to a match that does not exist.PASSpostgres: 2 rows, duckdb: 2 rows
over_index_boundsNo T20 innings past over 19, no ODI innings past over 49.PASSpostgres: 2 rows, duckdb: 2 rows
balls_per_over_extremesDeliveries per over stay in a plausible range.INFOpostgres: 8 rows, duckdb: 8 rowsOvers longer than six deliveries are wides and no-balls. The longest on record here is fifteen.
innings_per_matchInnings counts per match are 1, 2, or a super over.INFOpostgres: 7 rows, duckdb: 7 rowsThe one 8-innings T20 is Netherlands v Nepal, 2025, which went to three super overs. Genuine, not an error.
matches_by_typeFormat mix and per-format date span agree across engines.INFOpostgres: 3 rows, duckdb: 3 rows
recent_matchesRecent matches are present, so the twice-daily refresh is running.INFOpostgres: 19 rows, duckdb: 19 rows
recent_testTest matches are current in the match table.INFOpostgres: 3 rows, duckdb: 3 rows
row_countsBoth engines hold the same number of rows, matches and date span.INFOpostgres: 3 rows, duckdb: 3 rows
schema_match_infoThe column list and its order have not changed.INFOpostgres: 24 rows, duckdb: 24 rows

PASS is an assertion that held. INFO is a distribution published for inspection rather than asserted - deliveries per over and innings per match are legitimately variable, so calling them failures would make this page noise.

Previous runs

RunChecksFailed
21 Aug 2026, 17:00 IST (11:30 UTC)120
21 Aug 2026, 16:50 IST (11:20 UTC)80
21 Aug 2026, 16:49 IST (11:19 UTC)81
21 Aug 2026, 16:40 IST (11:10 UTC)86

What is being checked, and against what

Cricsheet publishes the source data. A pipeline parses it into a master file, and a refresh job loads that master into the two engines the API serves from. The checks on this page run at the far end of that chain, against what the API actually returns - not against an internal copy of it.

Anything found is published as found. On the first run of this battery the two engines disagreed by one row: a Test match was present in one and missing from the other, because the refresh job's skip test looked only at ball-by-ball data and a Test match adds none. That is fixed, and it is the kind of thing this page exists to surface rather than quietly correct.

Machine-readable: /index.md