# MMA Stats Scraper: UFC Fights, Fighters & Rankings (`getascraper/ufc-mma-stats-scraper`) Actor

Extract UFC and MMA fight results, fighter records, and striking and grappling stats across 19 promotions. Structured JSON or CSV output, ready for betting models, fantasy leagues, or fighter databases. Skip manual stats-page digging. Pay per result.

- **URL**: https://apify.com/getascraper/ufc-mma-stats-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:**
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.66 / 1,000 stat rows

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## MMA Stats Scraper: UFC Fights, Fighters & Rankings

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#FEF2F2;border:1px solid #FECACA;border-top:4px solid #DC2626;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1C1917;line-height:1.3">Stop refreshing stats pages between rounds</span><br>
<span style="font-size:15px;color:#57534E;line-height:1.6">Pull fight results, fighter records, and full striking and grappling breakdowns for UFC and 18 other MMA promotions in one structured run.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECACA;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#991B1B">🥊 Full fight cards</span><br>
<span style="font-size:12px;color:#57534E">Winner, method, round, and time for every bout.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECACA;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#991B1B">📊 Strike-by-strike stats</span><br>
<span style="font-size:12px;color:#57534E">30+ fields per fighter: significant strikes, takedowns, control time.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECACA;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#991B1B">👤 Fighter records</span><br>
<span style="font-size:12px;color:#57534E">Career wins, losses, and physical stats for any athlete.</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #FECACA;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#991B1B">🏆 Live rankings</span><br>
<span style="font-size:12px;color:#57534E">Divisional and pound-for-pound, updated as they move.</span>
</td>
</tr>
</table>

MMA stats scraper covering UFC, PFL, Bellator, ONE Championship, PRIDE, Strikeforce, and 13 more promotions. Get fight results, fighter career data, and rankings as structured JSON, ready for a betting model, a fantasy league scorer, or a fighter database, without digging through individual stats pages by hand.

### 🔍 What does this Actor do?

This Actor extracts structured MMA data across 19 promotions. Pick one of four modes per run:

- **Fights**: every bout's result, winner, method of victory, round, and time, plus a full striking and grappling breakdown for each fighter.
- **Fighters**: career records and physical profiles for any athlete by ID.
- **Rankings**: current divisional and pound-for-pound rankings, with trend and title-defense counts.
- **Events**: fight cards with venue, city, and bout count.

Use it to build betting and prediction models, score fantasy MMA leagues, populate a fight-preview page, or research a fighter's full career history.

### 🚀 How to use it

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#FEF2F2;border:1px solid #FECACA;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#DC2626;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Pick a mode</span><br>
<span style="font-size:12px;color:#57534E">Choose fights, fighters, rankings, or events, then pick your promotions and date range.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FEF2F2;border:1px solid #FECACA;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#DC2626;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Run the Actor</span><br>
<span style="font-size:12px;color:#57534E">It pulls the matching bouts, fighters, or rankings and structures every field.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#FEF2F2;border:1px solid #FECACA;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#DC2626;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1C1917">Export your data</span><br>
<span style="font-size:12px;color:#57534E">Download as JSON, CSV, or Excel, or pull it straight into your app via API.</span>
</td>
</tr>
</table>

### 👥 Who uses this

**Sports data analysts** feed the fight-stats output straight into prediction models. Significant strikes landed, takedown accuracy, and control time per bout give a real statistical base instead of guesswork.

**Fantasy MMA operators** score leagues off method-of-victory and round data the moment a card wraps, without waiting on a manual recap.

**Sports content sites** populate fighter bios and event previews automatically: reach, stance, record, and upcoming card details in one pull.

**MMA researchers and journalists** pull a fighter's complete career history and stat trends for feature writing, without digging through years of individual fight pages.

### 📋 Input

| Field | Type | Required | Description |
|---|---|---|---|
| `mode` | enum | No | `fights`, `fighters`, `rankings`, or `events`. Defaults to `fights`. |
| `eventIds` | array of strings | No | Restrict to specific event IDs. Fastest way to target fights mode. |
| `fighterIds` | array of strings | No | Fighter IDs to pull. Required for fighters mode. |
| `promotions` | array of strings | No | MMA promotions to cover (UFC, PFL, Bellator, and 16 more). Defaults to UFC. |
| `years` | array of integers | No | Calendar years to cover. Ignored if a date range is set. |
| `fromDate` | string | No | Start date (YYYYMMDD). Overrides years. |
| `toDate` | string | No | End date (YYYYMMDD). Overrides years. |
| `weightClass` | string | No | Filter by weight class. |
| `stance` | enum | No | Orthodox, Southpaw, Switch, Open Stance, or Sideways. |
| `minWins` | integer | No | Minimum career wins filter. |
| `minLosses` | integer | No | Minimum career losses filter. |
| `resultFilter` | array of enums | No | Filter bouts by result: win, loss, draw, no contest. |
| `methodFilter` | array of enums | No | Filter bouts by method: KO/TKO, submission, decision, other. |
| `titleFightsOnly` | boolean | No | Only include championship bouts. |
| `maxItems` | integer | No | Maximum rows to save. Defaults to 1,000. |
| `proxyConfiguration` | object | No | Proxy settings. Datacenter proxy is used by default and is sufficient. |

### 📊 Data table

| Field | Type | Description |
|---|---|---|
| `fightId` | string | Unique bout identifier. |
| `eventId` | string | The event this bout was part of. |
| `eventName` | string | Event name, e.g. "UFC 324: Gaethje vs. Pimblett". |
| `date` | string | Bout date, ISO format. |
| `promotion` | string | Promotion slug (e.g. `ufc`). |
| `weightClass` | string | Weight division. |
| `fighter1Name` / `fighter2Name` | string | Competitor names. |
| `winnerName` | string | Winning fighter, if any. |
| `method` | string | Method of victory (KO/TKO, Submission, Decision). |
| `round` | number | Round the fight ended in. |
| `time` | string | Time within the round the fight ended. |
| `sigStrikesLanded` / `sigStrikesAttempted` | number | Significant strikes landed and attempted (fight-stats rows). |
| `takedownsLanded` / `takedownAccuracy` | number | Takedown volume and accuracy (fight-stats rows). |
| `fullName` | string | Fighter's full name (fighters mode). |
| `wins` / `losses` / `recordSummary` | number / string | Career record (fighters mode). |
| `rankingName` / `rank` | string / number | Ranking division and position (rankings mode). |
| `venueName` / `venueCity` | string | Event venue details (events mode). |

**Example output (fights mode):**

```json
{
  "fightId": "401848704",
  "eventId": "600057024",
  "eventName": "UFC 324: Gaethje vs. Pimblett",
  "date": "2026-01-24T22:30Z",
  "promotion": "ufc",
  "weightClass": "Welterweight",
  "fighter1Name": "Adam Fugitt",
  "fighter2Name": "Ty Miller",
  "winnerName": "Ty Miller",
  "method": "KO/TKO",
  "round": 1,
  "time": "4:59"
}
```

### 💰 Pricing

This Actor is pay per result. You only pay for the rows it actually returns, an empty run costs nothing, and there's no subscription.

### ⭐ Enjoying MMA Stats Scraper?

<table width="100%">
<tr>
<td style="padding:20px 24px 14px;background:#FEF2F2;border:1px solid #FECACA;border-left:5px solid #DC2626;border-radius:10px 10px 0 0">
<span style="font-size:20px;letter-spacing:4px">⭐ ⭐ ⭐ ⭐ ⭐</span><br>
<span style="font-size:17px;font-weight:800;color:#1C1917">Skip hours of manual stats-page digging and get structured fight data in one run.</span><br>
<span style="font-size:14px;color:#57534E">A 5-star rating takes 10 seconds and helps other sports data analysts and MMA researchers find it. Your feedback also tells us what to build next.</span>
</td>
</tr>
<tr>
<td style="padding:0;background:#DC2626;border:1px solid #FECACA;border-top:none;border-radius:0 0 10px 10px;text-align:center">
<a href="https://apify.com/getascraper/ufc-mma-stats-scraper/reviews" style="display:block;padding:13px 16px;color:#FFFFFF;text-decoration:none;font-weight:800;font-size:15px;letter-spacing:0.3px">★&nbsp;&nbsp;Rate this Actor on Apify</a>
</td>
</tr>
</table>

### ❓ FAQ

**Does this cover promotions besides the UFC?**
Yes. It covers 19 promotions including PFL, Bellator, ONE, PRIDE, Strikeforce, and more, all in the same output format.

**Can I get a fighter's full career history in one run?**
Yes. Use fighters mode with a fighter ID, or search by name, to get career totals and record breakdowns.

**Will this miss recent or upcoming fights?**
No. Data reflects the same feed sports broadcasters and stats sites pull from, so it's current through the latest scheduled and completed cards.

**Do I need to know each fighter's ID ahead of time?**
Yes, fighters mode requires a fighter ID. You can find IDs from a fights-mode run's `fighter1Id`/`fighter2Id`/`winnerId` fields, or from a rankings-mode run's `fighterId` field.

### 🔗 Other actors

- [SofaScore Scraper: Live scores, stats and fixtures](https://apify.com/getascraper/sofascore-live-events-scraper) - live scores and fixtures across football, basketball, and more.
- [Cricket Data API: ESPNcricinfo StatsGuru Export](https://apify.com/getascraper/espncricinfo-statsguru-scraper) - batting, bowling, and career stats from cricket's StatsGuru database.
- [Baseball Savant Scraper: Scheduled Statcast Data](https://apify.com/getascraper/baseball-savant-scraper) - MLB Statcast pitch and batted-ball data on a schedule.
- [🏈 ESPN News Monitor: Keyword Alerts](https://apify.com/getascraper/espn-news-monitor) - keyword-based alerts on breaking ESPN sports news.

# Actor input Schema

## `mode` (type: `string`):

What kind of rows this run should produce.

## `eventIds` (type: `array`):

Restrict to specific ESPN event IDs. Fastest and most reliable way to target fights mode.

## `fighterIds` (type: `array`):

Limit to particular athlete IDs. Required for fighters mode.

## `promotions` (type: `array`):

MMA promotions to cover.

## `years` (type: `array`):

Calendar years to cover. Ignored if fromDate/toDate is set.

## `fromDate` (type: `string`):

YYYYMMDD. Overrides years.

## `toDate` (type: `string`):

YYYYMMDD. Overrides years.

## `weightClass` (type: `string`):

Filter by weight class name, e.g. Welterweight.

## `stance` (type: `string`):

Filter fighters by fighting stance.

## `minWins` (type: `integer`):

Only include fighters with at least this many career wins.

## `minLosses` (type: `integer`):

Only include fighters with at least this many career losses.

## `resultFilter` (type: `array`):

Only include bouts with these results.

## `methodFilter` (type: `array`):

Only include bouts ending by these methods.

## `titleFightsOnly` (type: `boolean`):

Only include championship title bouts.

## `maxItems` (type: `integer`):

Maximum number of dataset rows this run will save.

## `proxyConfiguration` (type: `object`):

Proxy settings for ESPN API requests. Datacenter proxy is sufficient.

## Actor input object example

```json
{
  "mode": "fights",
  "promotions": [
    "ufc"
  ],
  "fromDate": "",
  "toDate": "",
  "weightClass": "",
  "titleFightsOnly": false,
  "maxItems": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "fights",
    "promotions": [
        "ufc"
    ],
    "fromDate": "",
    "toDate": "",
    "weightClass": "",
    "titleFightsOnly": false,
    "maxItems": 1000,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/ufc-mma-stats-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "fights",
    "promotions": ["ufc"],
    "fromDate": "",
    "toDate": "",
    "weightClass": "",
    "titleFightsOnly": False,
    "maxItems": 1000,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/ufc-mma-stats-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "fights",
  "promotions": [
    "ufc"
  ],
  "fromDate": "",
  "toDate": "",
  "weightClass": "",
  "titleFightsOnly": false,
  "maxItems": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call getascraper/ufc-mma-stats-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/ufc-mma-stats-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/boWVVVfkLaOClXCtH/builds/8SGcYf6pGOXHqpGxI/openapi.json
