# YouTube Transcript Scraper (`silentflow/youtube-transcript-scraper`) Actor

Extract transcripts from YouTube videos in bulk. Get timestamped segments and full text in any language. Proxies included.

- **URL**: https://apify.com/silentflow/youtube-transcript-scraper.md
- **Developed by:** [SilentFlow](https://apify.com/silentflow) (community)
- **Categories:** Social media, Videos, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.50 / 1,000 transcripts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

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

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

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

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

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

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

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

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

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

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


# README

## YouTube Transcript Scraper

**Turn any list of YouTube videos into clean, timestamped transcripts and full text, in any language. In seconds, not hours.**

Paste your video links, pick a language, and get back one tidy record per video: the full transcript, every line with its timestamp, the title, and the language. No copy-pasting from the transcript panel, no one-video-at-a-time tools, no manual cleanup.

### How it works

![How the YouTube Transcript Scraper works](https://api.apify.com/v2/key-value-stores/7PwGXiLChr8CP38Nn/records/how-it-works-v5.png)

1. Paste a list of YouTube video URLs (watch links, youtu.be short links, Shorts, or embeds).
2. Choose your target language.
3. Get one structured record per video with full text and timestamped segments, ready to export or pipe into your tools.

### ✨ Why teams choose this over other YouTube transcript scrapers

Tired of copying transcripts line by line from the YouTube panel? Stuck with a tool that only does one video per run? Watched a "transcript downloader" suddenly return nothing?

- 💰 **Pay per result, not per minute.** No compute costs, proxies included. You pay for transcripts delivered, period.
- 📋 **Whole lists in one run.** Drop in dozens or hundreds of video URLs at once and get a clean record for each. The popular alternative handles a single video per run.
- 🧱 **Output you can actually use.** Every record carries the video ID and URL, title, channel, view count, duration, description, keywords, the full transcript text, and the timestamped segments. Other tools hand you bare segments and leave you to stitch in the rest.
- 🎬 **Ready-made subtitle files.** Pick SRT or VTT and get a drop-in subtitle file per video, not just raw timestamps you have to format yourself.
- ✅ **Know what you are reading.** Each record flags whether captions are creator-written or auto-generated, and lists every language the video offers, so you can trust and route the text correctly.
- 🌍 **Any language, the right way.** When the video already has captions in your target language, you get that faithful native track. When it does not, you get an automatic translation. You always get the best text available.
- 🔗 **Every link format works.** Standard watch URLs, youtu.be short links, Shorts, and embed links all resolve to the right video. No reformatting your list first.
- 🧹 **Clean text, not raw markup.** HTML entities are decoded, stray line breaks are merged, and a ready-to-read full transcript is joined for you alongside the per-line segments.
- 🔁 **Built to keep working.** Reliable retrieval that keeps returning transcripts when simpler tools break.

### 🎯 What you can do with YouTube transcript data

| Team | What they build |
|---|---|
| Content marketing | Turn a channel's back catalog into blog posts, newsletters, and show notes without rewatching anything |
| SEO | Generate keyword-rich, indexable text from videos to capture search traffic the video alone cannot |
| Social / short-form | Pull exact quotes and timestamps to cut clips and write captions for Shorts, Reels, and TikTok |
| Localization | Draft subtitles and translated transcripts to bring videos to new-language audiences |
| Research & academia | Build searchable corpora of talks, lectures, and interviews for coding and analysis |
| Data / AI teams | Feed transcripts into RAG pipelines, summarizers, and training sets, one clean record per video |
| Product & UX research | Mine user interviews and demo recordings posted on YouTube for themes and verbatim quotes |
| Sales & competitive intel | Transcribe competitor webinars and product launches to track messaging and positioning |

### 📥 Input parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `videoUrls` | array of strings | Yes | - | YouTube video links. Accepts watch URLs, youtu.be short links, Shorts, and embed links. |
| `targetLanguage` | string (select) | No | `en` | The language you want the transcript in (ISO 639-1 code). A native track is used when available, otherwise the transcript is translated. |
| `outputFormat` | string (select) | No | `json` | `json` (segments + full text), `text` (plain text), `srt` or `vtt` (adds a ready-to-use subtitle file). |
| `debugMode` | boolean | No | `false` | Adds detailed run logs. Leave off for normal use. |

#### Example input

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=IELMSD2kdmk",
    "https://youtu.be/M7lc1UVf-VE",
    "https://www.youtube.com/shorts/abcdefghijk"
  ],
  "targetLanguage": "en",
  "outputFormat": "json"
}
````

### 📊 Output data

You get one record per video. Each record includes the full transcript text and a `segments` array where every entry has a start time, a duration, and the spoken text.

#### Native transcript (video already in the target language)

```json
{
  "videoUrl": "https://www.youtube.com/watch?v=IELMSD2kdmk",
  "videoId": "IELMSD2kdmk",
  "title": "Apache Spark in 100 Seconds",
  "channelName": "Fireship",
  "channelId": "UCsBjURrPoezykLs9EqgamOA",
  "durationSeconds": 159,
  "viewCount": 1635169,
  "language": "en",
  "isTranslated": false,
  "isAutoGenerated": false,
  "availableLanguages": ["en", "es", "fr"],
  "description": "Apache Spark is an open-source data analytics engine ...",
  "keywords": ["spark", "data", "analytics"],
  "transcript": "Apache Spark an open-source data analytics engine that can process massive streams of data ...",
  "segments": [
    { "start": "0", "dur": "4.2", "text": "Apache Spark an open-source data analytics engine" },
    { "start": "4.2", "dur": "3.1", "text": "that can process massive streams of data" }
  ]
}
```

#### Translated transcript (no native track in the target language)

```json
{
  "videoUrl": "https://www.youtube.com/watch?v=M7lc1UVf-VE",
  "videoId": "M7lc1UVf-VE",
  "language": "es",
  "isTranslated": true,
  "title": "YouTube Developers Live: Embedded Web Player Customization",
  "transcript": "JEFF POSNICK: Hola a todos. Bienvenidos al programa de esta semana ...",
  "segments": [
    { "start": "10.349", "dur": "1", "text": "JEFF POSNICK: Hola a todos." },
    { "start": "11.349", "dur": "2.681", "text": "Bienvenidos al programa de esta semana de YouTube Developers Live." }
  ]
}
```

#### Subtitle file (when `outputFormat` is `srt` or `vtt`)

With `"outputFormat": "srt"`, each record also includes a ready-to-use `subtitles` string:

```
1
00:00:10,349 --> 00:00:11,349
JEFF POSNICK: Hey, everybody.

2
00:00:11,349 --> 00:00:14,030
Welcome to this week's show of YouTube Developers Live.
```

### 🗂️ Data fields

| Field | Type | Description |
|---|---|---|
| `videoUrl` | string | The original video URL you provided. |
| `videoId` | string | The 11-character YouTube video ID. |
| `title` | string | The video title. |
| `channelName` | string | The channel (author) name. |
| `channelId` | string | The channel ID (stable identifier). |
| `durationSeconds` | number | Video length in seconds. |
| `viewCount` | number | View count at scrape time. |
| `language` | string | The language of the returned transcript (ISO 639-1). |
| `isTranslated` | boolean | `true` if translated to your target language, `false` if from a native track. |
| `isAutoGenerated` | boolean | `true` if captions are auto-generated, `false` if creator-written. |
| `availableLanguages` | array | All caption languages the video offers. |
| `description` | string | The video description. |
| `keywords` | array | The video tags. |
| `transcript` | string | The full transcript as one continuous, ready-to-read text. |
| `subtitles` | string | Ready-to-use SRT or VTT file (present when `outputFormat` is `srt` or `vtt`). |
| `segments` | array | The transcript split into timed lines. |
| `segments[].start` | string | Start time of the line, in seconds. |
| `segments[].dur` | string | Duration of the line, in seconds. |
| `segments[].text` | string | The spoken text for that line. |

### 🚀 Examples

#### Get one video's transcript

```json
{
  "videoUrls": ["https://www.youtube.com/watch?v=IELMSD2kdmk"],
  "targetLanguage": "en"
}
```

#### Transcribe a batch of videos at once

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=IELMSD2kdmk",
    "https://www.youtube.com/watch?v=M7lc1UVf-VE",
    "https://youtu.be/dQw4w9WgXcQ"
  ],
  "targetLanguage": "en"
}
```

#### Pull a Spanish transcript from an English video

```json
{
  "videoUrls": ["https://www.youtube.com/watch?v=M7lc1UVf-VE"],
  "targetLanguage": "es"
}
```

#### Generate SRT subtitle files

```json
{
  "videoUrls": ["https://www.youtube.com/watch?v=IELMSD2kdmk"],
  "targetLanguage": "en",
  "outputFormat": "srt"
}
```

#### Transcribe Shorts for clip ideas

```json
{
  "videoUrls": [
    "https://www.youtube.com/shorts/abcdefghijk",
    "https://www.youtube.com/shorts/lmnopqrstuv"
  ],
  "targetLanguage": "en"
}
```

#### Mix link formats in one run and translate to French

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=IELMSD2kdmk",
    "https://youtu.be/M7lc1UVf-VE",
    "https://www.youtube.com/embed/dQw4w9WgXcQ"
  ],
  "targetLanguage": "fr"
}
```

### 🤖 Copy to your AI assistant

Paste this block into Claude, ChatGPT, or Cursor to give it full context about this scraper:

```
You have access to the YouTube Transcript Scraper on Apify: silentflow/youtube-transcript-scraper

Input schema:
- videoUrls (required, array of strings): YouTube video links. Accepts watch URLs, youtu.be short links, Shorts, and embed links.
- targetLanguage (string, default "en"): ISO 639-1 language code. Native caption track is preferred; automatic translation is used as fallback.
- outputFormat (string, default "json"): one of json, text, srt, vtt. srt/vtt add a ready-to-use subtitle file.
- debugMode (boolean, default false): adds detailed run logs.

Output: one record per video, with fields:
- videoUrl (string), videoId (string), title (string)
- channelName (string), channelId (string)
- durationSeconds (number), viewCount (number)
- language (string), isTranslated (boolean), isAutoGenerated (boolean)
- availableLanguages (array of strings)
- description (string), keywords (array of strings)
- transcript (string): full continuous text
- subtitles (string): SRT or VTT file, present when outputFormat is srt or vtt
- segments (array of { start (string, seconds), dur (string, seconds), text (string) })

Pay per result. Proxies included. Use apify-client for Python or JavaScript.
```

### 💻 Integrations

#### Build a content repurposing pipeline (Python)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("silentflow/youtube-transcript-scraper").call(run_input={
    "videoUrls": [
        "https://www.youtube.com/watch?v=IELMSD2kdmk",
        "https://youtu.be/M7lc1UVf-VE",
    ],
    "targetLanguage": "en",
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    # Save each transcript as a draft for the writing team
    with open(f"{item['videoId']}.txt", "w") as f:
        f.write(f"# {item['title']}\n\n{item['transcript']}")
    print("Saved draft for", item["title"])
```

#### Pull quotes with timestamps for clips (JavaScript)

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('silentflow/youtube-transcript-scraper').call({
    videoUrls: ['https://www.youtube.com/watch?v=IELMSD2kdmk'],
    targetLanguage: 'en',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();

// Find every line mentioning "data" and where it happens, for cutting clips
for (const video of items) {
    const hits = video.segments.filter((s) => s.text.toLowerCase().includes('data'));
    hits.forEach((s) => console.log(`${video.videoId} @ ${s.start}s: ${s.text}`));
}
```

#### Export every transcript to CSV (Python)

```python
import csv
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("silentflow/youtube-transcript-scraper").call(run_input={
    "videoUrls": ["https://www.youtube.com/watch?v=IELMSD2kdmk"],
    "targetLanguage": "en",
})

with open("transcripts.csv", "w", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(["videoId", "title", "language", "transcript"])
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        writer.writerow([item["videoId"], item["title"], item["language"], item["transcript"]])
```

### 📈 Performance

| Metric | Result |
|---|---|
| Single transcript | About 1 second |
| Batch processing | Multiple videos in parallel |
| Output | One clean record per video |
| Reliability | Native track preferred, translation fallback, resilient retrieval |

Runtime per video depends on transcript length and YouTube response times. Larger lists process several videos at the same time.

### 💾 Data export

Export results from the Apify dataset in JSON, CSV, Excel, HTML, RSS, or XML. Pull them programmatically from the dataset API:

```
https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=csv&token=YOUR_TOKEN
```

### 💡 Tips for best results

- **Pass clean video URLs.** Watch links, youtu.be, Shorts, and embeds all work. Playlist and channel links are not video links, expand them to individual videos first.
- **Pick the language you actually need.** If you set a language the video does not have natively, you get an automatic translation, flagged with `isTranslated: true`.
- **Your list is your batch size.** The number of URLs you pass is exactly how many videos are processed, one record each. No extra limit to configure.
- **Use the full `transcript` field for reading and search, and `segments` for timing.** The full text is best for repurposing and indexing; the segments are best for clips and subtitles.
- **De-duplicate is automatic.** If the same video appears twice in your list, it is processed once.

### ❓ FAQ

**What exactly does this scraper return?**
For each video, the full transcript text plus a list of timed segments (start, duration, text), along with the video ID, URL, title, and language.

**Which videos work?**
Any public video that has captions, whether the creator added them or YouTube generated them automatically. Videos with no captions at all are skipped.

**Can I get transcripts in another language?**
Yes. Set `targetLanguage`. If the video has a caption track in that language, you get it directly. If not, you get an automatic translation.

**What link formats are supported?**
Standard watch URLs, youtu.be short links, Shorts links, and embed links. Each resolves to the right video automatically.

**Can I transcribe many videos at once?**
Yes. Pass a list of URLs in `videoUrls` and the scraper returns one record per video, as many as you provide.

**Do I need a YouTube account or API key?**
No. The scraper reads publicly available caption data. No login, no API key.

**How fresh is the data?**
Transcripts are pulled live at run time, so you get whatever captions are currently available for each video.

**Why is a field like `title` sometimes shorter than expected, or a transcript auto-generated?**
The data comes from YouTube itself. Auto-generated captions can include filler and lack punctuation, and some videos only offer them. The scraper returns exactly what is available, faithfully.

**What happens to a video with no captions?**
It is skipped and noted, and the rest of your batch still completes.

### ⚖️ Legal

This Actor extracts publicly available caption data from YouTube. It does not bypass any login, paywall, or CAPTCHA. Users are responsible for complying with YouTube's terms of service and applicable laws in their jurisdiction. The data returned is informational; verify accuracy for regulated use cases.

### 📬 Support

Need something this scraper doesn't do yet? We ship features fast.

- Feature requests go straight to our backlog
- Enterprise needs? We do custom integrations and high-volume plans
- Pricing questions? Check the Monetization tab on the actor page

Check out our other scrapers: [silentflow on Apify](https://apify.com/silentflow)

# Actor input Schema

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

One or more YouTube video URLs (watch, youtu.be, shorts, or embed links).

## `targetLanguage` (type: `string`):

ISO 639-1 code. A native track is used when available, otherwise the transcript is translated.

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

How to deliver the transcript. JSON returns timestamped segments and full text. SRT and VTT add a ready-to-use subtitle file. Text returns plain text only.

## `debugMode` (type: `boolean`):

Activate to see detailed logs.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=IELMSD2kdmk"
  ],
  "targetLanguage": "en",
  "outputFormat": "json",
  "debugMode": false
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped transcripts with full data.

## `resultsCSV` (type: `string`):

CSV format for spreadsheet analysis.

# 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=IELMSD2kdmk"
    ],
    "targetLanguage": "en",
    "outputFormat": "json"
};

// Run the Actor and wait for it to finish
const run = await client.actor("silentflow/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 = {
    "videoUrls": ["https://www.youtube.com/watch?v=IELMSD2kdmk"],
    "targetLanguage": "en",
    "outputFormat": "json",
}

# Run the Actor and wait for it to finish
run = client.actor("silentflow/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 '{
  "videoUrls": [
    "https://www.youtube.com/watch?v=IELMSD2kdmk"
  ],
  "targetLanguage": "en",
  "outputFormat": "json"
}' |
apify call silentflow/youtube-transcript-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "YouTube Transcript Scraper",
        "description": "Extract transcripts from YouTube videos in bulk. Get timestamped segments and full text in any language. Proxies included.",
        "version": "1.0",
        "x-build-id": "WjsPS2fvVBi4kyiNN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/silentflow~youtube-transcript-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-silentflow-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/silentflow~youtube-transcript-scraper/runs": {
            "post": {
                "operationId": "runs-sync-silentflow-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/silentflow~youtube-transcript-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-silentflow-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": [
                    "videoUrls"
                ],
                "properties": {
                    "videoUrls": {
                        "title": "YouTube video URLs",
                        "type": "array",
                        "description": "One or more YouTube video URLs (watch, youtu.be, shorts, or embed links).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "targetLanguage": {
                        "title": "Target language",
                        "enum": [
                            "en",
                            "es",
                            "pt",
                            "fr",
                            "de",
                            "it",
                            "ja",
                            "ko",
                            "zh",
                            "ru",
                            "ar",
                            "hi",
                            "nl",
                            "pl",
                            "tr",
                            "vi",
                            "id",
                            "th",
                            "sv",
                            "da",
                            "no",
                            "fi",
                            "cs",
                            "hu",
                            "ro",
                            "uk",
                            "el",
                            "he",
                            "fa",
                            "bn",
                            "ta",
                            "te",
                            "mr",
                            "ur",
                            "gu",
                            "kn",
                            "ml",
                            "pa",
                            "sr",
                            "hr",
                            "bg",
                            "sk",
                            "lt",
                            "lv",
                            "et",
                            "sl",
                            "ca",
                            "af",
                            "sq",
                            "am",
                            "hy",
                            "az",
                            "eu",
                            "be",
                            "bs",
                            "my",
                            "ceb",
                            "zh-Hans",
                            "zh-Hant",
                            "co",
                            "eo",
                            "fil",
                            "fy",
                            "gl",
                            "ka",
                            "ht",
                            "ha",
                            "haw",
                            "hmn",
                            "is",
                            "ig",
                            "ga",
                            "jv",
                            "kk",
                            "km",
                            "rw",
                            "ku",
                            "ky",
                            "lo",
                            "la",
                            "lb",
                            "mk",
                            "mg",
                            "ms",
                            "mt",
                            "mi",
                            "mn",
                            "ne",
                            "ny",
                            "or",
                            "ps",
                            "sm",
                            "gd",
                            "sn",
                            "sd",
                            "si",
                            "so",
                            "st",
                            "su",
                            "sw",
                            "tg",
                            "tt",
                            "tk",
                            "ug",
                            "uz",
                            "cy",
                            "xh",
                            "yi",
                            "yo",
                            "zu"
                        ],
                        "type": "string",
                        "description": "ISO 639-1 code. A native track is used when available, otherwise the transcript is translated.",
                        "default": "en"
                    },
                    "outputFormat": {
                        "title": "Output format",
                        "enum": [
                            "json",
                            "text",
                            "srt",
                            "vtt"
                        ],
                        "type": "string",
                        "description": "How to deliver the transcript. JSON returns timestamped segments and full text. SRT and VTT add a ready-to-use subtitle file. Text returns plain text only.",
                        "default": "json"
                    },
                    "debugMode": {
                        "title": "Debug mode",
                        "type": "boolean",
                        "description": "Activate to see detailed logs.",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
