← All guides

Bulk YouTube transcript downloader: what to use, and what the limits really are

Written by the VidWords Team · · Updated · Report a correction

Downloading one transcript is a solved problem. Downloading four hundred is a different job, and it is where most tools quietly fall over. This page is about what changes at volume — with the actual numbers, not marketing ones.

The 30-second version

What "bulk" actually has to get right

Any tool can loop. The things that separate a usable bulk downloader from a frustrating one only show up once the list is long enough that you cannot watch it:

If you are evaluating any bulk tool — this one included — those six are the checklist. Run a deliberately messy list of ten videos with a duplicate, a private video and one with captions disabled, and see what comes back.

The four ways to give it a list

Playlist

Paste the playlist URL or its id. The playlist's own order is preserved where YouTube provides it, which matters for anything sequential — a course, a conference track, a serialised series.

Channel

Paste an @handle or a channel URL and it resolves the channel's videos. This is the route for podcast archives, conference channels and creator back-catalogues. The dedicated walkthrough for this, with the channel-vs-playlist decision spelled out, is bulk transcripts for a whole channel or playlist.

A pasted list of links

One URL or video id per line. This is the route for a hand-assembled set — the 40 videos you actually care about rather than everything a channel ever published. Duplicates are removed before anything is charged.

CSV upload

Upload a CSV and every YouTube URL or video id found in any column is picked up. This is the one that saves the most time in practice, because your list usually already exists in a spreadsheet with other columns you want to keep — search exports, editorial calendars, a coding frame from a research project. You do not have to reshape it first.

The limits, stated plainly

A note on that 500: it is the number of videos that can be resolved in one request, not a monthly ceiling. Extraction is metered separately in credits, so resolving a 500-video channel is free and tells you exactly what the batch would cost before you decide.

What you actually get back

Three combined downloads, each shaped for a different destination:

Choose by destination, not by preference. A CSV of segments is unpleasant to read and ideal to analyse; the combined TXT is the reverse. If you need subtitle files — .srt or .vtt — those are single-video exports rather than batch ones; see downloading subtitles as SRT or VTT.

Doing it yourself, honestly assessed

The DIY route is yt-dlp or the youtube-transcript-api Python library in a loop. For a one-off pull of a few dozen videos from your own machine, that is a genuinely good answer and it is free. Use it.

What changes at volume is not the code — the loop is ten lines — it is everything around it:

The honest split: self-host for a one-off pull from your own machine; use a hosted tool when the job repeats, runs on a server, or someone is waiting for it.

Bulk over the API

If the batch is part of a pipeline rather than something you do in a browser, the same work is one POST. Send video ids — up to 50 per call — and get structured transcripts back:

import requests

resp = requests.post(
    "https://vidwords.com/api/transcripts",
    headers={"Authorization": f"Basic {API_TOKEN}"},
    json={"ids": ["dQw4w9WgXcQ", "9bZkp7q19f0"], "lang": "en"},
    timeout=60,
)
resp.raise_for_status()

for video in resp.json()["results"]:
    if "error" in video:
        print(video["id"], "->", video["error"])   # per video, not per batch
        continue
    print(video["title"], video["language"], len(video["segments"]), "segments")

Batching is for latency, not for price: 50 videos in one request costs the same as 50 single requests. Resolving a channel to its video ids has its own endpoint, available on Starter and above. Everything is documented in the API reference, and ready-made no-code pipelines are in the n8n and Make templates.

What people build with a batch

Before you run a big batch

  1. Resolve first, extract second. Look at the list. Channel handles resolve to more than people expect, and the count is right there before you spend.
  2. Test with five videos. Check the export shape is what your next tool wants before you buy 400 of them.
  3. Set the language deliberately. A mixed-language corpus assembled by accident is painful to fix afterwards.
  4. Keep the failures. The list of what did not work is part of your dataset, not noise — especially for research, where an unexplained gap is a methodological problem.

FAQ

Can I download transcripts for a whole channel without signing in?

You can resolve and preview a channel's videos signed out, but extraction draws on a monthly allowance — 3 a month with no account, 25 with a free one — so any real batch needs an account.

What happens to videos with no captions?

They come back marked as failed with a reason, they stay visible in the results, and they cost nothing. What to do about them is covered in why a transcript can be missing.

Does it work on private or members-only videos?

No. Only public videos with an accessible caption track. Private, deleted, age-restricted and region-blocked videos return a specific error rather than a transcript.

Is there a limit on how long each video can be?

Price does not scale with length: a three-hour video costs the same single credit as a three-minute one. There is an upper bound on transcript size rather than duration — an extremely long caption track, of the kind produced by a multi-hour livestream, is refused with a transcript_too_large error rather than processed.

Open the bulk extractor →