# Youtube Comments Scraper (`scrapapi/youtube-comments-scraper`) Actor

Extract comments from YouTube videos using the YouTube Comments Scraper. Collect comment text, usernames, likes, timestamps, and replies automatically. Ideal for sentiment analysis, audience research, community insights, and content feedback analysis.

- **URL**: https://apify.com/scrapapi/youtube-comments-scraper.md
- **Developed by:** [ScrapAPI](https://apify.com/scrapapi) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$19.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## 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

### Youtube Comments Scraper

The Youtube Comments Scraper is a production-ready Apify actor that automatically collects YouTube video comments at scale — including text, authors, likes, timestamps, and replies — making it a powerful YouTube comment extractor and YouTube comments downloader for teams that need to scrape YouTube video comments reliably. Built for marketers, developers, data analysts, and researchers, it helps you export YouTube comments to CSV or JSON for sentiment analysis, audience insights, and feedback mining — all without an official API key.

### What data / output can you get?

Below are the exact fields this actor saves to the Apify dataset for each comment. You can easily export results to CSV or JSON from the Apify console.

| Data field | Description | Example value |
| --- | --- | --- |
| cid | Unique YouTube comment ID | Ugzxs4_5UJwAI1xrNF14AaABAg |
| type | Record type (constant: comment) | comment |
| publishedTimeText | Relative time when the comment was posted | 2 years ago |
| comment | The comment text content | This video changed my mind! |
| author | Author username (prefixed with @) | @SomeCreator |
| avatar | URL to author’s profile image | https://yt3.ggpht.com/…/s88-no-rj |
| authorIsChannelOwner | Whether the author is the video’s channel owner | true |
| isVerified | Whether the author is verified | true |
| voteCount | Number of likes/upvotes on the comment | 189000 |
| hasCreatorHeart | Whether the creator hearted this comment | true |
| replyCount | Number of replies for this comment | 42 |
| replyToCid | Parent comment ID (null for top-level comments) | Ugzabc123… |
| videoId | YouTube video ID the comment belongs to | KrLj6nc516A |
| pageUrl | Full video URL | https://www.youtube.com/watch?v=KrLj6nc516A |
| title | Video title | $1 vs $100,000,000 Car! |
| commentsCount | Total comments count for the video at time of scraping | 155000 |

Note: Some fields may be empty or null if YouTube doesn’t expose them for a given comment (for example, replyToCid on top-level comments). Title falls back to “Unknown Title” when not detected in the page.

### Key features

- 🔄 Automatic proxy fallback & resilience  
  Smartly handles blocking with a no proxy → datacenter → residential fallback flow, plus retries. Designed as a reliable YouTube comments API scraper without needing official API credentials.

- 🧵 Replies captured with parent linkage  
  Collects both top-level comments and replies, preserving parent-child relationships via replyToCid so you can download YouTube comments with replies for thread analysis.

- 🧪 Sort by “Top” or “Newest”  
  Choose to scrape top and newest YouTube comments using the sortOrder setting for different analysis scenarios (popular opinions vs. live feedback).

- 📦 Bulk video processing  
  A true bulk YouTube comments scraper — add multiple URLs or IDs and process them sequentially in one run.

- 📊 Rich metadata for analysis  
  Extracts engagement (voteCount, replyCount, hasCreatorHeart), author info (author, avatar, isVerified, authorIsChannelOwner), and video metadata (videoId, title, pageUrl, commentsCount). Ideal for YouTube comment analysis tooling and downstream sentiment pipelines.

- 🧰 Developer-friendly on Apify  
  Use the Apify API to automate runs, integrate with Python scripts, or export datasets programmatically — perfect for “YouTube comments scraper Python” workflows.

- 📤 Easy exporting  
  Export YouTube comments to CSV or JSON from the dataset UI for immediate analysis and reporting.

- 🧱 Production-ready  
  Includes robust retry logic, timeouts, detailed logging, and incremental dataset writes, making it a stable YouTube comments scraper without API keys or browser extensions.

### How to use Youtube Comments Scraper - step by step

1. Sign in to your Apify account and open the “youtube-comments-scraper” actor.
2. Paste your targets into the startUrls field as a simple list:
   - Full URLs (e.g., https://www.youtube.com/watch?v=VIDEO_ID or https://youtu.be/VIDEO_ID)
   - Or the 11-character video ID (e.g., VIDEO_ID)
3. Set maxComments to limit per-video results (use 0 to scrape all available comments).
4. Choose sortOrder: top for the most relevant/liked comments, newest for the latest discussions.
5. (Optional) Configure proxyConfiguration. By default, no proxy is used; the actor will automatically fall back if blocked.
6. Click Start. Watch the live logs to see progress, including any proxy fallback events.
7. When the run finishes, open the Dataset to view results and export to CSV or JSON.

Pro Tip: Use the Apify API to trigger runs, pull dataset items, and automate delivery into your BI stack (Make, n8n, or custom pipelines).

### Use cases

| Use case | Description |
| --- | --- |
| Marketing + sentiment analysis | Aggregate comments to evaluate sentiment and themes around campaigns or creators for strategy decisions. |
| Product feedback mining | Extract user feedback from relevant videos to inform roadmap and CX improvements. |
| Social listening & brand monitoring | Track discussions, measure engagement, and identify brand mentions across video comments. |
| Academic & social research | Collect structured comment threads for behavioral studies and discourse analysis. |
| Competitive intelligence | Compare comment engagement (likes, replies, creator hearts) across competitors’ videos. |
| Community management | Surface top or newest comments to prioritize moderation and response workflows. |
| Data engineering pipelines | Automate a YouTube comments API scraper workflow to supply downstream analytics and LLM-based summarization. |

### Why choose Youtube Comments Scraper?

The Youtube Comments Scraper focuses on accuracy, scale, and reliability — built for real-world data operations.

- ✅ Accurate, structured outputs: Consistent fields for clean ingestion and analysis.
- 🌍 No official API key required: Works out of the box as a YouTube comments scraper without API credentials.
- 📈 Built for scale: Process many videos in one run with incremental dataset writes.
- 🧑‍💻 Developer access: Automate end-to-end via the Apify API and integrate with Python or low-code tools.
- 🛡️ Resilient scraping: Automatic fallback from no proxy → datacenter → residential with retries to minimize blocking.
- 🔌 Easy exports & workflows: Export to CSV/JSON for dashboards or data warehouses.
- 🆚 Better than extensions: More stable and scalable than browser-based plugins or manual tools.

In short: a production-grade YouTube comments extractor that’s dependable for ongoing research and analytics.

### Is it legal / ethical to use Youtube Comments Scraper?

Yes — when used responsibly. This actor collects data from publicly available YouTube pages only and does not access private or authenticated content.

Guidelines for compliant use:
- Only scrape public pages and public comment data.
- Respect YouTube’s Terms of Service and avoid excessive request rates.
- Ensure compliance with applicable laws (e.g., GDPR, CCPA) in your region and use case.
- Do not use scraped data for spam or abusive activities.
- Consult your legal team for edge cases or jurisdiction-specific requirements.

### Input parameters & output format

Example input (JSON):
```json
{
  "startUrls": [
    "https://www.youtube.com/watch?v=KrLj6nc516A",
    "dQw4w9WgXcQ"
  ],
  "maxComments": 50,
  "sortOrder": "top",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

Input fields

- startUrls (array, required, default: none) — Enter YouTube video URLs or 11-character IDs. Supports multiple items; processed sequentially.
- maxComments (integer, optional, default: 50, minimum: 0) — Maximum comments per video. Set 0 for no limit.
- sortOrder (string, optional, default: "top", enum: \["top","newest"]) — Choose ordering when fetching comments.
- proxyConfiguration (object, optional, default: {"useApifyProxy": false}) — Configure Apify Proxy if needed. Actor automatically falls back from no proxy → datacenter → residential when blocked.

Example output (one record per comment):

```json
{
  "cid": "Ugzxs4_5UJwAI1xrNF14AaABAg",
  "type": "comment",
  "publishedTimeText": "2 years ago",
  "comment": "Subscribe to be in one of my upcoming videos (it's going to be huge!)",
  "author": "@MrBeast",
  "avatar": "https://yt3.ggpht.com/nxYrc_1_2f77DoBadyxMTmv7ZpRZapHR5jbuYe7PlPd5cIRJxtNNEYyOC0ZsxaDyJJzXrnJiuDE=s88-c-k-c0x00ffffff-no-rj",
  "authorIsChannelOwner": true,
  "isVerified": true,
  "voteCount": 189000,
  "hasCreatorHeart": true,
  "replyCount": 763,
  "replyToCid": null,
  "videoId": "KrLj6nc516A",
  "pageUrl": "https://www.youtube.com/watch?v=KrLj6nc516A",
  "title": "$1 vs $100,000,000 Car!",
  "commentsCount": 155000
}
```

Notes:

- type is always “comment”.
- replyToCid is null for top-level comments and populated for replies.
- Some fields may be absent when not provided by YouTube (e.g., avatar, isVerified). Title may fall back to “Unknown Title”.

### FAQ

#### Do I need a YouTube API key to use this?

No. This is a YouTube comments scraper without API keys. It fetches publicly available data directly and includes robust fallback for blocking scenarios.

#### Can it download replies and keep threads together?

Yes. The actor extracts replies and links them to their parent via replyToCid, so you can download YouTube comments with replies and reconstruct threads.

#### Can I scrape “Top” vs “Newest” comments?

Yes. Set sortOrder to “top” or “newest” to scrape top and newest YouTube comments depending on your use case.

#### How many comments can I scrape per video?

You control this via maxComments. Set it to 0 to scrape all available comments, or choose any number for sampling. The default is 50.

#### Can I filter YouTube comments by keyword?

There isn’t a built-in keyword filter in the input. However, you can filter the exported dataset (CSV/JSON) in your analysis tooling or scripts.

#### Is there a way to export YouTube comments to CSV?

Yes. After the run finishes, open the Dataset and export as CSV or JSON directly from the Apify console.

#### Does this work with Python or via an API?

Yes. You can run the actor and fetch results through the Apify API, or integrate with your “YouTube comments scraper Python” workflows to automate pipelines.

#### Is this a Chrome extension?

No. It’s an Apify-hosted automation (not a YouTube comments scraper Chrome extension), which makes it more stable and scalable for bulk jobs.

#### What happens if YouTube blocks requests?

The actor automatically falls back from no proxy to datacenter, then to residential proxies with retries, improving success rates in strict regions.

#### Does it scrape channel-wide comments?

This tool targets YouTube video comments. Provide individual video URLs or IDs to process; each video’s comments are saved with the correct metadata.

### Closing thoughts

The Youtube Comments Scraper is built to reliably extract rich YouTube comment data at scale. With automatic proxy fallback, bulk processing, and structured outputs, it’s ideal for marketers, developers, data analysts, and researchers who need dependable pipelines. Automate via the Apify API or plug results into your “YouTube comments analysis tool” stack to accelerate insights. Start extracting smarter — and if you need custom features, reach us at dev.scraperengine@gmail.com.

# Actor input Schema

## `startUrls` (type: `array`):

📋 Enter the YouTube videos you want to scrape comments from. You can use full URLs (e.g. https://www.youtube.com/watch?v=VIDEO\_ID or https://youtu.be/VIDEO\_ID) or just the 11-character video ID. Add multiple URLs or IDs to scrape several videos in one run — the actor processes each video sequentially. Each video's comments are saved to the dataset with the correct video title and metadata.

## `maxComments` (type: `integer`):

🔢 Set the maximum number of comments to scrape per video. Use 0 for no limit (scrape all available comments). For faster runs or testing, use values like 100, 500, or 1000. The actor stops fetching once this limit is reached for each video. Default is 50.

## `sortOrder` (type: `string`):

⬆️ Choose how comments are ordered when fetching. • top — Shows the most liked and relevant comments first (YouTube's default). Best for sentiment analysis or finding popular opinions. • newest — Shows the most recently posted comments first. Best for monitoring live discussions or recent feedback.

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

🛡️ Configure proxy settings for scraping. By default, no proxy is used. If you encounter rate limits, blocks, or geographic restrictions, enable Apify Proxy. The actor will automatically try datacenter proxies first, then residential proxies if needed. Residential proxies work best for strict regions but cost more. Leave disabled unless you experience blocking.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.youtube.com/watch?v=KrLj6nc516A"
  ],
  "maxComments": 50,
  "sortOrder": "top",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "startUrls": [
        "https://www.youtube.com/watch?v=KrLj6nc516A"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapapi/youtube-comments-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 = {
    "startUrls": ["https://www.youtube.com/watch?v=KrLj6nc516A"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapapi/youtube-comments-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 '{
  "startUrls": [
    "https://www.youtube.com/watch?v=KrLj6nc516A"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scrapapi/youtube-comments-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Youtube Comments Scraper",
        "description": "Extract comments from YouTube videos using the YouTube Comments Scraper. Collect comment text, usernames, likes, timestamps, and replies automatically. Ideal for sentiment analysis, audience research, community insights, and content feedback analysis.",
        "version": "0.1",
        "x-build-id": "zFefQZfjrPeoZf8HQ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapapi~youtube-comments-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapapi-youtube-comments-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/scrapapi~youtube-comments-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapapi-youtube-comments-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/scrapapi~youtube-comments-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapapi-youtube-comments-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": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "🔗 YouTube Video URLs or IDs",
                        "type": "array",
                        "description": "📋 Enter the YouTube videos you want to scrape comments from. You can use full URLs (e.g. https://www.youtube.com/watch?v=VIDEO_ID or https://youtu.be/VIDEO_ID) or just the 11-character video ID. Add multiple URLs or IDs to scrape several videos in one run — the actor processes each video sequentially. Each video's comments are saved to the dataset with the correct video title and metadata.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxComments": {
                        "title": "📊 Maximum Comments per Video",
                        "minimum": 0,
                        "type": "integer",
                        "description": "🔢 Set the maximum number of comments to scrape per video. Use 0 for no limit (scrape all available comments). For faster runs or testing, use values like 100, 500, or 1000. The actor stops fetching once this limit is reached for each video. Default is 50.",
                        "default": 50
                    },
                    "sortOrder": {
                        "title": "📑 Comment Sort Order",
                        "enum": [
                            "top",
                            "newest"
                        ],
                        "type": "string",
                        "description": "⬆️ Choose how comments are ordered when fetching. • top — Shows the most liked and relevant comments first (YouTube's default). Best for sentiment analysis or finding popular opinions. • newest — Shows the most recently posted comments first. Best for monitoring live discussions or recent feedback.",
                        "default": "top"
                    },
                    "proxyConfiguration": {
                        "title": "🌐 Proxy Configuration",
                        "type": "object",
                        "description": "🛡️ Configure proxy settings for scraping. By default, no proxy is used. If you encounter rate limits, blocks, or geographic restrictions, enable Apify Proxy. The actor will automatically try datacenter proxies first, then residential proxies if needed. Residential proxies work best for strict regions but cost more. Leave disabled unless you experience blocking."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
