π¬ YouTube Subtitles & Captions Scraper | $5/1k | SRT & VTT
Pricing
$5.00 / 1,000 subtitles extracteds
π¬ YouTube Subtitles & Captions Scraper | $5/1k | SRT & VTT
Download YouTube subtitles and captions in bulk β plain text, SRT or VTT. $5 per 1,000 videos, charged only when subtitles are actually returned.
Pricing
$5.00 / 1,000 subtitles extracteds
Rating
0.0
(0)
Developer
Teco
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Download YouTube subtitles and captions in bulk β as plain text, SRT or VTT files.
Paste a list of YouTube links, pick a language, get the captions back. No login, no API key, no browser automation. $5 per 1,000 videos, and you are charged only when subtitles are actually returned.
What you get
| π° Price | $5 per 1,000 videos β flat. Failed videos are free. |
| π Formats | Plain text Β· Timed segments Β· SRT Β· VTT |
| π Input | Watch URLs, youtu.be links, Shorts, Live URLs, or bare video IDs |
| π Languages | Any language the video has. Human-written captions preferred over auto-generated |
| π¦ Bulk | Paste hundreds of links in one run. Duplicates removed, so no double charging |
How this one is different
| What usually goes wrong | What this Actor does |
|---|---|
| You get one blob of text β the timings are gone | Exports SRT and VTT with real timings, ready to drop into Premiere, DaVinci Resolve, CapCut, or a <track> tag |
| Videos that fail quietly vanish from the output | Every input comes back as a row β with the reason it failed, plus availableLanguages so your next run can ask for the right code |
| You pay for videos that returned nothing | Charged only when subtitles are actually returned |
| Datacenter IPs report "no subtitles" for videos that clearly have them | Residential proxy by default. Measured on the same 10 videos: 9/10 with residential, 6/10 with datacenter β and the missing 3 reported "no subtitles" while having them |
| API keys, OAuth or browser sessions to set up | None. Paste links and run |
Input
{"videoUrls": [{ "url": "https://www.youtube.com/watch?v=aircAruvnKk" },{ "url": "https://youtu.be/dQw4w9WgXcQ" },{ "url": "https://www.youtube.com/shorts/abc123XYZ99" }],"language": "en","outputFormat": "srt","maxVideos": 500}
| Field | Type | Default | Notes |
|---|---|---|---|
videoUrls | array | β | Required. Any mix of URL formats or bare video IDs |
language | string | en | ISO 639-1 code: en, es, de, fr, pt, ja, hi, β¦ |
outputFormat | string | plain | plain Β· segments Β· srt Β· vtt |
maxVideos | integer | β | Spending guard. Stops after N videos |
proxyConfiguration | object | Residential | YouTube blocks datacenter IPs β keep the default |
Output
One row per video.
{"videoId": "aircAruvnKk","url": "https://www.youtube.com/watch?v=aircAruvnKk","title": "But what is a neural network?","author": "3Blue1Brown","durationSeconds": 1120,"language": "en","isAutoGenerated": false,"availableLanguages": ["en", "es", "ja", "de"],"characterCount": 18145,"transcript": "1\n00:00:04,220 --> 00:00:07,900\nThis is a 3...","error": null}
With outputFormat: "segments" you get a segments array instead of transcript:
"segments": [{ "start": 4.22, "duration": 3.68, "text": "This is a 3" },{ "start": 7.90, "duration": 2.94, "text": "It's a mess of neurons" }]
Export the dataset as JSON, CSV, Excel, XML or HTML from the Apify Console, or pull it through the API.
Use cases
- Subtitle, translate and repurpose video β SRT/VTT with real timings, ready for your editor or your translator
- Feed videos to an LLM β plain text output drops straight into ChatGPT, Claude or your own pipeline for summaries, Q&A and topic extraction
- Content research β pull captions across a competitor's videos and search them for terms
- Dataset building β bulk speech text for training, search indexes or RAG
- Accessibility β attach a
.vtttrack to video on your own site
FAQ
Does it work on Shorts and Live replays?
Yes. Watch URLs, youtu.be short links, /shorts/, /live/, /embed/ and bare 11-character
video IDs are all accepted.
What if a video has no subtitles?
You get a row with error explaining it, and you are not charged for that video.
What if my language isn't available?
Same β a row with error, plus availableLanguages listing what the video does have, so your
next run can ask for the right code.
Auto-generated or human captions?
Whichever the video has. When both exist for your language, the human-written track wins, because
auto-generated captions carry recognition errors. The isAutoGenerated field tells you which one
you got.
Do I need a YouTube API key or an account? No. Nothing to configure beyond the input form.
Why residential proxies? Because datacenter IPs fail silently. YouTube does not block them β it returns a perfectly normal response with the caption tracks quietly removed. Measured on the same 10 videos: 9/10 with residential, 6/10 with datacenter, and the 3 missing ones reported "no subtitles" even though they clearly have them. Keep the default unless you enjoy debugging phantom failures.
How much does a run actually cost? $5 per 1,000 videos on the subtitles themselves, plus Apify platform usage (proxy traffic and compute), which is small: a typical 20-minute video moves about 12 KB.
Legal
This Actor reads caption tracks that YouTube publishes for public videos. You are responsible for how you use the output β check YouTube's Terms of Service and the copyright of the material you process. It does not download video or audio, and does not access private, unlisted or age-restricted content.