YouTube Transcript Scraper 📝 (bulk, any language)
Pricing
from $2.80 / 1,000 transcript extracteds
YouTube Transcript Scraper 📝 (bulk, any language)
Transcripts for a whole list of YouTube videos in one run: plain text for your LLM, timed segments for subtitles and search, plus title, channel, duration and views. Picks the language you ask for. Videos with no captions are never charged. No API key, platform usage included.
Pricing
from $2.80 / 1,000 transcript extracteds
Rating
0.0
(0)
Developer
Tagada Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
YouTube Transcript Scraper: captions for a whole list of videos
Paste a list of YouTube links and get the transcript of every one back as clean JSON. Plain text ready to drop into an LLM, timed segments ready for subtitles or search, and the video's title, channel, duration and view count on the same row.
It picks the language you asked for. If the video has no track in that language but YouTube can translate one, it translates it, and the row says so. If a video has no captions at all, or is private, or was taken down, you get a row saying which, and you are not charged for it.
One flat price per transcript delivered. Platform usage (residential proxies, compute) is already in that price, so the number you see is the number you pay. No API key, no OAuth, no browser, no cookies to paste.
What it costs against the rest of the category
| This actor | The most-used YouTube transcript actor on Apify | YouTube Data API | |
|---|---|---|---|
| Price | $4 per 1,000 transcripts, all-in | $10 per 1,000 | Captions endpoint needs the channel owner's OAuth |
| Platform usage | Included | Usually billed on top | n/a |
| Videos with no captions | Free, with the reason | Usually billed as a result | n/a |
| Language choice | Ordered list, falls back to machine translation | Usually whatever the video defaults to | n/a |
| Timed segments | Yes, with plain text on the same row | Often one or the other | n/a |
| Setup | Paste links | Paste links | Google Cloud project, OAuth consent, channel ownership |
The public YouTube Data API can list caption tracks but will only hand you the caption body if you are authenticated as the channel owner, which is why nobody uses it for research. This actor reads the same public caption tracks the YouTube player itself downloads.
What you get
One record per video:
| Field | Description |
|---|---|
videoId | The 11-character YouTube ID |
url | Canonical watch link |
status | ok, no-captions, blocked, unavailable, private, members-only, age-restricted, geo-blocked, not-started, unplayable or error |
statusMessage | Why there is no transcript, in YouTube's own words where it has any |
title | Video title |
channel, channelId, channelUrl | Who published it |
durationSeconds | Length in seconds |
viewCount | Views at the moment of the run |
isLive | True for a live stream or a video that was one |
thumbnailUrl | Largest thumbnail YouTube lists |
language | Language of the transcript you actually got |
languageName | Same, in YouTube's wording, e.g. English (auto-generated) |
isAutoGenerated | True when the captions came from speech recognition rather than a human |
isTranslated | True when YouTube machine-translated the track into your language |
matchedPreferredLanguage | False when none of your languages was available and you got the video's own track instead |
availableLanguages | Every caption track the video has, so you can re-run for another one |
cueCount | Number of timed segments |
characterCount | Length of the transcript in characters |
transcriptTruncated | True only on extremely long videos (see the limit below) |
transcript | The whole transcript as one string |
segments | [{ start, duration, text }], seconds as decimals |
capturedAt | When the run collected the row (ISO) |
transcript is null when you asked for segments only, and segments is null when you asked for text only.
Who uses this
- People building on LLMs. Turn a channel, a playlist or a research list into a text corpus for summarising, RAG, fine-tuning or classification. The plain-text field is one string per video, so it goes straight into a prompt.
- SEO and content teams. Read what competitors actually say in their videos, mine it for keywords and questions, and repurpose long videos into articles and newsletters.
- Market and product researchers. Pull review and unboxing videos for a product line and search the transcripts for the complaint that keeps coming up.
- Course and podcast producers. Get timed segments to build chapter markers, search inside your own back catalogue, or ship subtitle files.
- Accessibility and localisation. Check which of your videos have human captions and which are relying on speech recognition, and get a translated track for the languages you publish in.
Input
Everything is optional except the list of videos.
| Field | What it does |
|---|---|
videoUrls | The videos, up to 650 per run. Watch links, youtu.be links, Shorts links, embed links and bare 11-character IDs, mixed freely. Extra parameters like ?t= or &list= are ignored, and duplicates are removed so you never pay twice for the same video |
preferredLanguages | Language codes in order of preference, e.g. ["fr", "en"]. en also matches en-GB and en-US |
includeAutoGenerated | Off means human-written subtitles only. Videos with nothing but speech-recognition captions are then reported as no-captions and not charged |
outputFormat | both (default), text, or segments |
maxVideos | Stop after this many videos, whatever the list contains (1–650, default 200). Useful when you pipe another actor's dataset in |
The 650 ceiling is not arbitrary: a video costs about 5.5 seconds end to end, so
650 is what fits in the platform's default 3600-second run timeout. The run also
watches its own clock — when it runs out, everything already collected is
charged and pushed, and the run finishes with a status saying how many videos
were done and that raising the run timeout (or lowering maxVideos) is the fix.
It never gets killed mid-list.
A few links, English
{"videoUrls": ["https://www.youtube.com/watch?v=aircAruvnKk","https://youtu.be/jNQXAC9IVRw","https://www.youtube.com/shorts/dQw4w9WgXcQ"],"preferredLanguages": ["en"],"outputFormat": "both"}
French if it exists, English otherwise, human captions only
{"videoUrls": ["aircAruvnKk","PkZNo7MFNFg"],"preferredLanguages": ["fr", "en"],"includeAutoGenerated": false,"outputFormat": "text"}
Text for an LLM, bounded spend
{"videoUrls": ["https://www.youtube.com/watch?v=aircAruvnKk"],"preferredLanguages": ["en"],"outputFormat": "text","maxVideos": 50}
Pricing
| Event | Price |
|---|---|
| Transcript extracted | $0.004 per video, i.e. $4 per 1,000 transcripts |
| Run start | $0.001 per run |
Store discounts apply on top: Bronze $0.0036, Silver $0.0032, Gold $0.0028 per transcript.
Two things that make the bill smaller than it looks:
- Misses are free. A video with no captions, a private video, a deleted video, a members-only video, a video YouTube's bot check refused: all of these come back as a row explaining what happened, and none of them is charged. You pay for transcripts, not for attempts.
- Platform usage is included. Residential proxies and compute are on us. There is no proxy setting in the input because there is nothing for you to pay for or configure.
Limits and honest caveats
- Only videos that already have captions. This actor reads YouTube's own caption tracks, human-written or speech-recognised. It does not transcribe audio itself, so a video with captions turned off has none to give and is reported as
no-captions. - Very long videos are capped. A four-hour lecture is roughly 3,000 segments and 150,000 characters and comes back whole. Past 400,000 characters or 40,000 segments the transcript is cut and
transcriptTruncatedis true, so one enormous video cannot blow up your dataset. - Private, members-only and age-restricted videos cannot be read without an account, and this actor never signs in to anything. They come back with the matching status.
- A live stream has no transcript until it ends and YouTube has processed captions for the recording.
- Machine translation is YouTube's, not ours. When
isTranslatedis true the text quality is whatever YouTube's translation gives you, which is fine for search and gisting and not for publishing. - View counts are a snapshot taken at the moment of the run.
Frequently asked questions
How do I get the transcript of a YouTube video without an API key? Run this actor with the video's link. There is no key, no OAuth and no Google Cloud project. The public YouTube Data API will not give you caption text unless you own the channel.
Can I get transcripts for a whole YouTube channel or playlist?
Give it the list of video links. Any actor or export that produces YouTube URLs can be piped straight in: the input accepts objects with a url, videoUrl or videoId key, so another scraper's dataset works as-is.
Which languages are supported?
Whatever the video has. availableLanguages on every row lists them, so you can re-run for a different one. If your language is missing but YouTube offers a machine translation, you get that instead and the row says isTranslated: true.
Can I get subtitles with timestamps, like an SRT file?
Yes, in segments: each one has start and duration in seconds and its own text. Building an SRT or VTT file from that is a few lines of code.
How accurate are auto-generated captions?
They are YouTube's speech recognition. Good on clear studio audio, weaker on accents, music and crosstalk, and they carry no punctuation on some older videos. isAutoGenerated tells you which rows to treat carefully.
Do you charge for videos that have no transcript? No. Only a delivered transcript is charged, plus the $0.001 run start fee.
Is scraping YouTube transcripts legal? This reads publicly available caption tracks that YouTube serves to any viewer, the same data you see by opening "Show transcript" under a video. Copyright in the underlying content stays with its owner: use transcripts for research, analysis and indexing, and check your own rights before republishing them.
Why did a video come back as blocked?
YouTube occasionally shows an anti-bot check instead of the video data. The actor rotates to a new exit and retries several times before giving up, and a blocked video is never charged. Re-running it usually works.
Related actors
- Apple App Store Reviews and Google Play Reviews for what users write about an app.
- Trustpilot Reviews and Capterra Reviews for the same job on companies and software.
- Brand News Monitor to watch what is being published about a brand.
- Telegram Channel Monitor and Threads Scraper for social listening on other surfaces.
YouTube transcript scraper, YouTube captions API, bulk YouTube transcripts, YouTube subtitles to JSON, YouTube transcript extractor, download YouTube subtitles, YouTube video transcript for LLM, YouTube transcript to text, YouTube auto-generated captions, YouTube transcript API without key, YouTube Shorts transcript, YouTube transcript translation.