YouTube Caption & Whisper AI Transcript Extractor avatar

YouTube Caption & Whisper AI Transcript Extractor

Pricing

from $0.49 / 1,000 results

Go to Apify Store
YouTube Caption & Whisper AI Transcript Extractor

YouTube Caption & Whisper AI Transcript Extractor

Get timestamped transcripts from YouTube videos in your preferred language, with optional AI transcription for videos that have no captions at all. Returns full text, timed segments, and core video metadata.

Pricing

from $0.49 / 1,000 results

Rating

0.0

(0)

Developer

Nimbryxo-studio

Nimbryxo-studio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Get the transcript of any public YouTube video — timestamped segments, a full plain-text version, language info, and core video details — ready for AI pipelines, content repurposing, translation, and research.

When a video has no captions at all (the uploader disabled them, or it's music-only with no on-screen text), optional AI transcription can transcribe the audio directly so you still get a usable transcript.

What this actor does

  • Returns every transcript segment with its start time, duration, and text, plus the full transcript as one string
  • Lets you request a specific caption language; YouTube's own translation is used when your language isn't natively available
  • With useWhisper on (the default), falls through to AI-generated transcription when YouTube has no captions at all, so you still get usable text
  • Processes multiple videos in one run, each pushed as its own record
  • Fields that don't apply to a given video (e.g. no like_count when YouTube didn't expose one) are left out of that record

Output per video

  • video_id, title, channel_name, channel_id
  • duration_seconds, views, like_count, published_date, thumbnail
  • category, keywords, description
  • is_live_content, is_upcoming, is_family_safe
  • transcript_language, transcript_language_name, requested_language, language_matched
  • is_auto_generated — true for YouTube's auto-caption, false for manually uploaded captions, translated captions, or AI-generated output
  • was_translated — true only when YouTube translated an available caption track to your requested language
  • transcript_source — which path produced the transcript: library, caption_url, android_player, innertube, playwright_dom, or whisper
  • language_probability — language-detection confidence, only set when transcript_source is whisper
  • available_languages — every transcript language YouTube offers for the video
  • segments — timestamped entries, each with start, dur (seconds, as strings with three decimals) and text; left out when outputFormat is text_only
  • full_text — the whole transcript as one string; left out when outputFormat is segments_only
  • segment_count, transcript_available
  • success — true when a transcript was extracted
  • error — reason text when success is false
  • inputUrl, scrapedAt

A video that fails gets a row with success: false, an error message, inputUrl, scrapedAt and whatever video details were found (an unrecognisable URL gets only the first four). If the run gets close to its timeout, videos not yet started are written as success: false rows with the error "Run time budget reached before processing", so every input still has a row. An input that fails validation (for example an empty videoUrls list) produces a single success: false row explaining why.

Input

FieldTypeDefaultDescription
videoUrlsArray–YouTube watch URLs, youtu.be short links, Shorts URLs, embed URLs, or plain 11-char video IDs. Required.
languageString""Preferred language code (en, es, fr, de, ja, ko, …). Empty = best available.
includeAutoGeneratedBooleantrueInclude YouTube auto-captions when manual ones aren't available.
useWhisperBooleantrueTranscribe the video's audio with AI when YouTube has no transcript at all. Adds ~30-180 s per video. This output is derived speech-to-text, not a YouTube caption.
whisperModelEnumbasetiny, base, small, medium, or large-v3-turbo
proxyCountryEnumUSOne of the 31 schema-supported country/region codes
outputFormatEnumfullfull, text_only, or segments_only

Supported URL formats

  • https://www.youtube.com/watch?v=dQw4w9WgXcQ
  • https://youtu.be/dQw4w9WgXcQ
  • https://www.youtube.com/shorts/VIDEO_ID
  • https://www.youtube.com/embed/VIDEO_ID
  • Plain 11-char ID: dQw4w9WgXcQ

Example input — multiple videos, English preferred

{
"videoUrls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://youtu.be/9bZkp7q19f0",
"https://www.youtube.com/shorts/abc123XYZ45"
],
"language": "en",
"includeAutoGenerated": true
}

Example input — AI transcription for videos with no captions

{
"videoUrls": ["https://www.youtube.com/watch?v=XqZsoesa55w"],
"useWhisper": true,
"whisperModel": "small"
}

Examples

{
"video_id": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"channel_name": "Rick Astley",
"channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw",
"duration_seconds": 213,
"views": 1769190465,
"published_date": "2009-10-24",
"thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"transcript_language": "en",
"transcript_language_name": "English",
"is_auto_generated": false,
"transcript_source": "caption_url",
"available_languages": [
{ "code": "en", "name": "English", "is_auto_generated": false },
{ "code": "es-419", "name": "Spanish (Latin America)", "is_auto_generated": false }
],
"segments": [
{ "start": "1.360", "dur": "1.680", "text": "[♪♪♪]" },
{ "start": "18.640", "dur": "3.240", "text": "We're no strangers to love" }
],
"segment_count": 61,
"full_text": "[♪♪♪] We're no strangers to love You know the rules and so do I ...",
"success": true,
"inputUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"scrapedAt": "2026-05-05T13:42:18Z"
}

Example: English transcript

{
"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"language": "en",
"outputFormat": "full"
}

Example: translated transcript

{
"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"language": "es"
}

Example: AI transcription for videos without captions

{
"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"useWhisper": true,
"whisperModel": "base"
}

Use cases

  • AI training data — Build text corpora from YouTube content for LLM fine-tuning or RAG pipelines.
  • Content repurposing — Turn long videos into blog posts, summaries, or social copy.
  • Research and analysis — Pull spoken content from lectures, interviews, podcasts, and documentaries.
  • Subtitles and accessibility — Retrieve captions for translation or accessibility workflows.
  • SEO and keyword research — Analyse spoken keywords and topics across YouTube content.
  • Competitive intelligence — Monitor what competitors say in their videos.
  • Education — Extract transcripts from online courses for indexing or study notes.
  • Sentiment analysis — Run sentiment or topic models against transcripts at scale.

FAQ

Which videos can I scrape? Any public YouTube video that has manually created or auto-generated captions, plus — with useWhisper on — public videos without captions whose audio can be downloaded. Private videos, deleted videos, and members-only videos cannot be scraped — those return success=false with an error message.

What if a video has no captions at all? Set useWhisper: true to transcribe the audio with AI. For clear speech, whisperModel=base is the sweet spot. For music, noisy audio, or short clips, use whisperModel=small for noticeably better accuracy.

What if my requested language isn't available? An exact match (en) is tried first, then regional variants (en matches en-GB, en-US), then the best available transcript. The available_languages field always lists everything on offer for that video.

What's the difference between transcript_source values?

  • caption_url / android_player — pulled directly from YouTube's own published caption tracks (fastest, most reliable, real human or YouTube auto-captions).
  • innertube — pulled from an alternate YouTube data endpoint when the primary path didn't return captions.
  • playwright_dom — extracted straight from the video page's own transcript panel as a last resort.
  • whisper — generated with AI from the video's audio when YouTube has no captions at all.

How accurate are auto-generated captions vs Whisper? YouTube auto-captions are generally accurate for clear English speech. Whisper base is comparable for clean audio, and Whisper small typically beats YouTube on accents, multiple speakers, and noisy audio. Both struggle on music with non-vocal singing.

The Whisper output looks like garbage / repetitive text. Whisper-tiny on music or near-silent clips can hallucinate repetitive phrases. The actor automatically detects this (low language-detection confidence + identical segment text) and returns success=false with an actionable error pointing you at a larger model. Re-run with whisperModel=small for music videos.

Can I scrape multiple videos in one run? Yes — pass an array of URLs. Videos are processed a couple at a time and each is pushed as its own dataset row, so rows may not appear in the same order as your input; use inputUrl or video_id to match them up.

How current is the data? Live — every run hits YouTube at request time. Schedule the actor for daily / hourly refreshes.

Is this affiliated with YouTube? No. This is an independent, third-party actor that reads YouTube's publicly available caption data; it is not affiliated with, endorsed by, or operated by YouTube or Google.

Limitations

  • Private, members-only, age-restricted, and deleted videos cannot be scraped.
  • AI transcription adds roughly 30-180 s per video depending on length and model size.
  • AI transcription accuracy on heavy music or pure-instrumental audio is fundamentally limited regardless of model size.
  • YouTube can change how it serves captions at any time; a transient issue on YouTube's side may still cause success=false for individual videos.