# YouTube Bulk Video Transcript (`electrabot.info/youtube-bulk-video-transcript`) Actor

Scrapes transcripts for videos on a YouTube channel.

- **URL**: https://apify.com/electrabot.info/youtube-bulk-video-transcript.md
- **Developed by:** [electra bot](https://apify.com/electrabot.info) (community)
- **Categories:** Videos, AI, Automation
- **Stats:** 1 total users, 0 monthly users, 95.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 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.

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.

- **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

## YouTube Channel Transcript Scraper

Turn a whole **YouTube channel or playlist into transcripts** in one run.
Paste a channel URL — get the full transcript of every video with timestamps,
language info, and video metadata, as JSON, CSV, or Excel. Up to **500 videos
per run**, no browser under the hood.

**Pay per result** — you're only charged for transcripts actually delivered.
Videos without captions are reported, skipped, and never charged.

***

### What can I use it for?

- **AI knowledge bases & RAG** — ingest a creator's or competitor's entire channel as clean text; the `transcript` field is one plain-text string per video, ready for embeddings.
- **Content research at scale** — analyze what a channel talks about across hundreds of videos.
- **Repurposing pipelines** — channel → transcripts → articles, newsletters, show notes.
- **Trend & brand monitoring** — track what's said about your product across a channel's history.
- **Fine-tuning datasets** — build speech/style corpora from specific creators.

***

### Input

| Field | Required | Description |
|-------|----------|-------------|
| **Channel or playlist URL** | ✅ | `@handle`, `/channel/UC…`, `/c/…`, `/user/…`, or any playlist link. Newest videos first. |
| **Max videos** | – | 1–500 (default 30). Each successful transcript = one billable result. |
| **Preferred language** | – | Language code (`en`, `de`, `pt-BR`…). Falls back to English, then the first available track. Human subtitles beat auto-captions. |
| **Proxy configuration** | – | **Automatic by default:** cheap datacenter proxy first, auto-escalating to RESIDENTIAL only if YouTube blocks it. |

### Output

One dataset record per video — same shape as our [YouTube Transcript Scraper](https://apify.com/electrabot.info/youtube-transcript-scraper), plus the source `channelUrl`:

```json
{
  "videoId": "jNQXAC9IVRw",
  "videoUrl": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
  "channelUrl": "https://www.youtube.com/@jawed",
  "title": "Me at the zoo",
  "author": "jawed",
  "lengthSeconds": 19,
  "viewCount": 398776873,
  "language": "English",
  "languageCode": "en",
  "isAutoGenerated": false,
  "availableLanguages": ["de", "en"],
  "transcript": "All right, so here we are, in front of the elephants ...",
  "segmentCount": 6,
  "segments": [
    { "start": 1.2, "duration": 2.16, "text": "All right, so here we are, in front of the elephants" }
  ]
}
```

***

### Why this scraper is reliable

- **No browser** — channel listing via flat extraction and transcripts via pure HTTP, built on engines whose maintainers track YouTube's changes daily. Fast cold starts, low cost.
- **Block-aware with automatic escalation** — if YouTube blocks the cheap proxy tier, the scraper instantly retries through a residential proxy, then a fresh session, before ever giving up.
- **Batch-safe checkpoints** — transcripts are saved incrementally; migrations, restarts, or blocks never lose finished work, and a resurrected run resumes without re-charging.
- **Honest run statuses** — captionless videos are reported per video in the `SUMMARY` (and not charged); a run with zero transcripts is marked **Failed**, never a silent empty dataset.
- **Smart language fallback** — preferred language → English → first available; manual subtitles preferred over auto-generated at every step.

### Tips & limits

- Works with public videos that have captions (manual or auto-generated). Members-only, private, or caption-less videos are skipped and reported — never charged.
- A 100-video channel takes roughly 3–5 minutes; 500 videos fit comfortably in one run.
- For hand-picked video lists instead of whole channels, use our [YouTube Transcript Scraper](https://apify.com/electrabot.info/youtube-transcript-scraper).

### Use it from code

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("electrabot.info/youtube-bulk-video-transcript").call(
    run_input={"channelUrl": "https://www.youtube.com/@mkbhd", "maxVideos": 50}
)
docs = [item["transcript"] for item in client.dataset(run["defaultDatasetId"]).iterate_items()]
```

**LangChain / LlamaIndex:** both ship Apify loaders — point them at this actor
and map `transcript` to your document text. One channel URL becomes a
ready-to-embed corpus of everything the creator has said.

**n8n / Make / Zapier:** one HTTP node —
`POST https://api.apify.com/v2/acts/electrabot.info~youtube-bulk-video-transcript/run-sync-get-dataset-items?token=...`
returns all transcripts as the response body.

### FAQ

**Does it include Shorts and live streams?**
It processes the channel's main videos tab by default. Paste a `/shorts` or `/streams` tab URL to target those instead; ended streams with processed captions work.

**Does it translate transcripts?**
No — it fetches original caption tracks. Choose which via the language preference.

**Why did some videos fail?**
Most commonly: no captions available. Every failed video is listed in the run's `SUMMARY` with the reason. Failed videos are never charged.

**Is scraping transcripts legal?**
This actor only accesses publicly available caption data. You are responsible for complying with applicable laws and YouTube's Terms of Service.

***

### Disclaimer

**This is an unofficial tool. It is not affiliated with, endorsed by, sponsored by,
or in any way officially connected to YouTube or Google LLC.** "YouTube" and all
related names, marks, and logos are trademarks of their respective owners and are
used here for descriptive purposes only.

This actor only accesses **publicly available** information. You are responsible
for ensuring your use complies with applicable laws, YouTube's Terms of Service,
and any applicable robots and rate-limiting rules. Use it ethically and at your
own risk.

# Actor input Schema

## `channelUrl` (type: `string`):

YouTube channel (@handle, /channel/UC…, /c/…, /user/…) or playlist URL. Newest videos are processed first.

## `maxVideos` (type: `integer`):

How many of the channel's newest videos to transcribe (1-500). Each successful transcript is one billable result.

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

Language code like 'en', 'de', 'es', 'pt-BR'. Falls back to English, then the first available track. Human subtitles are preferred over auto-generated.

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

Default (recommended): automatic tiering — cheap datacenter proxy first, auto-escalating to RESIDENTIAL only if YouTube blocks it. Pick explicit proxy groups to pin a tier, or disable entirely at your own risk.

## Actor input object example

```json
{
  "channelUrl": "https://www.youtube.com/@mkbhd",
  "maxVideos": 30,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One record per video: full plain-text transcript, timed segments, language info, and video metadata.

## `runSummary` (type: `string`):

Requested/scraped/failed counts and per-video failure reasons.

# 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 = {
    "channelUrl": "https://www.youtube.com/@mkbhd",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("electrabot.info/youtube-bulk-video-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 = {
    "channelUrl": "https://www.youtube.com/@mkbhd",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("electrabot.info/youtube-bulk-video-transcript").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 '{
  "channelUrl": "https://www.youtube.com/@mkbhd",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call electrabot.info/youtube-bulk-video-transcript --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/g0FJoxr03Ee4RiRTU/builds/SPzTIBQjOFz0z4xab/openapi.json
