YouTube Transcript & Subtitles Scraper - Channels, Playlists avatar

YouTube Transcript & Subtitles Scraper - Channels, Playlists

Pricing

from $2.13 / 1,000 transcripts

Go to Apify Store
YouTube Transcript & Subtitles Scraper - Channels, Playlists

YouTube Transcript & Subtitles Scraper - Channels, Playlists

Rising star

Extract 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

Saulius Saulenas

Maintained by Community

Actor stats

1

Bookmarked

33

Total users

24

Monthly active users

6 days ago

Last modified

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
}
FieldDefaultDescription
videoUrls—Video URLs/IDs, channel URLs (@handle or /channel/UC…), playlist URLs, or search queries
languages["en"]Preferred transcript languages, in priority order
transcriptFormattexttext, clean-text, segments, chunks, srt, or vtt
chunkWords150Target paragraph size for clean-text / chunks
preferAutoGeneratedfalsePrefer auto-generated (ASR) captions over manual ones
fallbackToAnyLanguagetrueUse the best available track if no preferred language exists
includeFailurestrueEmit uncharged diagnostic rows for videos without transcripts
maxVideosPerSource200Cap per channel/playlist/search
maxResults100000Global cap per run (spend guard)
concurrency10Parallel video fetches (1–25)
proxyStrategyautoauto ladder, or force datacenter-only / residential-only
maxUnchargedRatio90Stop early if more than this % of the first 200+ videos return no transcript. Set 100 to disable
maxResidentialAttempts0Cap 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 maxResidentialAttempts is 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:

Formattranscript containsUse it for
textCaption fragments joined with spaces, exactly as YouTube sends themAnything already doing its own cleanup
clean-textThe same words, sound cues removed, split into paragraphs at pausesReading, summarising, prompting an LLM
segments[{ text, start, duration }] per caption fragmentTiming analysis, building your own subtitles
chunks[{ text, start, end, wordCount }] per paragraphRAG, embeddings, timestamped citations
srt / vttA ready-to-save subtitle filePlayers, 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.
RunYou 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_CAPTIONS and 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.