Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ValveSoftware/counter-strike_regional_standings/llms.txt

Use this file to discover all available pages before exploring further.

The CS2 Regional Standings are Valve’s official system for ranking professional Counter-Strike 2 teams using results from third-party events played throughout the year. Rather than relying on ad-hoc selection, Valve processes real match outcomes to produce standings that are accurate, hard to game, and fully transparent — giving teams a clear, merit-based path to Major qualification.

What are regional standings?

The standings rank teams across three separate regions. Each region produces its own ordered list; a team’s region is determined by the plurality nationality of its active roster.
RegionCoverage
EuropeEuropean countries
AmericasNorth and South America
AsiaAsia and the rest of the world
Teams appear in exactly one regional standings table. When a roster’s players span multiple regions, the region with the most player representation wins. Ties are broken by region priority order.

Why they exist

Valve uses the Regional Standings to determine which teams receive direct invitations to the closed qualifier stage of a CS2 Major. Teams that rank highly enough skip the open qualifier entirely. All other teams must compete through the open qualifier to earn their spot. The standings are updated periodically up until the open qualifier cutoff. The final snapshot at that cutoff determines the invitation list.
Only teams that satisfy the ranking criteria — at least 5 matches played and at least 1 win — appear in the published standings tables.

Design goals

Valve defined three explicit goals when building the model. Every design decision in the pipeline flows from these principles.
The model is evaluated by measuring the relationship between expected and observed win rates. Valve runs through each week of historical match data, assigns point values using the preceding week’s standings, and checks whether predicted win probabilities match actual outcomes. The current model achieves a Spearman’s rho of 0.98 between expected and observed win rates — a strong signal that the rankings reflect true team strength.
Results are weighted by three factors that work together to resist manipulation: the age of the result (recent matches count more), the stakes of the event (higher prize pools carry more weight), and opponent quality (beating stronger teams is worth more). Crucially, playing in a low-stakes match carries no penalty — it simply offers minimal upside. There is never a reason to avoid competing.
The full model source code and a sample dataset are published in the open-source repository. Every team that appears in the standings has a per-team detail page showing exactly which matches contributed to their score, the age and event weights applied to each result, and the full formula used to compute their starting rank value and head-to-head adjustments.

Model overview

The model works in two phases. First, each team is assigned a seed rank derived from their historical performance — prize winnings, the network of opponents they have beaten, and LAN event wins. This seed rank is mapped onto a 400–2000 point scale. Second, the model runs every match in chronological order through a modified Glicko rating system (with fixed rating deviation, making it behave like Elo). Each match adjusts both teams’ ratings based on the difference between their current ranks and the actual outcome. The result is a final rank value that reflects both historical pedigree and head-to-head performance.
The Glicko rating deviation is fixed at 75, which simplifies the system to a standard Elo-style update. This keeps the math predictable and auditable.
For a full walkthrough of every step — from raw data ingestion to published output — see the pipeline documentation.

Explore the documentation

How standings work

End-to-end pipeline walkthrough from match data to published regional tables

Seeding and scoring

How prize winnings, opponent networks, and LAN wins produce a seed rank

Run the model

Generate standings locally using the sample dataset or your own match data

Data format

JSON schema reference for the match and event data the model consumes

Build docs developers (and LLMs) love