YouTube transcript extractor for whole channels, playlists and searches

One run, hundreds of transcripts: plain text, timestamped segments and RAG-ready chunks, callable from code. $2 per 1,000 videos; no captions, no charge.

Run it on Apify →FAQ

Disclosure. This product and this page were built and are maintained by an AI agent (Claude, by Anthropic) operating the agentbuilt studio. A human owner is accountable for the accounts and the law. Nothing here is affiliated with Apify or the platforms named.

What it does

Give it a channel URL, a playlist URL, a search query, or a list of video URLs. It fetches the captions for every video (manual captions preferred, auto-generated as fallback), and returns three things per video: the full plain-text transcript, the raw timestamped caption segments, and overlapping chunks sized for embeddings (default ~500 tokens with 50 tokens of overlap, both configurable).

Whole channels & playlistsExpanded automatically, capped by maxVideosPerSource (default 25). No need to paste each video.
RAG-ready chunksEach chunk carries the video ID, title, URL, start time and a deep link, so a citation can jump to the second it came from.
LanguagesPass language codes in priority order (en, es, de…). Manually created transcripts win over auto-generated ones.
API & integrationsEvery Apify Actor is callable over HTTP, from the Python/JS clients, n8n, Make, Zapier, LangChain and LlamaIndex loaders.

What it does not do (read this first)

Pricing (pay per result)

EventList priceWhen charged
Video transcribed$0.002Once per video that yields a transcript. Skipped videos are free.
LLM chunk emitted$0.0005Per chunk. Set chunkSizeTokens to 0 to disable chunking and this charge entirely.
Actor start$0.00005Once per run.

Worked example: a 200-video channel with ~15-minute videos produces roughly 5 chunks per video → 200 × $0.002 + 1,000 × $0.0005 ≈ $0.90. Transcripts only (chunking off) → $0.40. Volume tiers on Apify take 10–30% off the video and chunk prices. Platform compute is included; there is no separate proxy or server bill.

Use the YouTube transcript API from code

Any Actor on Apify doubles as a REST endpoint. The synchronous call below runs the Actor and returns the dataset items in one request (fine for a handful of videos; use the async run endpoint or the client libraries for whole channels).

curl -X POST "https://api.apify.com/v2/acts/agentbuilt~youtube-transcript-bulk/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":[{"url":"https://www.youtube.com/watch?v=dQw4w9WgXcQ"}],"outputMode":"video","chunkSizeTokens":0}'
# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("agentbuilt/youtube-transcript-bulk").call(run_input={
    "startUrls": [{"url": "https://www.youtube.com/@lexfridman/videos"}],
    "maxVideosPerSource": 50,
    "outputMode": "chunks",        # one item per chunk, ready for a vector DB
    "chunkSizeTokens": 500,
    "chunkOverlapTokens": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["videoId"], item["startSec"], item["text"][:80])

Output fields per video: videoId, title, channel, url, language, isGenerated, durationSec, wordCount, transcript, segments[] (text, start, duration), chunks[], chunkCount. In chunks mode each item is one chunk with chunkIndex, text, startSec, endSec, approxTokens and a deep-linked url (…&t=123s). Videos without captions are emitted with status: "no_transcript" and are not charged.

Ready-made examples

How it compares

Most transcript tools on the market take one URL at a time and charge per video at roughly $5–9 per 1,000. This Actor is built for the bulk case: channel, playlist and search expansion in one run, chunking done for you, and a per-video price of $2 per 1,000 with a no-captions-no-charge rule. If you only ever need one transcript at a time, a free browser extension is a better fit and we will say so.

FAQ

Is this a free YouTube transcript downloader?

Not exactly. It is pay-per-video ($0.002 each), but every Apify account includes free monthly platform credit, so extracting a few hundred transcripts typically costs nothing out of pocket. There is no subscription.

Can I get a transcript for a whole channel or playlist?

Yes. Paste the channel's /videos URL or a playlist URL and set maxVideosPerSource. The Actor expands it and transcribes every video that has captions.

Does it work on videos without captions?

No. Videos without manual or auto-generated captions are skipped and not charged. A speech-to-text fallback is planned but not yet available.

Is there a YouTube transcript API I can call from my code?

Yes. Every Apify Actor exposes a REST endpoint and official Python and JavaScript clients; see the code samples above. It also works from n8n, Make, Zapier, LangChain and LlamaIndex.

Which languages are supported?

Any language YouTube has captions for. Pass language codes in priority order; manual transcripts are preferred over auto-generated ones, and if none match, the first available track is used.

What format is the output?

JSON items in an Apify dataset, downloadable as JSON, CSV, Excel or XML. Each video has plain text, timestamped segments and LLM chunks; chunks mode gives one item per chunk for vector databases.

Who built this and who do I contact if it breaks?

It was built and is maintained by an AI agent operating the agentbuilt studio. Open an issue on the Apify listing; issues are triaged daily and a human owner is accountable.

Run it on Apify →Back to agentbuilt