How the MMR Checker Works
Riot never publishes MMR, so any number a checker shows is an estimate. This page documents exactly how LoLValue produces its estimate, which public data it reads and how wrong it can be.
Check your LoL MMR · ARAM MMR checker
Updated September 2026 · By LoLValue Team
Summary
The LoLValue MMR checker combines up to three independent signals from public Riot data: your rank and winrate, the average rating of the lobbies you were matched into, and the LP you really gained between two checks. Each signal is turned into a number on one shared MMR scale, the signals are blended with weights that depend on how much data is behind them, and the result is reported with a margin of error and a confidence label.
| Signal | Source | Available | Weight in the blend |
|---|---|---|---|
| A. Rank and winrate | League entries endpoint: tier, division, LP, wins, losses | Instantly, for ranked queues | 30% to 100%, depending on how many lobbies were read |
| B. Lobby average | Match list plus the ranks of the other nine players in each of the last 10 games | After a few seconds of background analysis | Up to 70% |
| C. Observed LP | Your LP and record now versus your last saved check | From the second check, if 3+ games were played | 25% of the final value |
Nothing on this page uses private data. Every number comes from endpoints that any developer with a Riot API key can call, which also means the estimate can be reproduced by anyone who follows the steps below.
Step 1: One MMR scale for every rank
Ranks are converted to numbers on a linear scale where Iron IV at 0 LP is 0, each tier is worth 500 points, each division 125 and each LP 1.25. Master starts at 3,500 and from there the scale continues with LP alone, so a Master player at 400 LP sits at 4,000 and Grandmaster and Challenger are simply Master with more LP.
MMR(rank) = 500 × tier_index + 125 × division_index + 1.25 × LP tier_index: Iron 0, Bronze 1, Silver 2, Gold 3, Platinum 4, Emerald 5, Diamond 6 division_index: IV 0, III 1, II 2, I 3 apex: Master, Grandmaster, Challenger = 3500 + 1.25 × LP
| Rank | MMR |
|---|---|
| Iron IV, 0 LP | 0 |
| Bronze IV | 500 |
| Silver IV | 1,000 |
| Gold IV | 1,500 |
| Gold I, 50 LP | 1,938 |
| Platinum IV | 2,000 |
| Emerald IV | 2,500 |
| Diamond IV | 3,000 |
| Diamond I, 100 LP | 3,500 |
| Master, 500 LP | 4,125 |
Riot's internal rating is not on this scale and nobody outside Riot knows its exact range. The scale exists so that every signal can be compared and so that the output can be translated back into a rank you recognise. Any linear scale would give the same verdicts; this one was chosen because 100 LP maps to exactly one division.
Step 2: Method A, rank and winrate
Method A gives the instant answer. It starts from the MMR of your visible rank and shifts it by your winrate in that queue, scaled by how many games the winrate rests on. A 50% winrate leaves the rank MMR untouched. A winrate well above 50% over many games pushes the estimate above the badge, because the matchmaker is already rating you higher than your rank shows.
confidence = min(1, games / 50) adjust = (winrate − 0.50) × 1500 × confidence adjust = clamp(adjust, −250, +250) MMR_A = MMR(rank) + adjust
Worked example: Gold II, 40 LP, 58% winrate over 80 games. MMR(rank) = 1,500 + 250 + 50 = 1,800. Confidence is 1 because 80 games exceed 50. The adjustment is (0.58 − 0.50) × 1500 = +120, so MMR_A = 1,920, about two thirds of a division above the badge.
The ±250 cap exists because a winrate is a blunt instrument. A 70% winrate over 20 games would otherwise claim two full tiers, when it usually means a smurf still in the early climb. Method A is never used for queues without a rank (Normal, Swiftplay, ARAM). In Master and above it still runs, with the rank MMR taken as 3,500 plus 1.25 per LP.
Step 3: Method B, the lobby average
Method B is the strongest signal. The matchmaker builds every lobby from players whose hidden MMR is close to yours, so the ranks of the people you were matched with are the closest public measurement of your own rating. The checker reads your last ten games in the selected queue, looks up the rank of each of the other nine players and turns each lobby into one number.
Per lobby
- Each of the nine other players is converted to MMR with the scale above, using their rank in the queue being analysed, or their other ranked queue when they have none there. Players with no rank at all are skipped.
- A lobby with fewer than four ranked players is discarded: too few points to describe it.
- With six or more ranked players the highest and lowest values are dropped before averaging (a trimmed mean), so one smurf or one decayed account does not move the lobby.
Across lobbies
weight(game) = 0.92 ^ recency × (ranked_seen / 9) MMR_B = Σ lobby_mmr × weight / Σ weight recency: 0 for the most recent game, 1 for the one before, and so on ranked_seen: number of the nine other players who had a rank
Recency weighting means the most recent game counts about twice as much as the tenth. The ranked_seen factor makes a lobby where all nine players had ranks count more than one where only five did. Ten games are the default sample; it is a compromise between speed and stability, and it can be raised on the server without changing anything else.
Method B has one systematic bias to be aware of: ranks lag MMR. In the first weeks of a season everyone's badge sits below their rating, so lobby averages read low for everyone. The verdict (above or below your badge) is unaffected, because your own rank lags in the same way.
Step 4: Method C, observed LP
Method C uses the one thing Riot does tell you about your MMR: how much LP you gain per win. Every check saves a snapshot of your rank, LP, wins and losses. On your next check, if at least three games were played since a snapshot older than thirty minutes, the checker works out your real LP per win and converts it into a gap between your MMR and your badge.
ladder(rank) = total LP from Iron IV 0 LP (100 per division) gain_per_win = (Δladder + Δlosses × 42) / (Δwins + Δlosses) valid when 3+ games were played and 8 ≤ gain_per_win ≤ 40 gap_C = (gain_per_win − 21) × 18
The 42 in the first formula is the assumed sum of one win and one loss in LP (21 + 21), which is what lets the formula separate gains from losses when it only sees the net change. The second formula is the inverse of the LP prediction described below: at a gap of zero the expected gain is 21 LP, and every 18 MMR of gap moves it by one LP.
Worked example: between two checks a player went from Gold II 40 LP to Gold I 20 LP (+80 ladder LP) with 6 wins and 3 losses. gain_per_win = (80 + 3 × 42) / 9 = 22.9 LP. gap_C = (22.9 − 21) × 18 = +34 MMR, so their MMR sits slightly above their badge. The signal is only used in ranked queues below Master (apex tiers have no divisions to flatten), and it is discarded when the numbers make no sense, for example after a demotion shield or a rank decay.
Step 5: Blending the signals
The three numbers are combined with weights that grow with the amount of data behind each of them. The lobby average takes up to 70% of the blend once ten lobbies have been read; with fewer lobbies its share shrinks and Method A fills the rest. Observed LP, when available, then pulls the result a quarter of the way towards the value it implies.
w_B = min(0.70, lobbies_read / 12 × 0.70)
MMR_AB = MMR_B × w_B + MMR_A × (1 − w_B)
if observed LP is available:
MMR = MMR_AB × 0.75 + (MMR(rank) + gap_C) × 0.25
else:
MMR = MMR_AB| Situation | Method A | Method B | Method C |
|---|---|---|---|
| Instant answer, no lobbies read yet | 100% | 0% | 0% |
| 5 lobbies read | 71% | 29% | 0% |
| 10 lobbies read | 42% | 58% | 0% |
| 12+ lobbies read | 30% | 70% | 0% |
| 10 lobbies read, second check with 3+ games | 31% | 44% | 25% |
| ARAM, Normal, Swiftplay or unranked player | 0% | 100% | 0% |
This is why the number on the result page changes during the first seconds: the instant answer is Method A alone, and as each lobby is read the blend moves towards Method B. The page shows a provisional verdict until the analysis finishes so that a temporary flip is not read as a final answer.
Step 6: Margin of error and confidence
Every estimate is shown as a value plus or minus a margin. The margin is not a statistical confidence interval; it is a calibrated allowance that shrinks as more independent data enters the blend.
margin = 170 with Method A only margin = 150 − 8 × min(12, lobbies) once lobbies were read margin = margin − 10 when observed LP is available margin = max(margin, 45) confidence: high if margin ≤ 70, medium if ≤ 110, low otherwise
| Data behind the estimate | Margin | Confidence |
|---|---|---|
| Rank and winrate only | ±170 MMR (about 1.4 divisions) | Low |
| 5 lobbies | ±110 MMR | Medium |
| 10 lobbies | ±70 MMR (about half a division) | High |
| 10 lobbies plus observed LP | ±60 MMR | High |
| 12 lobbies plus observed LP | ±45 MMR | High |
When the margin is compared with the gap between your estimate and your badge, the verdict follows: a gap of at least +60 MMR is shown as "above your rank", at most −60 as "below", and anything in between as "aligned". Sixty MMR is half a division, the smallest difference that changes LP gains by more than the noise between two games.
Step 7: Predicting LP gains and games to rank up
The LP prediction turns the gap between your estimated MMR and your badge into expected LP per win and per loss. At zero gap the checker assumes a symmetric 21 LP. Every 18 MMR of positive gap adds one LP to wins and removes one from losses, within a 10 to 35 LP range.
shift = gap / 18
LP_win = clamp(round(21 + shift), 10, 35)
LP_loss = clamp(round(21 − shift), 10, 35)
games_to_next_division(winrate) = smallest n such that
LP + n × (winrate × LP_win − (1 − winrate) × LP_loss) ≥ 100
wins_in_a_row = ceil((100 − LP) / LP_win)Worked example: estimate 1,920 against a Gold II badge at 1,750 gives a gap of +170. shift = 9.4, so LP_win = 30 and LP_loss = 12. From 40 LP, at a 55% winrate each game is worth on average 0.55 × 30 − 0.45 × 12 = 11.1 LP, so Gold I is about six games away; two wins in a row would also do it.
The 21 and 18 constants were fitted to LP gains reported by players across Gold to Diamond in the current season. They are the part of the model most likely to change: when Riot adjusts LP gains, these two numbers are re-fitted and this page is updated with the new values.
Step 8: Percentile
The percentile answers "what share of ranked players sit below this MMR". It is read from our own daily count of every ranked Solo/Duo player in every region, the same data shown on the LoL rank distribution page.
- Each division from Iron IV to Diamond I becomes one point: its floor on the MMR scale and the share of players below it.
- Master starts at 3,500. Grandmaster and Challenger start at 3,500 plus 1.25 MMR per LP of that day's lowest Grandmaster and Challenger player, so their floors follow the real cut-offs.
- Between two points the percentile is interpolated linearly.
The table is rebuilt every time a new daily count is stored. It affects only the percentile line on the result; the MMR estimate, the verdict and the LP prediction do not depend on it. Before the first count exists the checker falls back to an approximate table.
Known limits and biases
An honest checker lists where it goes wrong. These are the cases where the LoLValue estimate is least reliable.
| Case | Effect | What the checker does |
|---|---|---|
| Start of a season | All ranks lag MMR, lobby averages read low | Verdict stays valid because your badge lags too; absolute number reads low for a few weeks |
| Fresh account or smurf | Winrate is extreme, lobbies climb fast | Method A is capped at ±250; Method B catches up within 10 games |
| Duo or premade games | Lobbies reflect the group, not the individual | No correction; check after solo games for a cleaner sample |
| Lobbies full of unranked players | Few points to read per game | Games with fewer than 4 ranked players are skipped; margin widens |
| Master and above | Small pool, wide MMR spread per lobby | Observed LP is not used; rank, winrate and lobby average only |
| Rank decay, demotion shields, dodges | LP changes that are not wins or losses | Observed LP is rejected when the implied gain is outside 8 to 40 LP |
The rating Riot uses is not public, so there is no ground truth to measure against. The best available check is consistency: the same account queried on the same day by different lobby-based tools lands within about one division, and the observed LP signal, which is Riot's own feedback, agrees with the blended estimate on the large majority of second checks.
Data, caching and rate limits
The checker reads public Riot API data only: the account behind a Riot ID, the ranked entries for that account, the recent match list and the participants of each match. No login is required and no password, email or client data is involved.
- The rank of each player seen in a lobby is cached for six hours, so a popular player's lobby-mates are not requested again for every check.
- A finished result is cached for five minutes; checking the same account twice in that window returns the same answer instantly.
- Snapshots (rank, LP, wins, losses and the estimate at the time of the check) are stored so that the observed LP method can work on the next check and so the page can show your MMR history.
- Each IP can run twelve checks per minute and the server analyses four accounts at a time, which keeps the tool inside Riot's API limits for everyone.
- Once a day the server also counts the players in every tier and division of every region's Solo/Duo ladder, which feeds the percentile and the rank distribution page.
If you want to reproduce the estimate, the steps on this page are enough: any developer with a Riot API key can call the same endpoints and apply the same formulas. That is the point of publishing them.
Changelog
- September 2026. Percentile switched from an approximate table to our daily count of every ranked Solo/Duo player (see the rank distribution).
- September 2026. Methodology published. Three-signal blend, provisional verdict during analysis, ARAM checker on its own page.
Formula changes are logged here with the date they went live, so a result from before a change can be read against the rules that produced it.
Methodology FAQ
How is MMR calculated in League of Legends?
Riot's own MMR is a hidden rating that moves after every game according to the result and how likely it was. Riot does not publish the formula or the number. Checkers like this one estimate it from public data: your rank and winrate, the ranks of the players you are matched with and the LP you gain per win.
Which signal matters most?
The lobby average. Matchmaking puts you with players of similar MMR, so the ranks of your recent lobbies describe your rating better than your badge does. It takes up to 70% of the blend once ten games have been read.
Why did my number change while the page was loading?
The first answer uses rank and winrate only. As each of your recent games is read the lobby average takes over, so the number moves and the verdict can flip. The page shows a provisional label until the analysis is finished.
Why do different MMR sites show different numbers?
Each site uses its own scale and its own mix of signals. Two lobby-based tools usually land within one division of each other; a site that reads only your rank and winrate can be further off. Compare the rank the number maps to rather than the raw number.
Is the margin a real confidence interval?
No. It is a calibrated allowance that shrinks with the amount of data read: ±170 MMR with rank and winrate only, about ±70 with ten lobbies, ±45 at best. Treat it as "the true value is very likely inside this range", not as a formal statistic.
How does the checker know my LP gains?
It predicts them from the gap between your estimated MMR and your badge: 21 LP at zero gap, plus one LP per 18 MMR of gap, between 10 and 35. From your second check on it also reads the LP you actually gained and feeds that back into the estimate.
Why is ARAM shown as a ranked rank?
ARAM has no rank of its own, so the only public way to describe an ARAM lobby is by the Solo/Duo or Flex ranks of the players in it. The ARAM result is the ranked-equivalent level of your lobbies.
Does the checker use private or client data?
No. Everything comes from public Riot API endpoints: account lookup, ranked entries, match lists and match participants. There is no login.
Can I reproduce the estimate myself?
Yes. The scale, the three methods, the blend weights and the margin rules are all on this page. With a Riot developer key and the same endpoints you get the same number.
How often are the formulas updated?
Whenever Riot changes LP gains or ranked structure, the LP constants are re-fitted and the change is recorded in the changelog on this page with its date.
LoL MMR checker · ARAM MMR checker · How the MMR estimate works · LoL rank distribution · LoL ranks in order · LoL free champion rotation · LoL account value calculator · Time wasted on LoL · LoL skins
LoLValue isn't endorsed by Riot Games and doesn't reflect the views or opinions of Riot Games or anyone officially involved in producing or managing Riot Games properties. MMR values shown on this page are estimates made from public match data.