UFCStats Fighter Profile & Fight History Scraper avatar

UFCStats Fighter Profile & Fight History Scraper

Pricing

from $18.75 / 1,000 results

Go to Apify Store
UFCStats Fighter Profile & Fight History Scraper

UFCStats Fighter Profile & Fight History Scraper

Scrapes UFCStats.com fighter profiles and optional full fight histories. Returns each fighter as a flat row with physical attributes, career totals, and per-bout striking and grappling stats.

Pricing

from $18.75 / 1,000 results

Rating

0.0

(0)

Developer

ParseForge

ParseForge

Maintained by Community

Actor stats

0

Bookmarked

184

Total users

62

Monthly active users

9 days ago

Last modified

Share

ParseForge

UFCStats Fighter Profile & Fight History Scraper

Scrape UFCStats fighter profiles and complete fight histories, up to a million records per run. Every fighter row includes physical attributes, career stats, and a full bout-by-bout breakdown with strikes, takedowns, and method of victory. Export to CSV, JSON, Excel, or XML.

UFCStats.com holds the deepest public record of UFC fighter data, but browsing it manually means clicking through alphabet pages and individual profiles one by one. This Actor walks the entire fighter directory, or a targeted subset you define, and pulls every stat into a flat, analysis-ready row. No API key, no rate-limit headaches, structured data from the sport's most detailed archive.

Who uses itWhat they scrape UFCStats for
Sports analystsBuilding predictive models from career-long striking and grappling data.
Fantasy MMA playersComparing fighter stats to set weekly DraftKings lineups.
Content creatorsPulling accurate fight records for pre-fight preview graphics.
BettorsBacktesting betting angles against historical fight outcomes.

What it does

This Actor collects UFC fighter profiles from UFCStats.com, including physical attributes, career totals, and optional full fight history, and returns each fighter as a single flat record.

  • ๐ŸฅŠ Full fight history: every bout with opponent, event, method, round, time, knockdowns, significant strikes, takedowns, and submission attempts.
  • ๐Ÿ”ค Alphabet walk: start from A and crawl every last name, or restrict to specific letters to target a division.
  • ๐Ÿ” Free-text search: filter by first name, last name, or nickname like 'mcgregor' or 'spider' before a single request fires.
  • ๐Ÿ“ Physical filters: narrow results to a specific stance (Orthodox, Southpaw, Switch) or minimum career wins and losses.
  • ๐ŸŽฏ Direct URLs: drop in a list of fighter profile URLs and scrape only those, ignoring the directory walk.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

What you can do with UFCStats data

๐Ÿ“Š Build a fighter database.

A data engineer runs the Actor across all 26 letters once a quarter, dumps the results into a warehouse, and powers a Tableau dashboard the coaching staff uses for opponent scouting.

๐Ÿ’ฐ Model betting edges.

A quantitative bettor scrapes every lightweight with 10+ wins, joins the fight history to closing odds, and trains a model on striking differentials that predict underdog upsets.

๐ŸŽ™๏ธ Prep a fight-week show.

A podcast producer drops in the two headliner URLs on Monday morning, grabs their full histories, and has the stat pack ready for the hosts by lunch.

๐Ÿ† Run a fantasy league draft.

A league commissioner scrapes the top 50 fighters by wins, exports a CSV, and lets managers sort by strikes landed per minute to make their picks.

Why choose this scraper

What you get
Career stat totalsLifetime wins, losses, draws, and no-contests pulled from the fighter header.
Physical profileHeight, weight, reach, leg reach, stance, and date of birth for every fighter.
Striking breakdownSignificant strikes landed per minute, accuracy, absorbed per minute, and defense percentage.
Grappling breakdownTakedown average, takedown accuracy, takedown defense, and submission average per 15 minutes.
Fight-by-fight detailOptional nested array with opponent, event, date, method, round, time, and full stat line for each bout.

How it compares

This Actor and the UFC Stats API both pull data from ufcstats.com, but they differ in how you target fighters and what shape the output takes.

FeatureParseForgeUFC Stats
Full fight history per fighterYes, optional nested arrayYes
Free-text name and nickname searchYesNot listed
Alphabet walk by last-name letterYesNot listed
Post-fetch filters (stance, min wins/losses)YesNot listed
Direct fighter URL inputYesNot listed
Flat row output (CSV, JSON, Excel, XML)YesNot listed

Configure the run

Drive the Actor from specific fighter URLs, a free-text name search, or an alphabet walk by last-name letter, and apply post-fetch filters for stance, minimum wins, and minimum losses so only relevant fighters land in your dataset. The Input tab lists every parameter.

A first run with the defaults:

{
"maxItems": 10,
"proxyConfiguration": {
"useApifyProxy": true
}
}

A larger pull:

{
"maxItems": 200,
"proxyConfiguration": {
"useApifyProxy": true
}
}

Pricing

Pay-per-result: $0.054 per result collected. You pay only for the results written to your dataset.

Results collectedApproximate cost
100 results$5.40
1,000 results$54.00
10,000 results$540.00

New Apify accounts start with $5 in free credit.

Free users

Free-plan runs return up to 10 results as a preview. Upgrade your Apify plan to collect up to 1,000,000 results per run.

Run it

  1. Create a free Apify account with $5 in credit.
  2. Open the UFCStats Fighter Profile & Fight History Scraper.
  3. Set your inputs and any filters, then click Start.
  4. Export the results as CSV, Excel, JSON, or XML from the Dataset tab.

Run it programmatically through the Apify API (run-sync-get-dataset-items) or the ApifyClient for JavaScript and Python.

Use with AI agents (MCP)

Give an AI agent live access to UFCStats through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=parseforge/ufcstats-scraper"

Then prompt it in plain language to run the scraper and read back the results.

Troubleshooting

Why am I getting zero results?

Check that your searchQuery or startUrls match fighters on UFCStats. If you set a minimum wins or losses filter, try lowering it. Also confirm the letters array includes the starting letter of the fighters you expect.

The run stopped early with fewer records than maxItems.

The Actor stops when it exhausts the fighters matching your filters. If you set letters to only 'x' and minWins to 20, there may be fewer fighters than your maxItems value. Broaden the letters or lower the win threshold.

Some fighter profiles are missing data fields.

UFCStats occasionally has incomplete profiles, especially for older or recently debuted fighters. Missing fields appear as null or empty strings in the output. This is expected behavior reflecting the source data.

I am getting timeout errors.

UFCStats can be slow during high-traffic periods. The Actor retries failed requests automatically. If timeouts persist, increase the run memory to 2 GB or switch to residential proxies in the proxy configuration.

The fight history array is empty even though the fighter has bouts.

Ensure the includeFightHistory toggle is set to true. If it is and the array is still empty, the fighter's detail page on UFCStats may have a non-standard layout. Try scraping that fighter by direct URL in a separate run.

FAQ

QuestionAnswer
Does this scrape every fighter on UFCStats?Yes. If you leave the start URLs and search query empty and set letters to all A through Z, the Actor walks the full directory. Set maxItems to cap the total records returned.
Can I get the fight history for each fighter?Yes. The includeFightHistory toggle is on by default and attaches a nested array with every bout, including opponent, event, method, round, time, and detailed striking and grappling stats.
How do I scrape only one weight class?UFCStats does not expose a weight-class filter on its directory pages. The best approach is to scrape all fighters and filter the resulting dataset by weight class in your own code, or use the stance and min-wins filters to narrow the pool before export.
What proxy do I need?The Actor defaults to Apify datacenter proxies, which work reliably for ufcstats.com. It rotates sessions and falls back to a direct connection if the proxy fails, so you rarely need to change this setting.
Can I search by nickname?Yes. The searchQuery field matches against first name, last name, and nickname. Searching 'spider' returns Anderson Silva, and 'bones' returns Jon Jones.
How fast does it run?The Actor processes fighters sequentially with polite delays to avoid triggering rate limits. A full A-Z walk of several thousand fighters typically completes in under an hour on a standard memory allocation.
What output formats are supported?Your dataset can be exported to CSV, JSON, Excel, or XML directly from the Apify run console.
Does it include fighter photo URLs?Yes. Each fighter record includes the profile image URL hosted on UFCStats.com.
Can I scrape only specific fighters by URL?Yes. Paste one or more fighter detail URLs into the startUrls field, and the Actor scrapes only those profiles, ignoring the directory walk and search.
What happens if a fighter has no fights listed?The career totals will show zeros, and the fight history array will be empty. The record still appears in your dataset with the fighter's physical attributes populated.

Browse the full ParseForge collection for more scrapers.

๐Ÿ†˜ Need help? Email parseforge@protonmail.com with your run ID, your input, and what you expected.

โš ๏ธ Disclaimer. This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by UFCStats.com. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.