Bulk YouTube transcripts: whole channels and playlists
Researching a creator, turning a course into notes, training a chatbot on a back catalogue, or auditing competitors — here's how to turn an entire channel or playlist into text.
The 30-second version
- Open Bulk extract and pick the Channel or Playlist tab.
- Paste an
@handle, a channel URL, aUC…id, or any link containinglist=…, then hit Find videos — listing is free and covers up to 500 videos. - Hit Extract all. Progress runs three videos at a time, and per-video failures are itemised instead of sinking the batch — they are never charged.
- Download the whole run as one
.txt,.json, or.csvfile. - Automating it?
POST /api/channels(Starter and up) turns a handle into video ids; feed those toPOST /api/transcriptsin batches of 50.
Channel or playlist — which do you want?
Both run through the same bulk extractor and cost the same, so the only question is how the videos are grouped:
- A channel gives you a creator's most recent uploads — the right choice for competitor research, or for building a knowledge base from everything one person has published.
- A playlist gives you a curated, ordered set — the right choice for a lecture course, a conference track, or a podcast archive, where sequence matters and you don't want the creator's unrelated uploads.
A video that belongs to a playlist can be reached either way; pasting a URL that contains list=… resolves the playlist rather than the single video.
Extracting a channel in the browser
- Open Bulk extract and pick the Channel tab.
- Paste the channel's
@handle(e.g.@mkbhd), its URL, or aUC…channel ID — VidWords resolves the channel ID for you. - Hit Find videos. The latest videos (up to 500) are listed for free — finding videos never costs credits.
- Click Extract all. Progress runs three videos at a time; failures (e.g. caption-less videos) are listed per video and never charged.
- Download everything as one combined
.txt,.json, or.csv.
Extracting a playlist in the browser
- Copy the playlist link — anything containing
list=…works, including a video URL that is part of a playlist. - Open Bulk extract → Playlist tab → paste → Find videos (free).
- Review the resolved list — title, channel, and count, with a note showing exactly how many credits extraction will use.
- Hit Extract all, then download the combined file.
What the combined download looks like
| Format | Structure | Best for |
|---|---|---|
.txt | Each video separated by a heading with its title and link | Reading end to end, or pasting into an LLM |
.json | Per-video segments with timings and metadata | Scripts, pipelines, and RAG indexes |
.csv | One row per caption line with video id, start, and duration | Spreadsheets and timestamp filtering |
What people build with this
- Course notes — turn a 40-lecture playlist into one document you can search across.
- Podcast quote mining — search every episode for a phrase, then jump to the exact timestamp.
- Competitor and creator research — read what a channel actually says, at volume, instead of skimming titles.
- LLM knowledge bases — the combined JSON drops straight into a retrieval pipeline.
Over the API
The channels endpoint (Starter plan and higher) turns handles into video lists, which you then feed to the transcripts endpoint in batches of 50:
curl -X POST https://vidwords.com/api/channels \
-H "Authorization: Basic YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"ids": ["@mkbhd"]}'
The response includes channelId, the channel title, and each video's id — pipe those ids into POST /api/transcripts.
Limits and practical notes
- Channels and playlists both resolve up to 500 videos per request, newest first for a channel and in playlist order for a playlist.
- One transcript = one credit. Resolving the video list is always free, so you can check the size of a job before committing to it.
- Private and members-only videos can't be read, and some videos legitimately have no transcript (captions disabled, music-only, age-restricted). These come back as per-video errors rather than failing the whole batch, and they are not charged.
- Past 500 videos the listing is capped rather than paged — over the API the response comes back with
truncated: trueso you can tell it happened. For a back catalogue larger than that, split the work into narrower playlists.