YouTube Caption & Whisper AI Transcript Extractor
Pricing
from $0.49 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
22 days ago
Last modified
Categories
Features
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 identitycanonicalUrl— canonicalhttps://www.youtube.com/watch?v=...URLpublished_date— publication date (YYYY-MM-DD)publishedAt— exact publication timestamp with timezoneduration_seconds,views,like_count,category,keywords,descriptionthumbnail— video thumbnail URLchannelHandle,channelUrl,channelThumbnail,channelVerifiedsubscriberCountText— display text such as6.71M subscriberssubscriberCount— approximate integer parsed from the display textcommentCountText— display text such as10M(not an exact integer)isUnlisted,is_family_safe,is_live_content,is_upcomingaccessStatus—ok,live,upcoming,age_restricted,private,unavailable,region_blocked, orlogin_requiredwasLive,liveStatus—live,upcoming, orended_livewhen applicablescheduledStartTime— scheduled or actual broadcast start for live/upcoming videoschapters[]—{ title, start, duration, startText }for videos that expose chaptersheatmap[]— most-replayed buckets as{ start, duration, intensity }captionTracks[]—{ languageCode, languageName, isAutoGenerated, isTranslatable }translationLanguages[]—{ languageCode, languageName }targets YouTube offersrequested_language,transcript_language,transcript_language_namelanguage_matched— whether the returned transcript is in the requested languageis_auto_generated—truefor YouTube auto-captions,falsefor manual/translated captions or AI outputwas_translated—trueonly when YouTube translated the transcript into the requested languagetranscript_source—library,android_player,playwright_dom, orwhisperavailable_languages[]— every caption track YouTube offers as{ code, name, is_auto_generated }segments[]—{ start, dur, end, text }(seconds with millisecond precision); omitted fortext_only,srt, andvttfull_text— the complete transcript as one string; omitted forsegments_only,srt, andvttwordTimings[]—{ start, end, text }word timings, only whenincludeWordTimingsis on and the source is auto-generatedsrt,vtt— subtitle text whenoutputFormatissrtorvttsegment_count,transcript_available,successerror— human-readable explanation when no transcript was producederrorCode— machine-readable reason:captions_disabled,no_captions,age_restricted,login_required,blocked,unavailable,private,upcoming,live_no_transcript,timeout,invalid_url, orwhisper_failedretryable— whether a later run may succeed (for example, a temporary block or timeout)language_probability— language-detection confidence for AI transcriptsinputUrl— the URL that produced this rowscrapedAt— ISO timestamp of the scrape
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | String | videos | videos (specific URLs), channel (channel uploads), or playlist (playlist videos) |
videoUrls | Array | – | Watch URLs, youtu.be links, Shorts/embed URLs, or plain 11-character IDs (mode=videos). Duplicate IDs run once. |
channelUrls | Array | – | Channel URLs, @handles, or UC... IDs (mode=channel) |
maxVideosPerChannel | Integer | 50 | Maximum videos enumerated per channel (1–1,000) |
playlistUrls | Array | – | Playlist URLs or playlist IDs (mode=playlist) |
maxVideosPerPlaylist | Integer | 50 | Maximum videos enumerated per playlist (1–1,000) |
language | String | Auto-detect (video's original language) | Caption language to prefer, as a two-letter code such as en, es, ja, or ar |
includeAutoGenerated | Boolean | true | Use YouTube auto-generated captions when manual captions are unavailable |
useWhisper | Boolean | true | Transcribe the audio with AI when no YouTube transcript can be retrieved |
whisperModel | String | base | tiny, base, small, medium, or large-v3-turbo |
includeWordTimings | Boolean | false | Include word-level timings (auto-generated captions only) |
maxWhisperMinutes | Integer | – | Leave unset for no length limit; 0 disables AI explicitly; a positive value caps AI to that video length. |
proxyCountry | String | US | Country for the network connection, one of the 31 supported codes |
outputFormat | String | full | full, 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: falserow. - 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: falserather 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_failedif 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;
subscriberCountis an approximation andcommentCountTextis 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
maxWhisperMinutesto0disables AI explicitly; leaving the field unset keeps the legacy no-length-limit behavior.