YouTube Channel Transcripts Scraper - Every Video to Text
Pricing
from $0.55 / 1,000 transcripts
YouTube Channel Transcripts Scraper - Every Video to Text
Bulk YouTube channel and playlist transcripts for RAG and LLM datasets: one timestamped transcript per video from an @handle, channel URL or playlist, with optional SRT/VTT and RAG chunks. Pay per transcript; videos without captions never billed. API and MCP ready.
Pricing
from $0.55 / 1,000 transcripts
Rating
0.0
(0)
Developer
Khandji Omar
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
YouTube Channel & Playlist Transcripts — Bulk Transcript Scraper
Download the transcripts of every video in a YouTube channel or playlist in one run. Paste a channel handle (@name), a channel URL or a playlist URL and get one clean, timestamped transcript per video — ready for research, search indexes, LLM fine-tuning or RAG.
What does this YouTube channel transcript scraper do?
Give it channels or playlists. It lists their videos (newest first, up to maxVideos) and for every video returns:
- the full transcript as one clean string, ready for an LLM, a search index or a spreadsheet;
- timestamped segments (
start,duration,text) for subtitles, players or chunked RAG; - the language, whether captions are human-written or auto-generated, and every other caption language available;
- the video title, channel, duration, word count and segment count.
Watch links, youtu.be short links, Shorts, embeds and bare 11-character IDs all work, mixed in one list.
Why use it
- Whole channels, not one video at a time — the Actor lists the videos for you.
- Reads YouTube's own captions — no speech-to-text guesswork, no API key, no login.
- Human captions first — auto-generated captions only when no human track exists.
- You only pay for delivered transcripts — videos without captions are free.
How to get YouTube transcripts in 3 steps
- Click Try for free and paste channel handles or playlist URLs in Channels and playlists.
- Optional: set a Preferred language (
en,fr,es,de, …). Leave it empty for English, then the video's default. - Click Start. Download the results as JSON, CSV, Excel, HTML or XML, or read them from the API.
Input
| Field | Type | What it does |
|---|---|---|
sources | array | Channel handles (@name), channel URLs or playlist URLs |
maxVideos | integer | Maximum videos per run across all sources (default 50) |
language | string | Preferred two-letter caption language |
includeSegments | boolean | Timestamped segments on (default) or plain text only |
translateTo | string | Experimental YouTube machine translation (fr, es…); often refused by YouTube, original language returned then |
outputFormats | array | srt, vtt, chunks (RAG-ready ~250-word pieces with start/end seconds) |
proxyConfiguration | object | Apify Proxy by default; YouTube blocks datacenter IPs |
maxTotalChargeUsd | number | Hard spending cap for the run |
{"sources": ["@3blue1brown","https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi"],"maxVideos": 50,"language": "en"}
Output
One dataset item per video:
[{"video_id": "dQw4w9WgXcQ","video_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video)","channel": "Rick Astley","language": "en","is_generated": false,"available_languages": ["en","de","es","fr","ja","pt"],"duration_seconds": 211.3,"segment_count": 61,"word_count": 374,"text": "We're no strangers to love. You know the rules and so do I ...","segments": [{"text": "We're no strangers to love","start": 18.64,"duration": 3.24},{"text": "You know the rules and so do I","start": 22.64,"duration": 4.32}],"source": "youtube"}]
| Field | Description |
|---|---|
video_id, video_url | The video, normalised to a watch URL |
title, channel | Video title and channel name |
language, is_generated | Caption language and whether YouTube auto-generated it |
available_languages | Every caption language the video offers |
text | The full transcript as one string |
segments | [{text, start, duration}], in seconds |
duration_seconds, segment_count, word_count | Size of the transcript |
A run also writes RUN_SUMMARY.json to its key-value store: videos requested, delivered, charged, and one line per failed video with the reason.
How much does it cost?
$0.005 per transcript — you pay only for videos that actually come back with a transcript.
| Videos | Cost |
|---|---|
| 100 | $0.50 |
| 1,000 | $5.00 |
| 10,000 | $50.00 |
- Failed videos are never charged: captions disabled, private, deleted or invalid links cost $0.
- You set the ceiling:
maxTotalChargeUsd(default $1) stops the run before it spends more. - Apify's free plan includes monthly platform credit, enough for hundreds of transcripts.
- One transcript in every run of 2+ videos is free, so you can check the output on your own videos.
For comparison, the most-used transcript Actors on the Store charge $0.005–$0.01 per video.
Use cases
- Build a knowledge base from an expert's whole channel and chat with it through RAG.
- Content research — search everything a competitor or creator has said.
- Training and evaluation data for language models.
- Repurpose content — turn a back catalogue into blog posts, newsletters or clips.
- Education — full-text search across a course playlist.
Use it from code (API)
Every Apify Actor is an API. Start a run and read the results with one call.
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("om_kh/youtube-channel-transcripts").call(run_input={"sources": ["@3blue1brown", "https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi"], "maxVideos": 50, "language": "en"})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item)
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('om_kh/youtube-channel-transcripts').call({"sources": ["@3blue1brown","https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi"],"maxVideos": 50,"language": "en"});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
One HTTP call (cURL) — runs the Actor and returns the dataset in the same response:
curl -X POST "https://api.apify.com/v2/acts/om_kh~youtube-channel-transcripts/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"sources": ["@3blue1brown", "https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi"], "maxVideos": 50, "language": "en"}'
Integrations: n8n, Make, Zapier, Google Sheets
- n8n — the official Apify node, operation Run Actor and get dataset, Actor
om_kh/youtube-channel-transcripts. - Make — Apify › Run an Actor, then Apify › Get Dataset Items.
- Zapier — Apify › Run Actor; map the dataset items into your next step.
- Google Sheets, webhooks, Slack — add an integration from the Integrations tab of this Actor.
- Schedules — run it every hour or day from Schedules in Apify Console.
Use it from an AI agent (MCP and x402)
Connect Claude Desktop, Cursor, VS Code or any MCP client to Apify's MCP server
at https://mcp.apify.com and add this Actor, om_kh/youtube-channel-transcripts, as a tool — the
agent passes the same JSON as the run input and gets the dataset back.
AI agents that pay with x402 can run it too, without an Apify account: the Actor charges only per result delivered, so an agent pays exactly for what it gets.
Tips and limits
- No captions, no transcript. This Actor reads YouTube's own captions. A video with captions turned off returns a
NO_TRANSCRIPTerror for that video, is not charged, and the rest of the run continues. - Pick the language you want. If your language is missing, check
available_languagesin the output and run again with one of them. - Big channels: raise
maxVideos; for a hand-picked list of single videos use YouTube Transcript Scraper - Full Text, Timestamps, Language. - Speed: videos are fetched 8 at a time; a typical video takes 1–3 seconds.
FAQ
Can I get SRT or VTT subtitle files?
Yes. Set outputFormats to ["srt"], ["vtt"] or both: each result then carries a ready-to-save srt / vtt string built from the timestamped captions. No extra charge.
Is the output ready for RAG and LLMs?
Yes. outputFormats: ["chunks"] adds chunks: consecutive captions merged into ~250-word pieces, each with start and end seconds, so you can embed them and cite the exact moment in the video.
Can I translate a transcript?
There is an experimental translateTo option that asks YouTube for its own machine translation. YouTube often refuses automated translation requests; when it does you still get the original transcript and a translation_note (and pay only the normal price). For reliable translation, send the text or chunks to your own translation model.
Is it legal to scrape YouTube transcripts? This Actor only reads captions that YouTube shows publicly to any visitor. It does not log in and collects no personal data beyond the public channel name. You are responsible for how you use the text; check YouTube's terms and your local law, and consult a lawyer if unsure.
Does it need a YouTube API key or cookies? No. There is no key, no login and nothing that expires.
Can it transcribe videos that have no captions? No — it returns YouTube's existing captions (human or auto-generated), it does not run speech-to-text. Almost all spoken-word videos have auto-generated captions.
Which languages are supported?
Every language YouTube offers captions in. Set language, or leave it empty for English first.
Can I get timestamps?
Yes, includeSegments (on by default) returns every caption line with start and duration in seconds.
Am I charged for videos that fail? Never. Only transcripts that are actually delivered are charged.
Can I export to CSV or Excel?
Yes, from the Storage tab of any run, or with ?format=csv on the dataset API.
Can my AI agent call it? Yes, via MCP (see above) or the plain HTTP API.
Related Actors
- YouTube Transcript Scraper - Full Text, Timestamps, Language
- Video Transcript API - YouTube to Text, Timestamps, JSON
- YouTube Channel Videos Scraper - Exact Views, $0.50/1K
- YouTube Comments Scraper - Likes, Replies, Date, $0.40/1K
- Google News API - Headlines, Source, Date, No Login
Support
Found a bug or need a feature? Open an issue in the Issues tab of this Actor — every report gets an answer, usually within a day.