# OpenDota Dota 2 Pro Matches Scraper (`parseforge/opendota-pro-matches-scraper`) Actor

Pull recent Dota 2 professional matches from the OpenDota feed with match ID, league, both team names, the winning side, final score, and match length. Switch modes for hero pick and win rates, pro players, or ranked teams. Great for esports analytics, betting models, and recap feeds.

- **URL**: https://apify.com/parseforge/opendota-pro-matches-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN 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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🎮 OpenDota Pro Matches Scraper

> 🚀 **Export recent Dota 2 professional matches in one run.** Pull the latest 100 pro games with team names, league, score, winner, and duration, plus hero stats, pro players, and ranked teams.

> 🕒 **Last updated:** 2026-06-04 · **📊 16 fields** per pro match record · 4 data modes · Global Dota 2 esports coverage

The OpenDota Pro Matches Scraper turns the public OpenDota API into clean, ready-to-use rows of Dota 2 esports data. Point it at the Pro Matches feed for recent professional games, or switch the Data Type input to pull hero pick and win rates, the registered pro player roster, or ranked professional teams.

Coverage spans the live OpenDota dataset, the same data that powers community match analysis. Pro Matches returns the most recent professional games across every active league. Hero Stats covers all 127 current heroes. The Pro Players roster holds thousands of registered players, and the Teams feed ranks a thousand professional teams by rating.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Esports analysts and data scientists | Tracking pro match results and meta trends |
| Dota 2 content creators and streamers | Building recap feeds and stat overlays |
| Betting and odds modelers | Backtesting team and hero performance |
| Fantasy and community tool builders | Powering rosters, leaderboards, and dashboards |

### 📋 What the OpenDota Pro Matches Scraper does

This Actor reads the OpenDota public API and returns a clean per-record shape for whichever Data Type you pick.

- **Pro Matches** (default) returns recent professional games with match ID, league, both team names, the winning side, both scores, a readable duration, and an ISO start time.
- **Hero Stats** returns every hero with primary attribute, attack type, roles, and pro pick, win, ban, and win rate counts plus public and turbo play counts.
- **Pro Players** returns registered professional players with name, persona, team, country, and last match time.
- **Teams** returns ranked professional teams with rating, wins, losses, and last match time.

Each mode keeps its own focused field set, so you never get a wide table full of empty columns.

### 🎬 Full Demo (_🚧 Coming soon_)

### ⚙️ Input

| Field | Type | Description |
|---|---|---|
| `endpoint` | select | Which OpenDota dataset to collect. One of `pro-matches`, `hero-stats`, `pro-players`, `teams`. Default `pro-matches`. |
| `maxItems` | integer | How many records to return. Free plan is capped at 10. Paid plans go up to 1,000,000. |

**Example 1 — Recent pro matches**
```json
{
  "endpoint": "pro-matches",
  "maxItems": 50
}
````

**Example 2 — Hero pick and win stats**

```json
{
  "endpoint": "hero-stats",
  "maxItems": 127
}
```

> ⚠️ **Good to Know:** The OpenDota free API is rate limited to roughly 60 calls per minute. This Actor makes a single call per run, so you stay well inside that limit. Team names in Pro Matches can be empty for ad-hoc or unregistered squads, so those two fields are kept and can be null on individual rows.

### 📊 Output

Each Pro Matches record contains the following fields.

| Field | Description |
|---|---|
| 🆔 `matchId` | Unique OpenDota match identifier |
| 🏆 `leagueId` / `leagueName` | League the game was played in |
| 🟢 `radiantTeamId` / `radiantTeam` | Radiant side team ID and name |
| 🔴 `direTeamId` / `direTeam` | Dire side team ID and name |
| 🏅 `winner` | Winning side, Radiant or Dire |
| 🔢 `radiantScore` / `direScore` | Kill score for each side |
| ⏱ `duration` / `durationSeconds` | Readable match length and raw seconds |
| 🕒 `startTime` | Match start time in ISO format |
| 📦 `seriesId` / `seriesType` | Series identifier and type |
| 🕒 `scrapedAt` | When the record was collected |
| ❌ `error` | Null on success, message on failure |

**Real sample records (Pro Matches)**

```json
{
  "matchId": 8838575634,
  "leagueId": 19752,
  "leagueName": "Immigrant Night Club #1",
  "radiantTeamId": null,
  "radiantTeam": null,
  "direTeamId": 9337762,
  "direTeam": "gway toe",
  "winner": "Dire",
  "radiantScore": 32,
  "direScore": 52,
  "duration": "35:44",
  "durationSeconds": 2144,
  "startTime": "2026-06-04T18:57:34.000Z",
  "seriesId": 0,
  "seriesType": 0,
  "scrapedAt": "2026-06-04T19:58:02.985Z",
  "error": null
}
```

```json
{
  "matchId": 8838571851,
  "leagueId": 18867,
  "leagueName": "Ultras Dota Pro League  2025-26",
  "radiantTeamId": 9717312,
  "radiantTeam": "Silent Shadows",
  "direTeamId": 9828921,
  "direTeam": "Air Defence",
  "winner": "Radiant",
  "radiantScore": 57,
  "direScore": 19,
  "duration": "25:01",
  "durationSeconds": 1501,
  "startTime": "2026-06-04T18:54:13.000Z",
  "seriesId": 1106113,
  "seriesType": 1,
  "scrapedAt": "2026-06-04T19:58:02.986Z",
  "error": null
}
```

```json
{
  "matchId": 8838520571,
  "leagueId": 19699,
  "leagueName": "Road To EWC 2026 Regional Qualifiers",
  "radiantTeamId": 10164102,
  "radiantTeam": "Stormrage",
  "direTeamId": 10144722,
  "direTeam": "IGNITE",
  "winner": "Dire",
  "radiantScore": 5,
  "direScore": 39,
  "duration": "25:51",
  "durationSeconds": 1551,
  "startTime": "2026-06-04T18:22:50.000Z",
  "seriesId": 1106075,
  "seriesType": 1,
  "scrapedAt": "2026-06-04T19:58:02.986Z",
  "error": null
}
```

The Hero Stats mode returns rows like this.

```json
{
  "heroId": 2,
  "name": "Axe",
  "primaryAttribute": "str",
  "attackType": "Melee",
  "roles": ["Initiator", "Durable", "Disabler", "Carry"],
  "proPick": 142,
  "proWin": 72,
  "proBan": 158,
  "proWinRate": 50.7,
  "pubPick": 661914,
  "pubWin": 353171,
  "turboPicks": 235932,
  "turboWins": 123314,
  "scrapedAt": "2026-06-04T19:58:20.826Z",
  "error": null
}
```

### ✨ Why choose this Actor

- **Four datasets, one Actor.** Switch between pro matches, hero stats, pro players, and teams from a single dropdown.
- **Clean per-mode rows.** Each mode returns only the fields that belong to it, so your tables stay readable.
- **Human-friendly values.** Start times become ISO timestamps and match length becomes a readable mm:ss string, with raw seconds kept too.
- **No key required.** OpenDota is free and keyless, so there is nothing to register or rotate.
- **Honest field set.** Team names that the source leaves empty are kept and clearly null, never faked.

### 📈 How it compares to alternatives

| Approach | Setup | Maintenance | Clean output |
|---|---|---|---|
| This Actor | Pick a mode and run | None on your side | Normalized fields, ready to use |
| Raw OpenDota API calls | Write code, handle rate limits | You maintain it | Raw epochs and snake\_case keys |
| Manual site browsing | Slow and manual | High | Copy and paste only |

### 🚀 How to use

1. Create a free Apify account using [this sign-up link](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the OpenDota Pro Matches Scraper in the Apify Console.
3. Pick a Data Type. Leave it on Pro Matches for recent professional games.
4. Set Max Items, then click Start.
5. When the run finishes, open the dataset to view and export your records.

### 💼 Business use cases

#### Esports analytics

| Goal | How this helps |
|---|---|
| Track recent results | Pull the latest pro matches with winner and score |
| Spot meta shifts | Compare hero pick, ban, and win rates over time |

#### Betting and modeling

| Goal | How this helps |
|---|---|
| Backtest models | Feed historical match outcomes into your pipeline |
| Rank teams | Use the Teams feed rating, wins, and losses |

#### Content and media

| Goal | How this helps |
|---|---|
| Build recap feeds | Turn match rows into automated summaries |
| Power overlays | Drive stream graphics with hero and team data |

#### Community tools

| Goal | How this helps |
|---|---|
| Player directories | List registered pros with team and country |
| Leaderboards | Sort teams by current rating |

### 🔌 Automating OpenDota Pro Matches Scraper

Connect the Actor output to the tools you already use.

- **Make** and **Zapier** can trigger on each run and route records onward.
- **Slack** can receive match recap notifications.
- **Airbyte** can sync the dataset into your warehouse.
- **GitHub** Actions can run the scraper on a schedule.
- **Google Drive** can store snapshots of each run.

### 🌟 Beyond business use cases

- **Research.** Study how hero pick and ban patterns evolve across patches.
- **Personal.** Follow your favorite teams and keep a private match log.
- **Non-profit.** Power free community stat sites for amateur leagues.
- **Experimentation.** Prototype a Dota 2 prediction model with real outcomes.

### 🤖 Ask an AI assistant

Paste your dataset into an assistant and ask it to summarize.

- [ChatGPT](https://chat.openai.com)
- [Claude](https://claude.ai)
- [Perplexity](https://www.perplexity.ai)
- [Microsoft Copilot](https://copilot.microsoft.com)

### ❓ Frequently Asked Questions

**Where does the data come from?**
The public OpenDota API at api.opendota.com, which mirrors Dota 2 match data.

**Do I need an API key?**
No. OpenDota is free and keyless for this data.

**How many modes are there?**
Four. Pro Matches, Hero Stats, Pro Players, and Teams.

**How recent are the pro matches?**
The Pro Matches feed returns the most recent professional games, refreshed by OpenDota as new games finish.

**Why are some team names empty?**
OpenDota leaves the team name blank for ad-hoc or unregistered squads. Those fields are kept and shown as null rather than guessed.

**What does the winner field mean?**
It reads Radiant or Dire, the side that won the game, derived from the source win flag.

**Why is duration shown twice?**
You get a readable mm:ss string and the raw seconds value, so both display and math are easy.

**Is there a rate limit?**
OpenDota allows roughly 60 calls per minute. This Actor makes one call per run, so you stay well under it.

**How many records can I get?**
Free plans return up to 10 records. Paid plans return up to 1,000,000.

**Can I schedule it?**
Yes. Use the Apify scheduler or any external scheduler to run it on an interval.

**What time zone are timestamps in?**
All timestamps are normalized to ISO 8601 in UTC.

**Is this affiliated with Valve or OpenDota?**
No. It is an independent tool that reads only publicly available data.

### 🔌 Integrate with any app

Every run writes to a structured dataset you can pull through the Apify API or connect to Make, Zapier, and other platforms, so the data flows straight into your own apps and workflows.

### 🔗 Recommended Actors

- [Understat xG Scraper](https://apify.com/parseforge/understat-xg-scraper) for football expected goals data.
- [Steam Store Scraper](https://apify.com/parseforge/steam-store-scraper) for PC game listings and details.
- [OpenCritic Games Scraper](https://apify.com/parseforge/opencritic-games-scraper) for game review scores.
- [Speedrun Leaderboards Scraper](https://apify.com/parseforge/speedrun-leaderboards-scraper) for speedrun records.
- [RAWG Scraper](https://apify.com/parseforge/rawg-scraper) for a broad video game database.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** This is an independent tool, not affiliated with OpenDota or Valve. Only publicly available data is collected.

# Actor input Schema

## `endpoint` (type: `string`):

Which OpenDota dataset to collect. Pro Matches returns recent professional Dota 2 games. Hero Stats returns per-hero pick, win, and ban counts. Pro Players lists registered professional players. Teams lists ranked professional teams.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## Actor input object example

```json
{
  "endpoint": "pro-matches",
  "maxItems": 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/opendota-pro-matches-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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("parseforge/opendota-pro-matches-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 '{
  "maxItems": 10
}' |
apify call parseforge/opendota-pro-matches-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=parseforge/opendota-pro-matches-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OpenDota Dota 2 Pro Matches Scraper",
        "description": "Pull recent Dota 2 professional matches from the OpenDota feed with match ID, league, both team names, the winning side, final score, and match length. Switch modes for hero pick and win rates, pro players, or ranked teams. Great for esports analytics, betting models, and recap feeds.",
        "version": "0.1",
        "x-build-id": "A4Pnee3JKVKgJyePQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/parseforge~opendota-pro-matches-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-parseforge-opendota-pro-matches-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/parseforge~opendota-pro-matches-scraper/runs": {
            "post": {
                "operationId": "runs-sync-parseforge-opendota-pro-matches-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/parseforge~opendota-pro-matches-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-parseforge-opendota-pro-matches-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",
                "properties": {
                    "endpoint": {
                        "title": "Data Type",
                        "enum": [
                            "pro-matches",
                            "hero-stats",
                            "pro-players",
                            "teams"
                        ],
                        "type": "string",
                        "description": "Which OpenDota dataset to collect. Pro Matches returns recent professional Dota 2 games. Hero Stats returns per-hero pick, win, and ban counts. Pro Players lists registered professional players. Teams lists ranked professional teams.",
                        "default": "pro-matches"
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "minimum": 1,
                        "maximum": 1000000,
                        "type": "integer",
                        "description": "Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
