"What 22,559 professional Counter-Strike matches look like as a dataset"
Jul 10, 2026
Bottom line: Our corpus holds 22,559 completed professional Counter-Strike matches as of 10 July 2026, going back to November 2020. 16,089 of those were played on Counter-Strike 2; the other 6,470 predate its September 2023 launch and were played on CS. Per-player stats exist for 20,426 matches — 90.5% of completed ones. Those four numbers say more about what you can and cannot model than any coverage table.
Most data providers publish a match count and stop. A match count on its own is close to meaningless: it tells you nothing about which era the matches come from, how much of the detail survived ingestion, or where the gaps sit. Here is the full shape of ours, with the awkward parts left in.
The era split nobody mentions
Counter-Strike 2 replaced CS on 27 September 2023. That is a hard boundary in a way most sports-data boundaries are not — the game engine changed, the movement changed, and the economy was retuned.
| Era | Completed matches | Share |
|---|---|---|
| Counter-Strike 2 (from 2023-09-27) | 16,089 | 71.3% |
| CS (before 2023-09-27) | 6,470 | 28.7% |
| Total | 22,559 | 100% |
This matters because "22,000+ CS2 matches" would be a false claim, and you will see providers make it. Roughly three in ten of any long-horizon Counter-Strike corpus is CS. We serve all of it under one schema — the competitive lineage is continuous, rosters and tournaments carry across — but the label has to be honest, and a model trained across the boundary should know the boundary is there.
If you are backtesting, the CS rounds are usable history, not interchangeable data. Treat the era as a feature, not a footnote.
Where the depth actually stops
Coverage degrades as you go deeper into a match. The pattern is completely typical of competitive-esports data and is worth stating plainly:
- Fixtures, results, map scores — effectively complete across all 22,559 completed matches.
- Per-player match stats (K/A/D, ADR, KAST, clutches, multi-kills) — present on 20,426 matches, or 90.5% of completed ones.
- Per-round detail (economy, duels) — thinner still, and concentrated in the tier-one events that are covered most closely.
The ~9.5% of completed matches with no per-player stats are not random. They cluster in lower-tier qualifiers and regional online leagues, where nobody was recording at that granularity. Any player-level model built on this data is implicitly a model of the matches people bothered to record, which skews toward better teams at bigger events. That is a real selection effect and it does not go away by ignoring it.
The reference data underneath
| Entity | Count |
|---|---|
| Players | 4,599 |
| Teams | 1,483 |
| Tournaments | 868 |
The team count is larger than most people expect, and it is the single best illustration of why entity resolution is the hard part of esports data. Counter-Strike organisations rename, get acquired, field academy sides, and appear under regional variants. 1,483 team rows do not mean 1,483 currently-active organisations — they mean 1,483 distinct competitive entities we have had to keep separate, and keep stable, across nearly six years.
Player counts have the same problem in miniature: nicknames change, and the same person can appear across a decade of rosters.
Why we published the awkward numbers
A dataset you cannot interrogate is a dataset you cannot trust. The three facts above — a 28.7% CS share, a 90.5% stat-coverage ceiling, and 1,483 team entities that needed resolving — are the ones that would have bitten you three weeks into a project. Better to know now.
Every figure here was pulled from production on 10 July 2026 and rounded nowhere. You can reproduce all of it through the CS2 data API; the guides show how to page through matches, and the learn hub explains the metrics themselves.