# ESPN Sports Data Scraper: Scores, Boxscores, Gamelogs & Odds (`mrbridge/espn-sports-data-scraper`) Actor

Extract ESPN sports data in bulk from its public API: live and historical scores, boxscores, odds, standings, schedules, rosters and player gamelogs, 17 leagues. Flat CSV, Excel and pandas output, no API key. Run via API, schedule runs, or integrate with other tools and AI workflows.

- **URL**: https://apify.com/mrbridge/espn-sports-data-scraper.md
- **Developed by:** [MrBridge](https://apify.com/mrbridge) (community)
- **Categories:** Sports, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## ESPN Sports Data Scraper

Extract sports data from ESPN in bulk: full-season scores, boxscores, play-by-play, betting odds, standings, schedules, rosters, athletes and multi-season player gamelogs. Output is flat, snake_case and ready for pandas, Excel or Kaggle. It reads ESPN's public JSON API directly (no HTML parsing, no browser), so it is fast and needs no API key.

This is the batch companion to the interactive [ESPN MCP Server](https://apify.com/mrbridge/espn-mcp-server?fpr=mrbridge). Use the MCP server for real-time, on-demand questions from an AI agent; use this Actor to pull whole seasons into a dataset for analysis.

### What you can do with it

- Pull complete seasons of scores in one run: by default the season type is All (preseason + regular season + playoffs), or narrow it to a single type.
- Build Kaggle-ready CSV/Excel datasets with no post-processing.
- Collect multi-season player gamelogs for modeling.
- Get full boxscores, play-by-play and odds per game for betting research.
- Snapshot standings, rosters and schedules for dashboards.

### Supported leagues (v1)

NFL, NCAA Football (FBS), NBA, WNBA, NCAA Men's and Women's Basketball, MLB, NHL, and soccer: Premier League, La Liga, Serie A, Bundesliga, Ligue 1, MLS, UEFA Champions League, UEFA Europa League, FIFA World Cup.

Every league is served by the same ESPN endpoints, so the core data types work the same way across them. The differences are structural, by sport:

| Data types | Leagues | Notes |
|---|---|---|
| scoreboard, gameSummary, playByPlay, playerBoxscore, schedule, teams, standings, roster, athletes, athleteGamelog, news | NBA, WNBA, NFL, MLB, NHL, NCAA (football, men's and women's basketball) | Full support. Validated end-to-end on NBA. |
| scoreboard, gameSummary, playByPlay, schedule, teams, standings, news | Soccer leagues (Premier League, La Liga, Serie A, Bundesliga, Ligue 1, MLS) | No US-style per-player roster/gamelog/boxscore. |
| scoreboard, gameSummary, schedule, teams, news | Cup competitions (UEFA Champions/Europa League, FIFA World Cup) | No conventional season standings. |

An unsupported (league, data type) combination returns a clear informational item, never a crash.

### Data types

| Data type | One row is | Key inputs |
|---|---|---|
| `scoreboard` | a game (scores, teams, status, venue, margin) | league + date range or seasons |
| `gameSummary` | a game's team boxscore | eventIds or chained from scoreboard |
| `playByPlay` | a single play | eventIds or chained |
| `playerBoxscore` | a player in a game | eventIds or chained |
| `schedule` | a scheduled game | league + teamIds + season |
| `teams` | a team | league |
| `standings` | a team's standings row | league + seasons |
| `roster` | a roster player | league + teamIds |
| `athletes` | an athlete | league |
| `athleteGamelog` | a player's game in a season | league + athleteIds + seasons |
| `news` | a news article (metadata + link) | league |

### Example input

Full NBA 2025 season, all game types (the default: preseason + regular + playoffs):

```json
{
  "dataType": "scoreboard",
  "league": "nba",
  "seasons": ["2025"]
}
````

Narrow it to the regular season only:

```json
{
  "dataType": "scoreboard",
  "league": "nba",
  "seasons": ["2025"],
  "seasonType": "2"
}
```

Full play-by-play for three games:

```json
{
  "dataType": "playByPlay",
  "league": "nba",
  "eventIds": ["401585601", "401585602", "401585603"]
}
```

Every 2023 to 2025 season gamelog for a player (seasons discovered automatically):

```json
{
  "dataType": "athleteGamelog",
  "league": "nba",
  "athleteIds": ["4065648"],
  "allSeasons": true
}
```

### Example output (flat)

```json
{
  "_type": "scoreboard",
  "league": "nba",
  "season": 2025,
  "season_type": 2,
  "game_id": "401585601",
  "date_utc": "2025-04-13T23:00Z",
  "status": "post",
  "completed": true,
  "home_team_abbrev": "BOS",
  "home_score": 120,
  "away_team_abbrev": "MIA",
  "away_score": 111,
  "margin": 9,
  "total_points": 231,
  "venue_name": "TD Garden",
  "scraped_at": "2026-07-11T09:00:00.000Z"
}
```

### Need real-time interactive access?

For live, on-demand queries from an AI agent (Claude, ChatGPT, and other MCP clients), use the [ESPN MCP Server](https://apify.com/mrbridge/espn-mcp-server?fpr=mrbridge). It exposes the same ESPN data as tools with no caching, ideal for single-question lookups. This Actor is the opposite end: bulk and historical extraction into a dataset.

### Pricing

This Actor uses pay-per-event pricing with a single flat price per delivered result, shown on the Pricing tab and billed only on successfully delivered data. A result is one row (a game, team, standings row, roster player, athlete or news article), one game's full detail, or one athlete-season gamelog.

- Error rows and failed runs are never charged.
- One athlete-season gamelog is a single charge even though it produces many game rows.
- A game's detail is charged at most once per game, even when you pull its summary, play-by-play and player boxscore together.

To cap cost, set `maxChargedEvents` in the input, or set `ACTOR_MAX_TOTAL_CHARGE_USD` per run from the Console. Note that `maxItems` caps dataset rows, not cost.

### FAQ

**Do I need an ESPN API key?** No. The data comes from ESPN's public JSON endpoints.

**Are there rate limits?** The Actor paces itself (bounded concurrency, backoff, aggressive caching of finished data) to stay a good citizen of ESPN's endpoints.

**Very large multi-season pulls?** Rows are pushed incrementally, so a run that hits its timeout keeps everything gathered so far. For very large jobs, raise the run timeout or split into per-season runs.

**Where are the run totals?** Each run writes an `OUTPUT` record to its default key-value store with the totals (rows pushed, events charged, error rows) and finish time, so an integration can check a run without scanning the dataset.

### About

Built by mrbridge. Explore the wider catalogue of data and automation tools at [mr-bridge.com/scrapers](https://mr-bridge.com/scrapers), and the model context protocol servers at [mr-bridge.com/mcp-servers](https://mr-bridge.com/mcp-servers).

### Feedback and issues

Found a bug, or want a league or data type added? Your feedback shapes the roadmap: open an issue on the [Issues tab](https://apify.com/mrbridge/espn-sports-data-scraper/issues?fpr=mrbridge).

### Is it legal to scrape ESPN data?

This Actor extracts publicly available data for research and analytics. Respect ESPN's terms of use and applicable laws when using the data. ESPN is a trademark of its owner and is not affiliated with this Actor.

# Actor input Schema

## `dataType` (type: `string`):

What to extract. Each type produces its own flat row shape. See the README for the full field list per type.

## `league` (type: `string`):

Which league to pull from. 17 leagues in v1. Not every data type is available for every league (see the capability matrix in the README).

## `startDate` (type: `string`):

Start of the date range for a scoreboard pull, format YYYY-MM-DD. Use this with End date, or use Seasons for full-season bulk.

## `endDate` (type: `string`):

End of the date range for a scoreboard pull, format YYYY-MM-DD. Inclusive.

## `seasons` (type: `array`):

One season year per line, for bulk multi-season pulls (scoreboard, standings, gamelog). Season bounds are discovered from ESPN, never hardcoded.

## `seasonType` (type: `string`):

Which part of the season to pull. Default is All (preseason + regular season + postseason) for a complete season. Pick a single type to narrow the pull.

## `teamIds` (type: `array`):

ESPN team IDs, one per line. Required for Team schedule and Roster.

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

ESPN event/game IDs, one per line. Used by Game summary, Play-by-play and Player boxscore. You can also chain these automatically from a scoreboard run with 'Also fetch game details'.

## `athleteIds` (type: `array`):

ESPN athlete IDs, one per line. Required for Athlete gamelog.

## `withGameDetails` (type: `boolean`):

On a scoreboard run, chain a detail fetch (summary and/or play-by-play and/or player boxscore) for every game found. Warning: this multiplies cost - each game adds a game-detail charge (de-duplicated per game).

## `includeOdds` (type: `boolean`):

Attach betting odds (spread, moneyline, over/under) to game detail rows when available.

## `includeBoxscore` (type: `boolean`):

Include team-level boxscore stats on Game summary rows.

## `resolveRefs` (type: `boolean`):

For the Athletes directory: resolve each athlete reference into a full profile (extra requests). Turn off to emit only IDs and reference URLs (much cheaper).

## `allSeasons` (type: `boolean`):

For Athlete gamelog: discover and pull every season available for the athlete, instead of listing them in Seasons.

## `outputFormat` (type: `string`):

flat = one flat snake\_case row (data-science ready). raw = the ESPN JSON fragment for the entity. both = flat plus a raw field.

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

Cap the number of dataset ROWS. 0 = unlimited. Note: this bounds rows, not cost. To cap spend, use Max charged events below.

## `maxChargedEvents` (type: `integer`):

Hard cost ceiling: stop after this many billed events. 0 = unlimited. This is the field to use for cost control (a game with details, or a season gamelog, produces many rows but few charges).

## `ncaaGroups` (type: `integer`):

NCAA scoreboard grouping: 50 = FBS / top division (default), 80 = all Division I. Ignored for non-NCAA leagues.

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

Datacenter proxies are sufficient for ESPN's open API and are the default. Residential is unnecessary here (wasted cost) but available if 403s ever appear.

## `internalCaptureMode` (type: `boolean`):

Maintainer-only. When true, captures raw ESPN responses to a named KV store for building test fixtures. Not for normal use.

## Actor input object example

```json
{
  "dataType": "scoreboard",
  "league": "nba",
  "startDate": "2025-01-01",
  "endDate": "2025-01-31",
  "seasons": [
    "2024",
    "2025"
  ],
  "seasonType": "all",
  "withGameDetails": false,
  "includeOdds": false,
  "includeBoxscore": true,
  "resolveRefs": true,
  "allSeasons": false,
  "outputFormat": "flat",
  "maxItems": 100,
  "maxChargedEvents": 0,
  "ncaaGroups": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "internalCaptureMode": false
}
```

# Actor output Schema

## `items` (type: `string`):

Direct link to all dataset items produced by the run.

# 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 = {
    "seasons": [
        "2024",
        "2025"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrbridge/espn-sports-data-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 = {
    "seasons": [
        "2024",
        "2025",
    ],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("mrbridge/espn-sports-data-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "seasons": [
    "2024",
    "2025"
  ],
  "maxItems": 100
}' |
apify call mrbridge/espn-sports-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=mrbridge/espn-sports-data-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "ESPN Sports Data Scraper: Scores, Boxscores, Gamelogs & Odds",
        "description": "Extract ESPN sports data in bulk from its public API: live and historical scores, boxscores, odds, standings, schedules, rosters and player gamelogs, 17 leagues. Flat CSV, Excel and pandas output, no API key. Run via API, schedule runs, or integrate with other tools and AI workflows.",
        "version": "0.2",
        "x-build-id": "jWGp7hhtlk3jFsFNn"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/mrbridge~espn-sports-data-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-mrbridge-espn-sports-data-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/mrbridge~espn-sports-data-scraper/runs": {
            "post": {
                "operationId": "runs-sync-mrbridge-espn-sports-data-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/mrbridge~espn-sports-data-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-mrbridge-espn-sports-data-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "dataType",
                    "league"
                ],
                "properties": {
                    "dataType": {
                        "title": "Data type",
                        "enum": [
                            "scoreboard",
                            "gameSummary",
                            "playByPlay",
                            "playerBoxscore",
                            "schedule",
                            "teams",
                            "standings",
                            "roster",
                            "athletes",
                            "athleteGamelog",
                            "news"
                        ],
                        "type": "string",
                        "description": "What to extract. Each type produces its own flat row shape. See the README for the full field list per type.",
                        "default": "scoreboard"
                    },
                    "league": {
                        "title": "League",
                        "enum": [
                            "nfl",
                            "college-football",
                            "nba",
                            "wnba",
                            "mens-college-basketball",
                            "womens-college-basketball",
                            "mlb",
                            "nhl",
                            "eng.1",
                            "esp.1",
                            "ita.1",
                            "ger.1",
                            "fra.1",
                            "usa.1",
                            "uefa.champions",
                            "uefa.europa",
                            "fifa.world"
                        ],
                        "type": "string",
                        "description": "Which league to pull from. 17 leagues in v1. Not every data type is available for every league (see the capability matrix in the README).",
                        "default": "nba"
                    },
                    "startDate": {
                        "title": "Start date",
                        "type": "string",
                        "description": "Start of the date range for a scoreboard pull, format YYYY-MM-DD. Use this with End date, or use Seasons for full-season bulk."
                    },
                    "endDate": {
                        "title": "End date",
                        "type": "string",
                        "description": "End of the date range for a scoreboard pull, format YYYY-MM-DD. Inclusive."
                    },
                    "seasons": {
                        "title": "Seasons",
                        "type": "array",
                        "description": "One season year per line, for bulk multi-season pulls (scoreboard, standings, gamelog). Season bounds are discovered from ESPN, never hardcoded.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "seasonType": {
                        "title": "Season type",
                        "enum": [
                            "all",
                            "1",
                            "2",
                            "3"
                        ],
                        "type": "string",
                        "description": "Which part of the season to pull. Default is All (preseason + regular season + postseason) for a complete season. Pick a single type to narrow the pull.",
                        "default": "all"
                    },
                    "teamIds": {
                        "title": "Team IDs",
                        "type": "array",
                        "description": "ESPN team IDs, one per line. Required for Team schedule and Roster.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "eventIds": {
                        "title": "Event (game) IDs",
                        "type": "array",
                        "description": "ESPN event/game IDs, one per line. Used by Game summary, Play-by-play and Player boxscore. You can also chain these automatically from a scoreboard run with 'Also fetch game details'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "athleteIds": {
                        "title": "Athlete IDs",
                        "type": "array",
                        "description": "ESPN athlete IDs, one per line. Required for Athlete gamelog.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "withGameDetails": {
                        "title": "Also fetch game details",
                        "type": "boolean",
                        "description": "On a scoreboard run, chain a detail fetch (summary and/or play-by-play and/or player boxscore) for every game found. Warning: this multiplies cost - each game adds a game-detail charge (de-duplicated per game).",
                        "default": false
                    },
                    "includeOdds": {
                        "title": "Include odds",
                        "type": "boolean",
                        "description": "Attach betting odds (spread, moneyline, over/under) to game detail rows when available.",
                        "default": false
                    },
                    "includeBoxscore": {
                        "title": "Include boxscore",
                        "type": "boolean",
                        "description": "Include team-level boxscore stats on Game summary rows.",
                        "default": true
                    },
                    "resolveRefs": {
                        "title": "Resolve athlete references",
                        "type": "boolean",
                        "description": "For the Athletes directory: resolve each athlete reference into a full profile (extra requests). Turn off to emit only IDs and reference URLs (much cheaper).",
                        "default": true
                    },
                    "allSeasons": {
                        "title": "All available seasons (gamelog)",
                        "type": "boolean",
                        "description": "For Athlete gamelog: discover and pull every season available for the athlete, instead of listing them in Seasons.",
                        "default": false
                    },
                    "outputFormat": {
                        "title": "Output format",
                        "enum": [
                            "flat",
                            "raw",
                            "both"
                        ],
                        "type": "string",
                        "description": "flat = one flat snake_case row (data-science ready). raw = the ESPN JSON fragment for the entity. both = flat plus a raw field.",
                        "default": "flat"
                    },
                    "maxItems": {
                        "title": "Max items (dataset rows)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap the number of dataset ROWS. 0 = unlimited. Note: this bounds rows, not cost. To cap spend, use Max charged events below.",
                        "default": 0
                    },
                    "maxChargedEvents": {
                        "title": "Max charged events (cost cap)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cost ceiling: stop after this many billed events. 0 = unlimited. This is the field to use for cost control (a game with details, or a season gamelog, produces many rows but few charges).",
                        "default": 0
                    },
                    "ncaaGroups": {
                        "title": "NCAA groups",
                        "minimum": 1,
                        "type": "integer",
                        "description": "NCAA scoreboard grouping: 50 = FBS / top division (default), 80 = all Division I. Ignored for non-NCAA leagues.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Datacenter proxies are sufficient for ESPN's open API and are the default. Residential is unnecessary here (wasted cost) but available if 403s ever appear.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "internalCaptureMode": {
                        "title": "Internal capture mode",
                        "type": "boolean",
                        "description": "Maintainer-only. When true, captures raw ESPN responses to a named KV store for building test fixtures. Not for normal use.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
