TOP OF LEAGUEHextech ladder
Top of LeagueHow it works
How it works

How per-champion player rankings work

This page explains end to end how Top of League answers “who plays this champion best”: who gets on a board, how the score is computed, why exactly 30 games, which steps the data goes through, and what a board cannot tell you.

Contents

In one paragraph

Every champion has its own board. A player is on champion X's board when they are currently Master or above and have exactly 30 recent Ranked Solo/Duo games on X in Master+ lobbies. Board order is Score = LP + 300 × (WR₃₀ − 0.5): Riot's official LP decides almost everything, the win rate over exactly those 30 games only breaks ties. Every number comes from the Riot Games API and is recomputed hourly.

Why rank per champion

Your overall rank answers “how good are you at League”, not “how good are you on Azir”. A Challenger with 400 Azir games and a Challenger on their fifth Azir game share a rank but clearly not a skill level on that champion. Mastery points do not help either: they measure playtime, not results.

A per-champion board fills that gap by looking only at players who have proven two things at once: they sit at the top of the ladder and they actually play the champion at that level. That is the information someone learning a champion needs: who to watch, who to learn from, on their own server.

Who gets on a board

A player appears on champion X's board when all four conditions hold at the same time:

  • Current tier Master or above in Ranked Solo/Duo, per the latest ladder snapshot. Master, Grandmaster and Challenger share one LP pool, so comparing LP across them is meaningful.
  • Exactly the 30 most recent qualified games on X in the current split. Not “at least 30”: the newest 30 are taken, older games are dropped.
  • A qualified game is a Master+ lobby (see lobby inference below), not a remake, in queue 420.
  • No win-rate requirement. 12 wins out of 30 is still ranked, just lower.

Condition 3 exists to block one specific case: grinding 30 games of X while Emerald, then climbing to Master on a different champion. Those Emerald games have almost nobody from the Master+ pool in them, so they do not count.

The score

Score = LP + K × (WR₃₀ − 0.5) with K = 300. LP is the official rank points from the latest ladder snapshot. WR₃₀ is the win rate over exactly the last 30 qualified games on that champion.

Why K = 300? Master+ LP spans from 0 to over 3,000. With K = 300 the win rate can move a player by at most ±150 points (the extreme 0% or 100% case), in practice about ±30. Rank still dominates, as intended, while win rate is strong enough to break ties between two players on equal LP.

Example

PlayerLPWins / 30WR₃₀Score
A1,2001860%1,200 + 300 × 0.10 = 1,230
B1,2501240%1,250 − 300 × 0.10 = 1,220
C1,5001240%1,500 − 30 = 1,470

A passes B despite 50 fewer LP thanks to better form on this champion. C still sits above both: a 250 LP gap is a real rank gap, and win rate cannot reverse it.

Why exactly 30 games

Fixing the window at exactly 30 games gives one elegant property: everyone has the same sample size. Two win rates therefore compare directly, with no Bayesian shrinkage, no confidence factor and no other “minimum N games” threshold. This is what League of Graphs-style formulas lack.

The price: the standard error of a 30-game win rate is 9.1 percentage points. A ±1 SD swing equals ±27 Score. That is acceptable for a tiebreaker but not reliable enough to reverse a real rank gap, which is exactly the behaviour we want. A 30-game window also measures current form rather than a whole season: someone who drops a champion for three months gradually falls off the board as old games expire.

How we know a game was a Master+ lobby

The Riot API only exposes a player's current rank, with no history. You cannot ask “what tier was this player three months ago”. So a game's elo is inferred from the 10 players in it: if at least 8 of 10 appear in the Master+ ladder snapshots of the last 14 days, it is a Master+ lobby. That information is already in the match details, so it costs no extra API calls.

The approximation is wrong for old games: someone who was Master and has since dropped is no longer in the snapshot. Snapshots have been stored daily since day one, so the error shrinks over time. The 8/10 threshold can be lowered to 7 if too few players qualify; the running value is always shown on the Formula page.

Where the data comes from

  • Ladder snapshot (daily, 3 calls): every Challenger, Grandmaster and Master player with LP, wins and losses. Source of LP and of the Master+ gate.
  • Match id discovery (daily, one call per player): new Ranked Solo/Duo match ids since the previous crawl.
  • Match details (one call per match, each match fetched once): 10 participant rows with champion, win/loss, KDA and position are extracted; the raw JSON is discarded immediately. One call yields data for all 10 players, which makes crawling by match about 9× cheaper than crawling by player.
  • Ranking (hourly, no API calls): a single SQL query numbers each player–champion pair's games newest first, keeps exactly 30, computes the Score and writes one static JSON file per champion.

The whole system runs on a small server because it is bound by Riot's API rate limit, not by CPU. Limits are read from Riot's response headers and kept at 85% of the allowance.

Reading a board

  • Tier, LP: official rank at the latest snapshot.
  • WR last 30, W–L: win rate and wins–losses over exactly the last 30 qualified games on this champion, not the whole season.
  • KDA: (kills + assists) / deaths over those 30 games, for reference only; it does not enter the Score.
  • Score: the sorting value. Equal Scores are broken by higher LP, then more wins.
  • Last game: when the most recent game on this champion was played; inactive players stay on the board until others push them down or they drop out of Master.

What a board cannot tell you

Being explicit about limitations is what sets this board apart from existing ones. The following is stated plainly:

  • Master+ only (about 0.1% of players). Diamond players will not find themselves here.
  • “Master+ lobby” is inferred from match composition (≥ 8/10 in the snapshot). It is wrong for old games with players who have since dropped out of Master; the error shrinks as snapshot history accumulates.
  • A 30-game window carries ±9.1 pp of noise. That is the price of measuring current form instead of a whole season.
  • Game difficulty is not measured. Carrying and being carried both count as one win.
  • No per-role split yet. The same champion played mid and top shares one table.
  • The Riot API returns at most 10,000 Master players. On servers with a larger Master tier (VN), the lowest-LP Masters cannot be ranked.
  • Data refreshes once a day, not in real time.

Privacy and Riot policy

Only the current Riot ID is stored and displayed; after a rename the old name disappears, there is no name history. There is no live-game lookup and nothing that gives an in-game advantage. No betting, no paywall. The API key stays server-side. This site is not affiliated with Riot Games; board order is based on Riot's official rank and is not an alternative rating system.

Glossary

LP (League Points)
Riot's official rank points. From Master upwards there are no divisions; the three apex tiers share one continuous LP pool.
Master+
Master, Grandmaster and Challenger together; about 0.1% of ranked players.
WR₃₀
Win rate over exactly the last 30 qualified games on one champion.
Master+ lobby
A game with at least 8 of 10 players in the Master+ pool of the last 14 daily ladder snapshots.
Remake
A game ended early because someone never connected; no LP change, not counted.
Ladder snapshot
A full copy of the Master+ list with LP at one point in time, stored daily.

Frequently asked questions

I'm Diamond. Why can't I find myself?
The boards only cover Master and above, about 0.1% of players. That is a deliberate trade for data reliability.
How often is it updated?
Ladder snapshots and new matches are ingested daily; boards are recomputed hourly. Each board shows its update time.
Why exactly 30 games?
Everyone has the same sample size, so two win rates compare directly with no confidence factor. The standard error of 30 games is 9.1 percentage points: enough to break ties, not enough to reverse a real LP gap.
Is this an alternative to Riot's ranked system?
No. Board order is based on Riot's official LP; win rate only breaks ties. A board answers “who is best on this champion”, it does not re-measure overall skill.
Is a sub-50% win rate excluded?
No. A player with 12 wins out of 30 is still ranked, just below players with equal LP and more wins.
Where does the data come from?
From the Riot Games API (league-v4 and match-v5). Only the current Riot ID is stored and shown; no name history, no live-game lookup.

Tiếng Việt 한국어 日本語 繁體中文 简体中文 Español Português (BR) Français Deutsch Русский Türkçe ไทย Bahasa Indonesia