# YouTube Transcript Scraper — Subtitles, Captions & LLM Text (`fit_melon/youtube-transcript-scraper`) Actor

Extract YouTube transcripts, subtitles and captions without an API key. Bulk videos, playlists and channels. Output timestamped segments, LLM-ready text, readable paragraphs, SRT and VTT. Resilient multi-client engine with automatic residential fallback. Free — you only pay Apify usage.

- **URL**: https://apify.com/fit\_melon/youtube-transcript-scraper.md
- **Developed by:** [D N](https://apify.com/fit_melon) (community)
- **Categories:** AI, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 Transcript Scraper — Subtitles, Captions & LLM-Ready Text

Extract the **transcript, subtitles and captions** of any YouTube video — no API key, no browser, no sign-in. Feed it a single video, a list of thousands, a playlist or a whole channel, and get back clean **timestamped segments**, **LLM-ready plain text**, **readable paragraphs**, and **SRT / VTT** subtitle files.

Built for reliability first: a multi-client engine keeps working when YouTube shifts, and a surgical residential fallback rescues the few videos that datacenter IPs can't reach — so you get the uptime of premium tools while staying on the free datacenter path for almost everything.

### What it does

This actor is a fast, resilient **YouTube transcript API / subtitle extractor / caption downloader**. Give it YouTube URLs (or bare video IDs, `youtu.be` links, Shorts, `/live/`, `/embed/`, playlist URLs, or channel URLs like `/@handle`, `/channel/UC…`, `/c/name`, `/user/name`) and it returns each video's transcript in the formats you choose. It handles manual and auto-generated (ASR) captions, lets you pick a language or translate, and pulls rich video metadata alongside the text.

Common searches this solves: *youtube transcript*, *youtube subtitles download*, *youtube captions to text*, *youtube transcript api*, *bulk youtube transcript*, *youtube to srt*, *transcript for LLM / RAG / summarization*.

### Key features

- **Resilient multi-client engine.** Requests cascade across several YouTube clients (Android, iOS, mobile web, TV, web). When one surface changes, the others keep delivering — far sturdier than single-path scrapers that break on every YouTube update.
- **Smart residential fallback.** Most videos are fetched over the free datacenter proxy. Only the ones that trip YouTube's "confirm you're not a bot" check are retried over residential proxies, so you get near-100% success while paying the residential rate on just a handful of videos.
- **Parallel processing.** A configurable concurrency pool fetches many videos at once, each on its own rotating session — large playlists and channels finish quickly.
- **Five output shapes.** Timestamped `segments`, flat `text` (LLM-ready), grouped `paragraphs` (merged into readable prose, not choppy one-second lines), plus `srt` and `vtt` subtitle files.
- **Rich metadata.** Title, channel, channel ID, duration, view count, publish date, category, keywords, description, thumbnail, and the list of available caption languages.
- **Language & translation.** Ask for a specific language (with `en` matching `en-US`), fall back gracefully, or translate captions to another language.
- **Playlist & channel expansion.** Point it at a playlist or channel and it collects the videos for you, up to a cap you set.
- **Never fails silently.** Every input yields a record with an explicit `status` (`found` / `not_found` / `error`) and a precise error code — no mystery empty rows.

### Input

| Field | Type | Description |
|---|---|---|
| `videos` | array (required) | Video URLs, video IDs, `youtu.be` links, Shorts, `/live/`, `/embed/`, playlist URLs, or channel URLs. Playlists and channels are expanded into their videos. |
| `language` | string | Preferred caption language code (e.g. `en`, `fr`, `es`). Matches `en-US` when you ask for `en`. Empty = first available. Default `en`. |
| `includeAutoGenerated` | boolean | Allow automatic (ASR) captions when no manual captions exist. Manual is always preferred. Default `true`. |
| `outputFormats` | array | Any of `segments`, `text`, `paragraphs`, `srt`, `vtt`. Default `["segments", "text"]`. |
| `translateTo` | string | Translate captions to this language code using YouTube's own translation. Empty = keep original. |
| `includeMetadata` | boolean | Attach title, channel, duration, views, keywords, description, thumbnail, etc. Default `true`. |
| `maxVideosPerChannel` | integer | Cap on how many videos to take from each playlist/channel. Default `20`. |
| `maxConcurrency` | integer | How many videos to fetch in parallel. Default `5`. |
| `proxyConfiguration` | object | Proxy used to reach YouTube. Apify Proxy (datacenter) by default — free on the platform. |
| `autoResidentialFallback` | boolean | Retry bot-checked videos over residential proxies automatically. Default `true`. |

### Output

One dataset item per video. Example (`found`, with `segments`, `text` and `paragraphs`):

```json
{
  "input": "https://youtu.be/jNQXAC9IVRw",
  "videoId": "jNQXAC9IVRw",
  "url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
  "status": "found",
  "language": "en",
  "isAutoGenerated": false,
  "availableLanguages": ["en", "de"],
  "clientUsed": "ANDROID",
  "video": {
    "title": "Me at the zoo",
    "channel": "jawed",
    "channelId": "UC4QobU6STFB0P71PMvOGN5A",
    "durationSeconds": 19,
    "viewCount": 398413203,
    "isLive": false,
    "publishDate": "2005-04-23",
    "category": "People & Blogs",
    "keywords": ["me at the zoo", "jawed karim", "first youtube video"],
    "description": "The first video on YouTube...",
    "thumbnail": "https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg"
  },
  "segments": [
    { "start": 0.85, "dur": 3.2, "text": "All right, so here we are, in front of the elephants" }
  ],
  "text": "All right, so here we are, in front of the elephants, the cool thing about these guys...",
  "paragraphs": [
    { "start": 0.85, "dur": 18.1, "text": "All right, so here we are, in front of the elephants..." }
  ],
  "error": null
}
````

Videos without captions return `status: "not_found"`; unavailable/blocked videos return `status: "error"` with a code such as `NoCaptionsAvailable`, `VideoUnavailable`, `AgeRestricted`, or `IpBlocked`.

### Use cases

- **Feed LLMs and RAG pipelines** — turn any video or channel into clean text for summarization, Q\&A, or embeddings.
- **Repurpose content** — pull transcripts to write articles, show notes, chapters, or social posts.
- **Subtitle files** — export ready-to-use SRT/VTT for editing or re-uploading.
- **Research & analysis** — batch-collect transcripts across a channel or topic for search and NLP.

### How it works & reliability

YouTube no longer serves caption data to the plain web player without a proof-of-origin token, which is why many transcript tools broke in late 2025. This actor instead asks YouTube through its mobile-app and TV clients, whose caption URLs remain accessible, and rotates between them automatically. If an IP is challenged with a bot-check, the video is transparently retried over residential proxies. The result is high success rates without forcing residential costs on every request. When YouTube does change something, fixing it is usually a small update to the client table — and a daily healthcheck flags breakages early.

### Limitations & fair use

- Only videos that actually have captions (manual or auto) can produce a transcript.
- Private, deleted, or membership-only videos can't be accessed; they're reported clearly.
- Auto-generated captions reflect YouTube's speech recognition and may contain errors.
- Please use transcripts in line with YouTube's Terms of Service and applicable copyright. You're responsible for how you use the extracted text.

### Pricing

This actor is **free** — the developer charges nothing. You only pay for your own Apify platform usage (compute units and, when the residential fallback is triggered, a small amount of residential proxy traffic). Typical costs are a fraction of a cent per video.

### More actors by this developer

Explore the rest of the collection on the author's Apify profile: **https://apify.com/fit\_melon**

***

*Feedback and feature requests are welcome via the Issues tab — response time is public and taken seriously.*

# Actor input Schema

## `videos` (type: `array`):

One entry per line. Accepts video URLs, bare 11-character video IDs, youtu.be links, Shorts, /live/ and /embed/ URLs, playlist URLs, and channel URLs (/channel/UC…, /@handle, /c/name, /user/name). Playlists and channels are expanded into their videos.

## `language` (type: `string`):

Preferred caption language code (e.g. en, fr, es, de). Matches en-US when you ask for en. Leave empty to take the first available track.

## `includeAutoGenerated` (type: `boolean`):

Allow YouTube's automatic (ASR) captions when no human-made captions exist. Manual captions are always preferred when both are available.

## `outputFormats` (type: `array`):

Which representations to include in each result. 'text' is a single clean string ideal for LLMs; 'segments' are timestamped; 'srt' and 'vtt' are subtitle files.

## `translateTo` (type: `string`):

Translate captions to this language code using YouTube's own translation (e.g. en, fr). Leave empty to keep the original language.

## `includeMetadata` (type: `boolean`):

Attach title, channel, duration, view count, publish date and thumbnail to each result.

## `maxVideosPerChannel` (type: `integer`):

When a playlist or channel is provided, cap how many of its videos are processed.

## `maxConcurrency` (type: `integer`):

How many videos to fetch in parallel. Higher is faster on large inputs; each request uses its own rotating proxy session. If you see many bot-checks, lower this or rely on the residential fallback.

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

Requests to YouTube are routed through this proxy. Apify Proxy (datacenter) is enabled by default and is free on the platform. Most videos work on datacenter; the few that trip YouTube's bot-check are handled by the residential fallback below.

## `autoResidentialFallback` (type: `boolean`):

When a video is blocked by YouTube's 'confirm you're not a bot' check on a datacenter IP, automatically retry just that video through residential proxies. This maximises reliability while only spending the (higher) residential rate on the videos that truly need it. Turn off to stay strictly on datacenter proxies.

## Actor input object example

```json
{
  "videos": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "https://youtu.be/jNQXAC9IVRw"
  ],
  "language": "en",
  "includeAutoGenerated": true,
  "outputFormats": [
    "segments",
    "text"
  ],
  "translateTo": "",
  "includeMetadata": true,
  "maxVideosPerChannel": 20,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "autoResidentialFallback": true
}
```

# 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 = {
    "videos": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        "https://youtu.be/jNQXAC9IVRw"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fit_melon/youtube-transcript-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 = { "videos": [
        "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
        "https://youtu.be/jNQXAC9IVRw",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("fit_melon/youtube-transcript-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 '{
  "videos": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "https://youtu.be/jNQXAC9IVRw"
  ]
}' |
apify call fit_melon/youtube-transcript-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Transcript Scraper — Subtitles, Captions & LLM Text",
        "description": "Extract YouTube transcripts, subtitles and captions without an API key. Bulk videos, playlists and channels. Output timestamped segments, LLM-ready text, readable paragraphs, SRT and VTT. Resilient multi-client engine with automatic residential fallback. Free — you only pay Apify usage.",
        "version": "0.0",
        "x-build-id": "7aNX2UMneY9b7GL37"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/fit_melon~youtube-transcript-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-fit_melon-youtube-transcript-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/fit_melon~youtube-transcript-scraper/runs": {
            "post": {
                "operationId": "runs-sync-fit_melon-youtube-transcript-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/fit_melon~youtube-transcript-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-fit_melon-youtube-transcript-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": [
                    "videos"
                ],
                "properties": {
                    "videos": {
                        "title": "Videos, playlists or channels",
                        "type": "array",
                        "description": "One entry per line. Accepts video URLs, bare 11-character video IDs, youtu.be links, Shorts, /live/ and /embed/ URLs, playlist URLs, and channel URLs (/channel/UC…, /@handle, /c/name, /user/name). Playlists and channels are expanded into their videos.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "language": {
                        "title": "Preferred language",
                        "type": "string",
                        "description": "Preferred caption language code (e.g. en, fr, es, de). Matches en-US when you ask for en. Leave empty to take the first available track.",
                        "default": "en"
                    },
                    "includeAutoGenerated": {
                        "title": "Include auto-generated captions",
                        "type": "boolean",
                        "description": "Allow YouTube's automatic (ASR) captions when no human-made captions exist. Manual captions are always preferred when both are available.",
                        "default": true
                    },
                    "outputFormats": {
                        "title": "Output formats",
                        "type": "array",
                        "description": "Which representations to include in each result. 'text' is a single clean string ideal for LLMs; 'segments' are timestamped; 'srt' and 'vtt' are subtitle files.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "segments",
                                "text",
                                "paragraphs",
                                "srt",
                                "vtt"
                            ],
                            "enumTitles": [
                                "Timestamped segments",
                                "Plain text (LLM-ready)",
                                "Readable paragraphs",
                                "SRT subtitles",
                                "VTT subtitles"
                            ]
                        },
                        "default": [
                            "segments",
                            "text"
                        ]
                    },
                    "translateTo": {
                        "title": "Translate to (optional)",
                        "type": "string",
                        "description": "Translate captions to this language code using YouTube's own translation (e.g. en, fr). Leave empty to keep the original language.",
                        "default": ""
                    },
                    "includeMetadata": {
                        "title": "Include video metadata",
                        "type": "boolean",
                        "description": "Attach title, channel, duration, view count, publish date and thumbnail to each result.",
                        "default": true
                    },
                    "maxVideosPerChannel": {
                        "title": "Max videos per playlist/channel",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "When a playlist or channel is provided, cap how many of its videos are processed.",
                        "default": 20
                    },
                    "maxConcurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 25,
                        "type": "integer",
                        "description": "How many videos to fetch in parallel. Higher is faster on large inputs; each request uses its own rotating proxy session. If you see many bot-checks, lower this or rely on the residential fallback.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Requests to YouTube are routed through this proxy. Apify Proxy (datacenter) is enabled by default and is free on the platform. Most videos work on datacenter; the few that trip YouTube's bot-check are handled by the residential fallback below.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "autoResidentialFallback": {
                        "title": "Auto residential fallback",
                        "type": "boolean",
                        "description": "When a video is blocked by YouTube's 'confirm you're not a bot' check on a datacenter IP, automatically retry just that video through residential proxies. This maximises reliability while only spending the (higher) residential rate on the videos that truly need it. Turn off to stay strictly on datacenter proxies.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
