# YouTube AI Transcript Extractor (`khadinakbar/youtube-ai-transcript-extractor`) Actor

Extract YouTube transcripts with AI-generated summary, topics, chapters, action items, sentiment, and quotable highlights. MCP-ready for Claude, GPT, and AI agents.

- **URL**: https://apify.com/khadinakbar/youtube-ai-transcript-extractor.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** AI, Automation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 transcript extracteds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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/docs.md):

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

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

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

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

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

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

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## YouTube AI Transcript Extractor

**Pull a YouTube transcript and turn it into structured insight your AI agent can actually use** — summary, topic tags, timestamped chapters, action items, sentiment, and quotable highlights. One actor call, one JSON record per video.

> Built for Claude, GPT, Gemini, MCP servers, and humans who don't want to dump a 12,000-word transcript into a prompt.

### What you get per video

| Field | Description |
| --- | --- |
| `transcriptText` | Full transcript text, decoded, joined |
| `wordCount` | Word count |
| `languageUsed` | ISO 639-1 of the caption track fetched |
| `isAutoGenerated` | True for ASR, false for human captions |
| `aiSummary` | AI narrative summary (short / medium / long) |
| `aiTopics` | 3-8 topic/keyword tags |
| `aiChapters` | Timestamped TOC `[{ startSeconds, title, summary }]` |
| `aiActionItems` | Actionable takeaways (tutorials, how-to) |
| `aiSentiment` | `{ overall, confidence }` |
| `aiQuotes` | 3-6 quotable lines with timestamp + context |
| `title`, `channelName`, `channelUrl`, `publishedAt`, `durationSeconds`, `viewCount`, `thumbnail` | Video metadata |
| `aiModelUsed`, `aiInputTokens`, `aiOutputTokens` | Cost transparency |
| `transcriptStatus` | `success` / `no_transcript` / `private_video` / `unavailable` / `error` |

### When to use this actor

- AI agents that need to "understand" a YouTube video without watching it.
- Podcast intelligence, customer-interview research, sales-call analysis.
- Content marketing: auto-generate chapters, topic tags, pull-quotes.
- Brand monitoring: sentiment + action items across a creator's recent uploads.
- Newsletter / blog snippets from interviews and panels.

For raw transcript-only scraping at the cheapest possible price, use [`youtube-transcript-extractor`](https://apify.com/khadinakbar/youtube-transcript-extractor) instead — same 8-strategy fetch, no AI layer, `$0.005/video`.

### Price

| Event | Price | When |
| --- | --- | --- |
| `apify-actor-start` | `$0.00005` | Per run |
| `transcript-extracted` | `$0.005` | Per successfully fetched transcript |
| `ai-enrichment` | `$0.03` | Per video with AI fields (skipped on BYOK) |

**Typical run cost (1 video, all AI fields, platform key): `~$0.035`.**
**BYOK (your own Anthropic key): `$0.005/video` — AI on us, you only pay your token bill.**

Pay-Per-Event AND Pay-Per-Usage both enabled — buyer picks at run time.

### Input

```json
{
  "videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
  "includeSummary": true,
  "summaryLength": "medium",
  "includeTopics": true,
  "includeChapters": true,
  "includeActionItems": false,
  "includeSentiment": false,
  "includeQuotes": false,
  "transcriptLanguage": "en",
  "aiOutputLanguage": "English"
}
````

Required: `videoUrls`. All AI flags default to a sensible mix (summary+topics+chapters ON, action items / sentiment / quotes OFF) so the first cost looks like the bill you expect.

### Use via MCP

The actor is exposed at `apify--youtube-ai-transcript-extractor` in Apify's MCP server. Add it to Claude Code, Claude.ai, ChatGPT, Cursor, Goose, or any MCP client. Pricing signal is in the tool description so agents budget-check before calling.

### Use via API (JavaScript)

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('khadinakbar/youtube-ai-transcript-extractor').call({
  videoUrls: ['https://www.youtube.com/watch?v=jNQXAC9IVRw'],
  includeSummary: true,
  summaryLength: 'short',
  includeTopics: true,
  includeChapters: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].aiSummary);
console.log(items[0].aiChapters);
```

### Use via API (Python)

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_APIFY_TOKEN')

run = client.actor('khadinakbar/youtube-ai-transcript-extractor').call(run_input={
    'videoUrls': ['https://www.youtube.com/watch?v=jNQXAC9IVRw'],
    'includeSummary': True,
    'summaryLength': 'short',
    'includeTopics': True,
    'includeChapters': True,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items[0]['aiSummary'])
```

### How it works

1. **8-strategy transcript fetch** (battle-tested in the sibling `youtube-transcript-extractor`): ANDROID InnerTube client → inline `engagementPanel` from page HTML → ANDROID\_VR InnerTube player → WEB InnerTube `get_transcript` → signed `baseUrl` JSON3 → signed `baseUrl` XML → unsigned `timedtext` → ScrapeCreators safety-net. If one strategy returns nothing, the next tries.
2. **Apify residential proxy** by default — datacenter IPs get blocked by YouTube. Falls back to datacenter if residential is not available on the account.
3. **AI enrichment** uses Anthropic Claude **Haiku 4.5** with `tool_use` forcing structured JSON output. Only requested fields are scored as `required` in the tool schema, so you don't pay for output you didn't ask for.
4. **BYOK supported** — drop your own `sk-ant-…` key into `anthropicApiKey` and the `ai-enrichment` event is not charged; you pay only your own Anthropic bill.

### Output language

`transcriptLanguage` (default `en`) controls which caption track is fetched.
`aiOutputLanguage` (default `English`) controls which language the AI fields are written in. You can grab a Japanese transcript and have the summary in English.

### FAQ

**Q: Why is this separate from `youtube-transcript-extractor`?**
That one returns raw transcript text with timestamps. This one runs an LLM analysis on top — different price point, different consumer (AI agents, not data analysts).

**Q: What if the video has no captions?**
`transcriptStatus = "no_transcript"`, `errorMessage` explains why, no charge for `transcript-extracted` or `ai-enrichment` — only the start fee.

**Q: Does it handle Shorts?**
Yes. `youtube.com/shorts/<id>` URLs are normalized the same as standard watch URLs.

**Q: Does it handle bulk?**
Yes — pass an array. Each video is processed independently, results are pushed as they complete, partial failures don't kill the run.

**Q: How long can a video be?**
Practical limit ~3-4 hours. Very long transcripts are truncated to ~280K characters before being sent to the model, with a warning logged.

### Legal

Use this actor in accordance with YouTube's Terms of Service and applicable law. This actor only fetches public caption data made available by YouTube's own infrastructure. You are responsible for the legality of how you use scraped content (copyright, fair use, attribution). The actor does not bypass authentication, login walls, or private-video restrictions.

### See also

- [`youtube-transcript-extractor`](https://apify.com/khadinakbar/youtube-transcript-extractor) — raw transcripts, channel/search modes, $0.005/video.
- [`youtube-comments-scraper`](https://apify.com/khadinakbar/youtube-comments-scraper)
- [`youtube-shorts-scraper`](https://apify.com/khadinakbar/youtube-shorts-scraper)
- [`youtube-search-scraper`](https://apify.com/khadinakbar/youtube-search-scraper)
- [`youtube-channel-email-extractor`](https://apify.com/khadinakbar/youtube-channel-email-extractor)

# Actor input Schema

## `videoUrls` (type: `array`):

YouTube video URLs to analyze. Accepts full watch URLs (https://www.youtube.com/watch?v=ID), short youtu.be/ID links, Shorts URLs, and bare 11-character video IDs. Each URL is processed independently. NOT a channel URL or search query — for those use the youtube-transcript-extractor actor. Example: \['https://www.youtube.com/watch?v=dQw4w9WgXcQ'].

## `includeSummary` (type: `boolean`):

Generate a concise narrative summary of the video using Claude Haiku 4.5. Length controlled by summaryLength. Default true. Set false to skip AI summarization and save cost when only structured fields are needed.

## `summaryLength` (type: `string`):

How long the AI summary should be. 'short' = 2-3 sentences (~50 words), 'medium' = 1 paragraph (~150 words), 'long' = 3-4 paragraphs (~400 words). Default 'medium'. Only applies if includeSummary is true.

## `includeTopics` (type: `boolean`):

Extract 3-8 topic/keyword tags representing the main themes of the video (e.g., 'machine learning', 'pricing strategy'). Useful for content categorization, search indexing, and semantic clustering. Default true.

## `includeChapters` (type: `boolean`):

Generate timestamped chapter breakdown of the video — title + 1-sentence summary per chapter, based on transcript content. Useful for navigation, content discovery, and video TOC generation. Default true.

## `includeActionItems` (type: `boolean`):

Extract actionable takeaways or instructions mentioned in the video (e.g., 'subscribe to newsletter', 'try the recipe at 12:30'). Best for tutorial, how-to, and educational content. Default false — skip for entertainment/music videos.

## `includeSentiment` (type: `boolean`):

Score the overall sentiment of the video transcript (positive / neutral / negative) with confidence. Useful for brand monitoring, review/feedback analysis. Default false.

## `includeQuotes` (type: `boolean`):

Extract 3-6 standalone quotable lines from the transcript with their timestamps and surrounding context. Useful for social-media clips, blog quotes, podcast pull-quotes. Default false.

## `transcriptLanguage` (type: `string`):

Preferred caption language to fetch from YouTube. ISO 639-1 code (e.g., 'en', 'es', 'fr', 'de', 'ja'). Falls back to English then the first available track if the requested language is not present. Default 'en'.

## `aiOutputLanguage` (type: `string`):

Language the AI fields (summary, topics, chapters, etc.) are written in. Independent of transcriptLanguage — you can fetch a Japanese transcript and have the summary written in English. Plain language name or ISO code. Default 'English'.

## `anthropicApiKey` (type: `string`):

Optional. Provide your own Anthropic API key to use your own quota and reduce per-video AI cost. When left blank, the actor uses the platform key and charges the ai-enrichment event. Begins with 'sk-ant-'.

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

Proxy settings used for the YouTube transcript fetch (YouTube blocks datacenter IPs on some videos). Defaults to Apify residential. AI calls bypass this proxy.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "includeSummary": true,
  "summaryLength": "medium",
  "includeTopics": true,
  "includeChapters": true,
  "includeActionItems": false,
  "includeSentiment": false,
  "includeQuotes": false,
  "transcriptLanguage": "en",
  "aiOutputLanguage": "English",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

One record per input video with transcript + AI fields.

## `summary` (type: `string`):

Aggregate run metadata.

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

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/youtube-ai-transcript-extractor").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 = { "videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"] }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/youtube-ai-transcript-extractor").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 '{
  "videoUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ]
}' |
apify call khadinakbar/youtube-ai-transcript-extractor --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube AI Transcript Extractor",
        "description": "Extract YouTube transcripts with AI-generated summary, topics, chapters, action items, sentiment, and quotable highlights. MCP-ready for Claude, GPT, and AI agents.",
        "version": "1.0",
        "x-build-id": "YIl7yPExdFna0bx5D"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~youtube-ai-transcript-extractor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-youtube-ai-transcript-extractor",
                "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/khadinakbar~youtube-ai-transcript-extractor/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-youtube-ai-transcript-extractor",
                "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/khadinakbar~youtube-ai-transcript-extractor/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-youtube-ai-transcript-extractor",
                "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": [
                    "videoUrls"
                ],
                "properties": {
                    "videoUrls": {
                        "title": "YouTube video URLs",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "YouTube video URLs to analyze. Accepts full watch URLs (https://www.youtube.com/watch?v=ID), short youtu.be/ID links, Shorts URLs, and bare 11-character video IDs. Each URL is processed independently. NOT a channel URL or search query — for those use the youtube-transcript-extractor actor. Example: ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'].",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeSummary": {
                        "title": "Include AI summary",
                        "type": "boolean",
                        "description": "Generate a concise narrative summary of the video using Claude Haiku 4.5. Length controlled by summaryLength. Default true. Set false to skip AI summarization and save cost when only structured fields are needed.",
                        "default": true
                    },
                    "summaryLength": {
                        "title": "Summary length",
                        "enum": [
                            "short",
                            "medium",
                            "long"
                        ],
                        "type": "string",
                        "description": "How long the AI summary should be. 'short' = 2-3 sentences (~50 words), 'medium' = 1 paragraph (~150 words), 'long' = 3-4 paragraphs (~400 words). Default 'medium'. Only applies if includeSummary is true.",
                        "default": "medium"
                    },
                    "includeTopics": {
                        "title": "Include topic tags",
                        "type": "boolean",
                        "description": "Extract 3-8 topic/keyword tags representing the main themes of the video (e.g., 'machine learning', 'pricing strategy'). Useful for content categorization, search indexing, and semantic clustering. Default true.",
                        "default": true
                    },
                    "includeChapters": {
                        "title": "Include AI chapters",
                        "type": "boolean",
                        "description": "Generate timestamped chapter breakdown of the video — title + 1-sentence summary per chapter, based on transcript content. Useful for navigation, content discovery, and video TOC generation. Default true.",
                        "default": true
                    },
                    "includeActionItems": {
                        "title": "Include action items",
                        "type": "boolean",
                        "description": "Extract actionable takeaways or instructions mentioned in the video (e.g., 'subscribe to newsletter', 'try the recipe at 12:30'). Best for tutorial, how-to, and educational content. Default false — skip for entertainment/music videos.",
                        "default": false
                    },
                    "includeSentiment": {
                        "title": "Include sentiment analysis",
                        "type": "boolean",
                        "description": "Score the overall sentiment of the video transcript (positive / neutral / negative) with confidence. Useful for brand monitoring, review/feedback analysis. Default false.",
                        "default": false
                    },
                    "includeQuotes": {
                        "title": "Include quotable highlights",
                        "type": "boolean",
                        "description": "Extract 3-6 standalone quotable lines from the transcript with their timestamps and surrounding context. Useful for social-media clips, blog quotes, podcast pull-quotes. Default false.",
                        "default": false
                    },
                    "transcriptLanguage": {
                        "title": "Transcript language (ISO 639-1)",
                        "type": "string",
                        "description": "Preferred caption language to fetch from YouTube. ISO 639-1 code (e.g., 'en', 'es', 'fr', 'de', 'ja'). Falls back to English then the first available track if the requested language is not present. Default 'en'.",
                        "default": "en"
                    },
                    "aiOutputLanguage": {
                        "title": "AI output language",
                        "type": "string",
                        "description": "Language the AI fields (summary, topics, chapters, etc.) are written in. Independent of transcriptLanguage — you can fetch a Japanese transcript and have the summary written in English. Plain language name or ISO code. Default 'English'.",
                        "default": "English"
                    },
                    "anthropicApiKey": {
                        "title": "Anthropic API key (optional BYOK)",
                        "type": "string",
                        "description": "Optional. Provide your own Anthropic API key to use your own quota and reduce per-video AI cost. When left blank, the actor uses the platform key and charges the ai-enrichment event. Begins with 'sk-ant-'."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings used for the YouTube transcript fetch (YouTube blocks datacenter IPs on some videos). Defaults to Apify residential. AI calls bypass this proxy.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
