# UFC Fighter Stats Scraper (Records, Stats, Fight History) (`scrapers_lat/ufc-fighter-stats-scraper`) Actor

Scrape UFC fighter profiles by name or URL: record (W-L-D), height, weight, reach, stance, DOB, striking and grappling stats (SLpM, accuracy, defense, takedowns, subs) and full fight history. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/ufc-fighter-stats-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $9.46 / 1,000 fighter profiles

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/platform/actors/running/actors-in-store#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

[![UFC Fighter Stats Scraper](https://scrapers.lat/banners/ufc-fighter-stats-scraper.png)](https://console.apify.com/actors/af7Ru9z1bYgeb0Ts3/input)

## UFC Fighter Stats Scraper

Here is one real result, with every field the actor returns:

```json
{
  "fighterName": "Jon Jones",
  "firstName": "Jon",
  "lastName": "Jones",
  "nickname": "Bones",
  "record": "28-1-0",
  "wins": 28,
  "losses": 1,
  "draws": 0,
  "noContests": 1,
  "height": "6' 4\"",
  "weight": "248 lbs.",
  "reach": "84\"",
  "stance": "Orthodox",
  "dob": "Jul 19, 1987",
  "slpm": 4.38,
  "strikingAccuracy": 58,
  "sapm": 2.24,
  "strikingDefense": 64,
  "takedownAvg": 1.89,
  "takedownAccuracy": 45,
  "takedownDefense": 95,
  "submissionAvg": 0.5,
  "totalFights": 24,
  "lastFightOpponent": "Stipe Miocic",
  "lastFightResult": "win",
  "lastFightMethod": "KO/TKO",
  "lastFightEvent": "UFC 309: Jones vs. Miocic",
  "lastFightDate": "Nov. 16, 2024",
  "fightHistory": [
    {
      "result": "win",
      "opponent": "Stipe Miocic",
      "knockdowns": 1,
      "significantStrikes": 96,
      "takedowns": 1,
      "submissionAttempts": 0,
      "event": "UFC 309: Jones vs. Miocic",
      "date": "Nov. 16, 2024",
      "method": "KO/TKO",
      "methodDetail": "Spinning Back Kick",
      "round": 3,
      "time": "4:29",
      "eventUrl": "http://ufcstats.com/event-details/daff32bc96d1eabf"
    }
  ],
  "aiStyle": null,
  "aiStrengths": null,
  "aiWeaknesses": null,
  "aiMatchupNotes": null,
  "fighterId": "07f72a2a7591b409",
  "url": "http://ufcstats.com/fighter-details/07f72a2a7591b409",
  "source": "ufcstats.com",
  "observedAt": "2026-08-20T14:53:48.281Z",
  "error": null
}
```

The most complete UFC fighter stats scraper available. It returns every field the official statistics site exposes for a fighter (record, physical attributes, career striking and grappling rates), plus derived fields (parsed wins/losses/draws/no-contests, last-bout summary), and gives you a name search plus direct-URL input so you can target exactly the fighters you need. Turn it on for the optional AI scouting report and each profile also gets a style read, strengths, weaknesses and matchup notes.

**📥 [Input](https://apify.com/scrapers_lat/ufc-fighter-stats-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/ufc-fighter-stats-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/ufc-fighter-stats-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/ufc-fighter-stats-scraper/examples)**

![Platform](https://img.shields.io/badge/platform-Apify-4a90e2) ![Coverage](https://img.shields.io/badge/coverage-UFC%20fighters-de7356) ![Output](https://img.shields.io/badge/output-JSON%20%7C%20CSV%20%7C%20Excel-6fb6a3) ![Billing](https://img.shields.io/badge/billing-pay%20per%20result-f1be4b)

### Table of contents

- [What it does](#what-it-does)
- [Quickstart](#quickstart)
- [Input reference](#input-reference)
- [Output reference](#output-reference)
- [Example output record](#example-output-record)
- [Run via API and CLI](#run-via-api-and-cli)
- [Fetch results](#fetch-results)
- [Billing and limits](#billing-and-limits)
- [FAQ and troubleshooting](#faq-and-troubleshooting)
- [More scrapers at scrapers.lat](#more-scrapers-at-scraperslat)

### What it does

Give it a fighter name or a list of fighter detail URLs and it returns one clean record per fighter with:

- Identity: full name, first and last name, nickname, source id and URL.
- Record: win-loss-draw string plus parsed wins, losses, draws and no-contests.
- Physical: height, weight, reach, stance and date of birth.
- Career striking: significant strikes landed per minute (SLpM), striking accuracy, strikes absorbed per minute (SApM) and striking defense.
- Career grappling: takedown average, takedown accuracy, takedown defense and submission average.
- Fight history: every bout with opponent, result, method and finish detail, round, time, event name and date, plus per-bout knockdowns, significant strikes, takedowns and submission attempts.
- A flat last-bout summary (opponent, result, method, event, date) for quick sorting in a spreadsheet.

Search matches on first name, last name and nickname, so "Jones", "Jon Jones" and "Bones" all resolve. Every matching fighter is returned up to your chosen limit.

### Quickstart

```json
{
  "fighterName": "Islam Makhachev",
  "includeFightHistory": true,
  "maxResults": 10
}
```

Run it, then read the dataset. To pull specific fighters instead of searching, pass their detail URLs:

```json
{
  "fighterUrls": [
    "http://ufcstats.com/fighter-details/07f72a2a7591b409",
    "http://ufcstats.com/fighter-details/275aca31f61ba28c"
  ],
  "includeFightHistory": true
}
```

### Input reference

| Name | Type | Required | Description | Example |
| --- | --- | --- | --- | --- |
| `fighterName` | string | no | Fighter name to search for. Matches on first name, last name and nickname. | `Jon Jones` |
| `fighterUrls` | array of strings | no | Exact fighter detail URLs to scrape directly. Combined with any name search. | `["http://ufcstats.com/fighter-details/07f72a2a7591b409"]` |
| `includeFightHistory` | boolean | no | Attach the full bout-by-bout fight history for each fighter. On by default. | `true` |
| `aiFighterScouting` | boolean | no | Paid add-on, off by default. Add an AI scouting report (style, strengths, weaknesses, matchup notes). Disabled on free plans. | `false` |
| `maxResults` | integer | no | Maximum fighters to collect across the run. Free plans are capped at 10. | `10` |

### Output reference

| Name | Type | Description |
| --- | --- | --- |
| `fighterName` | string | Full fighter name |
| `firstName` | string | First name |
| `lastName` | string | Last name |
| `nickname` | string | Fighter nickname |
| `record` | string | Career record as wins-losses-draws |
| `wins` | number | Number of wins |
| `losses` | number | Number of losses |
| `draws` | number | Number of draws |
| `noContests` | number | Number of no-contests |
| `height` | string | Height, e.g. 6' 4" |
| `weight` | string | Weight, e.g. 248 lbs. |
| `reach` | string | Reach, e.g. 84" |
| `stance` | string | Fighting stance |
| `dob` | string | Date of birth |
| `slpm` | number | Significant strikes landed per minute |
| `strikingAccuracy` | number | Significant striking accuracy percent |
| `sapm` | number | Significant strikes absorbed per minute |
| `strikingDefense` | number | Significant striking defense percent |
| `takedownAvg` | number | Average takedowns landed per 15 minutes |
| `takedownAccuracy` | number | Takedown accuracy percent |
| `takedownDefense` | number | Takedown defense percent |
| `submissionAvg` | number | Average submission attempts per 15 minutes |
| `totalFights` | number | Number of bouts in the returned fight history |
| `lastFightOpponent` | string | Most recent bout opponent |
| `lastFightResult` | string | Most recent bout result (win/loss/draw/nc) |
| `lastFightMethod` | string | Most recent bout finish method |
| `lastFightEvent` | string | Most recent bout event name |
| `lastFightDate` | string | Most recent bout date |
| `fightHistory` | array | Bout-by-bout history (opponent, result, method, round, time, event, date, per-bout stats) |
| `aiStyle` | string | AI scouting: fighting style (AI add-on) |
| `aiStrengths` | array | AI scouting: strengths (AI add-on) |
| `aiWeaknesses` | array | AI scouting: weaknesses (AI add-on) |
| `aiMatchupNotes` | string | AI scouting: matchup notes (AI add-on) |
| `fighterId` | string | Source fighter id |
| `url` | string | Source fighter detail page URL |
| `source` | string | Data source |
| `observedAt` | string | ISO timestamp collected |
| `error` | string | Error message for a failed fighter or run |

### Example output record

See the record at the top of this page for a full example with fight history.

### Run via API and CLI

Start a run with the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~ufc-fighter-stats-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"fighterName":"Jon Jones","includeFightHistory":true,"maxResults":10}'
```

Or with the Apify CLI:

```bash
apify call scrapers_lat/ufc-fighter-stats-scraper \
  --input '{"fighterName":"Islam Makhachev","includeFightHistory":true}'
```

### Fetch results

Read the dataset items once the run finishes:

```bash
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_TOKEN&format=json"
```

Swap `format=json` for `format=csv` or `format=xlsx` to export to CSV or Excel.

### Billing and limits

- Pay per result. You are charged one primary `result` event per fighter profile returned.
- A one-time `apify-actor-start` event covers run initialization.
- Optional `ai_fighter_scouting` add-on is charged only when the AI returns a usable scouting report. It is off by default and disabled on free plans.
- Empty or failed lookups are not charged. Records that carry an `error` field are not billed as results.
- Free Apify plans are capped at 10 fighters per run. Paid plans can raise `maxResults`.
- The actor respects your account spend limit and stops returning billable results once your configured maximum charge is reached.

### FAQ and troubleshooting

**A name returns nothing.** Try the last name only, or check spelling. Search matches first name, last name and nickname. For an exact target, pass the fighter detail URL in `fighterUrls`.

**Can I get more than one fighter at a time?** Yes. A name that matches several fighters returns all of them, and `fighterUrls` accepts a list. The run stops at `maxResults`.

**Do I need a proxy or login?** No. The actor handles fetching internally. You do not configure any proxy or cookies.

**Why are some numeric fields null?** Not every fighter has a value published for every metric. Missing values are returned as `null` rather than guessed.

**What does the AI scouting add-on return?** A fighting-style phrase, a short strengths list, a short weaknesses list and one matchup-notes sentence, derived only from the returned statistics and recent results.

### More scrapers at scrapers.lat

Browse the full catalog of company, finance, sports and web-data scrapers at [scrapers.lat](https://scrapers.lat). Built by the scrapers\_lat team on Apify. This actor is an independent tool and is not affiliated with or endorsed by the UFC or any statistics provider.

# Actor input Schema

## `fighterName` (type: `string`):

Fighter name to search for, e.g. Jon Jones or Islam Makhachev. Matches on first name, last name and nickname. Every matching fighter profile is returned (up to the max).

## `fighterUrls` (type: `array`):

Optional. Exact ufcstats.com fighter detail URLs to scrape directly, e.g. http://ufcstats.com/fighter-details/07f72a2a7591b409. Combined with any name search.

## `includeFightHistory` (type: `boolean`):

Attach the complete bout-by-bout fight history for each fighter (opponent, result, method, round, time, event, date). On by default.

## `aiFighterScouting` (type: `boolean`):

Use AI to add a scouting read from the stats: fighting style, strengths, weaknesses and matchup notes. Charged only when a usable report is returned. Disabled on free plans.

## `maxResults` (type: `integer`):

Maximum number of fighter profiles to collect across the whole run. Free Apify plans are capped at 10 per run.

## Actor input object example

```json
{
  "fighterName": "Jon Jones",
  "includeFightHistory": true,
  "aiFighterScouting": false,
  "maxResults": 10
}
```

# 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 = {
    "fighterName": "Jon Jones",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/ufc-fighter-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 = {
    "fighterName": "Jon Jones",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/ufc-fighter-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 '{
  "fighterName": "Jon Jones",
  "maxResults": 10
}' |
apify call scrapers_lat/ufc-fighter-stats-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/ufc-fighter-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/af7Ru9z1bYgeb0Ts3/builds/Hyf2Nk0G5XEGVacc4/openapi.json
