
UFC Stats Scraper
hipersoft/ufcstats-scraper
Scrape UFC stats: completed events, full fight cards, fighter profiles and career numbers. Export one clean row per event, fight or fighter as JSON, CSV or Excel.
Total users
2Monthly users
1Total runs
47Per item scraped
$0.003Last rebuilt
Oct 26, 2026Overview
Scrape UFC statistics from ufcstats.com in bulk and export clean, structured data. Get the full list of completed UFC events, every fight card, the complete fighter roster, and full career stats for any fighter — as JSON, CSV or Excel.
Perfect for MMA analysts, data scientists, bettors, journalists, fantasy players and app builders who need reliable, well-typed UFC data without copy-pasting from web pages.
What you can scrape
- Events — the full list of completed UFC events with name, date and location.
- Event fights — one clean row per bout on a card: both fighters, result, weight class, method, round, time, plus per-fighter knockdowns, significant strikes, takedowns and submission attempts.
- Fighters — the complete A–Z roster with height, weight, reach, stance and win/loss/draw record.
- Fighter career stats — a full stat card per fighter: nickname, record, height, weight, reach, stance, date of birth, strikes landed/absorbed per minute, striking accuracy and defense, takedown average/accuracy/defense and submission average.
Modes
Pick a mode in the input:
| Mode | What it does |
|---|---|
events |
Lists all completed UFC events. Optionally attach each event's full fight card with Include fight cards. |
event_detail |
Give it one or more event URLs → one row per fight on each card. |
fighters |
Scrapes the fighter roster A–Z (or only the letters you choose). |
fighter_detail |
Give it one or more fighter URLs → full career stat card for each. |
Example input
{
"mode": "events",
"maxItems": 50
}
Scrape the fights on a specific event:
{
"mode": "event_detail",
"eventUrls": ["http://www.ufcstats.com/event-details/495add4fbede0a44"],
"maxItems": 100
}
Full career stats for specific fighters:
{
"mode": "fighter_detail",
"fighterUrls": ["http://www.ufcstats.com/fighter-details/93fe7332d16c6ad9"]
}
Example output (event fight)
{
"fightId": "a10deecfb8558335",
"eventName": "UFC Fight Night: Gamrot vs. Salkilld",
"eventDate": "August 08, 2026",
"eventLocation": "Las Vegas, Nevada, USA",
"fighter1": "Quillan Salkilld",
"fighter2": "Mateusz Gamrot",
"result": "win",
"weightClass": "Lightweight",
"method": "SUB",
"methodDetail": "Rear Naked Choke",
"round": 1,
"time": "4:25",
"fighter1Str": 10,
"fighter2Str": 3,
"url": "http://www.ufcstats.com/fight-details/a10deecfb8558335"
}
Input reference
| Field | Type | Description |
|---|---|---|
mode |
string | events, event_detail, fighters or fighter_detail. |
includeFights |
boolean | In events mode, attach each event's full fight card. |
eventUrls |
array | Event URLs for event_detail mode. |
fighterUrls |
array | Fighter URLs for fighter_detail mode. |
chars |
array | Roster letters (a–z) for fighters mode. Empty = whole roster. |
maxItems |
integer | Max rows to collect (0 = no limit). |
Output & export
Every run writes to a dataset you can download as JSON, CSV, Excel, XML or RSS, or pull through the Apify API. Each row is flat and typed, and includes the source url so you can trace any record back to the page it came from.
FAQ
Which UFC data can I get? Completed events, full fight cards, the fighter roster, and per-fighter career statistics.
Can I scrape just one event or one fighter? Yes — use event_detail or fighter_detail and paste the URLs.
What formats can I export? JSON, CSV, Excel, XML and RSS, plus the Apify API and integrations.
How do I limit results? Set maxItems. Use 0 to collect everything the selected mode returns.
Input
| Field | Type | Description |
|---|---|---|
modeWhat to scrape | string · events, event_detail, fighters, fighter_detail | Choose the type of data to collect: the list of completed UFC events, the fights on specific events, the full fighter roster, or full career stats for specific fighters. Default: "events" |
includeFightsInclude fight cards (Events mode) | boolean | In Events mode, also load each event page and attach its full fight card to the event row. Slower, but gives every bout in one pass. Default: false |
eventUrlsEvent URLs (Event fights mode) | array | One or more UFC event URLs (e.g. http://www.ufcstats.com/event-details/…). Each returns one clean row per fight on the card. |
fighterUrlsFighter URLs (Fighter career stats mode) | array | One or more UFC fighter URLs (e.g. http://www.ufcstats.com/fighter-details/…). Each returns a full career stat card. |
charsRoster letters (Fighters mode) | array | Which last-name initials to collect in Fighters mode (a–z). Leave empty to scrape the whole roster A–Z. |
maxItemsMax items | integer | Maximum number of rows to collect in this run (0 = no limit; collect everything the selected mode returns). Default: 100 |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~ufcstats-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"eventUrls": [
"http://www.ufcstats.com/event-details/495add4fbede0a44"
],
"fighterUrls": [
"http://www.ufcstats.com/fighter-details/93fe7332d16c6ad9"
],
"chars": [
"a"
]
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/ufcstats-scraper").call(run_input={
"eventUrls": [
"http://www.ufcstats.com/event-details/495add4fbede0a44"
],
"fighterUrls": [
"http://www.ufcstats.com/fighter-details/93fe7332d16c6ad9"
],
"chars": [
"a"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/ufcstats-scraper').call({
"eventUrls": [
"http://www.ufcstats.com/event-details/495add4fbede0a44"
],
"fighterUrls": [
"http://www.ufcstats.com/fighter-details/93fe7332d16c6ad9"
],
"chars": [
"a"
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Item scraped Charged for each item (event, fight or fighter) scraped from ufcstats.com. | $0.003 | $0.0015 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Dribbble Shots Scraper
Scrape public design shots from Dribbble: title, high-res image, tags, likes, views and designer credit. Filter by category or sort, export JSON, CSV or Excel.
359 runs · 5 users · $0.003 / shot scrapedComputrabajo Scraper
Scrape Computrabajo job listings across Latin America (Mexico, Colombia, Argentina, Chile, Peru and more): title, company, location, salary, posted date and apply URL. Filter by country and keyword. No setup.
206 runs · 4 users · $0.002 / listing scrapedKraken Market Data Scraper
Fetch Kraken spot market data in bulk: ticker stats (ask, bid, last, 24h high/low/volume/vwap), OHLC candles for any interval, order book depth (top bids/asks), and tradable pair metadata. Fast, clean and cheap.
165 runs · 4 users · $0.001 / pair scrapedBayt Scraper
Scrape Bayt.com job listings across the Middle East (UAE, Saudi Arabia, Egypt, Qatar and more): title, company, location, posted date and apply URL. Filter by country and keyword.
134 runs · 4 users · $0.003 / job scrapedGitHub Scraper
Search GitHub and scrape repositories (stars, forks, language, topics, license, dates) or user profiles (name, company, location, bio, followers, public email, repos). Uses the GitHub REST API; optional token for higher rate limits. For developer lead generation, OSS research and recruiting.
131 runs · 7 users · $0.0008 / item scrapedHacker News Scraper
Scrape Hacker News stories, comments, Ask HN, Show HN, jobs and polls by keyword, points, comments and date range. Sort by relevance or newest. Title, URL, author, points, comment count, text and HN link. Fast clean HTTP via the HN Algolia API, no setup.
130 runs · 2 users · $0.004 / item scrapedSend the site and the fields. We build it and you get it first.