YouTube Channel Transcripts Scraper - Bulk, SRT & VTT
Pricing
from $3.50 / 1,000 transcript delivereds
YouTube Channel Transcripts Scraper - Bulk, SRT & VTT
Get the transcripts of every video on a YouTube channel by channel URL or @handle, as text, timestamps, SRT or VTT, with publish date, views and length. Limit videos per channel, filter by date, translate, RAG chunks, schedule with only-new-videos mode. Videos without captions are free.
Pricing
from $3.50 / 1,000 transcript delivereds
Rating
0.0
(0)
Developer
Scrapewise Data
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
3
Monthly active users
8 hours ago
Last modified
Share
YouTube Channel Transcripts
YouTube Channel Transcripts takes a channel URL or handle and returns the transcript of every video as clean text, timestamped segments, SRT or VTT, with each video's title, publish date, view count and length. Schedule it with onlyNewVideos and each run brings only the new uploads. It is used to build RAG indexes and knowledge bases from a creator's channel, to research a niche across channels, and to turn podcast or tutorial libraries into searchable text.
YouTube channel transcripts pricing at a glance
| Apify plan | Per transcript | Per 1,000 transcripts |
|---|---|---|
| Free | US$ 0.005 | US$ 5.00 |
| Bronze | US$ 0.0045 | US$ 4.50 |
| Silver | US$ 0.004 | US$ 4.00 |
| Gold and above | US$ 0.0035 | US$ 3.50 |
- One charge per video whose transcript is delivered, the same for a 3 minute clip and a 3 hour interview. The 10 newest videos of a channel cost US$ 0.05.
- Free: listing the channel, videos without captions, unavailable or blocked videos, videos skipped by
publishedAfteroronlyNewVideos, duplicates. - Several channels per run, date filter, finished live streams and Shorts, translation into the language you ask for. Proxy and compute are included; no YouTube API key needed.
- Actor start, from October 29, 2026: US$ 0.00005 per run (US$ 0.05 per 1,000 runs).
YouTube channel transcripts quick start
{ "channelUrls": ["https://www.youtube.com/@veritasium"] }
Two channels, only videos since June, with SRT files:
{"channelUrls": ["@lexfridman", "https://www.youtube.com/channel/UCsBjURrPoezykLs9EqgamOA"],"maxVideosPerSource": 15,"publishedAfter": "2026-06-01","subtitleFormats": ["srt"],"maxItems": 50}
That run on 2026-09-13 returned 19 transcripts, 179,390 words, in 36 seconds. One real row from 2026-09-15, text and lists shortened (the full row had 1,105 segments):
{"videoId": "GK2pZ_oVU1o","url": "https://www.youtube.com/watch?v=GK2pZ_oVU1o","title": "The Scariest Chart in Electrical Engineering","channel": "Veritasium","channelId": "UCHnyfMqiRRG1u-2MsSQLbXA","publishedAt": "2026-07-14T18:03:28+00:00","viewCount": 5670813,"lengthSeconds": 2384,"category": "Education","isLiveContent": false,"language": "en","isAutoGenerated": false,"text": "- This is the scariest chart in electrical engineering. - Puts the fear of God into all undergraduate students. ...","wordCount": 7751,"segments": [{ "text": "- This is the scariest chart\nin electrical engineering.", "start": 0.18, "duration": 3.1 }],"errorCode": null,"sourceUrl": "https://www.youtube.com/@veritasium","scrapedAt": "2026-09-15T19:31:15.483257+00:00"}
What it fixes
- Channels in every address format.
https://www.youtube.com/@veritasium,@lexfridman, a bare handle,/channel/UC...,/c/nameand/user/nameall work; playlist, search and single video URLs are accepted in the same field, so a mixed list is never rejected. - Re-paying for videos you already have.
onlyNewVideoskeeps delivered ids per channel in your own account, so a daily schedule pays only for new uploads. - Runs that end as TIMED-OUT on big channels. 45 seconds before the timeout the Actor stops starting new videos, keeps everything delivered and returns the rest as free
NOT_REACHEDrows. - Empty strings returned as success. Every video gets
text, or anerrorCodethat says why not, at no charge.
Switching from another channel transcript scraper? Your existing input works
| Field you already send | Here |
|---|---|
videoUrls, urls, startUrls, videoUrl, youtube_url, video_urls, videoIds | Merged into channelUrls (channels, playlists, searches and single videos) |
channel_url, channelUrl, channels, channel | @handle, bare handle, UC... id or URL; "channel_transcripts": false returns only the video list with caption tracks, free |
max_videos, maxVideos, maxVideosPerChannel | Same as maxVideosPerSource |
start_date, end_date | Only videos published in this range |
targetLanguage, language | The language you want, translated when a video lacks it |
translate_to, transcript_type, output_formats | Same as translateTo, captionType, subtitleFormats |
list_only | Caption tracks of each video without downloading them; free |
{ "channel_url": "https://www.youtube.com/@veritasium", "max_videos": 5, "language": "en" }
YouTube transcripts as RAG chunks
Set chunkSizeWords to 300 and every video gets a chunks array ready for embeddings: pieces of about 300 words cut only between caption lines, with chunkOverlapWords (default 50) of overlap, startSeconds, endSeconds and a deepLink that opens the video at that second. The RAG chunks dataset view has one row per chunk, so its CSV or JSON export goes straight into a vector store. Keep videoId and publishedAt as metadata. Chunks follow the translated text when a translation happens. Same price.
Only new videos from a YouTube channel
With onlyNewVideos on, delivered ids are kept in the key-value store youtube-channel-transcripts-only-new-videos in your account, one record per channel, and each run takes up to maxVideosPerSource videos you have not received yet, newest first. On 2026-09-13 two runs of the same input with 8 videos per channel delivered 8 videos each, with no overlap. On a channel you have never run, the first runs fill in the back catalogue; to get only uploads from now on, set publishedAfter to today on the first run. Videos that had no captions are tried again next time, free. Delete the record to start over.
Video guides from Apify: how to schedule an Actor and how to connect it to other apps.
YouTube transcript output fields
| Field | Notes |
|---|---|
videoId, url, title | Always present |
channel, channelId, channel_url, sourceUrl | sourceUrl is the channel the video came from, to group multi-channel runs |
publishedAt, viewCount, lengthSeconds | ISO 8601 publish time, views at the moment of the run, real length |
thumbnailUrl, description, category | Video metadata |
isLiveContent | True for past live streams, transcribed like any video |
language, languageName, isAutoGenerated, availableLanguages | Language of the delivered caption, automatic or manual, and every caption language the video has |
text, wordCount, durationSeconds | Full transcript, word count, where the last caption ends |
segments | {text, start, duration} per caption line (on by default) |
srt, vtt | Full subtitle files, with subtitleFormats |
chunks | index, text, wordCount, startSeconds, endSeconds, deepLink, with chunkSizeWords |
translatedTo, translationSource, translationError | Only when a translation happened or failed |
error, errorCode, scrapedAt | See below |
Error codes (rows not charged)
errorCode | Meaning |
|---|---|
NO_CAPTIONS | The video has no captions at all |
NO_CAPTIONS_IN_LANGUAGE | No captions of the requested captionType |
EMPTY_TRANSCRIPT | The caption track exists but has no text |
VIDEO_UNAVAILABLE, VIDEO_UNPLAYABLE | Private, removed or region locked |
AGE_RESTRICTED | Age restricted video |
LIVE_NOT_ENDED | Stream still running or scheduled; the next scheduled run picks it up |
BLOCKED | YouTube refused every attempt; run it again |
NOT_REACHED | The run was close to its timeout and stopped cleanly |
The run itself fails only when nothing was delivered because YouTube blocked the requests, or when no channel could be listed.
YouTube channel transcripts FAQ
How many videos can I get from one channel?
maxVideosPerSource goes up to 5,000 and maxItems up to 10,000; the smaller one wins, so set both. The default run (10 videos, 55,429 words) took 12 seconds.
Does it transcribe the audio? No. It reads the captions YouTube already has, manual or automatic. Most videos in major languages have automatic captions; music and some short clips do not.
Can I get transcripts in a specific language?
Set targetLanguage (for example es): videos with Spanish captions give them, the others are translated and carry translatedTo. ["auto"] in languages keeps each video in its spoken language.
Why not the official YouTube API? The YouTube Data API lists a channel's videos, but downloading caption tracks through it needs OAuth with permission to edit the video, so in practice only the owner can do it, and every call counts against a daily quota. This Actor needs no API key and returns the full transcript of public videos of any channel, with SRT, VTT and RAG chunks.
Why do rows arrive out of order?
Videos are processed in parallel. Sort by publishedAt for a channel timeline.
Can I call it from the API, n8n, Make, Zapier or an AI agent?
Yes: scrapewise/youtube-channel-transcripts through the Apify API or clients, the Apify app in those tools, or the MCP server at https://mcp.apify.com/?tools=scrapewise/youtube-channel-transcripts.
curl -X POST "https://api.apify.com/v2/acts/scrapewise~youtube-channel-transcripts/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" -d '{"channelUrls": ["@veritasium"], "maxVideosPerSource": 5}'
Is it legal? The Actor reads public caption tracks of public videos without login. You are responsible for how you use and republish the text.
YouTube channel transcripts limitations
- Only videos that already have captions can be transcribed; there is no speech to text.
- Members-only and unlisted videos are skipped; Shorts are listed only with
includeShorts. - Translation is machine translation (YouTube, then Google Translate).
- Age restricted videos and streams still running cannot be transcribed.
- YouTube blocks most datacenter IPs, so residential proxy is the fallback; keep it on.
- Something broke or a field is missing? Open an issue on the Issues tab.
Related scrapers
- YouTube Transcript Scraper: captions, SRT and AI transcription for single videos.
- Audio & Video Transcriber: speech to text for any video, audio file or podcast RSS.
- YouTube Comments Scraper: YouTube comments, replies and likes.
- TikTok Transcript Scraper: TikTok captions with views and likes.
- Instagram Reels Transcript Scraper: reel and video to text.
Changelog
- 2026-10-08: finished live streams processed, running streams as free
LIVE_NOT_ENDED; every YouTube URL format;targetLanguagewith translation;["auto"]language; more input field names from other actors. - 2026-09-27: RAG
chunkswith deep links and a "RAG chunks" dataset view; clean stop near the timeout. - 2026-09-14: lower price with Store discounts by plan.