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

22 days ago

Last modified

Features

Limited permissions

Share

Get clean, timestamped transcripts from YouTube — single videos, whole channels, or playlists — together with the metadata you need to organize, translate, and publish the result. Every row includes the full text, timed segments, caption-track details, chapters, and channel identity, with optional AI transcription and ready-to-use SRT or WebVTT subtitles.

What this actor does

  • Three collection modes: scrape specific video URLs, every upload from one or more channels, or every video in a playlist.
  • Transcripts with timing: full text, timestamped segments (start, duration, and end), optional word-level timings for auto-generated captions, and SRT/VTT export.
  • Language selection and translation: request a caption language; when the video has no track in that language, the actor translates through YouTube's own translation targets.
  • Rich video and channel metadata: exact publish time, channel handle/URL/avatar/verification, subscriber and comment display counts, chapters, most-replayed heatmap, caption tracks, translation targets, and access/live status.
  • AI fallback: when a video has no captions at all, optional Whisper transcription produces a transcript from the audio.
  • Empty fields are omitted: if a video genuinely lacks a data point (for example, no chapters), that field is left out of the record instead of being written as null.

Output per video

  • video_id, title, channel_name, channel_id — core video and channel identity
  • canonicalUrl — canonical https://www.youtube.com/watch?v=... URL
  • published_date — publication date (YYYY-MM-DD)
  • publishedAt — exact publication timestamp with timezone
  • duration_seconds, views, like_count, category, keywords, description
  • thumbnail — video thumbnail URL
  • channelHandle, channelUrl, channelThumbnail, channelVerified
  • subscriberCountText — display text such as 6.71M subscribers
  • subscriberCount — approximate integer parsed from the display text
  • commentCountText — display text such as 10M (not an exact integer)
  • isUnlisted, is_family_safe, is_live_content, is_upcoming
  • accessStatus — ok, live, upcoming, age_restricted, private, unavailable, region_blocked, or login_required
  • wasLive, liveStatus — live, upcoming, or ended_live when applicable
  • scheduledStartTime — scheduled or actual broadcast start for live/upcoming videos
  • chapters[] — { title, start, duration, startText } for videos that expose chapters
  • heatmap[] — most-replayed buckets as { start, duration, intensity }
  • captionTracks[] — { languageCode, languageName, isAutoGenerated, isTranslatable }
  • translationLanguages[] — { languageCode, languageName } targets YouTube offers
  • requested_language, transcript_language, transcript_language_name
  • language_matched — whether the returned transcript is in the requested language
  • is_auto_generated — true for YouTube auto-captions, false for manual/translated captions or AI output
  • was_translated — true only when YouTube translated the transcript into the requested language
  • transcript_source — library, android_player, playwright_dom, or whisper
  • available_languages[] — every caption track YouTube offers as { code, name, is_auto_generated }
  • segments[] — { start, dur, end, text } (seconds with millisecond precision); omitted for text_only, srt, and vtt
  • full_text — the complete transcript as one string; omitted for segments_only, srt, and vtt
  • wordTimings[] — { start, end, text } word timings, only when includeWordTimings is on and the source is auto-generated
  • srt, vtt — subtitle text when outputFormat is srt or vtt
  • segment_count, transcript_available, success
  • error — human-readable explanation when no transcript was produced
  • errorCode — machine-readable reason: captions_disabled, no_captions, age_restricted, login_required, blocked, unavailable, private, upcoming, live_no_transcript, timeout, invalid_url, or whisper_failed
  • retryable — whether a later run may succeed (for example, a temporary block or timeout)
  • language_probability — language-detection confidence for AI transcripts
  • inputUrl — the URL that produced this row
  • scrapedAt — ISO timestamp of the scrape

Input

FieldTypeDefaultDescription
modeStringvideosvideos (specific URLs), channel (channel uploads), or playlist (playlist videos)
videoUrlsArray–Watch URLs, youtu.be links, Shorts/embed URLs, or plain 11-character IDs (mode=videos). Duplicate IDs run once.
channelUrlsArray–Channel URLs, @handles, or UC... IDs (mode=channel)
maxVideosPerChannelInteger50Maximum videos enumerated per channel (1–1,000)
playlistUrlsArray–Playlist URLs or playlist IDs (mode=playlist)
maxVideosPerPlaylistInteger50Maximum videos enumerated per playlist (1–1,000)
languageStringAuto-detect (video's original language)Caption language to prefer, as a two-letter code such as en, es, ja, or ar
includeAutoGeneratedBooleantrueUse YouTube auto-generated captions when manual captions are unavailable
useWhisperBooleantrueTranscribe the audio with AI when no YouTube transcript can be retrieved
whisperModelStringbasetiny, base, small, medium, or large-v3-turbo
includeWordTimingsBooleanfalseInclude word-level timings (auto-generated captions only)
maxWhisperMinutesInteger–Leave unset for no length limit; 0 disables AI explicitly; a positive value caps AI to that video length.
proxyCountryStringUSCountry for the network connection, one of the 31 supported codes
outputFormatStringfullfull, text_only, segments_only, srt, or vtt

Example: several videos with SRT subtitles

{
"mode": "videos",
"videoUrls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://youtu.be/jNQXAC9IVRw",
"https://www.youtube.com/shorts/s5ORfA5W-M0"
],
"language": "en",
"outputFormat": "srt"
}

Example: every upload from a channel

{
"mode": "channel",
"channelUrls": ["https://www.youtube.com/@TED"],
"maxVideosPerChannel": 25,
"language": "en",
"includeWordTimings": true
}

Example: a playlist translated to Spanish

{
"mode": "playlist",
"playlistUrls": ["https://www.youtube.com/playlist?list=PL1234567890abcdef"],
"maxVideosPerPlaylist": 100,
"language": "es",
"outputFormat": "full"
}

Example: AI transcription for videos without captions

{
"mode": "videos",
"videoUrls": ["https://www.youtube.com/watch?v=IR1xf8jG7ug"],
"useWhisper": true,
"whisperModel": "small",
"maxWhisperMinutes": 20
}

Use cases

  • AI and RAG pipelines — feed clean, timestamped transcripts into language models, search indexes, and knowledge bases.
  • Content repurposing — turn webinars, interviews, and long-form videos into articles, summaries, and social posts.
  • Subtitling and localization — export SRT/VTT and translate transcripts for multilingual audiences.
  • Media monitoring — follow a channel or playlist and collect everything its creators publish.
  • Research and journalism — quote speakers accurately with timestamps, chapters, and exact publish dates.
  • Education and accessibility — build searchable transcripts for lectures, courses, and public talks.

FAQ

Which videos can I scrape? Any public YouTube video with manual or auto-generated captions, plus public videos without captions when AI transcription is enabled. Private, deleted, members-only, and age-restricted videos cannot be transcribed.

What happens with live, upcoming, or age-restricted videos? The actor returns the metadata it can see (title, channel, dates, status) with success: false and a truthful accessStatus / errorCode. Live streams, premieres, and age-gated videos have no transcript until they become publicly playable.

What if a video has no captions at all? Keep useWhisper on and the actor transcribes the audio. base is a good balance; use small for accented speech, multiple speakers, or noisy recordings. Use maxWhisperMinutes to skip very long videos, or set it to 0 explicitly to turn AI off.

How does the requested language work? The actor first looks for a caption track in your language, then for a regional variant such as en-GB for en. If no track exists, it asks YouTube to translate an available track. was_translated and language_matched tell you exactly what happened.

Which output formats are available? full returns text plus timed segments; text_only returns only the text; segments_only returns only the timed segments; srt and vtt return ready-to-use subtitle files. All formats keep the video metadata.

Can I collect a whole channel or playlist? Yes. Choose channel or playlist mode and provide one or more URLs. You can cap each target with maxVideosPerChannel or maxVideosPerPlaylist. Duplicate videos across targets are collected once.

Are word-level timestamps available? Yes, for videos with auto-generated YouTube captions. Turn on includeWordTimings; manually uploaded captions and AI transcripts do not expose word timings.

Do I need to set up a proxy? No. The actor chooses a working connection to YouTube automatically. Just fill in the input and run it.

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

Limitations

  • YouTube sometimes blocks automated requests from cloud networks. The actor retries and switches connection paths automatically, but an occasional video may still return a truthful success: false row.
  • Age-restricted, members-only, private, deleted, live, and upcoming videos are metadata-only; they cannot be transcribed without a signed-in session.
  • Translation uses YouTube's own translation targets. If YouTube does not offer the requested language, the actor returns the original transcript with language_matched: false rather than inventing a translation. When YouTube login-walls the translation page for an automated connection, the same fallback applies.
  • AI transcription downloads the audio; when the connection is blocked, the actor retries through a residential path and still reports a truthful whisper_failed if the block persists.
  • Channel and playlist expansion reads YouTube's public listings and honours maxVideosPerChannel / maxVideosPerPlaylist; private, blocked or empty listings return fewer videos (or none) with a status note.
  • Chapters, heatmaps, and comment counts are not exposed for every video. They are omitted when YouTube does not provide them.
  • Subscriber and comment counts are display strings; subscriberCount is an approximation and commentCountText is not an exact integer.
  • AI transcription is not available for live or upcoming broadcasts, and its accuracy depends on audio quality, music, and the selected model.
  • Setting maxWhisperMinutes to 0 disables AI explicitly; leaving the field unset keeps the legacy no-length-limit behavior.