Open Data & Methodology
How the MMA.SOCIAL ELO ratings are built, and how to cite them
ELO Engine V7 · recalculated 25 July 2026What this dataset is
MMA.SOCIAL maintains an independent ELO rating for every fighter with a recorded UFC bout. The rating is not a poll, not a media panel and not the official UFC ranking — it is the output of a deterministic algorithm that replays the entire recorded history of the promotion, bout by bout, in chronological order.
Because the replay always starts from scratch, the same fight data and the same parameters always produce the same ratings. Nothing carries over from a previous run, and no rating is ever typed in by hand.
Coverage runs from 1994-03-11 to 2026-08-01. The ratings were last recalculated on 25 July 2026, processing 8,703 eligible bouts.
The algorithm, exactly
1. Starting point
Every fighter enters the replay at 1000 and can never fall below a floor of 700. A rating only moves when that fighter competes.
2. Win expectation
The standard ELO expectation term, with a spread constant of D = 400 (a 400-point gap is a ~91% expected win):
3. What the winner gains
This is the part that departs from textbook ELO. The winner's base gain is keyed to who they beat — the loser's absolute rating — and not to the gap between the two fighters. Two fighters who beat the same opponent earn a comparable reward, regardless of their own rating.
The K-factor encodes how reliable a fighter's rating is: 40 while they have fewer than 5 prior bouts, 35 from 10 bouts onward, 40 in between.
4. Bonuses, and the cap on them
Three multipliers — method, championship weight, and win streak — are summed as percentages and then capped together, so no combination can run away:
The streak multiplier stays at 1.0 until the 2nd consecutive win, then adds 0.01 per further win. A draw or a loss resets it.
5. What the loser drops
The loser's side is expectation-driven, so a beaten favourite falls further than a beaten underdog:
A draw moves both fighters toward their expected score and breaks both win streaks. A disqualification costs the loser rating but earns the winner nothing. No contests do not move ratings.
6. Current rating vs peak rating
Current ELO is the rating after a fighter's most recent bout — it decays only by losing. Peak ELO is the highest rating they ever held, with the date it was reached, which is what makes cross-era comparison possible. The pound-for-pound board uses current rating; the all-time board uses peak.
Live parameter values
These are read from the engine's own settings at page load, so this table is never out of date:
| Parameter | Value | Meaning |
|---|---|---|
| base_elo | 1000 | Rating every fighter starts at |
| floor_elo | 700 | Rating can never fall below this |
| D | 400 | Spread constant in the expectation term |
| k_provisional | 40 | K-factor under 5 prior bouts |
| k_standard | 40 | K-factor for a normal fighter |
| k_veteran | 35 | K-factor from 10 bouts onward |
| band_base | 0.5 | Reward factor for beating a 1000-rated opponent |
| band_step | 0.03 | Added per 25 rating points of opponent quality |
| band_min / band_max | 0.25 / 1.1 | Clamp on the opponent-quality factor |
| m_finish | 1.3 | KO/TKO or submission multiplier |
| m_split_decision | 0.8 | Split-decision win multiplier |
| m_title_major | 1.35 | Undisputed championship multiplier |
| m_title_minor | 1 | Interim / BMF / tournament belt multiplier |
| title_flat_major | 12 | Flat points added to an undisputed title win |
| title_flat_minor | 0 | Flat points added to a lesser title win |
| multidiv_flat | 7 | Flat bonus for an undisputed title in a second division |
| repeat_win_mult | 0.7 | Discount for beating the same opponent again |
| streak_start / streak_step | 2 / 0.01 | Where the streak bonus starts, and its size |
| bonus_cap_regular | 1.1 | Cap on combined bonuses, non-title bout |
| bonus_cap_title | 1.3 | Cap on combined bonuses, title bout |
| max_gain / max_loss | 90 / 80 | Hard per-bout movement caps |
Known limitations
Any rating system is a model, and a model that hides its weak points is not worth citing. These are ours:
- UFC bouts only. Fights in other promotions do not move the rating, so a fighter who arrives with a long record elsewhere still starts at 1000 and is under-rated for their first few bouts.
- Eras are not adjusted. The pool of the 1990s was far shallower than today's. Peak ratings from different decades are comparable only in the loose sense that ELO makes them comparable.
- Inactivity is not penalised. A rating does not decay while a fighter is out; it only moves when they compete.
- Judging noise is inherited. The engine reads the official result. A controversial decision moves ratings exactly as a clean one does, apart from the split-decision discount.
- Divisions share one scale. All fighters sit on a single rating axis, which is what makes a pound-for-pound board possible but means a deep division inflates its members relative to a thin one.
- Data quality bounds everything. Missing or mis-dated bouts propagate through the whole replay, since order matters.
- Manual adjustment mechanism. The engine supports an optional per-fighter adjustment table. In the interest of full disclosure, 19 manual adjustment(s) are currently in effect.
Getting the data
CSV download
One row per rated fighter: rank, name, profile URL, division, status, current and peak rating, record and finish counts. Roughly 2,730 rows, refreshed daily.
JSON
The same board, top-N, with permissive CORS so it can be read straight from a browser:
Responses are cached for 30 minutes. Please do not poll faster than that; if you need bulk data, take the CSV.
Embed it instead
If you want the live board on your own page rather than a copy of the numbers, the embed builder produces a copy-paste snippet in both live and static-HTML form.
Licence
The ratings, the CSV and the JSON are released under the Creative Commons Attribution 4.0 International licence. You may copy, redistribute, remix and build on the data, including commercially, provided you credit MMA.SOCIAL with a link to https://mma.social or to this page.
Fighter names, records and event data are facts and are not claimed as property. Fighter photography is not part of this licence. MMA.SOCIAL is not affiliated with, endorsed by or connected to the UFC or Zuffa LLC, and these ratings are not official UFC rankings.
How to cite this dataset
Please cite the dataset page rather than a specific ranking page — this URL is stable and the ranking boards change after every event.
APA 7
MMA.SOCIAL. (2026). UFC fighter ELO ratings (ELO Engine V7) [Data set]. https://mma.social/data
MLA 9
MMA.SOCIAL. "UFC Fighter ELO Ratings." ELO Engine V7, 2026, https://mma.social/data.
Chicago
MMA.SOCIAL. "UFC Fighter ELO Ratings (ELO Engine V7)." Accessed July 25, 2026. https://mma.social/data.
BibTeX
@misc{mmasocial_ufc_elo,
author = {{MMA.SOCIAL}},
title = {UFC Fighter ELO Ratings},
version = {ELO Engine V7},
year = {2026},
howpublished = {\url{https://mma.social/data}},
note = {Data set. Accessed 2026-07-25}
}
Working on something with this data, or spotted an error in it? Tell us — corrections are welcome and we re-run the whole replay when data changes.
See the ratings in action
The boards this dataset produces