Sherdog MMA Fighters, Fights & Events Scraper avatar

Sherdog MMA Fighters, Fights & Events Scraper

Pricing

from $10.00 / 1,000 results

Go to Apify Store
Sherdog MMA Fighters, Fights & Events Scraper

Sherdog MMA Fighters, Fights & Events Scraper

MMA fighter profiles with full fight histories, event cards and bout results from Sherdog - UFC, PFL, Bellator, ONE and hundreds of other promotions, back to the 1990s - with incremental runs.

Pricing

from $10.00 / 1,000 results

Rating

0.0

(0)

Developer

Artsiom Kunitsyn

Artsiom Kunitsyn

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

sherdog-scraper

Scrapes MMA data from Sherdog: fighter profiles with their complete fight history, event fight cards (upcoming and past) and bout results β€” for the UFC, PFL, Bellator, ONE and hundreds of smaller promotions, back to the 1990s. No login required.

Contents

πŸ”‘ Key features

  • Three views of the same data. fighters (one row per fighter), events (one row per card) and fights (one flat row per bout, ready for a spreadsheet or a model).
  • Full fight histories. Every professional fight with opponent, event, date, method (KO/TKO, submission, decision…), round, time and referee β€” plus amateur and pro-exhibition bouts, kept in separate divisions.
  • Record breakdowns. Wins and losses split by KO/TKO, submission, decision and other.
  • Upcoming cards. Future events with the full bout list, weight classes and fighter records, and each fighter's next scheduled fight.
  • Scope by promotion. Pick UFC, PFL, Bellator, ONE, KSW, Oktagon, Rizin, Cage Warriors and more, or paste any Sherdog promotion URL. For fighters, that means "everyone who fought (or is booked) on these cards".
  • The whole database, too. Leave the promotion list empty for every fighter (about 354,000) or event (about 77,000) Sherdog lists.
  • Incremental runs. Schedule events or fights: after the first run you only receive new events and cards whose results changed.
  • maxItems defaults to 50 β€” a fast, cheap preview. Clear it (null) for everything in your selection.

πŸ“‹ Output

See .actor/dataset_schema.json for every field.

fighters β€” one row per fighter:

{
"source": "sherdog",
"external_id": "27944",
"name": "Jon Jones",
"nickname": "Bones",
"birth_date": "1987-07-19",
"height_cm": 193.04,
"weight_kg": 107.95,
"weight_class": "Heavyweight",
"association": "Jackson-Wink MMA",
"nationality": "United States",
"wins": 28, "losses": 1, "draws": 0, "no_contests": 1,
"wins_ko": 11, "wins_submission": 7, "wins_decision": 10,
"pro_fights": 30,
"upcoming_fights": [],
"fights": [
{
"division": "pro", "result": "win", "opponent": "Stipe Miocic", "opponent_id": 39537,
"event": "UFC 309 - Jones vs. Miocic", "event_date": "2024-11-16",
"method": "TKO", "method_detail": "Spinning Back Kick and Punches", "finish_type": "ko_tko",
"referee": "Herb Dean", "round": 3, "time": "4:29", "time_seconds": 269
}
]
}

events β€” one row per card, with bouts (match number, weight class, both fighters with ids and records where shown, winner, method, round, time, referee) and a status of completed, upcoming, no_results or unknown.

fights β€” one flat row per bout: event, promotion, date, weight class, fighter_1 / fighter_2 with ids and results, winner, method, finish_type, round, time_seconds, referee.

πŸ”§ Input

FieldTypeDefaultDescription
entityTypestringfightersfighters, events or fights.
organizationsarray["ufc"]Promotions to scrape. Empty = the entire database.
startUrlsarrayβ€”Specific fighter, event or promotion pages. Replaces the promotion selection.
dateFrom / dateTostringβ€”Only events in this window (YYYY-MM-DD). Use a future window for upcoming cards.
maxItemsinteger50Stop after this many rows. null = everything selected.
modestringautoauto / full / incremental β€” events and fights only.
concurrencyinteger8Parallel page requests (max 25).
impersonatestringfirefoxBrowser TLS fingerprint. Change only if requests are blocked.
proxyConfigurationobjectno proxyApify Proxy settings. Not needed in testing.

πŸ“₯ Input examples

Default preview (50 UFC fighters):

{}

Every UFC fight ever, one row per bout:

{ "entityType": "fights", "organizations": ["ufc"], "maxItems": null }

Upcoming UFC and PFL cards:

{ "entityType": "events", "organizations": ["ufc", "pfl"], "dateFrom": "2026-09-21", "maxItems": null }

Daily feed of new and changed events (schedule this):

{ "entityType": "fights", "organizations": ["ufc", "pfl", "bellator", "one"], "maxItems": null }

Two specific fighters:

{ "entityType": "fighters", "startUrls": ["https://www.sherdog.com/fighter/Jon-Jones-27944", "https://www.sherdog.com/fighter/Stipe-Miocic-39537"] }

πŸ” Incremental mode

events and fights only, and only for a run with maxItems cleared (null) β€” a capped run is a preview and always returns rows. In auto mode the first uncapped run returns everything in scope. Later runs return only events that are new or whose card or results changed in the last 90 days, plus upcoming ones (change_type is new or changed); older events are history and are not repeated. A run limited by maxItems, your spending limit, startUrls, a date window or an error does not update the memory. fighters is always a fresh pull.

❓ FAQ

How complete is fighter data? Sherdog lists every fighter, but many are obscure: in a sample of 5,000 fighters, about 63% had a nationality, 54% a weight class and 22% a birth date. Fields Sherdog doesn't have are null, never guessed.

What are the divisions? pro, amateur and pro_exhibition, matching Sherdog's sections. The win/loss record fields are the professional record.

Why does an old event have no_results? Some 1990s events exist on Sherdog with an empty card. They are returned with that status rather than being labelled upcoming.

Do you cover boxing or Muay Thai? Sherdog is an MMA site; a few boxing events exist (the "Boxing" promotion), and promotions you paste into startUrls are scraped as listed.