MMA.SOCIAL

Install MMA.SOCIAL

    Open Data & Methodology

    How the MMA.SOCIAL ELO ratings are built, and how to cite them

    ELO Engine V7 · recalculated 25 July 2026
    2,730Fighters rated
    8,808Bouts replayed
    783Events
    CC BY 4.0Licence

    What 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):

    E_winner = 1 / (1 + 10 ^ ((R_loser - R_winner) / 400))

    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.

    band = clamp(0.5 + 0.03 x floor((R_loser - 1000) / 25), 0.25, 1.1) baseGain = K_winner x band

    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:

    bonus = (method - 1) + (title - 1) + (streak - 1) bonus = min(bonus, 1.3 for a title fight, else 1.1) gain = min(baseGain x (1 + bonus) + titleFlat, 90) gain = gain x 0.7 if this opponent was already beaten gain = gain x 0.8 if the win was a split decision gain = gain + 7 for an undisputed title win in a second division

    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:

    loss = max(-K_loser x E_loser x 1.4 x 1.7 (if finished), -80)

    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:

    ParameterValueMeaning
    base_elo1000Rating every fighter starts at
    floor_elo700Rating can never fall below this
    D400Spread constant in the expectation term
    k_provisional40K-factor under 5 prior bouts
    k_standard40K-factor for a normal fighter
    k_veteran35K-factor from 10 bouts onward
    band_base0.5Reward factor for beating a 1000-rated opponent
    band_step0.03Added per 25 rating points of opponent quality
    band_min / band_max0.25 / 1.1Clamp on the opponent-quality factor
    m_finish1.3KO/TKO or submission multiplier
    m_split_decision0.8Split-decision win multiplier
    m_title_major1.35Undisputed championship multiplier
    m_title_minor1Interim / BMF / tournament belt multiplier
    title_flat_major12Flat points added to an undisputed title win
    title_flat_minor0Flat points added to a lesser title win
    multidiv_flat7Flat bonus for an undisputed title in a second division
    repeat_win_mult0.7Discount for beating the same opponent again
    streak_start / streak_step2 / 0.01Where the streak bonus starts, and its size
    bonus_cap_regular1.1Cap on combined bonuses, non-title bout
    bonus_cap_title1.3Cap on combined bonuses, title bout
    max_gain / max_loss90 / 80Hard 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.

    Download CSV

    JSON

    The same board, top-N, with permissive CORS so it can be read straight from a browser:

    GET https://mma.social/api/embed-rankings.php?board=elo&division=lightweight&limit=25 board elo | peak division all, or a division slug (heavyweight, womens-flyweight, ...) status active | all limit 3-25

    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

    ELO Rankings GOAT (Peak ELO) Plain-English Guide