YouTube Transcript Scraper: Captions & Subtitles for AI/RAG
Pricing
from $2.25 / 1,000 transcripts
YouTube Transcript Scraper: Captions & Subtitles for AI/RAG
Get YouTube transcripts (captions/subtitles) as plain text, timestamped segments, SRT or VTT, with video metadata, for videos, Shorts, channels and playlists. Language preference, auto-caption fallback and translation. No speech-to-text. $2.25 per 1,000 transcripts.
Pricing
from $2.25 / 1,000 transcripts
Rating
0.0
(0)
Developer
Connor Prussin
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Share
YouTube Transcript Scraper: captions and subtitles for AI and RAG
YouTube Transcript Scraper extracts the transcript (captions / subtitles) of any public YouTube video as clean plain text, timestamped segments, SRT or WebVTT, together with the video's metadata. Paste video links, or a whole channel or playlist, and get one tidy JSON record per video that you can drop straight into an LLM prompt, a vector database or a spreadsheet.
- ✅ Videos, Shorts, live replays, channels and playlists. Channel and playlist URLs are expanded to their newest videos.
- ✅ Language control. Pick preferred languages in order; human-made captions win over auto-generated ones. Optional fallback to any language, and optional YouTube machine translation into a target language.
- ✅ Four output formats: plain text,
[{start, duration, text}]segments, SRT and VTT. - ✅ Metadata included: title, channel, publish date, duration, views, likes, category, keywords, description, thumbnail.
- ✅ Pay only for transcripts you get. Videos with no captions, private or deleted videos cost nothing.
- ✅ Residential proxies built in and included in the price, with automatic retries when YouTube pushes back.
Start in one minute
Click Start with the prefilled input:
{"urls": ["https://www.youtube.com/watch?v=UF8uR6Z6KLc","https://youtu.be/dQw4w9WgXcQ"],"maxVideosPerSource": 20,"languages": ["en"],"formats": ["text", "segments"],"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
You get: Transcripts of two sample videos, with transcript (plain text), timestamped segments, language and isAutoGenerated, plus title, channelName and viewCount.
Cost: $0.0045: 2 transcripts × $0.00225, plus the $0.00005 actor-start fee.
Use with an AI assistant
Connect the Apify MCP server to Claude, ChatGPT, Cursor or any MCP client (https://mcp.apify.com?tools=cprussin/youtube-transcripts loads only this actor), then paste:
Use the Apify actor cprussin/youtube-transcripts to get the transcript of https://www.youtube.com/watch?v=UF8uR6Z6KLc, and summarize it in 5 bullets.
Recipes
A channel's newest videos
Plain-text transcripts of a channel's 10 newest long-form videos.
{"urls": ["https://www.youtube.com/@TED/videos"],"maxVideosPerSource": 10,"languages": ["en"],"formats": ["text"]}
Subtitle files
SRT and VTT subtitles for one video.
{"urls": ["https://youtu.be/dQw4w9WgXcQ"],"formats": ["srt", "vtt"]}
Translated transcript
YouTube's machine translation into Spanish.
{"urls": ["https://www.youtube.com/watch?v=UF8uR6Z6KLc"],"translateTo": "es","formats": ["text"]}
New-video monitor
Schedule it daily: after the first run you get (and pay for) only transcripts not returned before.
{"urls": ["https://www.youtube.com/@TED/videos"],"maxVideosPerSource": 10,"onlyNew": true}
What can I use YouTube transcripts for?
- RAG and AI assistants: index a channel's talks, lectures or podcasts in a vector store and answer questions with citations (segments carry timestamps, so you can link to the exact second).
- Summaries and notes: feed the
transcriptfield to ChatGPT, Claude or Gemini to summarize videos, extract action items or write blog posts and show notes. - LLM fine-tuning and evaluation datasets built from spoken-language content.
- Content research and SEO: find what competitors say, mine keywords and topics, repurpose your own videos into articles.
- Subtitles: download SRT/VTT to re-edit, burn in or translate captions.
- Market and academic research: analyze what is said across many videos, channels or languages.
How does the YouTube transcript scraper work?
- Each URL is parsed. Channel and playlist URLs are expanded to up to
maxVideosPerSourceof their newest videos. - For every video the actor asks YouTube's own player API which caption tracks exist, picks the best track for your language settings and downloads it.
- Captions are cleaned (HTML entities, formatting tags and line breaks removed) and returned in the formats you chose.
- If YouTube rate-limits a request, the actor retries with a new residential IP and a different app client.
The actor does not download audio or run speech-to-text. If a video has no captions at all (neither human-made nor auto-generated), you get a free item with errorCode: "noCaptions".
How do I choose which YouTube videos to get transcripts for?
| Field | Description | Default |
|---|---|---|
urls | Video URLs or IDs, channel URLs (@handle, /channel/UC…, /videos, /shorts, /streams), playlist URLs | two sample videos |
maxVideosPerSource | Newest videos to take per channel or playlist | 20 |
languages | Preferred caption languages, in order | ["en"] |
allowAutoGenerated | Use auto-generated captions when no human-made track matches | true |
fallbackToAnyLanguage | If no preferred language exists, return the default track instead of an error | true |
translateTo | Language code to machine-translate into (YouTube's translation), e.g. en | none |
formats | Any of text, segments, srt, vtt | ["text", "segments"] |
includeMetadata | Add channel, publish date, duration, views, description and more | true |
onlyNew | Monitoring: only videos whose transcript wasn't returned by an earlier run with the same input | false |
proxyConfiguration | Proxy settings | Apify residential |
What data do you get for each YouTube transcript?
One dataset item per video (shortened):
{"videoId": "dQw4w9WgXcQ","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","channelName": "Rick Astley","channelId": "UCuAXFkgsw1L7xaCfnd5JJOw","channelUrl": "http://www.youtube.com/@RickAstleyYT","publishDate": "2009-10-24T23:57:33-07:00","durationSec": 213,"viewCount": 1821336715,"likeCount": 19430714,"category": "Music","keywords": ["rick astley", "Never Gonna Give You Up", "..."],"description": "The official video for “Never Gonna Give You Up” by Rick Astley. ...","thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/sddefault.jpg","language": "en","languageName": "English","isAutoGenerated": false,"isTranslated": false,"availableLanguages": [{ "code": "en", "name": "English", "isAutoGenerated": false },{"code": "en","name": "English (auto-generated)","isAutoGenerated": true},{ "code": "de-DE", "name": "German (Germany)", "isAutoGenerated": false }],"transcript": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ ...","wordCount": 487,"segments": [{ "start": 1.36, "duration": 1.68, "text": "[♪♪♪]" },{"start": 18.64,"duration": 3.24,"text": "♪ We're no strangers to love ♪"}],"source": "https://youtu.be/dQw4w9WgXcQ","error": null,"errorCode": null}
With formats including srt or vtt, the item also has an srt or vtt string, ready to save as a subtitle file.
Videos without a transcript are still returned, free of charge, with transcript: null and an explanation:
errorCode | Meaning |
|---|---|
noCaptions | The video has no captions of any kind |
languageNotAvailable | No track in your languages and fallback is off (availableLanguages lists what exists) |
translationNotAvailable | YouTube doesn't offer translation for this track |
videoUnavailable | Deleted, wrong ID or region-blocked |
privateVideo | Private video |
loginRequired | Age-restricted or members-only |
blocked | YouTube kept refusing the request after several retries on new IPs |
requestFailed | Network or unexpected error |
How much does it cost to download YouTube transcripts?
Pay per event, no subscription:
| Event | Price |
|---|---|
| Transcript (one video with a transcript) | $0.00225 ($2.25 per 1,000) |
| Actor start | $0.00005 |
Proxy and compute costs are included. Videos that return an error are not charged. If you set a maximum cost per run, the actor stops cleanly when it is reached.
How do I monitor YouTube for new items?
Add channel or playlist URLs, turn on onlyNew and run the actor on an Apify schedule (e.g. daily; save the input as a task and schedule the task).
- The first run is a baseline and returns transcripts as usual. Later runs return, and charge for, only videos (by video ID) whose transcript wasn't returned before. Skipped videos are never charged or fetched.
- Videos that failed (e.g. captions not ready yet) are retried on the next run; error items stay free.
- Channel tabs are read newest first and stop after 3 known videos in a row.
maxVideosPerSourcecounts only new videos. - State lives in your account in the key-value store
youtube-transcripts-state, one record per combination of URLs, languages and translation language. Changing any of these starts a new baseline. It remembers the latest 50,000 videos. - Add a Slack, email or webhook integration to the task to get alerts.
YouTube transcripts FAQ
Does it work for auto-generated captions? Yes. Auto-generated (speech recognition) tracks are used when no human-made captions exist in your languages. isAutoGenerated tells you which one you got.
Can I get a transcript in a language the video doesn't have? Set translateTo. If the video has captions in that language they're used as-is; otherwise YouTube's own machine translation is returned and isTranslated is true.
What about videos without any captions? YouTube has no transcript to give, so you get a free item with errorCode: "noCaptions". This actor does not do speech-to-text.
How many videos can I process? There is no fixed limit. Large channels are paginated; set maxVideosPerSource to how many of the newest videos you need.
Why residential proxies? YouTube often answers requests from cloud servers with "Sign in to confirm you're not a bot". Residential IPs avoid most of that. You can switch to your own proxy or no proxy in the Advanced section, but expect more blocked items without one.
Private, age-restricted or members-only videos? These need a signed-in account, which this actor does not use, so they return an error item and are not charged.
Can AI agents use it? Yes, through the Apify API, the Apify MCP server or any Apify integration (Make, Zapier, n8n, LangChain, LlamaIndex).
Is this legal? The actor only reads publicly available captions, the same data YouTube shows in its "Show transcript" panel. Transcripts are the creators' content: respect copyright and YouTube's Terms of Service in how you use them.
Disclaimer: This actor is not affiliated with, endorsed by or sponsored by YouTube or Google.
Related actors
- substack-scraper: Substack newsletter posts, content and public stats.
- bilibili-scraper: Bilibili videos, comments, trending and search results.
- telegram-channel-scraper: Posts, views and reactions from public Telegram channels.