YouTube Transcript Scraper for AI & RAG – Videos, Channels
Pricing
from $2.40 / 1,000 transcripts
YouTube Transcript Scraper for AI & RAG – Videos, Channels
Get YouTube transcripts (captions) in bulk from videos, playlists, channels or search. Clean text, timestamped segments and RAG-ready chunks with deep links, language fallback and video metadata. Pay only for successful transcripts.
Pricing
from $2.40 / 1,000 transcripts
Rating
0.0
(0)
Developer
Clearfeed Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 hours ago
Last modified
Categories
Share
YouTube Transcript Scraper for AI & RAG – Videos, Playlists, Channels
Get YouTube transcripts (captions / subtitles) in bulk and turn them into clean, LLM-ready text. Paste video URLs, playlists, channels or search queries. You get the full transcript, timestamped segments, [mm:ss]-stamped text for citations, and RAG-ready chunks with deep links back to the exact second in the video. Video metadata (title, channel, publish date, duration, views) is included at no extra cost.
You only pay for successful transcripts. Videos without captions, private or deleted videos and invalid URLs return a clear error row and are not charged.
Why this YouTube transcript API?
- 📦 Bulk input: video URLs, Shorts, youtu.be links, bare video IDs, playlists, channels (
@handle,/channel/UC…,/c/…), and YouTube search queries, mixed in one run. Duplicates are removed automatically. - 🧠 Built for AI: plain text, timestamped text, segments, or chunks of a configurable size and overlap that never cut a caption line, each with
startSeconds,endSecondsand atimestampUrl(…&t=754s). - 🗂️ One row per video or one row per chunk: load the chunk rows straight into Pinecone, Qdrant, Weaviate, pgvector, Chroma, LangChain or LlamaIndex.
- 🌍 Smart language fallback: your preferred languages in order → uploaded (human) captions first → auto-generated captions → the original language (YouTube machine translation is available as an experimental option). Every row tells you
language,isAutoGeneratedandisTranslated. - 🧹 Clean text: HTML entities decoded,
[Music],[Applause]and ♪ removed (optional), overlapping auto-caption lines fixed. - ⚡ Fast and reliable: a lightweight caption API (no browser, no video download), rotating proxy sessions, automatic retries on a fresh IP, and one clear error row per failed video instead of a crashed run.
- 💸 Cheap: no browser, ~30 KB of traffic per video.
Use cases
- RAG chatbots and knowledge bases over a channel, a course playlist or a conference talk series ("chat with this YouTube channel").
- AI agents / MCP tools that need the transcript of a video a user mentions.
- Summaries, show notes, chapters, blog posts and newsletters from podcasts and lectures.
- Content research and SEO: what competitors and creators actually say, keyword and topic analysis.
- Fine-tuning and evaluation datasets from public educational content (check the licence of the content you use).
- Brand, product and market monitoring across many videos at once.
How to use it
- Paste one or more YouTube URLs, playlists, channels (or search queries).
- Choose your preferred languages (e.g.
en,de,es). - Pick the output: plain text, timestamped text, segments, or chunks (and per-video or per-chunk rows).
- Click Start, then download the results as JSON, CSV, Excel, or get them through the API.
Input example
{"urls": ["https://www.youtube.com/watch?v=jGwO_UgTS7I","https://www.youtube.com/playlist?list=PLoROMvodv4rMiGQp3WXShtMGgzqpfVfbU","@3blue1brown"],"searchQueries": ["retrieval augmented generation tutorial"],"maxVideosPerChannel": 20,"languages": ["en", "de"],"outputMode": "chunk","chunkSize": 2000,"chunkOverlap": 200}
Output example (one row per video)
{"videoId": "aircAruvnKk","url": "https://www.youtube.com/watch?v=aircAruvnKk","status": "success","title": "But what is a neural network? | Deep learning chapter 1","channelName": "3Blue1Brown","channelId": "UCYO_jab_esuFRV4b17AJtAw","publishDate": "2017-10-05T08:11:25-07:00","durationSeconds": 1120,"viewCount": 24955886,"language": "en","isAutoGenerated": false,"isTranslated": false,"wordCount": 3357,"text": "This is a 3. It's sloppily written and rendered at an extremely low resolution of 28x28 pixels…","timestampedText": "[00:04] This is a 3. It's sloppily written…\n[00:34] …","segments": [{ "start": 4.22, "end": 7.0, "text": "This is a 3." }],"chunks": [{ "index": 0, "text": "…", "startSeconds": 4.22, "endSeconds": 117.5, "timestampUrl": "https://www.youtube.com/watch?v=aircAruvnKk&t=4s", "count": 11 }],"availableLanguages": [{ "code": "en", "name": "English", "isAutoGenerated": false }]}
Output example (one row per chunk, for vector databases)
{"chunkId": "aircAruvnKk-3","videoId": "aircAruvnKk","title": "But what is a neural network? | Deep learning chapter 1","channelName": "3Blue1Brown","chunkIndex": 3,"chunkCount": 11,"text": "…","startSeconds": 312.5,"endSeconds": 421.8,"timestampUrl": "https://www.youtube.com/watch?v=aircAruvnKk&t=312s","language": "en"}
Error rows (never charged)
errorCode | Meaning |
|---|---|
NO_CAPTIONS | The video has no captions at all |
LANGUAGE_NOT_AVAILABLE | No captions in your languages and fallback is off (see availableLanguages) |
VIDEO_UNAVAILABLE, PRIVATE_VIDEO, MEMBERS_ONLY, AGE_RESTRICTED | The video can't be accessed without a login |
LIVE_NOT_STARTED | Upcoming live stream or premiere |
INVALID_INPUT, LISTING_FAILED, NO_VIDEOS | The URL isn't a YouTube URL, or the playlist/channel couldn't be listed |
BLOCKED, RATE_LIMITED | YouTube still refused after all retries on fresh IPs (rare) |
Language options
languages: in order of preference.enalso matchesen-USanden-GB.allowAutoGenerated: use YouTube's speech-recognition captions when no uploaded captions exist (on by default).allowTranslation(experimental, off by default): ask YouTube for a machine translation into your first language. YouTube currently rate-limits translated captions heavily, so this usually fails. If it refuses, you get the original language and atranslationErrornote instead of a failure.fallbackToAnyLanguage: return the original language rather than an error.
Pricing
Pay per event: you're charged only for each successful transcript (plus a tiny run-start fee). Metadata, chunks, segments and error rows are free. Use the run option "Max total charge" to cap your spend; the Actor stops cleanly when the cap is reached.
Integrations
Use the Apify API, the Python or JavaScript client, Make, Zapier, n8n, LangChain (ApifyDatasetLoader), LlamaIndex, or the Apify MCP server to give AI agents a YouTube transcript tool. Schedule the Actor to keep a channel's knowledge base up to date.
FAQ
Does it download videos or audio? No. It only reads the caption tracks YouTube already publishes, plus public video metadata.
What if a video has no captions? You get a NO_CAPTIONS error row and you aren't charged. Audio transcription (speech-to-text) for videos without captions is planned as an optional paid add-on.
Is it legal? The Actor reads publicly available captions and does not log in. Transcripts can be copyrighted by their creators. Make sure your use (e.g. analysis, summaries, internal search) is allowed in your jurisdiction and complies with YouTube's Terms of Service. Don't republish full transcripts without permission.
Which proxy does it use? Apify residential proxy by default, because YouTube blocks most datacenter IPs. Only small caption files go through it.
Found a bug or need a custom feature? Open an issue on the Actor's Issues tab and we'll reply.