YouTube Transcript API & Translator - SRT Subtitles
Pricing
$2.99 / 1,000 transcripts
YouTube Transcript API & Translator - SRT Subtitles
Turn YouTube videos into text for AI, research or subtitles. Transcript API & translator, no API key, no browser: transcripts and captions by video, playlist, channel or keyword, in bulk, with timestamps, SRT/VTT files and translation to 55 languages that keeps the timings. $2.99 per 1,000.
Pricing
$2.99 / 1,000 transcripts
Rating
0.0
(0)
Developer
Quiet Harvest
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
This YouTube transcript API gets the transcript (captions, subtitles) of YouTube videos by URL, playlist, channel or keyword search. No API key, no login, no cookies. Plain text, timed segments, or SRT / VTT files, and it can translate into 55 languages with the timings kept.
$2.99 per 1,000 transcripts. You only pay for transcripts actually returned.
Quick start
Runs as-is with this input (the same input Apify tests daily):
{"videoUrls": ["https://www.youtube.com/watch?v=OrElyY7MFVs"]}
Main output fields: title, channel, transcript_status, transcript_language, transcript_chars, transcript, url, video_id.
Price: Transcript: $2.99 per 1,000. Pay only for results delivered.
Run it from code and get the results in one call: POST https://api.apify.com/v2/acts/reportable_broth~youtube-transcript-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN with the input above as the JSON body.
What does YouTube Transcript API do?
- Four ways in. Video URLs, playlists, channels, or keywords. Watch links, Shorts,
youtu.belinks and bare 11-character IDs all work. - Language fallback. If your preferred language isn't there, you get whatever transcript the video has, human-written over auto-generated when there's a choice.
- Says why when there's nothing. Every row has
transcript_status:ok,disabled_by_uploader,no_transcript,video_unavailable,blockedorerror. - Subtitle files. Ask for
srtorvttand each row carries a file you can save and play. - Translate. 55 target languages. Timings stay the same, so you also get
translated_srt/translated_vtt. I do the translation myself because YouTube's own auto-translate returned nothing in my tests.
No browser. Each video is a couple of small requests, so big batches stay fast.
What can I use it for?
- Put video transcripts into an LLM prompt or a RAG index. The
transcriptfield is plain text. - Turn a video into a blog post, show notes or a summary.
- Make SRT subtitles in another language for your own videos.
- Search what a channel has said about a topic across hundreds of videos.
- Get a whole course playlist as text to read or study.
How do I use it?
- Open this Actor and click Try for free. You need a free Apify account.
- Paste video links, or a playlist or channel link, or type keywords.
- Click Start.
- Wait for the run to finish.
- Open the Output tab and download the transcripts as JSON, CSV or Excel.
Examples
A few videos, with SRT files:
{"videoUrls": ["https://www.youtube.com/watch?v=OrElyY7MFVs","https://youtu.be/dQw4w9WgXcQ"],"subtitleFormats": ["srt"]}
A whole playlist or course, plain text only (for an LLM or RAG index):
{"playlistUrls": ["https://www.youtube.com/playlist?list=PLRqwX-V7Uu6ZiZxtDDRCi6uhfTH4FilpH"],"maxVideosPerSource": 500,"includeSegments": false}
Korean videos on a topic, translated to English:
{"keywords": ["메이크업"],"languages": ["ko", "en"],"translateTo": "en","skipShorts": true,"maxVideosPerSource": 30}
Input
| Field | Default | |
|---|---|---|
videoUrls | [] | Video links or IDs. All of them are transcribed |
playlistUrls | [] | Playlist links. Kept in order, paged past 100 videos |
channelUrls | [] | Handles with or without @, or channel URLs. Latest videos |
keywords | [] | Search YouTube and transcribe the results |
maxVideosPerSource | 10 | Cap per playlist / channel / keyword (max 5000). Doesn't apply to videoUrls |
languages | ["en"] | Preferred transcript languages, tried in order (19 options) |
includeSegments | true | Timed lines. Turn off for text only, much smaller dataset |
subtitleFormats | [] | srt, vtt |
translateTo | "" | Target language, 55 options. Empty = no translation |
skipShorts | false | Most Shorts have captions off, so skipping them raises the hit rate |
includeVideoDetails | true | Exact publish time, likes, views, description, duration, channel ID, subscribers, available caption languages. One extra request per video |
exactCommentCount | false | Exact comment count instead of the rounded 4.2K. One extra request per video |
proxyConfiguration | residential | Keep residential. YouTube rate-limits repeated requests from one IP |
concurrency | 8 | Videos fetched at once (max 16) |
What data do I get?
One row per video:
{"video_id": "OrElyY7MFVs","url": "https://www.youtube.com/watch?v=OrElyY7MFVs","title": "My Evidence-Based Skincare Routine","channel": "Ali Abdaal","transcript_status": "ok","transcript": "All right, so having the perfect skincare routine is actually pretty simple...","transcript_chars": 18705,"transcript_language": "en","transcript_is_generated": true,"transcript_segments": [{ "start": 0.0, "duration": 0.88, "text": "All right, so having the perfect" }],"_source": "url","_query": "OrElyY7MFVs"}
Also included: srt, vtt, translation_status, translated_language, translated_transcript, translated_segments, translated_srt, translated_vtt, available_languages, playlist_id, playlist_title, playlist_index. Video details add channel_id, channel_username, channel_thumbnail, subscriber_count, thumbnail, published_at, published_ts, duration_seconds, view_count, like_count, comment_count_approx, description, hashtags, description_links, keywords, is_short, is_live (and comment_count with exactCommentCount).
Export as JSON, CSV or Excel, or read it through the API.
How much does it cost?
$2.99 per 1,000 transcripts, so $0.00299 each. Rows with a status other than ok are free. Translation, SRT/VTT files and video details don't cost extra. There's no start fee.
- 100 transcripts cost about $0.30.
- A 500-video playlist costs at most about $1.50, less if some videos have captions off.
- 10 videos cost about $0.03.
Apify's free plan comes with a monthly usage credit ($5 at the time of writing), which covers about 1,600 transcripts.
Limits
- Not every video has a transcript. Uploaders can switch captions off, and most Shorts have them off. In a 131-video keyword sample, 111 had one and the other 20 were all
disabled_by_uploader. WithskipShortson, 39 of 39 long-form videos came back. disabled_by_uploadermeans the captions are off and no tool can get them.- A
watch?v=...&list=...link invideoUrlscounts as that one video, not the whole playlist. Put playlist links inplaylistUrls. - Public videos only. Private, unlisted and members-only won't work.
Calling it from code
Works from the Apify API (Python, JavaScript), n8n, Make, Zapier, or an AI agent over MCP. The transcript field is plain text, ready to drop into a prompt. On apify-client 3.x, use run.default_dataset_id, not run["defaultDatasetId"].
FAQ
What if a video has no captions?
Then there's no transcript to get. This reads the captions YouTube already has (uploaded or auto-generated). It doesn't listen to the audio. The row comes back with a status like disabled_by_uploader or no_transcript and isn't charged.
Can I get a transcript in a language the video doesn't have?
Yes. Set translateTo. You get the original transcript plus a translated one with the same timings.
Can I do a whole channel or playlist in one run?
Yes. Put the links in channelUrls or playlistUrls and raise maxVideosPerSource (default 10, max 5000).
Why is transcript_is_generated true?
The transcript you got is YouTube's auto-generated captions, not one the uploader wrote. They can have more spelling mistakes and less punctuation.
Other scrapers I made
- YouTube Monitor: new videos from channels or keywords
- YouTube Playlist: every video in a playlist, in order
- Threads Scraper: posts by keyword, hashtag or profile
- Google Ads Transparency: a competitor's Google ads
Found a bug or need a field? Open an issue on the Issues tab.
Only collects publicly available captions. You're responsible for how you use them (YouTube terms, local law).