YouTube Channel Transcript Scraper: Bulk Subtitles
Pricing
from $3.50 / 1,000 transcripts
YouTube Channel Transcript Scraper: Bulk Subtitles
Turn whole YouTube channels or playlists into text: subtitles for hundreds of videos per run, no API key or browser. Each video returns plain text, timed segments, language, title, channel, views, likes and publish date; auto-translation optional. JSON/CSV, API or scheduled runs.
Pricing
from $3.50 / 1,000 transcripts
Rating
0.0
(0)
Developer
Kyungmin Lee
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
29 minutes ago
Last modified
Categories
Share
What does YouTube Transcript Scraper do?
YouTube Transcript Scraper turns videos, whole channels or playlists into text in bulk: paste @handles, channel or playlist URLs and get the subtitles of hundreds of videos in one run, with no YouTube account, API key or browser. Pick preferred languages, prefer human captions over auto-generated ones, or let YouTube auto-translate.
Each video is one record with videoId, url, title, channel, durationSeconds, viewCount, likeCount, publishDate, language, isAutoGenerated, availableLanguages, text (clean plain text), segments (start, duration, text) and wordCount. Export JSON/CSV, feed the API into RAG or summarisation pipelines, or schedule the Actor to transcribe new uploads as they appear.
Known limitation: datacenter IPs and YouTube bot checks
YouTube increasingly answers "Sign in to confirm you're not a bot" when a recent video is requested from a datacenter IP address — and that includes Apify Proxy's datacenter pool. Older, well-known videos usually still work, but a bulk run over a channel's latest uploads can fail on every video. What this Actor does about it:
- Failed videos are never charged. A bot-checked, caption-less or unavailable video produces an
erroritem and costs nothing — including the per-video listing fee for channels and playlists, which is settled only after that video's transcript succeeded. - Bring your own residential proxies. Under Proxy configuration → Custom proxies paste one or more residential proxy URLs (
http://user:pass@host:port). They take precedence over Apify Proxy and are rotated between requests. This is the recommended setup for channel-wide runs. - Failure reasons are summarised at the end of the log and in the
SUMMARYrecord of the key-value store (botCheck,noCaptions,unavailable,other), so you can tell an IP block from a video that simply has no subtitles. - If YouTube blocks five videos in a row, the run stops early instead of burning through your budget.
Why use YouTube Transcript Scraper?
- Feed AI and RAG pipelines: turn hours of video into text for summarization, Q&A, embeddings or fine-tuning.
- Content repurposing: draft blog posts, newsletters, show notes and social snippets from your videos.
- Research and monitoring: search what competitors, creators or news channels actually say; track mentions of products or topics.
- Accessibility and localization: get subtitles in the language you need, translated by YouTube on the fly.
- Bulk workflows: transcribe the latest 200 videos of a channel with one input.
How to get YouTube transcripts
- Paste video URLs (watch, youtu.be, Shorts, embed) or IDs — or channel handles/URLs and playlist URLs for bulk extraction.
- Set Preferred languages (default
en). Turn on Translate to if you want another language. - Click Start. Each video becomes one dataset item with
textandsegments. - Download as JSON, CSV, Excel or fetch via API; connect to Sheets, Make or your own code.
Input
| Field | Default | Description |
|---|---|---|
videoUrls | ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"] | Video URLs or IDs |
channelUrls | – | @handle, channel URL or UC… ID; newest videos first |
channelSource | uploads | uploads (all), videos, shorts, streams |
maxVideosPerChannel | 20 | Newest N videos per channel |
playlistUrls | – | Public playlists |
maxVideosPerPlaylist | 50 | First N videos of each playlist |
languages | ["en"] | Preferred language codes, prefix matching (en → en-GB) |
preferManual | true | Human subtitles before auto-generated |
fallbackToAnyLanguage | true | Use the best available track if preferred languages are missing |
translateTo | – | Target language for YouTube auto-translation |
includeMetadata | true | Views, likes, publish date (one extra request per video) |
includeSegments | true | Timed segments in addition to plain text |
proxyConfiguration | Apify Proxy on | Keep on. For recent videos, add your own residential proxies under Custom proxies — see Known limitation above |
Example — transcribe a channel's latest 50 videos in English or Korean:
{"channelUrls": ["@mkbhd"],"maxVideosPerChannel": 50,"languages": ["en", "ko"],"includeSegments": false}
Output
One 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)","channel": "Rick Astley","channelId": "UCuAXFkgsw1L7xaCfnd5JJOw","durationSeconds": 213,"viewCount": 1800000000,"likeCount": 19400000,"publishDate": "2009-10-24","language": "en","languageName": "English","isAutoGenerated": false,"availableLanguages": [{ "code": "en", "name": "English", "kind": "manual", "isTranslatable": true }, { "code": "en", "name": "English (auto-generated)", "kind": "auto", "isTranslatable": true }],"segmentCount": 61,"wordCount": 380,"text": "We're no strangers to love. You know the rules and so do I...","segments": [{ "start": 18.6, "duration": 3.2, "text": "We're no strangers to love" }]}
Videos without captions or that are unavailable are reported as {"type": "error", "videoId": ..., "error": "NoCaptionsAvailable"} items and are not charged.
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Data fields
| Field | Description |
|---|---|
videoId, url, title, channel, channelId | Video identity |
durationSeconds, viewCount, likeCount, publishDate, thumbnailUrl, description, keywords, isShort, isLive | Metadata |
language, languageName, isAutoGenerated, translatedTo | Which subtitle track was used |
availableLanguages | All subtitle tracks YouTube offers for the video |
text, wordCount | Plain transcript |
segments, segmentCount | {start, duration, text} in seconds |
sourceChannel, sourcePlaylist | Present for videos found through a channel/playlist |
How much does it cost to get YouTube transcripts?
Pricing is pay per event: one small fee per transcript fetched and a smaller fee per video listed from a channel or playlist. The listing fee is only charged for videos whose transcript was actually delivered, so failed videos (bot check, no captions, private, unavailable) cost nothing at all. A typical video takes 1–3 seconds, so transcribing 100 videos finishes in a few minutes.
Tips
- For big channels set
includeSegments: falseandincludeMetadata: falseto get compact, fast output. languages: ["en"]matchesen,en-USanden-GB. Put several codes in order of preference.- Auto-translation (
translateTo) is rate-limited by YouTube; the Actor rotates proxies and backs off automatically, but very large translated runs may need to be split. - Schedule the Actor with a channel URL and
maxVideosPerChannel: 5to transcribe every new upload automatically.
FAQ and disclaimers
Does it transcribe audio? No. It returns the subtitles YouTube already has (manual or auto-generated). Videos without any captions return an error item.
Why did a video fail with BotCheckRequired? YouTube occasionally challenges datacenter IPs. The Actor retries through a fresh proxy; if it persists, rerun later.
Is it legal? The Actor collects publicly available subtitle data that YouTube serves to any viewer. You are responsible for how you use it and for complying with YouTube's terms and applicable copyright law. This is an unofficial tool, not affiliated with YouTube or Google.
Something broke? YouTube changes its internals regularly. Open an issue in the Issues tab with the video URL and it will be fixed quickly. Custom features (keyword search inside transcripts, chaptering, summaries) are available on request.