YouTube Transcript & Subtitles Scraper - Channels, Playlists
Pricing
from $2.13 / 1,000 transcripts
YouTube Transcript & Subtitles Scraper - Channels, Playlists
Rising starExtract YouTube transcripts, subtitles and captions in bulk - paste video, channel, or playlist URLs, or search queries. Download SRT, VTT, plain text or timed segments plus video metadata. Only delivered transcripts are charged. No cookies, no API key.
Pricing
from $2.13 / 1,000 transcripts
Rating
4.0
(1)
Developer
Saulius Saulenas
Maintained by CommunityActor stats
1
Bookmarked
33
Total users
24
Monthly active users
6 days ago
Last modified
Categories
Share
YouTube Transcript & Subtitles Scraper — Videos, Channels, Playlists & Search
Extract YouTube transcripts, subtitles and captions in bulk: paste video URLs, channel URLs, playlist URLs, or plain search queries, and get transcripts with video metadata — as raw or cleaned-up text, paragraph chunks with timings, timed segments, SRT, or WebVTT subtitle files.
Built for AI/RAG pipelines, content repurposing, media monitoring, and research. No cookies, no login, no YouTube API key.
Why this scraper
- Bulk-first — channels, playlists, and search queries expand to their videos automatically. One input handles all formats, mixed freely.
- Reliable on cloud infrastructure — YouTube aggressively bot-checks datacenter IPs. This actor uses a smart proxy ladder with automatic retries; in our benchmark it extracted 200/200 transcripts from a channel in under 2 minutes.
- You only pay for delivered transcripts — videos without captions, unavailable videos, and fetch failures are never charged. Diagnostic rows tell you exactly what happened.
- 6 output formats — raw or cleaned-up text, paragraph chunks with timings for RAG, timed segments for analysis, SRT/VTT for subtitles. See Transcript formats.
- Language control — priority list (e.g.
["de", "en"]), manual-vs-auto-generated preference, strict or fallback matching. Every result shows all available caption languages.
Input
{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/jNQXAC9IVRw","https://www.youtube.com/@mkbhd","https://www.youtube.com/playlist?list=PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI","machine learning tutorial"],"languages": ["en"],"transcriptFormat": "text","maxVideosPerSource": 200}
| Field | Default | Description |
|---|---|---|
videoUrls | — | Video URLs/IDs, channel URLs (@handle or /channel/UC…), playlist URLs, or search queries |
languages | ["en"] | Preferred transcript languages, in priority order |
transcriptFormat | text | text, clean-text, segments, chunks, srt, or vtt |
chunkWords | 150 | Target paragraph size for clean-text / chunks |
preferAutoGenerated | false | Prefer auto-generated (ASR) captions over manual ones |
fallbackToAnyLanguage | true | Use the best available track if no preferred language exists |
includeFailures | true | Emit uncharged diagnostic rows for videos without transcripts |
maxVideosPerSource | 200 | Cap per channel/playlist/search |
maxResults | 100000 | Global cap per run (spend guard) |
concurrency | 10 | Parallel video fetches (1–25) |
proxyStrategy | auto | auto ladder, or force datacenter-only / residential-only |
maxUnchargedRatio | 90 | Stop early if more than this % of the first 200+ videos return no transcript. Set 100 to disable |
maxResidentialAttempts | 0 | Cap on premium-proxy escalations per run. 0 = auto (25% of queued videos, min 500) |
Early stopping
Two safeguards end a run cleanly rather than working through a list that cannot pay its way.
Neither marks the run as failed, and both are reported in the SUMMARY record:
- No transcripts available — if more than
maxUnchargedRatio% of the first 200+ videos return no transcript, the run stops and says so. This almost always means the videos have no caption tracks. Normal jobs, including ones where many videos legitimately lack captions, are unaffected. - Premium proxy budget — YouTube bot-checks are retried on a residential proxy, which is much
more expensive. Once
maxResidentialAttemptsis spent the run continues on datacenter only.
SUMMARY reports stoppedAtUnchargedLimit, premiumProxyAttempts and premiumProxyBudget
alongside the existing counters.
Output
One dataset item per video:
{"type": "transcript","videoId": "dQw4w9WgXcQ","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video)","channelName": "Rick Astley","channelId": "UCuAXFkgsw1L7xaCfnd5JJOw","lengthSeconds": 213,"viewCount": 1697651560,"language": "en","languageName": "English","isAutoGenerated": false,"transcriptFormat": "text","transcript": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪…","segmentCount": 61,"wordCount": 488,"availableLanguages": ["en", "en (auto)", "de-DE", "ja", "pt-BR", "es-419"],"sourceInput": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","scrapedAt": "2026-08-11T21:35:20.991Z"}
Videos that can't produce a transcript get a type: "failure" row (free of charge) with an
error code such as NO_CAPTIONS, NO_MATCHING_LANGUAGE, or LOGIN_REQUIRED, so your pipeline
can handle them explicitly.
Transcript formats
YouTube does not hand out prose. A caption track is a list of ~2-second display fragments, cut
mid-sentence, with sound cues ([Music], [Applause]) inline — and auto-generated (ASR) tracks
usually carry no punctuation at all. Pick the format that matches what you do next:
| Format | transcript contains | Use it for |
|---|---|---|
text | Caption fragments joined with spaces, exactly as YouTube sends them | Anything already doing its own cleanup |
clean-text | The same words, sound cues removed, split into paragraphs at pauses | Reading, summarising, prompting an LLM |
segments | [{ text, start, duration }] per caption fragment | Timing analysis, building your own subtitles |
chunks | [{ text, start, end, wordCount }] per paragraph | RAG, embeddings, timestamped citations |
srt / vtt | A ready-to-save subtitle file | Players, editors, upload back to YouTube |
clean-text and chunks share one cleanup pass: sound cues are dropped, and the words are
regrouped into paragraphs that break at any pause of 2 seconds or more in the audio, or at
chunkWords words (default 150) when the speaker never pauses. Each paragraph is capitalised and
given a closing full stop. chunks keeps the start/end timing of every paragraph, so a retrieval
hit can be linked straight back to youtube.com/watch?v=…&t=123s.
{"transcriptFormat": "chunks","transcript": [{ "text": "Hi I'm Matt I've worked at the RC now for 15 years as a patrolman today I'm going to talk you through going through a wheel change…", "start": 4.799, "end": 52.12, "wordCount": 155 },{ "text": "Off now as doing this when the vehicle's on the jack could cause the jack to dislodge…", "start": 50.12, "end": 97.759, "wordCount": 150 }],"chunkCount": 4}
What the cleanup does not do: it adds no punctuation inside a paragraph and corrects no
words. If YouTube's ASR wrote the RC for "the RAC", that is what you get — restoring punctuation
and fixing transcription errors needs a language model, which this Actor deliberately doesn't run
(it would cost far more than the transcript itself). Manual caption tracks are usually already
punctuated, and clean-text leaves that punctuation intact.
text and segments are unchanged from earlier builds — existing runs and integrations keep
their exact output.
Pricing
Pay per event — $2.50 per 1,000 transcripts ($0.0025 per transcript; from $2.13 per 1,000 with paid-plan Store discounts) plus a negligible actor-start fee ($0.00005 per GB of actor memory). Platform usage (compute, proxies, storage) is included — the event price is all you pay.
- Videos without captions cost $0 — you pay only for transcripts actually delivered.
- Set Maximum total charge on the run to hard-cap spending; the actor stops cleanly at the cap.
| Run | You pay |
|---|---|
| 100-video playlist, 92 have captions | $0.23 |
| 1,000-video channel backfill | ~$2.50 |
| 20,000-video corpus | ~$50.00 |
Use cases
- AI & RAG pipelines — turn channels into LLM-ready corpora (works great from n8n, Make, LangChain, or the Apify API).
- Content repurposing — transcripts for blogs, newsletters, and social clips.
- Media & brand monitoring — schedule runs on channels and search queries.
- Research — collect interview/lecture transcripts with timestamps for citation.
- Subtitles & captions — batch-download SRT/VTT subtitle files for re-upload, accessibility, or translation workflows.
Scheduling & API
Run it on a schedule (e.g. daily on a channel URL) from the Schedules tab, or call it from your code via the Apify API — see the API button on this page for ready-made snippets. Results stream to the dataset as they're extracted, so you can consume partial results while a large run is still going.
Works with AI agents & automation tools
This Actor is compatible with the Apify MCP server,
so AI agents (Claude, ChatGPT, LangChain, and other MCP clients) can discover and run it
autonomously. It also plugs into n8n, Make, and Zapier via the Apify integration — paste the
Actor ID sauliusautomatesit/youtube-transcript-scraper into the Apify node and wire transcripts
straight into your workflow.
Limitations
- Transcripts come from YouTube caption tracks (manual or auto-generated). Videos with captions
disabled can't be transcribed — they're reported as
NO_CAPTIONSand not charged. - Live streams in progress and age-restricted videos are generally not extractable.
- Channel expansion returns the channel's regular uploads (newest first), up to
maxVideosPerSource.
FAQ
Do I need a YouTube API key or cookies? No. The actor uses YouTube's public endpoints.
What languages are supported? Anything YouTube has captions for. Set languages to your
priority list; availableLanguages on every item shows what exists.
Can I get word-level timestamps? Segment-level timestamps (a few seconds each) via
segments, srt, or vtt, or paragraph-level ones via chunks.
The transcript is one long block with no punctuation — can you fix that? Set
transcriptFormat to clean-text or chunks. That removes sound cues and breaks the text into
paragraphs at pauses in the audio. Punctuation within a sentence comes from YouTube: manual
caption tracks have it, auto-generated ones usually don't, and this Actor doesn't run a language
model to invent it. See Transcript formats.
What happens on a video that's private/deleted? A free failure row with the error code —
never a charge.
Support & feedback
Found a problem or missing a feature? Open an issue on this Actor's Issues tab — issues are answered within 24 hours. If this Actor saves you time, a short review on the Reviews tab helps other people find it.