YouTube Channel Transcripts - Whole Channel or Playlist to Text
Pricing
$5.00 / 1,000 transcripts
YouTube Channel Transcripts - Whole Channel or Playlist to Text
Every video of a YouTube channel or playlist with title, views, duration, date and the full transcript, one row per video. Incremental (remembers delivered videos), language fallback, translation, no browser, charged only per transcript delivered.
YouTube Channel Transcripts — every video of a channel or playlist, with metadata and transcript
Give it a channel (@handle, channel URL or id) or a playlist, and get one row per video with
title, views, duration, publish date and the full transcript (plus optional timestamped segments).
Built for people who feed whole channels into notes, search, LLMs and research, not one video at a time.
- Channel in, corpus out. Lists the newest N videos (up to 5,000), filters by views and duration, then fetches transcripts with preferred-language and auto-caption fallback, optional translation.
- Incremental by default. Videos already delivered for a channel are remembered and skipped next run, so a scheduled run only pays for new uploads.
- Charged per transcript delivered. Listing is free; videos without captions are free rows with a status.
- No browser. Listing via a lightweight extractor, transcripts over YouTube's caption endpoints, residential proxy rotation when YouTube blocks a session; a fixed number of retries, never an endless loop.
Single videos? Use the companion YouTube Transcript Scraper.
Output
type | fields |
|---|---|
source (free) | channel, channel_id, channel_url, listed, picked, status |
video | video_id, url, title, view_count, duration_seconds, published_at, status, language, source_language, is_generated, word_count, segment_count, text, segments[] (optional), error |
status is ok, no_transcript, captions_disabled, unavailable, blocked or error. Only ok rows are charged.
Input
| field | default | notes |
|---|---|---|
sources | — | @handle, https://www.youtube.com/@handle, /channel/UC…, /playlist?list=PL… |
maxVideosPerSource | 50 | newest first, up to 5,000 |
minViews, minDurationSeconds, maxDurationSeconds | 0 | filters; e.g. maxDurationSeconds: 60 = Shorts only, minDurationSeconds: 61 = no Shorts |
skipAlreadyDone | true | remember delivered video ids per source; turn off to re-fetch |
languages | ["en"] | preference order |
allowAutoGenerated | true | fall back to automatic captions |
translateTo | "" | e.g. en |
includeSegments | false | add timestamped lines (larger rows) |
concurrency / maxRetries | 5 / 4 | |
proxyConfiguration | Apify residential | recommended; datacenter IPs get blocked by YouTube |
Minimal input:
{ "sources": ["@Apify"], "maxVideosPerSource": 20 }
Use cases
Build a searchable archive of a creator's teaching · train or ground an assistant on a channel · monitor a competitor's channel and read what they said this week · quote-mining across a podcast's back catalogue · subtitles corpus for translation · research on how topics evolve over a channel's history.
Limits and honesty notes
- Transcripts are what YouTube provides (uploaded captions when present, otherwise automatic captions;
is_generatedsays which). Members-only, private and live-without-captions videos return no transcript. - Public data only; no login; no personal data.
- Very large channels take minutes, not seconds; the incremental memo keeps repeat runs cheap.
Support
Open an issue on the Issues tab. Every run writes a SUMMARY record with listed, delivered, free and skipped counts.