# YouTube Transcript (`zeropointstudio/youtube-transcript`) Actor

Fetch YouTube video transcripts via TranscriptAPI. Bulk-friendly, with optional metadata and timestamps.

- **URL**: https://apify.com/zeropointstudio/youtube-transcript.md
- **Developed by:** [Andrej Šimunaj](https://apify.com/zeropointstudio) (community)
- **Categories:** AI, Videos, MCP servers
- **Stats:** 9 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 transcript fetcheds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## $5/1K — YouTube Transcript Scraper: Bulk Extract Captions, Subtitles & Video Transcripts

> **Extract YouTube transcripts at scale. No API key, no subscription, no actor-start fee. Pay $5 per 1,000 successful transcripts — and nothing when a video fails.**

| ⚡ **Under 500 ms typical** | 📊 **15 M+ transcripts processed every month** | 🛡️ **Doesn't break when YouTube changes things** | 🔌 **Powered by [TranscriptAPI.com](https://transcriptapi.com)** |
|---|---|---|---|

A reliable, production-grade YouTube transcript scraper for content research, AI/LLM training data, RAG pipelines, SEO, accessibility, brand monitoring, and anything else that needs the spoken words from a YouTube video as clean structured text.

***

### 🚀 Why this YouTube transcript scraper?

- 🛡️ **Doesn't break when YouTube changes things.** YouTube tweaks its backend constantly. Our infrastructure rolls with it — we've shipped through every YouTube change for years without dropping transcripts. You don't get empty results, mystery 500s, or weeks of broken runs.
- ⚡ **Typically returns a transcript in under 500 ms.** Backed by [TranscriptAPI.com](https://transcriptapi.com), which has a **median latency of 49 ms**, plus a small Apify networking hop on top.
- 📊 **15 M+ transcripts processed every month** — battle-tested in real production traffic, not a side-project script.
- 💸 **No actor-start fee** — we absorb the run cost. You pay only for delivered transcripts.
- 🆓 **Errors are free** — failed videos (no captions, removed, age-restricted, etc.) cost you nothing.
- 🔑 **No YouTube API key required** — bring a URL, we bring the transcript.
- 📦 **Bulk-friendly** — pass an array of URLs or video IDs, get an Apify Dataset back, ready for export to JSON, CSV, Excel, or your warehouse.
- 🧹 **Clean structured output** — JSON segments with timestamps, or plain text, your choice.
- 🎞️ **Optional video metadata** — title, channel/author, thumbnail when you ask for it.
- 🌐 **Every URL format** — `youtube.com/watch?v=`, `youtu.be/`, `youtube.com/shorts/`, embed links, or bare 11-character video IDs all work out of the box.

***

### 💰 Pricing

| Event | Price |
|---|---|
| Actor start | **Free** *(we absorb it)* |
| **Per transcript delivered** | **$0.005** *(= $5 per 1,000 transcripts)* |
| Failed videos *(no captions, removed, etc.)* | **Free** |

> Pay-per-result. No subscription. No monthly minimum. No hidden fees. If we don't deliver a transcript, you don't pay.

***

### ⚡ Quick Start

1. Click **Try for free** at the top of this page.
2. Paste one or more YouTube URLs into `videoUrls`.
3. Run. Results land in the actor's default Dataset, exportable to JSON, CSV, Excel, XML, or HTML.

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
    "https://youtu.be/jNQXAC9IVRw",
    "jNQXAC9IVRw"
  ],
  "format": "json",
  "includeTimestamps": true,
  "sendMetadata": true
}
```

***

### 📥 Input

| Field | Type | Default | Description |
|---|---|---|---|
| `videoUrls` | `string[]` | *(required)* | List of YouTube URLs or 11-character video IDs. |
| `format` | `"json"` | `"text"` | `"json"` | `json` = array of timed segments. `text` = single concatenated string. |
| `includeTimestamps` | `boolean` | `true` | When `true`, segments include `start` (seconds) and `duration`. When `false`, only `text`. |
| `sendMetadata` | `boolean` | `false` | When `true`, include video title, author/channel, and thumbnail. |

***

### 📤 Output

Each video produces one item in the Dataset.

**Successful transcript (JSON format, with metadata):**

```json
{
  "input_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
  "video_id": "dQw4w9WgXcQ",
  "language": "en",
  "transcript": [
    { "text": "We're no strangers to love", "start": 18.8, "duration": 4.2 },
    { "text": "You know the rules and so do I", "start": 23.0, "duration": 3.5 }
  ],
  "metadata": {
    "title": "Rick Astley - Never Gonna Give You Up",
    "author_name": "Rick Astley",
    "author_url": "https://www.youtube.com/@RickAstley",
    "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg"
  }
}
```

**Plain-text format (`format: "text"`, no timestamps):**

```json
{
  "input_url": "https://youtu.be/jNQXAC9IVRw",
  "video_id": "jNQXAC9IVRw",
  "language": "en",
  "transcript": "All right, so here we are in front of the elephants..."
}
```

**Failed video (free of charge):**

```json
{
  "input_url": "https://www.youtube.com/watch?v=BADID000000",
  "error": true,
  "status": 404,
  "detail": "No transcript available for video BADID000000"
}
```

***

### 🎯 Use Cases

- **AI / LLM training data** — collect high-quality transcribed speech from any niche on YouTube.
- **RAG knowledge bases** — index educational channels, lectures, and podcasts for retrieval-augmented generation.
- **Content research & SEO** — extract topics, keywords, and themes from competitor videos.
- **Brand monitoring** — pipe transcripts into NLP / sentiment analysis to track how creators talk about you.
- **Podcast & lecture transcription** — turn long-form video into searchable, quotable text.
- **Repurposing video into content** — blog posts, newsletters, X/LinkedIn threads, YouTube Shorts captions, summaries.
- **Accessibility** — generate plain-text alternatives for video content.
- **Search indexing** — make video libraries searchable inside your own app.
- **Market research** — sentiment & narrative analysis across product/category videos.
- **Academic research** — corpus building for linguistic, media, or political analysis.

***

### 🌐 Supported URL Formats

The scraper accepts every common YouTube URL format and bare video IDs:

| Format | Example |
|---|---|
| Standard watch URL | `https://www.youtube.com/watch?v=dQw4w9WgXcQ` |
| Short URL | `https://youtu.be/dQw4w9WgXcQ` |
| Shorts URL | `https://www.youtube.com/shorts/dQw4w9WgXcQ` |
| Embed URL | `https://www.youtube.com/embed/dQw4w9WgXcQ` |
| Bare video ID | `dQw4w9WgXcQ` |

***

### 🔌 Integrations

Run this actor from anywhere via Apify's native integrations:

- 🐍 **Python** — `apify-client` SDK
- 🟢 **Node.js / JavaScript** — `apify-client` SDK
- 🔗 **REST API** — POST to `/v2/acts/.../runs` and read the Dataset
- 🧩 **n8n** — official Apify nodes
- ⚙️ **Make (Integromat)** — official Apify modules
- ⚡ **Zapier** — official Apify Zap actions
- 🪝 **Webhooks** — fire on run finish, success, or failure
- 🤖 **MCP / Claude Desktop / Cursor** — expose this actor as a tool to your AI agents via the Apify MCP server
- 🧱 **LangChain / LlamaIndex** — drop the Dataset directly into a RAG pipeline

***

### ❓ FAQ

**How do I get a YouTube video transcript via API?**
Pass the video URL or ID to this actor's `videoUrls` input. The transcript comes back in the Dataset as either JSON segments (with timestamps) or a single plain-text string. No YouTube Data API key, no Google Cloud project, nothing to configure.

**Is there an API for YouTube transcripts?**
Yes — this actor exposes a clean REST endpoint via Apify. Call it from Python, Node.js, or any HTTP client. Full SDK docs in the **API** tab above.

**How much does YouTube transcript extraction cost?**
$5 per 1,000 successfully delivered transcripts. Failed videos are free. No actor-start fee. No subscription.

**Can I extract transcripts from YouTube Shorts?**
Yes. Pass the Shorts URL (`https://www.youtube.com/shorts/<ID>`) like any other video.

**What if a video has no captions?**
You get a structured error item with `error: true`, `status`, and `detail`. You're **not** charged for it.

**Which languages are supported?**
This version returns the transcript in the video's primary published caption language (typically the video's original audio language). Multi-language priority fallback is on the roadmap.

**Can I translate transcripts to another language?**
Not in this actor. Translation is on the roadmap as a separate optional event.

**Is YouTube transcript scraping legal?**
Captions on public YouTube videos are publicly available data. We only access what YouTube itself shows to any visitor; we don't bypass age gates, private uploads, or unlisted-link gates. Use the data lawfully (respect copyright, attribution, and GDPR/CCPA where applicable). Talk to your own counsel for your specific use case.

**Does the price include Apify platform costs?**
The $5/1k is what you pay total at run-time, before any optional Apify proxy add-ons (this actor does not require proxies). You only ever pay the per-transcript event price plus any usage-tier costs your own Apify plan adds.

**Where do the results go?**
Each transcript is one item in the actor's default Dataset. Export to JSON, CSV, Excel, XML, HTML, or RSS, or read it programmatically via the Apify API.

**What if I need higher volume / parallelism?**
For very large batches, run the actor multiple times in parallel — Apify schedules and bills each run independently. Reach out via the Issues tab if you have specific scale needs.

***

### 🛡️ Legal & Ethical Scraping

This actor only accesses captions and metadata that YouTube makes public to any visitor of a video page. It does not:

- bypass age restrictions or private/unlisted-only gates,
- collect personally identifiable user data,
- scrape comments, watch history, or any signed-in surface.

You're responsible for using the output in compliance with copyright law, YouTube's Terms of Service for your jurisdiction, GDPR / CCPA, and any platform-specific licensing your downstream product requires.

***

### 🐛 Support & Roadmap

- 🐞 **Issues / feature requests** — use the **Issues** tab at the top of this page.
- 📬 **Response time** — within 1 business day.
- 🗺️ **Roadmap** — multi-language priority fallback, optional translations, SRT/VTT output, and parallel fetching.

# Actor input Schema

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

List of YouTube video URLs or 11-character video IDs (e.g. dQw4w9WgXcQ).

## `format` (type: `string`):

json = list of segments. text = single concatenated string.

## `includeTimestamps` (type: `boolean`):

Include start/duration on each segment (json) or \[Xs] prefix (text).

## `sendMetadata` (type: `boolean`):

Include video title, author, thumbnail in the output.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
  ],
  "format": "json",
  "includeTimestamps": true,
  "sendMetadata": false
}
```

# Actor output Schema

## `transcripts` (type: `string`):

All result items in the default dataset, one per input URL.

# 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("zeropointstudio/youtube-transcript").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("zeropointstudio/youtube-transcript").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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 zeropointstudio/youtube-transcript --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zeropointstudio/youtube-transcript"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Uco0e15gueGBWoJZT/builds/cRCDUisQG0KnekVha/openapi.json
