UFC Scraper avatar

UFC Scraper

Pricing

from $24.00 / 1,000 ufc records

Go to Apify Store
UFC Scraper

UFC Scraper

Scrape UFC.com for fighter profiles, event fight cards, and division rankings. Get records, stats, bios, fight results, and pound-for-pound rankings as structured JSON.

Pricing

from $24.00 / 1,000 ufc records

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

2

Monthly active users

2 days ago

Last modified

Categories

Share

UFC Scraper

Scrape UFC.com for fighter profiles, event fight cards, and division rankings without touching a browser or an API key. The UFC Scraper pulls structured fighter records, striking/grappling stats, full fight-card results, and official UFC rankings — including the pound-for-pound lists — as clean JSON, CSV, or Excel.

Collect UFC fighter records, bios, and career stats; full event fight cards with round-by-round results; or the official weight-division and pound-for-pound rankings — filter by division, gender, fighter status, and country.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.

parsebird/ufc-scraper on Apify. Call: ApifyClient("TOKEN").actor("parsebird/ufc-scraper").call(run_input={...}), then client.dataset(run["defaultDatasetId"]).list_items().items for results. Key inputs: dataType (string, "fighters"/"events"/"rankings", default "fighters"), searchTerms (array of fighter or event names, default []), division (string, "flyweight"/"bantamweight"/"featherweight"/"lightweight"/"welterweight"/"middleweight"/"light-heavyweight"/"heavyweight"/"womens-strawweight"/"womens-flyweight"/"womens-bantamweight"/"womens-featherweight"/"pound-for-pound"), gender ("male"/"female"), fighterStatus ("active"/"not-fighting"/"retired"), country (string), eventType ("all"/"upcoming"/"past"), includeDetails (boolean, default true), maxResults (integer, default 100, 0 = as many as possible). Output record shape depends on dataType: fighter records include name, nickname, division, record, wins/losses/draws, bio, and a striking/grappling stats object; event records include title, date, location, and a fights array with corners, method, round, and time; ranking records include division, championName, and a rankings array. Full actor spec: fetch build via GET https://api.apify.com/v2/acts/parsebird~ufc-scraper (Bearer TOKEN). Get token: https://console.apify.com/account/integrations

What does UFC Scraper do?

This UFC data scraper reads directly from ufc.com — the same source UFC.com's own athlete, event, and rankings pages use — and turns it into structured data you can filter, export, and automate against. One actor, three data types:

  • 🥊 Fighters — profile, nickname, division, record (W-L-D), status, hometown, physical measurements, and striking/grappling/takedown stats for any UFC athlete, active or historical
  • 📅 Events — full fight cards for upcoming and past UFC events, including both corners, title-fight flags, Performance/Fight of the Night awards, and the round/time/method for every finished fight
  • 🏆 Rankings — the official UFC weight-division rankings and both Men's and Women's pound-for-pound lists, with champion, ranked contenders, and rank movement

Search by name, filter fighters by weight division, gender, fighter status, or country of birth, and toggle between a fast listing-level summary or the complete detail page for every result. Runs as a hosted Apify Actor, so you get built-in scheduling, API access, webhooks, integrations with Google Sheets/Zapier/Make, and one-click export to JSON, CSV, Excel, HTML, or XML — no scraping infrastructure to maintain.

What data can you extract from UFC.com?

Data typeKey fields
Fightername, nickname, division, record, wins/losses/draws, status, hometown, country, height, weight, reach, age, octagonDebut, trainsAt, stats (Sig. Str. Landed, Takedown Defense, Wins by Knockout, and more)
Eventtitle, date, location, poster, fightCount, fights (weight class, red/blue corner, outcome, method, round, time, awards)
Rankingdivision, gender, championName, champion, rankings (rank, name, url, rank change)

How to scrape UFC.com data

  1. Go to the UFC Scraper page on Apify Store and click Try for free — no credit card needed to start.
  2. Pick What to Extract: Fighters, Events, or Rankings.
  3. Optionally add Search Terms (fighter names or event names), or leave empty to browse by filter.
  4. Narrow Fighters or Rankings with Division, Gender, Fighter Status, or Country; narrow Events with Event Type (upcoming/past/all).
  5. Toggle Include Full Details on for complete stats and fight-card results, or off for a fast listing-level summary.
  6. Set Max Results and click Start.
  7. When the run finishes, open the Dataset tab and export as JSON, CSV, Excel, HTML, or XML — or pull results straight from the Apify API.

Under the hood, the actor reads UFC.com's own athlete roster, event calendar, and rankings pages the same way a browser would, parses the record and stat markup, and normalizes it into one consistent schema per data type.

Input parameters

ParameterTypeDefaultDescription
dataTypestring"fighters"fighters, events, or rankings
searchTermsarray[]Fighter names (Fighters) or event names (Events); merged results. Ignored for Rankings
divisionstring"" (all)One weight division, or pound-for-pound. Applies to Fighters and Rankings
genderstring"" (all)male or female. Applies to Fighters and Rankings
fighterStatusstring"" (any)active, not-fighting, or retired. Fighters only
countrystring""Country of birth, e.g. United States, Brazil. Fighters only
eventTypestring"all"upcoming, past, or all. Events only
includeDetailsbooleantrueFull stats/fight card vs. a fast listing-level summary
maxResultsinteger100Total records to collect (0 = as many as possible)

Output example

Fighter (dataType: "fighters"):

{
"recordType": "fighter",
"id": "jon-jones",
"name": "Jon Jones",
"nickname": "Bones",
"division": "Heavyweight",
"status": "Active",
"record": "28-1-0",
"wins": 28,
"losses": 1,
"draws": 0,
"hometown": "Rochester, United States",
"country": "United States",
"stats": {
"Sig. Str. Landed Per Min": "4.38",
"Takedown Defense": "95%",
"Wins by Knockout": "11"
},
"url": "https://www.ufc.com/athlete/jon-jones"
}

Event (dataType: "events", one fight from the card):

{
"recordType": "event",
"id": "ufc-330",
"title": "UFC 330",
"date": "2026-08-16T01:00:00+00:00",
"location": "Xfinity Mobile Arena, Philadelphia, United States",
"fightCount": 12,
"fights": [
{
"weightClass": "Welterweight Title Bout",
"isTitleFight": true,
"redCorner": { "name": "Islam Makhachev", "url": "https://www.ufc.com/athlete/islam-makhachev" },
"blueCorner": { "name": "Ian Machado Garry", "url": "https://www.ufc.com/athlete/ian-machado-garry" },
"redOutcome": "Win",
"winner": "Islam Makhachev",
"method": "Decision - Unanimous",
"round": "5",
"time": "5:00"
}
],
"url": "https://www.ufc.com/event/ufc-330"
}

Ranking (dataType: "rankings", division truncated):

{
"recordType": "ranking",
"id": "lightweight",
"division": "Lightweight",
"gender": "male",
"championName": "Justin Gaethje",
"rankings": [
{ "rank": 1, "name": "Ilia Topuria", "url": "https://www.ufc.com/athlete/ilia-topuria", "change": "" },
{ "rank": 2, "name": "Arman Tsarukyan", "url": "https://www.ufc.com/athlete/arman-tsarukyan", "change": "" }
],
"url": "https://www.ufc.com/rankings"
}

Use cases

  • MMA analytics & prediction models — feed structured fighter stats and fight results into your own model
  • Fantasy MMA & betting research — pull current form, records, and division rankings before fight week
  • Sports media & content — auto-generate fighter cards, event previews, or rankings widgets
  • Fan apps & Discord bots — power a /ufc command with live roster, event, and ranking lookups
  • Historical archives — build a searchable database of UFC fight results and career records over time

Use with the Apify API

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("parsebird/ufc-scraper").call(run_input={
"dataType": "fighters",
"division": "heavyweight",
"fighterStatus": "active",
"maxResults": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item["record"], item["status"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('parsebird/ufc-scraper').call({
dataType: 'rankings',
division: 'pound-for-pound',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

How much does it cost to scrape UFC.com data?

UFC Scraper uses Pay-per-event pricing — you only pay for records actually returned, no separate compute charges. One record-scraped event fires per fighter, event, or ranking-division record pushed to the dataset. The price per event scales down with your Apify plan:

PlanPrice per eventPrice per 1,000
Free$0.030$30.00
Bronze$0.028$28.00
Silver$0.026$26.00
Gold$0.024$24.00

Collecting 100 fighters costs $3.00 on the Free plan (down to $2.40 on Gold); a full rankings sweep (roughly 20 division/pound-for-pound rows) costs under $0.60. Every plan — including Free — starts with free platform credit, so you can try the actor before paying anything.

Scraping publicly available data — the kind visible to any visitor without logging in, such as UFC.com's athlete profiles, event pages, and rankings — is generally considered legal in most jurisdictions. This actor only reads public pages and does not bypass logins, paywalls, or access controls. That said, you're responsible for how you use the collected data and for complying with UFC.com's terms of service and any applicable laws in your jurisdiction. See Apify's overview on the legality of web scraping for more detail.

FAQ

How fresh is the data? Every run reads UFC.com live — there's no cache. Rankings, records, and event cards reflect whatever UFC.com shows at run time.

Can I look up a specific fighter or event by name? Yes. Set searchTerms to one or more names — for fighters they match against UFC.com's athlete search; for events they match against the event title and event slug (e.g. "UFC 330" or "McGregor").

Why is pound-for-pound a division option for Fighters? Pound-for-pound isn't a weight class — it's UFC's cross-division "best fighter, regardless of weight" list. Setting division: "pound-for-pound" with dataType: "fighters" returns the fighters currently on the Men's and/or Women's pound-for-pound rankings (use gender to pick one list).

Why does Women's Featherweight return no rankings? UFC no longer publishes a Women's Featherweight rankings list, so dataType: "rankings" with division: "womens-featherweight" correctly returns nothing. Fighters in that division are still returned by dataType: "fighters".

Does the Events data type cover UFC's entire event history? No — it mirrors what UFC.com's own events calendar publishes at run time: the current upcoming schedule and the most recent past events. It is not a historical archive.

Can I schedule recurring runs? Yes. Use Apify's built-in scheduler to run daily or weekly and track ranking or roster changes over time.

Something looks wrong or missing? UFC.com occasionally changes its page markup. Open an issue on the actor's Issues tab in Apify Console and we'll take a look.