# Fast YouTube Transcript Scraper & MCP Connector (`techforce.global/youtube-transcript-scraper`) Actor

Scrape any YouTube video transcript with timestamps in 13 languages. Auto-translate, export to JSON/CSV/Excel, or push to Notion, Slack & Jira.

- **URL**: https://apify.com/techforce.global/youtube-transcript-scraper.md
- **Developed by:** [Techforce Global](https://apify.com/techforce.global) (community)
- **Categories:** Agents, Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.10 / actor start

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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

### Fast YouTube Transcript Scraper & MCP Connector

Pull the **full transcript of any YouTube video** — every spoken segment with timestamps, in the language you want. **No API keys, no captions download, no copy-pasting from the transcript panel.**

Built for content teams, researchers, marketers, and developers who need clean, timestamped transcript text for a video in seconds — not an afternoon of manual transcription.

> **Paste a YouTube URL → get the transcript → deliver it straight into Notion, Slack, Jira, or your own tools.**

---

### ⭐ Why This Actor?

- ✅ **Just paste a video URL** — standard watch links, `youtu.be` short links, Shorts, and embed URLs all work
- ✅ **13 languages, your choice** — English, Hindi, Gujarati, Portuguese, Spanish, French, German, Italian, Japanese, Korean, Chinese, Russian, and Arabic
- ✅ **Auto-translate when needed** — if the video has no native caption in your language, YouTube's translation fills the gap (toggle on/off)
- ✅ **Graceful language fallback** — if translation isn't available, you get the video's own caption language instead of an empty run, with a clear message explaining what happened
- ✅ **Timestamped segments** — every line includes its start time and duration, ready for subtitles, indexing, or search
- ✅ **Anti-bot resilient** — runs through **Apify Proxy** (residential by default) to get past YouTube's "confirm you're not a bot" wall that blocks datacenter IPs
- ✅ **Deliver anywhere via MCP connectors** — push transcripts straight into Notion, Slack, Jira, GitHub, Linear, Airtable, and more
- ✅ **Export-ready** — JSON, CSV, Excel, or direct API integration for your pipeline

---

### 📝 Use Cases & ROI

| Use Case                     | Time Saved        | What You Get                                                       |
| ---------------------------- | ----------------- | ------------------------------------------------------------------ |
| **Content Repurposing**      | 1–2 hrs/video     | Clean transcript text to turn into blogs, threads, and newsletters |
| **Research & Analysis**      | 2–4 hrs/batch     | Searchable, timestamped text for qualitative coding or review      |
| **Subtitles & Localization** | 1–3 hrs/video     | Timestamped segments ready for SRT/caption workflows               |
| **SEO & Summaries**          | 30–90 min/video   | Full text to feed into summarizers and keyword extraction          |
| **Accessibility**            | 1–2 hrs/video     | Accurate text alternatives for audio/video content                 |

---

### 🚀 How to Use

1. Open the Actor on Apify
2. Paste the **YouTube video URL** (e.g. `https://www.youtube.com/watch?v=ItqAej_Lc9c`)
3. Pick a **Preferred language** from the dropdown (default: English)
4. Keep **Translate** on to auto-translate when no native caption exists, or turn it off to fail fast with the list of available languages
5. _(Optional)_ Pick an **MCP connector** to deliver the transcript into Notion, Slack, Jira, etc.
6. Click **Run** — results are ready in seconds
7. Download as CSV, Excel, or JSON — or let the connector push the transcript into your tools automatically

> 🌐 **Proxy**: requests run through **Apify Proxy** (residential group by default) so YouTube doesn't block the run with a bot check. You normally don't need to change this.

> 💡 First time with a connector? Run once with a connector selected — the run log prints the connector's available tool names, so you know what to put in **Connector tool name**.

---

### 🧩 Input Configuration

| Field                 | Type      | Required | Description                                                                                                                                             |
| --------------------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `videoUrl`            | String    | ✔️ Yes   | URL of the YouTube video. Accepts standard watch URLs, `youtu.be` short links, Shorts, and embed URLs.                                                  |
| `language`            | Enum      | Optional | Preferred transcript language. If a native caption exists it is used; otherwise it's auto-translated (when **Translate** is on). Default: `en`.          |
| `translate`           | Boolean   | Optional | If the preferred language has no native caption, auto-translate to it using YouTube's translation. When off, the run fails listing available languages. Default: `true`. |
| `proxyConfiguration`  | Object    | Optional | Proxy used to fetch the transcript. Defaults to **Apify Proxy** with the `RESIDENTIAL` group — recommended, as datacenter IPs are often blocked.        |
| `mcpConnector`        | Connector | Optional | Deliver the transcript into a connector you've authorized (Notion, Slack, Jira, GitHub, Linear, Airtable, …).                                            |
| `deliveryMode`        | Enum      | Optional | `summary` (one call with the full transcript), `chunked` (split a long transcript across a few calls/pages), `perSegment` (one call per segment), or `none`. Default: `summary`. |
| `mcpTool`             | String    | Optional | Tool to call on the connector (e.g. `create_page`, `send_message`, `create_issue`).                                                                     |
| `mcpArguments`        | Object    | Optional | Arguments for the tool; string values support `{placeholders}`.                                                                                          |
| `mcpMessageTemplate`  | String    | Optional | Template rendered and exposed as the `{message}` placeholder in the tool arguments.                                                                      |

#### Supported languages

English (`en`) · हिन्दी / Hindi (`hi`) · ગુજરાતી / Gujarati (`gu`) · Português (`pt`) · Español (`es`) · Français (`fr`) · Deutsch (`de`) · Italiano (`it`) · 日本語 (`ja`) · 한국어 (`ko`) · 中文 (`zh`) · Русский (`ru`) · العربية (`ar`)

#### Example — Just get the transcript

```json
{
    "videoUrl": "https://www.youtube.com/watch?v=ItqAej_Lc9c",
    "language": "en",
    "translate": true
}
````

#### Example — Get the Hindi transcript, no translation fallback

```json
{
    "videoUrl": "https://www.youtube.com/watch?v=ItqAej_Lc9c",
    "language": "hi",
    "translate": false
}
```

#### Example — Deliver to Slack

```json
{
    "videoUrl": "https://www.youtube.com/watch?v=ItqAej_Lc9c",
    "language": "en",
    "mcpConnector": "<your-slack-connector>",
    "deliveryMode": "summary",
    "mcpTool": "send_message",
    "mcpArguments": { "channel": "#transcripts", "text": "{message}" },
    "mcpMessageTemplate": "Transcript of {videoUrl} ({language}, {segmentCount} segments):\n\n{transcript}"
}
```

#### Example — Create Notion pages (chunked, best for long videos)

```json
{
    "videoUrl": "https://www.youtube.com/watch?v=ItqAej_Lc9c",
    "language": "hi",
    "mcpConnector": "<your-notion-connector>",
    "deliveryMode": "chunked",
    "mcpTool": "notion-create-pages",
    "mcpArguments": {
        "parent": { "page_id": "<your-page-id>" },
        "pages": [
            {
                "properties": { "title": "Transcript {videoId} (part {part}/{partCount})" },
                "content": "{transcript}"
            }
        ]
    }
}
```

> 🎯 **Delivery modes**: `summary` sends the whole transcript in one call; `chunked` splits a long transcript across a few calls/pages so services like Notion never hit block-count or timeout limits; `perSegment` sends one call per line (great for logging each timestamped segment); `none` saves to the dataset only.

#### Placeholders available in arguments / template

- **`summary` mode:** `{videoUrl}` · `{videoId}` · `{language}` · `{segmentCount}` · `{transcript}` (full text) · `{message}`
- **`chunked` mode:** same as summary, but `{transcript}` holds one part, plus `{part}` and `{partCount}` (1-based part number and total)
- **`perSegment` mode:** `{start}` · `{dur}` · `{text}` · `{videoUrl}` · `{videoId}` · `{language}` · `{message}`

***

### 📦 Output Fields

Each dataset item includes:

| Field               | Description                                                                 |
| ------------------- | --------------------------------------------------------------------------- |
| `videoUrl`          | Normalized `watch?v=` URL for the video                                     |
| `videoId`           | The extracted YouTube video ID                                             |
| `requestedLanguage` | The language you asked for                                                 |
| `language`          | The language actually returned                                             |
| `isAutoGenerated`   | `true` if the captions are YouTube's auto-generated track                  |
| `isTranslated`      | `true` if the transcript was auto-translated                               |
| `fallbackUsed`      | `true` if a fallback language was used because the request couldn't be met |
| `message`           | Human-readable note explaining any language/translation fallback           |
| `segmentCount`      | Number of transcript segments returned                                     |
| `searchResult`      | Array of segments, each with `start`, `dur`, and `text`                    |

#### Example Output

```json
{
    "videoUrl": "https://www.youtube.com/watch?v=ItqAej_Lc9c",
    "videoId": "ItqAej_Lc9c",
    "requestedLanguage": "en",
    "language": "en",
    "isAutoGenerated": false,
    "isTranslated": false,
    "fallbackUsed": false,
    "message": "",
    "segmentCount": 3,
    "searchResult": [
        { "start": 0.0,  "dur": 3.2, "text": "Welcome back to the channel." },
        { "start": 3.2,  "dur": 2.9, "text": "Today we're talking about web scraping." },
        { "start": 6.1,  "dur": 4.0, "text": "Let's jump right into the setup." }
    ]
}
```

> You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

***

### 🔌 Integrations & Delivery

Deliver transcripts into any MCP connector you've authorized in Apify — no glue code, no webhooks:

- **Notion** — create a page (or split a long transcript across several pages)
- **Slack / Discord** — post the transcript to a channel
- **Jira / GitHub / Linear** — open issues or tasks with the transcript attached
- **Airtable / Google Sheets** — append structured rows
- …or any other MCP-compatible connector

Credentials stay private — delivery runs through the **Apify MCP Proxy**, so the Actor never sees your connector tokens. You can also consume the dataset directly via the **Apify API**, or wire it into **n8n, Zapier, and Make**.

***

### 🆘 Support

For issues, custom transcription requests, or feature suggestions:

**Email**: bhavin.shah@techforceglobal.com

***

#### Need a Custom Pipeline?

Want batch transcription across many videos, whole-channel or playlist coverage, or a full content pipeline into your CMS?

#### [📅 Book a Free 15-min Consultation](https://calendly.com/techforce-infotech-pvt-ltd/intro-meeting?month=2026-01)

***

Made with ❤️ by **[Techforce](https://www.techforceglobal.com)**
Specialists in High-Performance Web Scrapers and AI Automation.

***

### Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by YouTube or Google. YouTube™ is a trademark of Google LLC; all trademarks are property of their respective owners. The Actor collects only publicly available caption/transcript data made accessible for a video and does not log into, or scrape behind the authentication of, any platform. Use the data responsibly and in compliance with applicable laws (including copyright and the terms of the platforms you operate on).

# Actor input Schema

## `videoUrl` (type: `string`):

URL of the YouTube video to scrape the transcript from. Accepts standard watch URLs, youtu.be short links, Shorts, and embed URLs.

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

Preferred transcript language. If a native caption in this language exists it is used. If not, and 'Translate if needed' is on, YouTube auto-translates to this language.

## `translate` (type: `boolean`):

If the preferred language has no native caption track, auto-translate the transcript to it using YouTube's translation. If turned off, the run fails with a message listing the available languages when the preferred language is missing.

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

Proxy settings. YouTube blocks datacenter/cloud IPs with a 'Sign in to confirm you're not a bot' wall, so RESIDENTIAL proxies are strongly recommended and enabled by default.

## `mcpConnector` (type: `string`):

Optionally deliver the transcript into a connector you have authorized — Notion, Slack, Linear, Airtable, Jira, GitHub, or any MCP-compatible connector. Leave empty to only save the result to the dataset.

## `deliveryMode` (type: `string`):

How to deliver to the connector: 'summary' (one call with the full transcript), 'chunked' (split a long transcript across a few calls/pages so services like Notion never time out), 'perSegment' (one call per transcript segment), or 'none' (save to dataset only).

## `mcpTool` (type: `string`):

Name of the tool to call on the connector (e.g. 'create\_page' for Notion, 'send\_message' for Slack, 'create\_issue' for Jira/GitHub). If unsure, run once with a connector selected — the log lists the connector's available tools.

## `mcpArguments` (type: `object`):

Arguments passed to the connector tool. String values support {placeholders}. In 'summary' mode: {videoUrl}, {videoId}, {language}, {segmentCount}, {transcript} (full text) and {message} (the rendered template below). In 'chunked' mode: same as summary but {transcript} holds one part of the transcript and {part}/{partCount} give the 1-based part number and total (put these in the page title, e.g. 'Transcript {videoId} (part {part}/{partCount})'). In 'perSegment' mode: {start}, {dur}, {text}, {videoUrl}, {videoId}, {language} and {message}. Example for Slack: {"channel": "#transcripts", "text": "{message}"}.

## `mcpMessageTemplate` (type: `string`):

Optional template rendered and exposed as the {message} placeholder in the tool arguments. Summary example: 'Transcript of {videoUrl} ({language}, {segmentCount} segments):\n\n{transcript}'. Per-segment example: '\[{start}] {text}'.

## Actor input object example

```json
{
  "videoUrl": "https://www.youtube.com/watch?v=ItqAej_Lc9c",
  "language": "en",
  "translate": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "deliveryMode": "summary",
  "mcpTool": "",
  "mcpArguments": {},
  "mcpMessageTemplate": ""
}
```

# Actor output Schema

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

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "videoUrl": "https://www.youtube.com/watch?v=ItqAej_Lc9c",
    "language": "en",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("techforce.global/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 = {
    "videoUrl": "https://www.youtube.com/watch?v=ItqAej_Lc9c",
    "language": "en",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("techforce.global/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 '{
  "videoUrl": "https://www.youtube.com/watch?v=ItqAej_Lc9c",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call techforce.global/youtube-transcript-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Fast YouTube Transcript Scraper & MCP Connector",
        "description": "Scrape any YouTube video transcript with timestamps in 13 languages. Auto-translate, export to JSON/CSV/Excel, or push to Notion, Slack & Jira.",
        "version": "0.1",
        "x-build-id": "UkwiCIRcZ8Gbkm8e0"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/techforce.global~youtube-transcript-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-techforce.global-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/techforce.global~youtube-transcript-scraper/runs": {
            "post": {
                "operationId": "runs-sync-techforce.global-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/techforce.global~youtube-transcript-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-techforce.global-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": [
                    "videoUrl"
                ],
                "properties": {
                    "videoUrl": {
                        "title": "YouTube video URL",
                        "type": "string",
                        "description": "URL of the YouTube video to scrape the transcript from. Accepts standard watch URLs, youtu.be short links, Shorts, and embed URLs."
                    },
                    "language": {
                        "title": "Preferred language",
                        "enum": [
                            "en",
                            "hi",
                            "gu",
                            "pt",
                            "es",
                            "fr",
                            "de",
                            "it",
                            "ja",
                            "ko",
                            "zh",
                            "ru",
                            "ar"
                        ],
                        "type": "string",
                        "description": "Preferred transcript language. If a native caption in this language exists it is used. If not, and 'Translate if needed' is on, YouTube auto-translates to this language.",
                        "default": "en"
                    },
                    "translate": {
                        "title": "Translate",
                        "type": "boolean",
                        "description": "If the preferred language has no native caption track, auto-translate the transcript to it using YouTube's translation. If turned off, the run fails with a message listing the available languages when the preferred language is missing.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. YouTube blocks datacenter/cloud IPs with a 'Sign in to confirm you're not a bot' wall, so RESIDENTIAL proxies are strongly recommended and enabled by default.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    },
                    "mcpConnector": {
                        "title": "Deliver to (MCP connector)",
                        "type": "string",
                        "description": "Optionally deliver the transcript into a connector you have authorized — Notion, Slack, Linear, Airtable, Jira, GitHub, or any MCP-compatible connector. Leave empty to only save the result to the dataset."
                    },
                    "deliveryMode": {
                        "title": "Delivery mode",
                        "enum": [
                            "summary",
                            "chunked",
                            "perSegment",
                            "none"
                        ],
                        "type": "string",
                        "description": "How to deliver to the connector: 'summary' (one call with the full transcript), 'chunked' (split a long transcript across a few calls/pages so services like Notion never time out), 'perSegment' (one call per transcript segment), or 'none' (save to dataset only).",
                        "default": "summary"
                    },
                    "mcpTool": {
                        "title": "Connector tool name",
                        "type": "string",
                        "description": "Name of the tool to call on the connector (e.g. 'create_page' for Notion, 'send_message' for Slack, 'create_issue' for Jira/GitHub). If unsure, run once with a connector selected — the log lists the connector's available tools.",
                        "default": ""
                    },
                    "mcpArguments": {
                        "title": "Connector tool arguments",
                        "type": "object",
                        "description": "Arguments passed to the connector tool. String values support {placeholders}. In 'summary' mode: {videoUrl}, {videoId}, {language}, {segmentCount}, {transcript} (full text) and {message} (the rendered template below). In 'chunked' mode: same as summary but {transcript} holds one part of the transcript and {part}/{partCount} give the 1-based part number and total (put these in the page title, e.g. 'Transcript {videoId} (part {part}/{partCount})'). In 'perSegment' mode: {start}, {dur}, {text}, {videoUrl}, {videoId}, {language} and {message}. Example for Slack: {\"channel\": \"#transcripts\", \"text\": \"{message}\"}.",
                        "default": {}
                    },
                    "mcpMessageTemplate": {
                        "title": "Message template",
                        "type": "string",
                        "description": "Optional template rendered and exposed as the {message} placeholder in the tool arguments. Summary example: 'Transcript of {videoUrl} ({language}, {segmentCount} segments):\\n\\n{transcript}'. Per-segment example: '[{start}] {text}'.",
                        "default": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
