Skip to content

UFCStats Fighter Scraper

Try for free

Scrape UFC fighter profiles from UFCStats: record, height, weight, reach, stance, age, striking and grappling career stats, plus every bout with opponent, method, round, time, strikes and takedowns. Search by name, paste fighter or event links, or walk the A-Z directory. No login needed.

🥊 UFCStats Fighter Scraper

Export UFC fighter profiles from UFCStats.com: professional record, height, weight, reach, stance, age, the eight career striking and grappling statistics, and every bout with opponent, method, round, time, strikes and takedowns. Search by name, paste fighter or event links, or walk the whole A to Z fighter directory. No login, no API key, about $18 per 1,000 fighters.

✨ Why use UFCStats Fighter Scraper?

  • ⚡ Fast — 10 full fighter profiles with fight histories in a few seconds; the whole directory of about 4,600 fighters in a few minutes.
  • 🥋 Complete fight history — every bout with result, opponent, event, date, method, round, time, knockdowns, significant strikes, takedowns and submission attempts, as shown ("21 / 27") and split into numbers for and against.
  • 🔎 Three ways in — fighter names or nicknames, fighter / event / fight links, or last-name letters. Combine them in one run.
  • 🎯 Filters that save money — stance, weight class and win/loss limits are applied from the directory before a profile is opened, so fighters that do not match are never charged.
  • 📅 Upcoming bouts — when UFCStats lists a fighter's next fight, you get the opponent, event and date in nextFight.
  • 🔓 No login needed — public pages only, datacenter proxy included in the platform usage.

🎯 Use cases

  • 📊 Fight prediction models — career rates (SLpM, SApM, takedown accuracy and defence) plus bout-by-bout stat lines for training and backtesting.
  • 🏆 Fantasy MMA and DFS — pull every fighter on this week's card from the event link and compare strike and grappling numbers.
  • 🎙️ Fight-week content — stat packs and tale-of-the-tape graphics for podcasts, previews and social posts.
  • 🗂️ Fighter databases — a quarterly A to Z walk keeps a warehouse of every UFC fighter's physical attributes and record up to date.
  • 💰 Betting research — join fight histories with your own odds data to test angles by method, round or weight class.

🚀 How to use

  1. Type fighter names in Fighter names (e.g. silva, Jon Jones), and/or paste UFCStats links in UFCStats URLs, and/or pick Last-name letters to walk the directory.
  2. Set Max fighters (0 = no limit).
  3. Optionally narrow the run with Stance, Weight classes, Minimum wins, Minimum losses or Maximum losses.
  4. Keep Include fight history on for the bout-by-bout record, or switch it off for profiles only.
  5. Click Start, then export the dataset as JSON, CSV, Excel or HTML, or read it through the API.

📥 Input

FieldWhat it does
searchTermsNames or nicknames, one per line. A full name keeps only fighters that match every word.
startUrlsFighter links (/fighter-details/...), event links (every fighter on the card) or fight links (both fighters).
lettersWalk the fighter directory for these last-name letters. With no names, links or letters, the whole directory is walked.
maxItemsMost fighters to save in the run (default 10; 0 = no limit).
stance, weightClasses, minWins, minLosses, maxLossesFilters.
includeFightHistoryAdd every bout to each fighter (default on, billed per fighter with at least one bout).
{
  "searchTerms": ["silva"],
  "startUrls": [{ "url": "http://ufcstats.com/fighter-details/f4c49976c75c5ab2" }],
  "maxItems": 10,
  "weightClasses": ["lightweight", "welterweight"],
  "includeFightHistory": true
}

📤 Output

One row per fighter. The Fighters view shows the profile and career statistics; the Fight history view shows one row per bout.

FieldDescription
fullName, firstName, lastName, nicknameNames as UFCStats shows them
record, wins, losses, draws, noContestsProfessional record, e.g. 22-7-0 (1 NC)
height, heightInches, weightLbs, weightClass, reachInches, stancePhysical attributes
dateOfBirth, ageDate of birth (ISO) and age today
significantStrikesLandedPerMinute, strikingAccuracyPct, significantStrikesAbsorbedPerMinute, strikingDefensePctStriking career stats
takedownAveragePer15Min, takedownAccuracyPct, takedownDefensePct, submissionAveragePer15MinGrappling career stats
totalFightsCompleted bouts listed on UFCStats
nextFightNext scheduled bout (opponent, event, date) when listed
fightHistory[]result, opponent, event, eventDate, method, methodDetails, round, time, knockdowns, significantStrikes, takedowns, submissions (each also as …For / …Against numbers), links
url, fighterId, source, scrapedAtProfile link, id, the name/letter/link that found the fighter, read time

Example (from a test run; names and ids are changed, the shape and numbers are real):

{
  "fighterId": "0a1b2c3d4e5f6a7b",
  "url": "http://ufcstats.com/fighter-details/0a1b2c3d4e5f6a7b",
  "fullName": "Marco Reyes",
  "firstName": "Marco",
  "lastName": "Reyes",
  "nickname": "The Hammer",
  "record": "22-7-0",
  "wins": 22,
  "losses": 7,
  "draws": 0,
  "noContests": 0,
  "height": "5' 9\"",
  "heightInches": 69,
  "weightLbs": 155,
  "weightClass": "Lightweight",
  "reachInches": 74,
  "stance": "Southpaw",
  "dateOfBirth": "1988-07-14",
  "age": 38,
  "significantStrikesLandedPerMinute": 5.27,
  "strikingAccuracyPct": 49,
  "significantStrikesAbsorbedPerMinute": 4.71,
  "strikingDefensePct": 53,
  "takedownAveragePer15Min": 0.66,
  "takedownAccuracyPct": 55,
  "takedownDefensePct": 66,
  "submissionAveragePer15Min": 0.1,
  "totalFights": 15,
  "nextFight": null,
  "fightHistory": [
    {
      "result": "loss",
      "opponent": "Sam Ortega",
      "opponentUrl": "http://ufcstats.com/fighter-details/7b6a5f4e3d2c1b0a",
      "event": "UFC 329",
      "eventUrl": "http://ufcstats.com/event-details/1c2d3e4f5a6b7c8d",
      "eventDate": "2026-07-11",
      "method": "KO/TKO",
      "methodDetails": null,
      "round": 1,
      "time": "1:09",
      "knockdowns": "0 / 0",
      "knockdownsFor": 0,
      "knockdownsAgainst": 0,
      "significantStrikes": "0 / 12",
      "significantStrikesFor": 0,
      "significantStrikesAgainst": 12,
      "takedowns": "0 / 0",
      "takedownsFor": 0,
      "takedownsAgainst": 0,
      "submissions": "0 / 0",
      "submissionsFor": 0,
      "submissionsAgainst": 0,
      "fightUrl": "http://ufcstats.com/fight-details/8d7c6b5a4f3e2d1c"
    }
  ],
  "source": "search: reyes",
  "scrapedAt": "2026-10-21T15:54:56.944Z"
}

💰 Pricing

Pay per result:

  • $0.018 per fighter saved ($18 per 1,000).
  • $0.007 per fight history ($7 per 1,000), only when fight history is on and the fighter has at least one bout.
  • No start fee. Platform usage (compute and datacenter proxy traffic) is billed on top and is tiny: a 10-fighter run uses well under $0.001.

Worked example: 1,000 fighters with fight history ≈ $25.00 + under $0.10 usage. 1,000 profiles without fight history ≈ $18.00.

Set a maximum charge for the run and the scraper stops cleanly when it is reached, so you never pay for more than you allow.

❓ FAQ

Is it legal to scrape UFCStats? The scraper reads public pages that anyone can open without an account. Check the site's terms and your local rules for how you use the data.

Do I need a login or my own proxy? No. No account is needed, and the default datacenter proxy works well for UFCStats.

How many fighters can I get? Everything UFCStats lists: about 4,600 fighters across A to Z. Leave names, links and letters empty and set Max fighters to 0 for the full directory.

Why are some fields empty? UFCStats leaves some profiles incomplete, mostly for older or one-fight fighters (no reach, no stance, -- for date of birth, or no per-bout strike numbers for early events). Those fields come back as null. Career statistics show 0 when UFCStats shows 0.00.

How do weight class filters work? UFCStats lists one weight per fighter (the latest). The weight class comes from that weight: 155 lbs is Lightweight, 170 Welterweight, and so on. A fighter who moved divisions is filed under the latest one.

Can I schedule it or use it from code? Yes. Schedule runs in the console, or start them through the API and read the dataset as JSON, CSV or Excel.

⚠️ Limits

  • Only what UFCStats.com publishes: no rankings, odds, gym or country, and no round-by-round fight breakdowns (each bout comes as totals).
  • Filters on fighters given by link are checked after the profile is read (a fighter who does not match is skipped and not charged); for names and letters they are checked in the directory first.
  • Name search matches first names, last names and nicknames, the same way the site's own search does; fighters known by a different spelling may need the link instead.
  • Weight class is derived from the single weight UFCStats lists.

Related actors

G2
4.7/5
Excellent
Trustpilot

The internet is full of data.
Start owning yours.

Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.

No credit card. No setup calls.