YouTube Transcript Scraper avatar

YouTube Transcript Scraper

Pricing

from $0.24 / 1,000 transcript extracteds

Go to Apify Store
YouTube Transcript Scraper

YouTube Transcript Scraper

Extract YouTube transcripts from videos, playlists, and channel videos. Verify caption language and export subtitle timings with millisecond precision.

Pricing

from $0.24 / 1,000 transcript extracteds

Rating

0.0

(0)

Developer

Hypebridge

Hypebridge

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

4 days ago

Last modified

Share

Extract available YouTube captions as timestamped segments and continuous text. Submit video or Shorts URLs, playlists, channel URLs, and exact 11-character video IDs. Playlists and a channel's Videos tab expand to video IDs before transcript extraction. The scraper uses YouTube's public web interfaces and does not require a Google API key. It returns captions YouTube makes available to the request; it does not transcribe audio when captions are missing.

What you get

Each processed video produces a record with its canonical watch URL, the original video, playlist, or channel URL in sourceUrl, a sourceType, market and locale hints, chapter names when exposed by YouTube, segment start times, and optional full text. When captionLanguage is explicit, the Actor selects a matching YouTube caption track (preferring manual captions) and retrieves its source timed cues. Those records include startMilliseconds and durationMilliseconds per segment. With includeSubtitles: true, SRT and WebVTT use those exact source timings and report subtitleTiming: "source_milliseconds". Automatic mode keeps the transcript-panel path and reports inferred subtitle end times.

requestedLocale records the locale or requested caption language. Use captionLanguage to ask for a specific language. The Actor checks YouTube's available caption tracks and prefers a manual track over an auto-generated track in the matched language. If no matching language exists it returns language_unavailable instead of silently substituting a different language. Successful explicit requests report the actual captionLanguage, captionTrackName, and captionSource (manual or auto_generated). Automatic mode retains YouTube's transcript-panel behavior and does not claim a verified language.

Input

Paste one or more supported YouTube URLs or video IDs in YouTube video, playlist, or channel URLs. The input list is capped at 10,000 entries and each value at 2,048 characters. maxItems controls the maximum number of unique videos processed across direct URLs and expanded sources. Supported video URL forms include watch, Shorts, live, embed, and youtu.be; supported markets include youtube.com, youtube.co.in, youtube.com.br, youtube.co.jp, and youtube.de. Playlist URLs must use /playlist?list=…. Channel URLs can use @handle, /channel/UC…, /c/…, or /user/…; these expand the channel's Videos tab. Bare 11-character IDs use the US market by default. Other regional storefront hosts are skipped.

FieldDefaultDescription
videoUrls[]Video URLs or IDs, playlist URLs, and channel URLs. Each entry may be up to 2,048 characters; duplicate videos are processed once.
maxItems100Maximum unique videos to process across all inputs, from 1 to 10,000.
captionLanguageautoOptional BCP-47 language code such as en, es, or pt-BR. Selects a matching track, preferring manual captions, and uses YouTube timedtext cues.
preferredLanguageautoLegacy compatibility field. It only hints the request locale and does not verify or select a caption track.
proxyCountryAUTOOptional market context: AUTO, US, IN, BR, JP, or DE. A URL gl market parameter takes precedence.
includeFullTexttrueInclude transcript text joined into one string.
includeSegmentstrueInclude individual segments with whole-second start times.
includeSubtitlesfalseInclude SRT and WebVTT. Explicit captionLanguage uses source cue start and duration; automatic mode infers cue end times.
includeChapterstrueInclude chapter titles. In exact-language mode, turn off to skip an extra YouTube request; automatic mode already gets chapters with the transcript response.
diagnosticFallbacktrueOn an empty transcript response, make one bounded watch-page request to classify the result.
maxConcurrency15Number of videos processed concurrently, from 1 to 15. Higher concurrency can reduce run time and compute charges.

Example input:

{
"videoUrls": [
"UF8uR6Z6KLc",
"https://www.youtube.com/playlist?list=PLMC9KNkIncKtPzgY-5rmhvj7fax8fdxoj",
"https://www.youtube.com/@YouTube/videos"
],
"maxItems": 10,
"captionLanguage": "es",
"includeSubtitles": true
}

Select Spanish captions with source-exact cue timing:

{
"videoUrls": ["https://www.youtube.com/watch?v=UF8uR6Z6KLc"],
"captionLanguage": "es",
"includeSubtitles": true
}

Process the first 20 videos from a channel's Videos tab:

{
"videoUrls": ["https://www.youtube.com/@YouTube/videos"],
"maxItems": 20,
"includeSegments": false
}

Output and statuses

Results are written to the default dataset. available means at least one timestamped transcript segment was extracted. Other statuses distinguish missing captions, a requested caption language that is unavailable, unavailable or invalid videos, empty responses that could not be classified, parse failures, and request failures. Non-available records have zero segments. The overview and segments dataset views are available from the Output tab.

Here is an abbreviated excerpt from a successful run in automatic mode. requestedLocale records the request locale; captionLanguage is populated only for an explicit language selection that matched a YouTube track.

{
"videoId": "UF8uR6Z6KLc",
"url": "https://www.youtube.com/watch?v=UF8uR6Z6KLc",
"sourceUrl": "UF8uR6Z6KLc",
"sourceType": "video",
"market": "US",
"requestedLocale": "en",
"status": "available",
"source": "youtube_web_get_panel",
"totalChapters": 5,
"totalSegments": 110,
"chapters": [
{ "title": "Chapter 1: Intro", "segmentStartIndex": 0 },
{ "title": "Chapter 2: College", "segmentStartIndex": 13 }
],
"segments": [
{
"index": 1,
"chapter": "Chapter 1: Intro",
"timestamp": "0:07",
"startSeconds": 7,
"text": "This program is brought to you by Stanford University."
}
],
"extractedAt": "2026-10-20T01:44:01.295Z"
}

With captionLanguage: "es" and includeSubtitles: true, available records contain captionLanguage, captionTrackName, captionSource, startMilliseconds, durationMilliseconds, srt, vtt, and subtitleTiming: "source_milliseconds". In automatic mode the transcript-panel path reports whole-second segment starts and, when subtitles are requested, subtitleTiming: "inferred_end_times"; inferred ends use later segment starts and a three-second final cue. subtitleTruncated indicates whether a size or cue cap shortened either export.

Pricing

The Actor currently charges the configured transcript-extracted event for every successful transcript, including explicit caption-language requests. An Actor-start event is also charged according to the Store pricing configuration and run memory. Current event rates are shown on the Store page and in the pricing section of the Apify Console. Videos without a returned transcript are not charged a transcript event.

Limits and tips

  • Videos must be reachable and expose captions through YouTube's web transcript interface. Missing captions are not synthesized from audio.
  • Channel and playlist expansion follows YouTube's current browse continuation and stops at maxItems, 100 pages per source, 150 discovery requests total, 50 source URLs, or 45 seconds. If expansion stops early, RUN_SUMMARY reports that it was truncated and lists remaining source URLs.
  • captionLanguage selects a matching YouTube caption track and prefers manual over auto-generated captions. Successful records report the selected track's actual language and source.
  • Explicit language requests use YouTube timedtext cue starts and durations in milliseconds. Automatic transcript-panel records retain whole-second start times.
  • Set includeChapters: false to avoid the additional chapter request in exact-language mode while preserving the selected caption language and exact segment timings. In automatic mode this only omits the chapter fields from output.
  • On Apify, channel and playlist discovery and explicit language requests use country-matched residential egress. These requests are response-capped and page-capped; automatic transcript-panel extraction continues to use datacenter egress unless a market override is supplied.
  • Use includeFullText: true and includeSegments: false when you only need joined text. Keep segments enabled when you need timestamps or chapters.
  • Use an explicit captionLanguage with includeSubtitles when source-exact SRT or WebVTT cue timing is useful. Automatic mode's subtitle ends remain estimates.
  • The Actor applies bounded request sizes, retries, concurrency, and run time to keep batches predictable. If a run stops before all selected videos are processed, check the run summary and dataset for completed records. The summary includes up to 2,000 remaining accepted inputs and reports the full remaining count.

Support

Use the Issues tab on the Store page to report a problem. Include the run ID and an example video URL so the issue can be reproduced.