For years, the CS rankings everyone quoted belonged to a media site. Since Valve moved Major qualification onto its own system, the ranking that actually decides who plays where is the Valve Regional Standings. Unlike most rankings, it is fully public: Valve publishes the code, the monthly lists and a per-team breakdown on GitHub. This guide explains what goes into it, using that code and those files.
What the VRS is
The VRS ranks rosters, not organizations. Valve's tournament rules define a roster as five specific players, whatever team they play for. In the model, two lineups count as the same roster if they share at least three players, so a team that swaps one or two players keeps its history, while a team that replaces three or more starts again.
To appear in the standings, a roster needs at least five matches and at least one win in the window.
Only matches from ranked tournaments count. Since January 1, 2025, Valve's code drops matches that are not flagged as ranked, and organizers choose whether their event is ranked under Valve's tournament operation requirements. Event data comes from HLTV.org, as each published list notes.
How the score works
Every roster's points are built in two steps:
- Starting value. Average the four factors below (each between 0 and 1). Then scale the averages so the lowest team gets 400 and the highest gets 2,000: 400 + (average - lowest average) ÷ (highest average - lowest average) × 1,600.
- Head-to-head adjustments. Run every match in the window in date order through a rating system that moves points from the loser to the winner, with bigger moves for upsets.
Final points = starting value + head-to-head adjustments.
The four factors
| Factor | What it measures |
|---|---|
| Bounty Offered | Your own prize money from your 10 best recent events, compared with the 5th-best team |
| Bounty Collected | The Bounty Offered of teams you beat, across your 10 best wins |
| Opponent Network | How many different teams your beaten opponents have themselves beaten, across your 10 best wins |
| LAN Wins | Your 10 best recent wins at LAN events, compared with the 5th-best team |
- Bounty Offered is your own earnings. Add up your 10 best age-weighted prize results, divide by the same figure for the 5th-highest roster, cap it at 1, and run it through a curve. Any team at or above the 5th-best earner gets the maximum.
- Bounty Collected rewards beating teams that earn. For each win, take the beaten team's Bounty Offered and scale it by the age of the match and the size of the event. Your 10 best values are summed, divided by 10 and curved.
- Opponent Network rewards beating teams that beat lots of different teams. It works like Bounty Collected but uses each beaten opponent's count of distinct teams defeated.
- LAN Wins counts your 10 best age-weighted wins at LAN events, compared with the 5th-best roster and capped at 1.
Because only the 10 best results count for each factor, losing or playing a small event never lowers these factors directly. Valve's code comments make the point: there is never any harm in playing a low-stakes match. Losses do cost points in the head-to-head step.
The curve Valve uses is 1 ÷ (1 + |log10(x)|). It equals 1 when x is 1 and drops off slowly: 0.77 at a half, 0.50 at a tenth.
Time decay and event weight
Age weight. The model looks back six months (180 days) from the latest match. Results from roughly the most recent month get full weight. Older results fade in a straight line to zero at the start of the window. In Spirit's September 7, 2026 breakdown, a match on August 12 still has weight 1.000, a match on August 2 has 0.957, and one on March 15 has 0.026.
Event weight. For Bounty Collected and Opponent Network, each win is also scaled by the prize pool of the event, capped at $1,000,000, using the same curve:
| Event prize pool | Event weight |
|---|---|
| $1,000,000 | 1.00 |
| $500,000 | 0.77 |
| $250,000 | 0.62 |
| $100,000 | 0.50 |
| $10,000 | 0.33 |
Qualifiers borrow value from the event they lead to. If winning event A sends a team to event B, half of B's prize pool is added to A's (a quarter for a qualifier two steps away), still capped at $1,000,000.
Head-to-head adjustments
The second step is a Glicko rating update with the rating deviation fixed at 75, which Valve's code notes turns it into an Elo-style system. Each match moves points according to how surprising the result was, and older matches move fewer points because they are scaled by the same age weight.
The points gap between two rosters maps to an expected win chance:
| Points gap | Expected win chance |
|---|---|
| 50 | 57% |
| 100 | 64% |
| 200 | 75% |
| 300 | 84% |
| 400 | 90% |
The code's own comment says a 400-point gap means about a 90% chance of victory, which matches the last row. These are match-level expectations. The model does not know whether a match was a best-of-one or a best-of-three.
Worked example: Spirit, September 2026
Valve's detail file for Spirit (donk, magixx, sh1ro, tN1R, zont1x) on the September 7, 2026 list shows:
- Bounty Offered 1.000, Bounty Collected 0.887, Opponent Network 0.476, LAN Wins 1.000.
- Average: (1.000 + 0.887 + 0.476 + 1.000) ÷ 4 = 0.841, the highest of any roster, so its starting value is the maximum 2,000.
- Head-to-head adjustments add 31.2, for 2,031.2 points and first place.
The match list shows how the head-to-head step behaves. A win over second-placed MOUZ on September 6 added 10.72 points. A loss to a much lower-rated roster on August 12 cost 30.45. Upset losses are expensive for teams at the top.
The top eight on that global list:
| Rank | Roster | Points |
|---|---|---|
| 1 | Spirit | 2031 |
| 2 | MOUZ | 1902 |
| 3 | Falcons | 1881 |
| 4 | FUT | 1846 |
| 5 | Vitality | 1841 |
| 6 | Legacy | 1783 |
| 7 | FURIA | 1754 |
| 8 | G2 | 1723 |
Regions and update cadence
There are three regional lists, Europe, Americas and Asia, plus a global list. A roster belongs to the region of the majority of its players. The regional lists are used for invitations, and the global list is used for seeding and by tournaments that invite from it.
Valve publishes the invitation standings once a month in the invitation folder of its repository. The 2026 files are dated to the first Monday of each month (January 5, February 2, and so on through September 7). Valve's tournament rules state that only the versions in that folder count for invitations. Each list links to a detail file per roster with every factor and match used.
How the VRS decides invites
Majors. All 32 Major teams are invited from the regional VRS lists, and the global list sets the pre-event seeding. The number of places per region depends on how that region did at the previous Major. Our Major format guide has the details.
Other ranked tournaments. Valve's tournament operation requirements set the rules for any event that wants its results to count:
- Organizers must use the most recent VRS as of the invite date and invite rosters in order, without skipping.
- If a roster declines, the invite moves to the next roster down the list.
- An invited roster must field at least three of the players who were on it on the invite date.
- Tier 1 events must invite at least 20 rosters directly from the VRS, starting with the global or regional number one.
- Tier 2 events that use VRS invites may only invite rosters ranked below 12th on the global list.
- For every 8 VRS invites, an organizer may add 2 wildcard invites, subject to eligibility rules.
That is why a VRS place is worth real money to a team: it decides which events it gets into without playing qualifiers.
How VRS differs from the HLTV ranking
| Aspect | VRS | HLTV |
|---|---|---|
| Run by | Valve | HLTV.org |
| Updates | Monthly | Weekly |
| Window | 6 months | 12 months, decaying monthly |
| Inputs | Prize money, quality of wins, LAN wins, head-to-head results | Event placings, form over 2 months, last 10 LAN events |
| Roster rule | Same roster if 3 players carry over | 3-player core keeps the points |
| Code public | Yes, on GitHub | No |
| Used for invites | Yes, Majors and ranked events | No |
HLTV describes its ranking as based on achievements over the past year (with points decaying each month), form over the last two months and performance at the last 10 LAN events. In practice, the two lists usually agree on the top few teams and drift apart further down, where a single well-paid event or a few wins over top rosters move a team further on VRS.
Using VRS for betting research
VRS points give you a free, transparent, roster-aware rating for nearly every team that plays ranked events. That makes them a reasonable first estimate, especially for tier 2 matches where few other ratings exist.
- Look up both rosters on the latest global list and take the points gap.
- Convert the gap with the table above to get a rough match win chance.
- Compare that with the bookmaker's implied probability using the odds edge calculator.
- Only then adjust for the things VRS cannot see.
The caveats are important:
- It lags. The list is monthly, and a whole month of results gets full weight. A roster in form or in a slump can be far from its listed points.
- New rosters start from little or nothing. A team that changed three or more players has no history, and a team with fewer than five matches is not listed at all.
- Money matters in the formula. Teams that play big events can collect bounty and LAN value others cannot, so a regional team that rarely travels may be stronger than its points suggest.
- No maps, no formats. VRS rates whole matches. It knows nothing about map pools, vetoes or whether a match is a best-of-one. Map-level stats from the sites in our stats guide fill that gap.
- Calibration is imperfect. When Valve first published the model, its readme noted that it tended to underestimate win rates at the low end and overestimate them at the high end. Treat big points gaps with some caution.
Our own picks do not come from VRS. They come from SkinBetHub's proprietary signal model, built on prediction-market data, are posted with their odds before the match starts, are graded at a flat 1 unit, and every result stays on the results page.