YouTube Transcript Scraper
Pricing
from $4.00 / 1,000 transcripts
YouTube Transcript Scraper
Bulk-extract YouTube video transcripts and subtitles. Manual and auto-generated captions, 100+ languages, optional translation, plain text, timestamped segments, and SRT output.
Pricing
from $4.00 / 1,000 transcripts
Rating
0.0
(0)
Developer
Vince Gonzalez
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Bulk-extract transcripts and subtitles from YouTube videos. Give it a list of video URLs (or IDs); get back clean, structured transcript data for each one — plain text, timestamped segments, and optional ready-to-use SRT subtitle files.
Built for researchers, AI/ML teams building training corpora, content analysts, translators, and anyone who needs YouTube captions at volume without touching a browser.
What it does
- Manual and auto-generated captions. Prefers human-uploaded captions; falls back to YouTube's automatic speech recognition when that's all a video has.
- 100+ languages. Ask for a preferred language; the actor picks the best matching track.
- On-the-fly translation. When your language isn't available, optionally have YouTube machine-translate an existing track into it.
- Three output shapes per video: one flat
textstring, an array of{ start, dur, text }segments, and (optionally) a complete.srt. - Bulk and resilient. Processes many videos in parallel, retries transient failures on fresh proxy sessions, and never lets one bad video stop the run — videos without captions or that are private/removed come back as clearly labeled rows.
Input
| Field | Type | Description |
|---|---|---|
videoUrls | array (required) | YouTube URLs (watch, youtu.be, shorts, embed, live) or bare 11-character IDs. Duplicates removed automatically. |
language | string | Preferred ISO language code (en, es, de, pt, ja, …). Default en. |
translate | boolean | Machine-translate into language when no native track exists. Default false. |
includeSrt | boolean | Add an .srt string to each result. Default false. |
concurrency | integer | Videos processed in parallel, 1–20. Default 5. |
maxRetries | integer | Retries per video, each on a fresh proxy session. Default 3. |
proxyConfiguration | object | Apify Proxy recommended — YouTube throttles repeated requests from one address. |
Example input
{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/jNQXAC9IVRw","9bZkp7q19f0"],"language": "en","includeSrt": true,"concurrency": 5,"proxyConfiguration": { "useApifyProxy": true }}
Output
Each video becomes one dataset row.
{"videoId": "dQw4w9WgXcQ","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","channel": "Rick Astley","lengthSeconds": 213,"status": "ok","language": "en","trackKind": "manual","translated": false,"segmentCount": 61,"text": "We're no strangers to love ...","segments": [{ "start": 18.56, "dur": 3.2, "text": "We're no strangers to love" }],"srt": "1\n00:00:18,560 --> 00:00:21,760\nWe're no strangers to love\n\n..."}
status is one of:
ok— transcript extracted.no-captions— video exists but has no captions in any usable form.error— video is private, removed, age-restricted beyond reach, or otherwise unavailable (see theerrorfield).
Filter for status = "ok" to get just the successful transcripts.
Pricing
Pay-per-event: you are charged only for each transcript successfully returned (status = "ok"). Videos with no captions or that fail cost nothing.
Notes & limits
- Some videos genuinely have no captions — that is a property of the video, not a failure of the actor.
- Live streams that are still running, private videos, and members-only content cannot be transcribed.
- Using Apify Proxy (or your own residential proxy) is strongly recommended for any run of more than a handful of videos.
- This actor reads publicly available caption data. You are responsible for using the output in accordance with YouTube's Terms of Service and applicable copyright law in your jurisdiction.
Running locally (developers)
npm installnpm test # runs src/test-local.js against live YouTube, no Apify runtime needed
The transcript logic lives in src/transcript.js and has no dependency on the Apify SDK, so it is unit-testable with plain Node 18+.
www.f-keys.com | © 2026 F-Keys Creative LLC