Two New Tables and 17 New SQL Functions Are Live on the Tigzig Cricket Database. Playing XIs, and a Player Registry Mapped to ESPN Cricinfo.
Published: September 10, 2026
Two new tables covering players, and 17 new SQL functions are live on the Tigzig cricket database - ODI, T20, Test and IPL ball-by-ball from 2001 till date. Refreshed twice daily. Run direct SQL on Postgres / DuckDB or download the full database.
The first is match_players, giving the playing XI, teams and match officials for every game across 292,000+ rows. The second is people, an 18,500+ player registry that maps unique player identifiers directly to ESPN Cricinfo IDs with a 99.8% match rate.
Alongside the new tables, 17 new SQL analytics functions are enabled on Postgres and DuckDB, covering window functions like dense_rank, lag and lead, list aggregations like string_agg and array_agg, and date extraction.
The database covers ~11,000+ matches and 5.3 million+ records in total. You can query it directly with read-only SQL, or download the full database in DuckDB, SQLite, Parquet or CSV. Download manually or via API.
Free, no signup, no API key.
Docs
- For you: tigzig.com/apis/database
- For your AI: db-mcp.tigzig.com/openapi.json
The two new tables, and how they join
Up to now, ball_by_ball and match_info had player names as plain text strings, which works fine until two players share a name or you want to pull in external stats.
The match_players table connects each match_id to individual players and officials with a stable identifier, listing the full playing XI, team and match roles. Every non-null identifier in that table resolves cleanly into the people registry.
In people, 99.8% of records carry the ESPN Cricinfo player ID in key_cricinfo. That means you can take any match lineup from this database and link it directly to Cricinfo profiles, career numbers or external datasets without having to write fuzzy name-matching logic.
Both tables join with match_info on match_id, and people joins on identifier.
Data from cricsheet.org and served as is. Run your own diagnostics and validations.
The new SQL functions, and what you can do with them
Earlier, if you wanted a list of players in a match or cumulative partnership totals, you had to pull raw rows and stitch them together in Python or Excel. With string_agg and array_agg enabled, you can roll up an entire playing XI or dismissal sequence into a single row per match directly in your SELECT statement.
The window functions like dense_rank, lag and lead let you calculate ball-by-ball momentum, batting order shifts, or compare consecutive deliveries without self-joins. And functions like date_part, variance and greatest take care of calendar splits and basic distribution stats in the query itself. Most of the new functions run on both engines, and a few follow one dialect.
The endpoints are public if you want to run SQL against them
And the full database with the new tables, in DuckDB, Parquet, SQLite or CSV, is at db-mcp.tigzig.com/downloads via API, with manual downloads at tigzig.com/apis/database.

Compliance note
Data source is Cricsheet (cricsheet.org), licensed ODC-BY 1.0. TigZig is not affiliated with or endorsed by Cricsheet.
Working on something similar? How I work covers the rates, the availability and what I take on.