YouTube Transcript Scraper – Subtitles to Text for LLM & RAG
Pricing
from $3.00 / 1,000 transcripts
YouTube Transcript Scraper – Subtitles to Text for LLM & RAG
Turn any YouTube video, playlist or channel into clean, LLM-ready text. Full transcripts with timestamps, chapters and video details — 100+ caption languages, no login, no API key.
Pricing
from $3.00 / 1,000 transcripts
Rating
0.0
(0)
Developer
inovaflow
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
If you have ever pasted a YouTube link into an AI assistant and been told "I can't watch videos", this is the missing piece. YouTube Transcript Scraper turns any YouTube video, playlist or channel into clean, plain text you can hand straight to an LLM, a RAG pipeline, a search index or a spreadsheet — with timestamps, chapters and the video's details attached. No YouTube login, no cookies, no API key.
- Researchers & analysts — read a 2-hour podcast in 10 minutes, quote it with timestamps.
- AI builders — feed transcripts to Claude, GPT or Gemini; build a knowledge base from a whole channel.
- Marketers & creators — repurpose videos into articles, newsletters and social posts; audit competitor channels.
- Students & journalists — searchable, citable text for lectures, interviews and talks.
What does YouTube Transcript Scraper do?
It extracts the transcript (subtitles / closed captions) of YouTube videos and returns it as LLM-ready text. Give it one link or a thousand — single videos, Shorts, live-stream replays, entire playlists, whole channels, or a YouTube search query — and every video comes back as one clean row:
- Plain text — captions stitched into readable prose, "[Music]"-style cues removed.
- Timestamped segments —
[00:12] …lines and asegmentsarray (start, duration, text) an AI can cite. - Chapters — when the video has chapters, each chapter carries its own slice of the transcript, ready for section-by-section summaries.
- Video details — title, channel, duration, views, likes, publish date, category, description, thumbnail.
- Language control — pick any of 100+ caption languages, prefer human-made over auto-generated captions, and fall back to the original language automatically.
- Subtitle files — optional SRT / WebVTT text.
- One combined markdown corpus of the whole run for drag-and-drop into any LLM.
It works as a YouTube transcript API: call it from the Apify API, from any MCP client (Claude Desktop, Cursor, ChatGPT), or from Zapier / Make / n8n.
Why use this YouTube transcript scraper?
- Built for AI, not just for humans. Most transcript tools give you a wall of caption fragments. This one gives you prose, timestamps and chapters — the three shapes LLM workflows actually need — plus a run-level markdown file with everything in it.
- Whole channels and playlists in one run. Paste
youtube.com/@channeland get every video's transcript (newest first, capped by you). - Never lose a video silently. Every requested video gets a row. If one has no captions, is private or was removed, the row says so in
statusanderror— and you are not charged for it. - No login, no risk. Nothing here touches your Google account. Public data only.
- Fair, per-transcript pricing. You pay only for transcripts actually delivered.
- Apify platform included: scheduling, webhooks, 20+ export formats, integrations, monitoring and a REST API for every run.
What data does it extract?
| Field | Type | Description |
|---|---|---|
text | string | The full transcript as clean plain text |
timestampedText | string | [mm:ss] text lines — cite a moment in the video |
segments | array | { start, duration, text } for every caption line |
chapters | array | { title, startTime, startSeconds, endSeconds, text } — the transcript split by the video's chapters |
title, channelName, channelUrl | string | Video and channel identity |
duration, durationSeconds | string, number | Video length |
publishedAt, viewCount, likeCount, category | mixed | Video statistics and publish date |
description, keywords, thumbnailUrl | mixed | Extra context for summaries and indexing |
language, languageName, isAutoGenerated | mixed | Which caption track you received |
availableLanguages | array | All caption tracks the video offers |
wordCount, characterCount | number | Size — handy for token budgeting |
srt, vtt | string | Optional subtitle files |
status, error | string | ok, no_transcript, unavailable or error, with the reason |
How to get a YouTube transcript
- Open YouTube Transcript Scraper on Apify and click Try for free.
- Paste one or more YouTube links — a video, a Shorts link, a playlist (
…/playlist?list=…) or a channel (youtube.com/@handle). Bare video IDs work too. - Set the transcript language (default
en). Leave everything else as is. - Click Start. Results appear in the Output tab within seconds; whole channels take a few minutes.
- Download as JSON, CSV, Excel, HTML or XML, open the combined TRANSCRIPTS.md, or fetch the dataset through the API.
How to get transcripts for a whole YouTube channel
Paste the channel URL (https://www.youtube.com/@3blue1brown, /channel/UC… or /c/…) and set Max videos per playlist / channel / search — the newest videos are transcribed first. Add /shorts or /streams to the channel URL to target Shorts or live-stream replays instead of regular videos.
How to find videos by keyword
Use YouTube search queries instead of URLs: each query is searched on YouTube and the top matching videos are transcribed.
How much does it cost to scrape YouTube transcripts?
Pricing is pay-per-event: a small fee per run start plus $0.003 per transcript delivered. Videos with no captions, unavailable videos and failed fetches are never charged. A 100-video channel therefore costs about $0.30; the free Apify plan covers hundreds of transcripts a month. Proxy bandwidth is billed by Apify at your plan's rate — a typical video transfers well under 100 KB.
Input
Only one field is required: YouTube URLs. Everything else has sensible defaults — see the Input tab for the full list. Useful options:
- Transcript language — a code such as
en,es,de,pt-BR,ja; orautofor the video's original language. - Max videos per playlist / channel / search — cap for bulk sources (default 50).
- Include timestamped segments / Split by chapters / Include publish date, likes & category — on by default; turn off for smaller rows.
- Also produce subtitle files —
srt,vtt. - Keep a row for videos without a transcript — on by default so nothing disappears silently.
- Prefer auto-generated captions / Fall back to the original language — fine-tune language behaviour.
- Proxy configuration — residential proxies are used by default because YouTube blocks most datacenter IPs.
Example input:
{"startUrls": [{ "url": "https://www.youtube.com/watch?v=aircAruvnKk" },{ "url": "https://www.youtube.com/@3blue1brown" }],"language": "en","maxVideosPerSource": 20}
Output
Each video is one dataset item. Download it as JSON, CSV, Excel, HTML or XML, or read it via the API. Simplified example:
{"videoId": "aircAruvnKk","url": "https://www.youtube.com/watch?v=aircAruvnKk","status": "ok","title": "But what is a neural network? | Deep learning chapter 1","channelName": "3Blue1Brown","duration": "18:40","publishedAt": "2017-10-05T08:11:25-07:00","viewCount": 24193162,"language": "en","isAutoGenerated": false,"wordCount": 3357,"text": "This is a 3. It's sloppily written and rendered at an extremely low resolution of 28x28 pixels, but your brain has no trouble recognizing it as a 3. …","timestampedText": "[00:04] This is a 3.\n[00:06] It's sloppily written and rendered at an extremely low resolution of 28x28 pixels, …","segments": [{ "start": 4.22, "duration": 1.18, "text": "This is a 3." }],"chapters": [{ "title": "Introduction example", "startTime": "00:00", "startSeconds": 0, "endSeconds": 67, "text": "This is a 3. It's sloppily written …" },{ "title": "Series preview", "startTime": "01:07", "startSeconds": 67, "endSeconds": 162, "text": "Unless you've been living under a rock, …" }],"availableLanguages": [{ "code": "en", "name": "English", "autoGenerated": false }, { "code": "de", "name": "German", "autoGenerated": false }]}
A video without captions looks like this — still a row, still free:
{ "videoId": "…", "status": "no_transcript", "error": "This video has no captions (neither manual nor auto-generated)", "title": "…", "availableLanguages": [] }
The run also stores two files in the key-value store: TRANSCRIPTS.md — every transcript of the run in one markdown document, chaptered where available — and OUTPUT, a JSON summary of what was delivered.
Using the transcripts with an LLM
- Summarise a long video: pass
chapters[].textone chapter at a time, then summarise the summaries. - Ask questions about a channel: load
TRANSCRIPTS.mdinto your assistant or chunktextbysegmentsfor a vector store — each chunk already has a timestamp you can link back to (https://www.youtube.com/watch?v=ID&t=SECONDS). - Budget tokens:
wordCount÷ 0.75 is a good estimate of tokens per transcript. - From an MCP client: add this Actor as a tool in Claude, Cursor or ChatGPT via Apify's MCP server and ask "get the transcript of ".
Tips
- Keep the default residential proxy. Datacenter IPs are heavily rate-limited by YouTube; the Actor rotates automatically but will be slower.
- For very large channels, raise Max concurrent videos and split the job into several runs if you want results faster.
- Set Transcript language to
autowhen you want each video in its original language. - Auto-generated captions have no punctuation; when a human-made track exists it is used first.
FAQ
Does it need my YouTube account or an API key?
No. It reads the same public caption data a signed-out viewer can see. Nothing is logged in on your behalf.
Can it translate a transcript?
Not at the moment — YouTube currently restricts automatic caption translation for automated clients. You can request any caption track the uploader or YouTube has published (often a dozen or more languages) and translate the text with your LLM of choice.
Why does a video have status: no_transcript?
The uploader disabled captions and YouTube produced no automatic ones (common for music, very new uploads and some live streams). Live streams get captions after they end.
Are Shorts and live streams supported?
Yes — Shorts links and finished live streams work like any video. A stream that is still live returns no_transcript until it ends.
Is scraping YouTube transcripts legal?
Our Actors are ethical and do not extract any private user data. They only extract what the uploader has chosen to share publicly. Transcripts and video metadata are public information; make sure your use complies with YouTube's terms and applicable copyright law, and consult a lawyer if you are unsure.
Support
Something off? Open an issue in the Issues tab and include the video URL and run ID. The API tab shows how to call this Actor from code or from any MCP-capable AI agent.