Run Your Own SQL on My Cricket Database. T20 and ODI Ball by Ball Since 2002, Free, No Signup and No Key.
Published: August 17, 2026
Cricket data analysts, now run your own SQL on my cricket database, free, with no signup and no key. T20 & ODI Ball by ball since 2002, 2M+ deliveries, 6000+ matches, PostGres & DuckDB over API or connect your agent via MCP.
Match level detail like winner, venue, toss and player of the match in a second table you join on match_id, so whether a ground favours batting first, or how a batter goes against a particular bowler, is a single query.
The service has been live for a week and usage is growing faster than I was expecting... it went up as an experiment on a small quota and the latencies show it. Some queries have been timing out under load and I have been optimizing performance. Next - both engines are moving to my dedicated API server over the next few days, with the query performance and concurrency tuned properly. Same endpoints throughout, nothing changes at your end.
- API Docs (agents): db-mcp.tigzig.com/v1/openapi.json
- API Docs (humans): db-mcp.tigzig.com/redoc
More questions the same two tables answer
Other than the ones on the image, a few more that come out of the same two tables.
- How a batter actually gets out, the caught, bowled and lbw split, and whether it shifts against a particular bowler
- Which sides give away the most in wides and no balls, usually a bigger number than people expect
- Whether winning the toss is worth anything at a given ground, since the toss call and the result are both in there
- How scoring rates have moved season by season since 2002
- World Cup and tournament matches against plain bilateral series, using the
eventcolumn - Associate nations against the Full Members, which is a column in the match table rather than something you have to guess at
- And the officials are in there too, both umpires, the TV umpire and the match referee, if that is the sort of thing you want to dig into
A few things on the data side
match_info carries every format, so it holds more matches than either ball table does. Roughly 6,900 rows in there, of which about 2,600 are ODI and about 3,500 are T20, and the remaining 900 or so are Tests where the match level detail is present but the ball by ball is not. Join on match_id and filter on match_type, otherwise the denominator is wrong and the answer still looks reasonable.
The ball tables are format scoped per engine, ODI on Postgres and T20 on DuckDB, so no single query spans both, you run it twice and compare.
It is men's internationals, and that includes the Associate nations, so a plain top run scorers over the whole ball table pools every level of international cricket together. team1_icc_type and event sit in match_info if you want to narrow it.
Results cap at 1000 rows and the response carries a truncated flag, so check that before treating a leaderboard as the full list.
And the schema is small on purpose, two tables per engine, so information_schema or DESCRIBE will tell you everything there is rather than you guessing at column names.