Sherdog MMA Fighter Records Scraper avatar

Sherdog MMA Fighter Records Scraper

Pricing

from $5.52 / 1,000 fighter or fight rows

Go to Apify Store
Sherdog MMA Fighter Records Scraper

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

Automation Lab

Maintained by Community

Actor 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:

  1. resolve an exact fighter name through Sherdog Fight Finder; or
  2. 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 fighter row per requested profile; and
  • one fight row 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-DD dates 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?

FieldAvailable onMeaning
recordTypeall rowsfighter or fight
fighterIdall rowsStable numeric ID from the Sherdog URL
fighterNameall rowsDisplayed fighter name
fighterNicknameall rowsNickname when shown
fighterUrlall rowsCanonical Sherdog profile URL
nationality, birthplaceall rowsPublic identity/location fields
birthDate, ageall rowsPublic age fields when shown
height, weightall rowsDisplayed imperial/metric measurements
association, weightClassall rowsTeam/gym and current class
wins, losses, draws, noContestsall rowsCareer totals when exposed
resultfight rowswin, loss, draw, or nc
opponent, opponentUrlfight rowsOpponent identity and profile
event, eventUrlfight rowsEvent title and Sherdog event URL
method, refereefight rowsResult method and referee when shown
round, time, datefight rowsEnding round/time and event date
scrapedAtall rowsCollection 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

  1. Open the Actor in Apify Console.
  2. Keep the prefilled Jon Jones profile URL or replace it with another public Sherdog fighter URL.
  3. Alternatively, remove startUrls and add one or more exact fighterNames.
  4. Choose whether to include fighter rows, fight rows, or both.
  5. Optionally set fromDate or fightResults.
  6. Set maxFighters and maxItems to bound the run.
  7. Click Start.
  8. 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

InputTypeDefaultDescription
startUrlsarrayJon Jones URL in prefillExact public Sherdog fighter URLs
fighterNamesstring array[]Exact names resolved through Fight Finder
includeProfilebooleantrueInclude one fighter row per profile
includeFightHistorybooleantrueInclude professional fight rows
fightResultsstring array[]Optional win, loss, draw, nc filter
fromDatestringunsetKeep fights on/after this YYYY-MM-DD date
maxFightersinteger10Maximum profiles, from 1 to 50
maxItemsinteger100Maximum 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 item event for each fighter or fight row saved.

The BRONZE item price is $0.0092. The six active item tiers are:

TierPrice 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 ApifyClient
client = 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().items
print(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.

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.