Sherdog MMA Fighter Records Scraper
Pricing
from $5.52 / 1,000 fighter or fight rows
Sherdog MMA Fighter Records Scraper
Extract public Sherdog fighter profiles, career records, and normalized fight histories with opponents, results, events, methods, rounds, times, and dates.
Pricing
from $5.52 / 1,000 fighter or fight rows
Rating
0.0
(0)
Developer
Automation Lab
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Categories
Share
Refresh Sherdog MMA fighter records and fight histories as structured data. Give the Actor exact fighter names or public Sherdog fighter URLs and receive normalized fighter and bout rows in the default Apify dataset.
Each fight row can include the opponent, result, event, method, referee, round, time, and date exposed on the source profile. Fighter rows include source identity, nationality, birthplace, measurements, association, weight class, and career totals when Sherdog displays them.
What does this Actor do?
The Actor supports two targeting routes:
- resolve an exact fighter name through Sherdog Fight Finder; or
- fetch a precise
sherdog.com/fighter/...profile URL.
It parses Sherdog's public server-rendered pages. JavaScript rendering, login, and a paid proxy are not required for the current workflow.
The default output combines:
- one
fighterrow per requested profile; and - one
fightrow per professional bout displayed on that profile.
Use the filters to return only fight rows, selected outcomes, or fights on and after a date. This makes the same Actor useful for one-time research and small recurring record-refresh jobs.
Who is it for?
Use this Actor if you are:
- a sports researcher maintaining MMA career-record datasets;
- an analyst comparing opponents, methods, rounds, and event history;
- a publisher preparing sourced fighter timelines;
- a developer feeding public MMA records into a database or notebook;
- an operations team scheduling recurring checks for changed fight histories.
For UFCStats-specific event and strike statistics, use our related UFCStats Actor instead. This Actor is intentionally centered on Sherdog's broader MMA fighter profiles and the fields Sherdog publicly exposes.
Why use it?
Sherdog profile pages are readable, but repeated manual copy-and-paste is slow and inconsistent. This Actor provides:
- stable source IDs and canonical profile URLs;
- separate fighter and fight entity rows;
- ISO
YYYY-MM-DDdates where source dates can be parsed; - exact-name discovery with ambiguity protection;
- an overall output cap and fighter cap;
- date and result filters applied consistently;
- clear failures for unsupported URLs and unexpected source pages.
Name lookup never silently substitutes a partial match. If an exact normalized name cannot be resolved, supply the fighter's profile URL.
What data can I extract?
| Field | Available on | Meaning |
|---|---|---|
recordType | all rows | fighter or fight |
fighterId | all rows | Stable numeric ID from the Sherdog URL |
fighterName | all rows | Displayed fighter name |
fighterNickname | all rows | Nickname when shown |
fighterUrl | all rows | Canonical Sherdog profile URL |
nationality, birthplace | all rows | Public identity/location fields |
birthDate, age | all rows | Public age fields when shown |
height, weight | all rows | Displayed imperial/metric measurements |
association, weightClass | all rows | Team/gym and current class |
wins, losses, draws, noContests | all rows | Career totals when exposed |
result | fight rows | win, loss, draw, or nc |
opponent, opponentUrl | fight rows | Opponent identity and profile |
event, eventUrl | fight rows | Event title and Sherdog event URL |
method, referee | fight rows | Result method and referee when shown |
round, time, date | fight rows | Ending round/time and event date |
scrapedAt | all rows | Collection timestamp |
Fields unavailable on the source are returned as null. Fighter context is
repeated on fight rows so each row remains useful in spreadsheets and data
warehouses without a separate join.
How to get started
- Open the Actor in Apify Console.
- Keep the prefilled Jon Jones profile URL or replace it with another public Sherdog fighter URL.
- Alternatively, remove
startUrlsand add one or more exactfighterNames. - Choose whether to include fighter rows, fight rows, or both.
- Optionally set
fromDateorfightResults. - Set
maxFightersandmaxItemsto bound the run. - Click Start.
- Open the default dataset or export it as JSON, CSV, Excel, XML, or RSS.
The prefilled input is intentionally small and works without credentials.
Input parameters
| Input | Type | Default | Description |
|---|---|---|---|
startUrls | array | Jon Jones URL in prefill | Exact public Sherdog fighter URLs |
fighterNames | string array | [] | Exact names resolved through Fight Finder |
includeProfile | boolean | true | Include one fighter row per profile |
includeFightHistory | boolean | true | Include professional fight rows |
fightResults | string array | [] | Optional win, loss, draw, nc filter |
fromDate | string | unset | Keep fights on/after this YYYY-MM-DD date |
maxFighters | integer | 10 | Maximum profiles, from 1 to 50 |
maxItems | integer | 100 | Maximum combined output rows, from 1 to 5,000 |
At least one URL or name is required. At least one of includeProfile and
includeFightHistory must be enabled.
Example inputs
Find a fighter by exact name:
{"fighterNames": ["Islam Makhachev"],"maxFighters": 1,"maxItems": 20}
Fetch one exact profile and only recent fight rows:
{"startUrls": [{ "url": "https://www.sherdog.com/fighter/Jon-Jones-27944" }],"includeProfile": false,"includeFightHistory": true,"fromDate": "2020-01-01","maxItems": 20}
Collect only losses and no contests:
{"startUrls": [{ "url": "https://www.sherdog.com/fighter/Jon-Jones-27944" }],"fightResults": ["loss", "nc"],"includeProfile": false,"maxItems": 50}
Output example
A normalized fight row has this shape:
{"recordType": "fight","fighterId": "27944","fighterName": "Jon Jones","fighterNickname": "Bones","fighterUrl": "https://www.sherdog.com/fighter/Jon-Jones-27944","nationality": "United States","wins": 28,"losses": 1,"result": "win","opponent": "Stipe Miocic","opponentUrl": "https://www.sherdog.com/fighter/Stipe-Miocic-39537","event": "UFC 309 - Jones vs. Miocic","eventUrl": "https://www.sherdog.com/events/UFC-309-Jones-vs-Miocic-103896","method": "TKO (Spinning Back Kick and Punches)","referee": "Herb Dean","round": 3,"time": "4:29","date": "2024-11-16","scrapedAt": "2026-09-15T06:00:00.000Z"}
The exact values can change when Sherdog updates a fighter profile.
How much does it cost to extract Sherdog fighter records?
Pay-per-event pricing has two parts:
- $0.005 once when a valid run starts; and
- one
itemevent for each fighter or fight row saved.
The BRONZE item price is $0.0092. The six active item tiers are:
| Tier | Price per saved row |
|---|---|
| FREE | $0.01058 |
| BRONZE | $0.0092 |
| SILVER | $0.007176 |
| GOLD | $0.00552 |
| PLATINUM | $0.00552 |
| DIAMOND | $0.00552 |
At BRONZE, calculate an example Actor charge as the $0.005 start fee
plus the saved row count multiplied by $0.0092. For example, use
0.005 + (10 × 0.0092) for 10 rows or 0.005 + (100 × 0.0092) for 100 rows.
Rows rejected by filters, duplicate profile URLs, failed requests, and empty results are not charged as items. Apify platform compute charges are handled according to your Apify plan.
Scheduling record monitoring
Create one task per tracked fighter group and schedule it weekly or after an expected event. Keep stable input and export each run's dataset to your own storage. Compare rows by a composite key such as:
fighterId + date + opponentUrl + eventUrl
A newly appearing key usually represents a newly listed bout. A changed method, result, or date can indicate a source correction. This Actor returns snapshots; it does not send alerts or maintain a cross-run history database for you.
Data pipeline patterns
Common workflows include:
- schedule → dataset → Google Sheets;
- webhook → database upsert keyed by fighter and bout;
- dataset API → pandas or an analytics notebook;
- Make/Zapier flow → Slack notification for new rows;
- recurring run → object storage snapshot → diff job.
Use recordType to route fighter and fight rows into separate destination
tables if your pipeline uses a normalized relational model.
Run through the Apify API
Replace YOUR_TOKEN with an Apify API token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~sherdog-mma-fighter-records/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"fighterNames":["Islam Makhachev"],"maxItems":20}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/sherdog-mma-fighter-records').call({fighterNames: ['Islam Makhachev'],maxItems: 20,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_TOKEN")run = client.actor("automation-lab/sherdog-mma-fighter-records").call(run_input={"fighterNames": ["Islam Makhachev"], "maxItems": 20})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use with MCP and AI assistants
Add the Actor to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/sherdog-mma-fighter-records"
Claude Desktop, Cursor, and VS Code
Use this HTTP MCP configuration in Claude Desktop, Cursor, or VS Code:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/sherdog-mma-fighter-records"}}}
Example prompts:
- “Fetch Islam Makhachev's current Sherdog record and summarize finish methods.”
- “Export Jon Jones fights since 2020 as structured rows.”
- “Compare the latest saved fighter totals with last week's snapshot.”
The assistant receives the same typed default-dataset rows as API users.
Reliability and limits
The Actor uses public server-rendered Sherdog pages and performs requests sequentially. Transient network errors, HTTP 429, and server errors receive a small bounded retry. Stable invalid URLs and unsupported pages fail directly.
Important limits:
- only
sherdog.com/fighter/...profile URLs are accepted; - name discovery requires an exact normalized match;
- Fight Finder lookup inspects at most ten result pages per name;
- only the professional fight-history table is exported;
- values absent on Sherdog remain
null; - the Actor does not calculate rankings, odds, or strike statistics;
- upstream markup or access-policy changes can require an update.
A valid no-result filter run succeeds with zero rows. A blocked or malformed source page is treated as an error, not as an empty result.
Troubleshooting
Why was my fighter name not found?
Sherdog may list a different spelling, punctuation, or duplicate name. Open the
public Sherdog profile and provide its exact URL in startUrls.
Why is a field null?
Sherdog does not expose every field for every fighter or historical bout. Null means the value was unavailable on the profile at collection time.
Why did I receive fewer rows than expected?
Check maxItems, fromDate, and fightResults. The overall item cap applies
after filters and includes fighter rows when includeProfile is enabled.
Does the Actor need a proxy?
No. The current implementation uses direct public HTTPS. It does not silently switch to a residential proxy, so there is no hidden proxy-transfer cost.
Responsible use and legality
This Actor extracts public information from public Sherdog pages. You are responsible for ensuring that your use complies with applicable laws, Sherdog's terms, intellectual-property rights, database rights, and Apify's policies.
Collect only what you need. Avoid aggressive schedules, do not use the output to harass or profile people unfairly, and preserve source attribution where appropriate. Public availability does not remove all reuse restrictions.
Frequently asked questions
Can I request several fighters?
Yes. Combine names and URLs and set maxFighters up to 50. Duplicate canonical
profile URLs are fetched once.
Are amateur fights included?
No. Version 0.1 exports the professional fight-history table only.
Can I return only fight rows?
Yes. Set includeProfile to false and keep includeFightHistory enabled.
Can I filter by opponent or event?
Not in version 0.1. Filter the resulting dataset downstream, or use the result and date filters before collection.
Does it enrich opponent profiles?
No. Opponent names and profile URLs are included from each fight row, but the Actor does not fetch each opponent recursively.
Related automation-lab Actors
- UFC Events, Fights & Fighters for UFCStats events, bouts, fighter profiles, and available bout statistics.
- ESPNcricinfo Statsguru Scraper for a comparable repeatable sports-record workflow in cricket.
These Actors use different sources and output contracts. Choose the source that matches your research question rather than treating records as interchangeable.
Support
If a public Sherdog fighter page works in a browser but the Actor fails, include an example profile URL, run link, and the relevant error message in an Actor issue report. Do not include API tokens or private data.