YouTube Transcript Scraper 📝 (bulk, any language) avatar

YouTube Transcript Scraper 📝 (bulk, any language)

Pricing

from $2.80 / 1,000 transcript extracteds

Go to Apify Store
YouTube Transcript Scraper 📝 (bulk, any language)

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

Tagada Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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 actorThe most-used YouTube transcript actor on ApifyYouTube Data API
Price$4 per 1,000 transcripts, all-in$10 per 1,000Captions endpoint needs the channel owner's OAuth
Platform usageIncludedUsually billed on topn/a
Videos with no captionsFree, with the reasonUsually billed as a resultn/a
Language choiceOrdered list, falls back to machine translationUsually whatever the video defaults ton/a
Timed segmentsYes, with plain text on the same rowOften one or the othern/a
SetupPaste linksPaste linksGoogle 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:

FieldDescription
videoIdThe 11-character YouTube ID
urlCanonical watch link
statusok, no-captions, blocked, unavailable, private, members-only, age-restricted, geo-blocked, not-started, unplayable or error
statusMessageWhy there is no transcript, in YouTube's own words where it has any
titleVideo title
channel, channelId, channelUrlWho published it
durationSecondsLength in seconds
viewCountViews at the moment of the run
isLiveTrue for a live stream or a video that was one
thumbnailUrlLargest thumbnail YouTube lists
languageLanguage of the transcript you actually got
languageNameSame, in YouTube's wording, e.g. English (auto-generated)
isAutoGeneratedTrue when the captions came from speech recognition rather than a human
isTranslatedTrue when YouTube machine-translated the track into your language
matchedPreferredLanguageFalse when none of your languages was available and you got the video's own track instead
availableLanguagesEvery caption track the video has, so you can re-run for another one
cueCountNumber of timed segments
characterCountLength of the transcript in characters
transcriptTruncatedTrue only on extremely long videos (see the limit below)
transcriptThe whole transcript as one string
segments[{ start, duration, text }], seconds as decimals
capturedAtWhen 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.

FieldWhat it does
videoUrlsThe 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
preferredLanguagesLanguage codes in order of preference, e.g. ["fr", "en"]. en also matches en-GB and en-US
includeAutoGeneratedOff means human-written subtitles only. Videos with nothing but speech-recognition captions are then reported as no-captions and not charged
outputFormatboth (default), text, or segments
maxVideosStop 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.

{
"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

EventPrice
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 transcriptTruncated is 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 isTranslated is 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.


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.