YouTube Channel Transcript Scraper - Whole Channel, One Input
Pricing
$8.00 / 1,000 transcripts
YouTube Channel Transcript Scraper - Whole Channel, One Input
Give it a YouTube channel handle and get transcripts for its recent videos - no need to collect video IDs first. Every row says which language you got and whether the captions were human-written or auto-generated, and videos with no captions come back with the reason instead of a blank row.
Pricing
$8.00 / 1,000 transcripts
Rating
0.0
(0)
Developer
NeverEmpty
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
5 hours ago
Last modified
Categories
Share
YouTube Channel Transcript Scraper
Give it a channel. Get transcripts for that channel's recent videos.
Most transcript scrapers want a list of video IDs, which means you need a second tool — or a scrape of your own — before you can start. This one takes @veritasium, a channel URL, or a UC... channel ID, finds the videos itself, and returns one row per video.
What you get
One row per video:
| Field | |
|---|---|
channelInput / channelId / channelTitle | which channel this row came from |
videoId / url / title / publishedAt | the video |
text | the full transcript as one string |
segments | per-line text with start and duration (switch off with includeTimestamps: false) |
language | the language you actually received |
isAutoGenerated | true if these are machine-generated captions |
availableLanguages | every caption language the video offers |
segmentCount | number of caption lines |
ok | false on rows that could not be transcribed, with reason |
Read isAutoGenerated before you trust the text
I measured the 15 most recent videos from each of 12 channels — 180 videos — on 2026-08-29.
| Returned a caption track | 163 (90.6%) |
| ...of which the track was auto-generated | 124 (76.1%) |
| Human captions available | 43 (23.9%) |
| No caption track at all | 15 (8.3%) |
| Video not playable | 2 (1.1%) |
Whether a channel has human-written captions is close to binary. Six of the twelve channels had none at all across their last 15 uploads, while Marques Brownlee (12) and NASA (11) between them account for over half of the 43.
Machine captions and human captions arrive through the same field, with the same success status. isAutoGenerated is the only thing that tells them apart, so it is on every row — along with language and availableLanguages, so you can see what you actually received rather than assuming you got what you asked for.
What it does not do
- It cannot reach a channel's back catalogue. YouTube's public channel feed returns at most 15 videos, so 15 per channel is the ceiling. Ask for more and it will tell you in the log rather than quietly returning 15.
- It does not translate. If a video only offers Bulgarian captions, you get Bulgarian, labelled as Bulgarian. Machine-translating a machine transcription without saying so is how a pipeline ends up confidently wrong.
- It does not return blank rows. A private video, a members-only video, one with no captions, or one that was blocked comes back with
ok: falseand areasonin plain English.
Billing
You are charged per transcript that actually contains text. Rows that explain a failure are free. If you set a maximum total charge on the run and it is reached, the run stops and says so in the log and in the run status, rather than silently returning a partial result that looks complete.
Input
{"channels": ["@veritasium", "https://www.youtube.com/@mkbhd", "UCHnyfMqiRRG1u-2MsSQLbXA"],"maxVideosPerChannel": 15,"languages": ["en"],"includeTimestamps": true,"proxyMode": "auto","maxRetries": 3}
| Input | |
|---|---|
channels | Handles (@name), channel URLs, or UC... channel IDs. Required. |
maxVideosPerChannel | 1–15. YouTube's public feed caps at 15 per channel. |
languages | Preferred language codes in order. Human captions win over auto-generated ones. |
includeTimestamps | Include per-line segments with start and duration. |
proxyMode | auto tries datacenter proxies first, because their traffic is free, and falls back to residential only when YouTube blocks. Set residential directly if you run at volume. |
maxRetries | Attempts per video on a different IP before writing a row that says why it failed. |