YouTube Channel Transcripts Scraper - Bulk, SRT & VTT avatar

YouTube Channel Transcripts Scraper - Bulk, SRT & VTT

Pricing

from $3.50 / 1,000 transcript delivereds

Go to Apify Store
YouTube Channel Transcripts Scraper - Bulk, SRT & VTT

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

Scrapewise Data

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

8 hours ago

Last modified

Categories

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 planPer transcriptPer 1,000 transcripts
FreeUS$ 0.005US$ 5.00
BronzeUS$ 0.0045US$ 4.50
SilverUS$ 0.004US$ 4.00
Gold and aboveUS$ 0.0035US$ 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 publishedAfter or onlyNewVideos, 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/name and /user/name all 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. onlyNewVideos keeps 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_REACHED rows.
  • Empty strings returned as success. Every video gets text, or an errorCode that says why not, at no charge.

Switching from another channel transcript scraper? Your existing input works

Field you already sendHere
videoUrls, urls, startUrls, videoUrl, youtube_url, video_urls, videoIdsMerged 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, maxVideosPerChannelSame as maxVideosPerSource
start_date, end_dateOnly videos published in this range
targetLanguage, languageThe language you want, translated when a video lacks it
translate_to, transcript_type, output_formatsSame as translateTo, captionType, subtitleFormats
list_onlyCaption 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

FieldNotes
videoId, url, titleAlways present
channel, channelId, channel_url, sourceUrlsourceUrl is the channel the video came from, to group multi-channel runs
publishedAt, viewCount, lengthSecondsISO 8601 publish time, views at the moment of the run, real length
thumbnailUrl, description, categoryVideo metadata
isLiveContentTrue for past live streams, transcribed like any video
language, languageName, isAutoGenerated, availableLanguagesLanguage of the delivered caption, automatic or manual, and every caption language the video has
text, wordCount, durationSecondsFull transcript, word count, where the last caption ends
segments{text, start, duration} per caption line (on by default)
srt, vttFull subtitle files, with subtitleFormats
chunksindex, text, wordCount, startSeconds, endSeconds, deepLink, with chunkSizeWords
translatedTo, translationSource, translationErrorOnly when a translation happened or failed
error, errorCode, scrapedAtSee below

Error codes (rows not charged)

errorCodeMeaning
NO_CAPTIONSThe video has no captions at all
NO_CAPTIONS_IN_LANGUAGENo captions of the requested captionType
EMPTY_TRANSCRIPTThe caption track exists but has no text
VIDEO_UNAVAILABLE, VIDEO_UNPLAYABLEPrivate, removed or region locked
AGE_RESTRICTEDAge restricted video
LIVE_NOT_ENDEDStream still running or scheduled; the next scheduled run picks it up
BLOCKEDYouTube refused every attempt; run it again
NOT_REACHEDThe 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.

Changelog

  • 2026-10-08: finished live streams processed, running streams as free LIVE_NOT_ENDED; every YouTube URL format; targetLanguage with translation; ["auto"] language; more input field names from other actors.
  • 2026-09-27: RAG chunks with deep links and a "RAG chunks" dataset view; clean stop near the timeout.
  • 2026-09-14: lower price with Store discounts by plan.