YouTube Transcript Scraper — Subtitles, Captions & LLM Text
Pricing
Pay per usage
YouTube Transcript Scraper — Subtitles, Captions & LLM Text
Extract YouTube transcripts, subtitles and captions without an API key. Bulk videos, playlists and channels. Output timestamped segments, LLM-ready text, readable paragraphs, SRT and VTT. Resilient multi-client engine with automatic residential fallback. Free — you only pay Apify usage.
Pricing
Pay per usage
Rating
5.0
(1)
Developer
D N
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
YouTube Transcript Scraper — Subtitles, Captions & LLM-Ready Text
Extract the transcript, subtitles and captions of any YouTube video — no API key, no browser, no sign-in. Feed it a single video, a list of thousands, a playlist or a whole channel, and get back clean timestamped segments, LLM-ready plain text, readable paragraphs, and SRT / VTT subtitle files.
Built for reliability first: a multi-client engine keeps working when YouTube shifts, and a surgical residential fallback rescues the few videos that datacenter IPs can't reach — so you get the uptime of premium tools while staying on the free datacenter path for almost everything.
What it does
This actor is a fast, resilient YouTube transcript API / subtitle extractor / caption downloader. Give it YouTube URLs (or bare video IDs, youtu.be links, Shorts, /live/, /embed/, playlist URLs, or channel URLs like /@handle, /channel/UC…, /c/name, /user/name) and it returns each video's transcript in the formats you choose. It handles manual and auto-generated (ASR) captions, lets you pick a language or translate, and pulls rich video metadata alongside the text.
Common searches this solves: youtube transcript, youtube subtitles download, youtube captions to text, youtube transcript api, bulk youtube transcript, youtube to srt, transcript for LLM / RAG / summarization.
Key features
- Resilient multi-client engine. Requests cascade across several YouTube clients (Android, iOS, mobile web, TV, web). When one surface changes, the others keep delivering — far sturdier than single-path scrapers that break on every YouTube update.
- Smart residential fallback. Most videos are fetched over the free datacenter proxy. Only the ones that trip YouTube's "confirm you're not a bot" check are retried over residential proxies, so you get near-100% success while paying the residential rate on just a handful of videos.
- Parallel processing. A configurable concurrency pool fetches many videos at once, each on its own rotating session — large playlists and channels finish quickly.
- Five output shapes. Timestamped
segments, flattext(LLM-ready), groupedparagraphs(merged into readable prose, not choppy one-second lines), plussrtandvttsubtitle files. - Rich metadata. Title, channel, channel ID, duration, view count, publish date, category, keywords, description, thumbnail, and the list of available caption languages.
- Language & translation. Ask for a specific language (with
enmatchingen-US), fall back gracefully, or translate captions to another language. - Playlist & channel expansion. Point it at a playlist or channel and it collects the videos for you, up to a cap you set.
- Never fails silently. Every input yields a record with an explicit
status(found/not_found/error) and a precise error code — no mystery empty rows.
Input
| Field | Type | Description |
|---|---|---|
videos | array (required) | Video URLs, video IDs, youtu.be links, Shorts, /live/, /embed/, playlist URLs, or channel URLs. Playlists and channels are expanded into their videos. |
language | string | Preferred caption language code (e.g. en, fr, es). Matches en-US when you ask for en. Empty = first available. Default en. |
includeAutoGenerated | boolean | Allow automatic (ASR) captions when no manual captions exist. Manual is always preferred. Default true. |
outputFormats | array | Any of segments, text, paragraphs, srt, vtt. Default ["segments", "text"]. |
translateTo | string | Translate captions to this language code using YouTube's own translation. Empty = keep original. |
includeMetadata | boolean | Attach title, channel, duration, views, keywords, description, thumbnail, etc. Default true. |
maxVideosPerChannel | integer | Cap on how many videos to take from each playlist/channel. Default 20. |
maxConcurrency | integer | How many videos to fetch in parallel. Default 5. |
proxyConfiguration | object | Proxy used to reach YouTube. Apify Proxy (datacenter) by default — free on the platform. |
autoResidentialFallback | boolean | Retry bot-checked videos over residential proxies automatically. Default true. |
Output
One dataset item per video. Example (found, with segments, text and paragraphs):
{"input": "https://youtu.be/jNQXAC9IVRw","videoId": "jNQXAC9IVRw","url": "https://www.youtube.com/watch?v=jNQXAC9IVRw","status": "found","language": "en","isAutoGenerated": false,"availableLanguages": ["en", "de"],"clientUsed": "ANDROID","video": {"title": "Me at the zoo","channel": "jawed","channelId": "UC4QobU6STFB0P71PMvOGN5A","durationSeconds": 19,"viewCount": 398413203,"isLive": false,"publishDate": "2005-04-23","category": "People & Blogs","keywords": ["me at the zoo", "jawed karim", "first youtube video"],"description": "The first video on YouTube...","thumbnail": "https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg"},"segments": [{ "start": 0.85, "dur": 3.2, "text": "All right, so here we are, in front of the elephants" }],"text": "All right, so here we are, in front of the elephants, the cool thing about these guys...","paragraphs": [{ "start": 0.85, "dur": 18.1, "text": "All right, so here we are, in front of the elephants..." }],"error": null}
Videos without captions return status: "not_found"; unavailable/blocked videos return status: "error" with a code such as NoCaptionsAvailable, VideoUnavailable, AgeRestricted, or IpBlocked.
Use cases
- Feed LLMs and RAG pipelines — turn any video or channel into clean text for summarization, Q&A, or embeddings.
- Repurpose content — pull transcripts to write articles, show notes, chapters, or social posts.
- Subtitle files — export ready-to-use SRT/VTT for editing or re-uploading.
- Research & analysis — batch-collect transcripts across a channel or topic for search and NLP.
How it works & reliability
YouTube no longer serves caption data to the plain web player without a proof-of-origin token, which is why many transcript tools broke in late 2025. This actor instead asks YouTube through its mobile-app and TV clients, whose caption URLs remain accessible, and rotates between them automatically. If an IP is challenged with a bot-check, the video is transparently retried over residential proxies. The result is high success rates without forcing residential costs on every request. When YouTube does change something, fixing it is usually a small update to the client table — and a daily healthcheck flags breakages early.
Limitations & fair use
- Only videos that actually have captions (manual or auto) can produce a transcript.
- Private, deleted, or membership-only videos can't be accessed; they're reported clearly.
- Auto-generated captions reflect YouTube's speech recognition and may contain errors.
- Please use transcripts in line with YouTube's Terms of Service and applicable copyright. You're responsible for how you use the extracted text.
Pricing
This actor is free — the developer charges nothing. You only pay for your own Apify platform usage (compute units and, when the residential fallback is triggered, a small amount of residential proxy traffic). Typical costs are a fraction of a cent per video.
More actors by this developer
Explore the rest of the collection on the author's Apify profile: https://apify.com/fit_melon
Feedback and feature requests are welcome via the Issues tab — response time is public and taken seriously.