UFCStats Scraper avatar

UFCStats Scraper

Pricing

Pay per event

Go to Apify Store
UFCStats Scraper

UFCStats Scraper

Extract UFCStats events, fight results, detailed bout stats, and fighter profiles for MMA analysis from public UFCStats pages.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Extract UFCStats events, fight results, detailed bout statistics, and fighter profile records from public UFCStats pages.

What does UFCStats Scraper do?

UFCStats Scraper turns UFCStats HTML pages into structured Apify datasets. It can start from the completed events index, a single event page, a fight detail page, or a fighter profile page.

Use it to collect event metadata, matchup rows, result methods, round and time values, significant strike totals, takedowns, submissions, and normalized fighter profile statistics.

Who is it for?

  • πŸ₯Š MMA analysts building historical fight datasets
  • πŸ“° Sports media teams preparing card previews and post-fight recaps
  • πŸ“ˆ Fantasy and betting modelers who need repeatable UFCStats exports
  • πŸ§ͺ Researchers studying fight outcomes, methods, rounds, and athlete profiles
  • 🧰 Data engineers who want UFCStats records in JSON, CSV, Excel, or via API

Why use this UFCStats extractor?

UFCStats pages are public but spread across event, fight, and fighter detail pages. This actor follows links for you and emits normalized records with a recordType field, so you can filter event, fight, and fighter rows after export.

What data can you extract?

Record typeExample fields
EventeventName, eventDate, eventLocation, eventUrl
FightredFighter, blueFighter, winner, weightClass, method, round, time, kdRed, kdBlue, sigStrRed, sigStrBlue, tdRed, tdBlue
FighterfighterName, fighterNickname, fighterRecord, height, weight, reach, stance, slpm, sapm, takedownAverage

How much does it cost to scrape UFCStats?

This actor uses pay-per-event pricing. You pay a small start charge per run and a per-item charge for each dataset record saved. Keep maxEvents and maxFightsPerEvent low for smoke tests, then increase them for full data refreshes.

Quick start

  1. Open the actor on Apify.
  2. Keep the default completed events URL or paste your own UFCStats URL.
  3. Choose maxEvents and maxFightsPerEvent.
  4. Decide whether to include fighter profile pages.
  5. Run the actor.
  6. Download results from the Dataset tab.

Input options

  • startUrls β€” UFCStats completed events, event detail, fight detail, or fighter detail URLs.
  • maxEvents β€” maximum event pages to process from the event list.
  • maxFightsPerEvent β€” maximum fight rows per event.
  • includeFighterProfiles β€” whether to crawl linked fighter profile pages.

Example input

{
"startUrls": [
{ "url": "http://ufcstats.com/statistics/events/completed?page=all" }
],
"maxEvents": 5,
"maxFightsPerEvent": 10,
"includeFighterProfiles": true
}

Output example

{
"recordType": "fight",
"eventName": "UFC Fight Night: Fiziev vs. Torres",
"eventDate": "June 27, 2026",
"redFighter": "Shara Magomedov",
"blueFighter": "Michel Pereira",
"winner": "Shara Magomedov",
"weightClass": "Middleweight",
"method": "U-DEC",
"round": 3,
"time": "5:00",
"sourceUrl": "http://ufcstats.com/fight-details/012c307c9d446c4d"
}

Record types

Every row includes recordType:

  • event rows summarize UFCStats event pages.
  • fight rows summarize one bout.
  • fighter rows summarize one athlete profile.

Tips for reliable runs

  • Start with maxEvents: 1 while testing workflows.
  • Increase maxFightsPerEvent for complete cards.
  • Use specific event URLs when you only need one card.
  • Disable fighter profiles when you only need fight rows.
  • Export CSV for spreadsheet workflows and JSON for model pipelines.

Integrations

Use the output with:

  • Google Sheets and Excel for card research
  • BigQuery, Snowflake, or Postgres for historical fight databases
  • Python notebooks for MMA modeling
  • BI dashboards for event/fighter summaries
  • Newsroom workflows for fight card previews

API usage with Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/ufcstats-scraper').call({
maxEvents: 3,
maxFightsPerEvent: 10,
includeFighterProfiles: true
});
console.log(run.defaultDatasetId);

API usage with Python

from apify_client import ApifyClient
client = ApifyClient('MY-APIFY-TOKEN')
run = client.actor('automation-lab/ufcstats-scraper').call(run_input={
'maxEvents': 3,
'maxFightsPerEvent': 10,
'includeFighterProfiles': True,
})
print(run['defaultDatasetId'])

API usage with cURL

curl "https://api.apify.com/v2/acts/automation-lab~ufcstats-scraper/runs?token=$APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"maxEvents":3,"maxFightsPerEvent":10,"includeFighterProfiles":true}'

MCP usage

Connect this actor through the Apify MCP server using:

https://mcp.apify.com/?tools=automation-lab/ufcstats-scraper

Claude Code setup:

$claude mcp add apify-ufcstats "https://mcp.apify.com/?tools=automation-lab/ufcstats-scraper"

Claude Desktop JSON config:

{
"mcpServers": {
"apify-ufcstats": {
"url": "https://mcp.apify.com/?tools=automation-lab/ufcstats-scraper"
}
}
}

Example prompts:

  • "Run the UFCStats scraper for the last 3 completed events and summarize fight methods."
  • "Extract fighter profiles linked from the latest UFCStats card."
  • "Create a CSV of fight rows with winner, method, round, and time."

Start URL examples

  • Completed events list: http://ufcstats.com/statistics/events/completed?page=all
  • Event detail: http://ufcstats.com/event-details/...
  • Fight detail: http://ufcstats.com/fight-details/...
  • Fighter profile: http://ufcstats.com/fighter-details/...

Data quality notes

UFCStats can publish upcoming or recently updated event rows. The actor skips future-dated events when crawling the completed events list, but it will process a specific URL if you provide it directly.

Legality

This actor extracts publicly available UFCStats pages. Use the data responsibly, respect the source website, and ensure your downstream usage complies with applicable laws and terms.

FAQ

Why did I get fewer rows than expected?

Check maxEvents, maxFightsPerEvent, and includeFighterProfiles. Disabling profiles greatly reduces output volume.

Can I scrape one card only?

Yes. Paste the event detail URL into startUrls and set maxFightsPerEvent to the number of fights you need.

Does this require a browser?

No. The actor uses HTTP requests and handles the lightweight UFCStats challenge without Playwright.

Explore other Automation Lab sports and data actors at https://apify.com/automation-lab/.

Changelog

  • 0.1 β€” Initial UFCStats events, fights, and fighter profile extractor.

Support

If you need a field added or see a UFCStats page that is not parsed correctly, open an issue on the Apify actor page with the run URL and input.

Dataset export formats

Apify datasets can be downloaded as JSON, JSONL, CSV, Excel, XML, RSS, or HTML table. For MMA modeling, JSONL and CSV are usually the most convenient formats.

Suggested workflows

  • Refresh the latest completed events every week.
  • Store fight rows in a warehouse keyed by fightUrl.
  • Join fighter rows to fight rows using fighterUrl.
  • Track method and round distributions over time.
  • Build fighter-level aggregates from repeated profile exports.

Field reference

Event fields include event name, event date, event location, event URL, source URL, and scrape timestamp.

Fight fields include event context, fighter names, fighter URLs, winner, result status, weight class, method, round, time, knockdowns, strikes, takedowns, submissions, and detail metadata when available.

Fighter fields include name, nickname, record, height, weight, reach, stance, date of birth, striking rates, striking accuracy, takedown rates, takedown defense, and submission average.

Performance

The actor is HTTP based and avoids browser overhead. Larger runs mostly scale with the number of event, fight, and fighter pages requested.

Best practices

Keep default runs small, validate the output shape, and then increase limits for scheduled production refreshes.