UFC Scraper: Fighters, Events & Rankings
Pricing
from $4.50 / 1,000 results
UFC Scraper: Fighters, Events & Rankings
UFC fighter profiles and career stats, event fight cards with results, and official division and pound-for-pound rankings. Search by name or collect everything. No login.

What does UFC Scraper: Fighters, Events & Rankings do?
UFC Scraper returns official UFC data as clean, structured rows: fighter profiles (record, division, status, bio and career striking and grappling stats), event fight cards (every bout, winner, method, round and time) and the official division and pound-for-pound rankings with each champion and up to 15 ranked contenders. Search by fighter or event name, or collect everything. No login, no API key.
Quick start (3 steps)
- Open the Actor on Apify and click Try for free.
- Choose what you want in the input form. The default returns the current rankings for every division. Press Start.
- Download the results as JSON, CSV or Excel, connect them to Google Sheets, or call the Actor as a live API (see below).
Where and how can you use it?
| Use case | Who it is for | How to do it |
|---|---|---|
| Fight-week previews | MMA journalists and bloggers | Pull both fighters' records and stats for every bout on a card. |
| Betting research and models | Analysts and bettors | Use finish method, round and time history plus striking and takedown stats. |
| Fantasy MMA and fan apps | App builders | Keep rosters, records and rankings fresh with a scheduled run. |
| Ranking trackers | Fans and content creators | Collect all 13 ranking lists and read each contender's rank change. |
| Fighter databases | Data scientists and researchers | Build a roster with division, status, country of birth and career stats. |
| AI agents and chatbots | Developers using LLMs | Answer "who is the lightweight champion?" or "what happened at UFC 300?" with live data. |
Works with: Google Sheets, Excel, Make, Zapier, n8n, Airtable, Slack, Discord, Telegram, webhooks, Python, JavaScript, cURL and any AI agent that can call an HTTP API.
What data do you get?


| Field | Meaning |
|---|---|
recordType | fighter, event or ranking |
id, name, nickname, url | Identifier, name, nickname and UFC.com link |
division, gender, status | Weight division, gender and Active / Not fighting / Retired |
record, wins, losses, draws | Career record as text and numbers |
hometown, city, country | Place of birth split into parts |
height, weight, reach, legReach, age, octagonDebut, trainsAt | Bio and measurements |
stats | Striking, takedown, submission and win-method stats when available |
title, date, location, fightCount, fights | Event details and the full fight card |
fights[].winner, method, round, time, awards, isTitleFight | Result of each bout |
championName, champion, rankings | Ranking list with the champion and ranked contenders (rank, name, change) |
Example result
{"recordType": "fighter","id": "jon-jones","name": "Jon Jones","nickname": "Bones","division": "Heavyweight","gender": "male","status": "Active","record": "28-1-0","wins": 28,"losses": 1,"draws": 0,"country": "United States","height": "76.00","reach": "84.50","stats": {"Sig. Str. Landed": "4.38","Takedown avg": "1.89"},"url": "https://www.ufc.com/athlete/jon-jones"}
Input parameters

| Parameter | Type | Default | What it does |
|---|---|---|---|
dataType | string | rankings | fighters, events or rankings |
searchTerms | array | [] | Fighter names or event names such as "UFC 300" |
division | string | all | flyweight ... heavyweight, womens-*, pound-for-pound |
gender | string | all | male or female |
fighterStatus | string | any | active, not-fighting or retired (reads each profile) |
country | string | - | Country of birth, for example Brazil (reads each profile) |
eventType | string | all | upcoming, past or all (events) |
includeDetails | boolean | true | Full bio and stats, or the full fight card |
maxResults | integer | 20 | Records to return; rankings return one row per list. 0 = all |
Input examples
Look up one fighter
{"dataType": "fighters","searchTerms": ["Jon Jones"]}
Current rankings for one division
{"dataType": "rankings","division": "lightweight"}
Fight card and results for one event
{"dataType": "events","searchTerms": ["UFC 300"]}
Upcoming events
{"dataType": "events","eventType": "upcoming","maxResults": 10}
Use it as a live API (Actor Standby)
Need an answer right now instead of starting a run? This Actor also works as an always-on HTTP endpoint (Apify Actor Standby). Send a request, get JSON back in seconds.
curl -H "Authorization: Bearer $APIFY_TOKEN" \"https://mrdoe--ufc-fighters-events-rankings-scraper.apify.actor/?dataType=rankings&division=lightweight"
import requestsr = requests.get("https://mrdoe--ufc-fighters-events-rankings-scraper.apify.actor/",params={"dataType": "rankings", "division": "lightweight"},headers={"Authorization": "Bearer YOUR_APIFY_TOKEN"},timeout=90,)print(r.json()["items"])
const res = await fetch("https://mrdoe--ufc-fighters-events-rankings-scraper.apify.actor/?dataType=rankings&division=lightweight", {headers: { Authorization: `Bearer ${process.env.APIFY_TOKEN}` },});const { count, items } = await res.json();
You can also POST a JSON body with the same fields as the Actor input. The response is { "count": 1, "items": [ ... ] }; if something is wrong with your request you get a clear error message.
| Standby API | Normal run | |
|---|---|---|
| Best for | Apps, bots, chat assistants, quick lookups | Scheduled jobs, bigger exports, datasets |
| Output | JSON in the response | Dataset (JSON, CSV, Excel, XML) |
| Scheduling | Call it whenever you like | Apify Schedules and Tasks |
Ready-made Tasks
Open the Tasks tab, pick a ready-made Task and press Start. Clone any Task to change the input and add a schedule.
Tips for best results
- Use rankings for the fastest snapshot: one run returns every division.
- Use exact, common name spellings in
searchTerms, for example "Sean O'Malley". - Turn
includeDetailsoff for a quick roster list, then look up the fighters you care about. - Filtering by status or country reads each profile, so pair it with a division and a sensible
maxResults. - Use
eventType: pastto mine winners, methods, rounds and times.
Good to know
- Fighter searches match every word of the name, and exact full-name matches come first.
- Event rows include a
posterimage URL.
Known limitations
- Fighter stats are best-effort: some profiles show a full stat block, some a partial one or none.
- Filtering a full roster by status or country reads each profile and can be slow. The scan stops after about 3 minutes and returns the fighters found so far; add a division or search terms for a complete, fast answer.
- Results and rankings change after every event; each row is a snapshot at run time.
Frequently Asked Questions
Which rankings are covered?
Every official list UFC publishes: the men's and women's weight classes plus men's and women's pound-for-pound.
Can I get results for past events?
Yes. Set dataType to events and eventType to past, or search a specific event such as "UFC 300".
Can I get one fighter's stats?
Yes. Use dataType: fighters with the fighter's name in searchTerms.
Can I use this Actor as an API?
Yes. Call the endpoint shown in Use it as a live API with your Apify token and read the JSON in the response.
Can I connect it to Google Sheets, Make, Zapier or n8n?
Yes. Use the Apify integrations for each tool, or call the endpoint from any HTTP module. Scheduled Tasks can push fresh data to your sheet or workflow.
Can I run it on a schedule?
Yes. Create a Task with your input and add a schedule in Apify Console.
Am I charged for failed runs or empty results?
You are charged only for records actually returned.
Support
Questions or a missing field? Open an issue from the Issues tab on this Actor's page.
Legal / Responsible Use
Data is collected from publicly available UFC pages for research, analytics and editorial use. You are responsible for using it in line with applicable law and the source's terms. Do not use it to harass individuals or for any unlawful purpose.
Preview
