YouTube Transcript & Subtitles Bulk — Multilingual, No API Key avatar

YouTube Transcript & Subtitles Bulk — Multilingual, No API Key

Pricing

from $5.00 / 1,000 transcript fetcheds

Go to Apify Store
YouTube Transcript & Subtitles Bulk — Multilingual, No API Key

YouTube Transcript & Subtitles Bulk — Multilingual, No API Key

Bulk YouTube transcript and subtitles extractor. Up to 200 video URLs, a channel or a playlist in; one row per video out: full text, timestamped segments, language, manual or auto-generated, word count, duration, verdict. Multilingual with auto-translation. No API key, no cookies, no video download.

Pricing

from $5.00 / 1,000 transcript fetcheds

Rating

0.0

(0)

Developer

daehwan kim

daehwan kim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Paste a list of YouTube videos, get every transcript back as clean JSON. This YouTube transcript scraper and subtitles extractor reads up to 200 videos per run — or a whole channel or playlist — and returns one row per video: the full plain text, timestamped segments, the caption language, whether it was manually written or auto-generated, word count, duration and a one-line verdict such as 12 min, 1,840 words, auto-generated EN.

No YouTube API key, no cookies, no browser. Pick your languages in priority order and the Actor finds the best caption track for each video — manual first, then auto-generated, then YouTube's own auto-translation — and tells you which one you got. Feed the rows into an LLM summariser, a search index, a content audit or a research corpus straight from the Apify API, a webhook, Google Sheets, Zapier or Make.

Powered by youtube-transcript-api (MIT), with yt-dlp as a metadata-only fallback engine for caption tracks the first engine cannot serve.

Unofficial. This Actor is not affiliated with, endorsed by, or sponsored by YouTube or Google. It reads only caption tracks the video already exposes publicly and never downloads or delivers video or audio files. See LICENSE-NOTICE.md and the disclaimer section below.

Why use YouTube Transcript & Subtitles Bulk?

  • Bulk, not one video at a time — up to 200 video URLs per run, plus a channelUrl or playlistUrl that is expanded into its newest videos, plus a datasetId from any YouTube search or channel scraper on Apify. Duplicates are removed across all sources.
  • Multilingual with a real priority list["en", "en-US", "ko"] means: a manual English track if there is one, else an auto-generated English track, else YouTube's auto-translation into English, else (optionally) the video's own language. Every row says exactly which it got: language, isAutoGenerated, isTranslated, matchedRequestedLanguage.
  • Two engines — when the primary engine is blocked or has no track in your language, yt-dlp lists the same video's caption tracks (including all auto-translations) and the Actor fetches the caption file directly. The row's engine and attempts fields show the path taken.
  • Both formats at oncefullText for LLMs and search, segments with start / dur / text for subtitle files, clipping and timestamps. Choose outputFormat to keep only one.
  • A verdict, not just textheadline, wordCount, segmentCount, durationSec, channelName, videoTitle and the full availableLanguages list on every row, so you can triage 200 videos from the table view alone.
  • Honest about what it cannot get — a video with captions disabled, a deleted or private video, an age-restricted video or a bad URL becomes a notice row with a code (transcripts-disabled, video-unavailable, age-restricted, invalid-url, ip-blocked, …). Scheduled runs keep going; the run still ends as SUCCEEDED.
  • No key, no login, no bypassing — public caption endpoints only, an honest bot User-Agent, no CAPTCHA or bot-protection circumvention. YouTube's own rate limits are reported, not evaded.

How to use YouTube Transcript & Subtitles Bulk

  1. Paste video URLs into Video URLs or IDs (watch, shorts, youtu.be, embed or bare 11-character IDs), and/or set a Channel URL or Playlist URL.
  2. Put your preferred Languages in order, e.g. en, de, ja.
  3. Click Start. Read the rows in the Output tab or pull them through the Apify API. Filter on rowType == "transcript" for the transcripts.

Reading a channel's newest uploads every day? Pair it with our RSS Feed Reader on a schedule — every YouTube channel publishes an RSS feed — and pass the new links here. For videos that come back as no-transcript, our Whisper Speech to Text transcribes from the audio.

Input

FieldTypeDescription
videoUrlsarrayUp to 200 video URLs or 11-character IDs.
channelUrlstringChannel URL (https://www.youtube.com/@handle); its newest uploads are added, up to maxVideos.
playlistUrlstringPlaylist URL; its videos are added, up to maxVideos.
maxVideosintegerVideos taken from the channel and from the playlist (each), 1–200. Default 50.
datasetIdstringApify dataset whose rows carry a url, videoUrl, link, videoId or id field.
languagesarrayLanguage codes in priority order. Default ["en"].
allowAutoGeneratedbooleanAccept auto-generated (ASR) tracks. Default true.
allowTranslatedbooleanAccept YouTube's auto-translation into the first language. Default true.
fallbackToAnyLanguagebooleanIf nothing matches, return the video's own track and flag matchedRequestedLanguage: false. Default true.
outputFormatstringboth (default), fulltext or segments.
proxyConfigurationobjectApify proxy settings. Default: Apify RESIDENTIAL proxy, because YouTube blocks nearly every datacenter and cloud IP (measured: 1 of 8 videos through datacenter IPs, 3 of 3 through residential). Proxy usage is included in the price.
disclaimerAckbooleanAcknowledge that this is an unofficial tool and that you are responsible for how the transcripts are used. Required.

The whole run is capped at 200 videos across all sources.

{
"videoUrls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://www.youtube.com/watch?v=jNQXAC9IVRw",
"https://youtu.be/9bZkp7q19f0"
],
"channelUrl": "https://www.youtube.com/@Apify",
"maxVideos": 20,
"languages": ["en", "ko"],
"allowAutoGenerated": true,
"allowTranslated": true,
"outputFormat": "both",
"disclaimerAck": true
}

Output

Every dataset row carries a rowType:

rowTypeWhat it isCharged
transcriptOne video's transcript — text, segments, language, verdictyes, once per video
noticeStatus rows: one per video without a transcript (transcripts-disabled, no-transcript, video-unavailable, video-unplayable, age-restricted, invalid-video-id, ip-blocked, rate-limited, fetch-failed), plus summary, invalid-url, channel-listing-failed, playlist-listing-failed, dataset-read-failed, no-input, targets-truncated, free-plan-cap, charge-limit-reached, billing-unavailable, invalid-inputno

A transcript row:

{
"rowType": "transcript",
"videoId": "4KgZ83cultE",
"url": "https://www.youtube.com/watch?v=4KgZ83cultE",
"videoTitle": "After eight years in finance, she became an engineer | Kateřina Hroníková",
"channelName": "Apify",
"language": "en",
"languageName": "English (auto-generated)",
"isAutoGenerated": true,
"isTranslated": false,
"matchedRequestedLanguage": true,
"headline": "4 min, 696 words, auto-generated EN",
"wordCount": 696,
"segmentCount": 102,
"durationSec": 259.2,
"fullText": "It's never too late. And it's totally worth it. It can be …",
"segments": [
{ "start": 0.0, "dur": 5.0, "text": "It's never too late." },
{ "start": 2.0, "dur": 6.4, "text": "And it's totally worth it. It can be" }
],
"availableLanguages": [
{ "code": "en", "name": "English (auto-generated)", "isAutoGenerated": true }
],
"engine": "youtube-transcript-api",
"attempts": ["youtube-transcript-api:ok"],
"sourceList": "https://www.youtube.com/@Apify",
"fetchedAt": "2026-09-03T01:31:59.816086+00:00",
"disclaimer": "Unofficial. …"
}

A video without a usable track:

{
"rowType": "notice",
"noticeCode": "transcripts-disabled",
"videoId": "XXXXXXXXXXX",
"url": "https://www.youtube.com/watch?v=XXXXXXXXXXX",
"headline": "XXXXXXXXXXX — transcripts-disabled: Captions are disabled for this video by its owner.",
"attempts": ["youtube-transcript-api:transcripts-disabled", "yt-dlp:no-transcript"]
}

The summary notice row at the end carries transcriptsDelivered, videosWithoutTranscript, wordsTotal, languageDistribution, noticeDistribution and fallbackEngineUsed for the whole run.

Pricing

Pay per event. You are charged once when a run starts and once for every transcript row written to the dataset — one per video. Notice rows (videos without a transcript, the run summary, input problems) are not results and are not charged.

EventPrice
Run started$0.001 per run
Transcript fetched$0.007 per video (lower on higher Apify plans)

Prices are shown on the Actor's Pricing tab. Free-plan runs return up to 25 transcripts per run and then finish cleanly with a free-plan-cap notice.

Tips

  • Long videos are one row. A 3-hour lecture is a single transcript row with a segments array of a few thousand entries; if you only need the text, set outputFormat: "fulltext" to keep rows small.
  • Language codes are exact. YouTube distinguishes en, en-US and en-GB. List the variants you accept, or rely on allowTranslated / fallbackToAnyLanguage.
  • ip-blocked or rate-limited rows mean YouTube throttled the request, which happens on almost every datacenter IP and, even through residential proxies, on auto-translated tracks. Keep the default RESIDENTIAL proxy, re-run those videos later, or request the original language.
  • Chaining: run any YouTube channel, search or hashtag scraper first, then pass its dataset ID in datasetId to transcribe everything it found.
  • Subtitle files: segments maps 1:1 to SRT / VTT cues (start, dur, text); converting is a few lines of code.

FAQ, disclaimers, and support

Is this an official YouTube product? No. It is an independent integration of two open-source libraries and is not affiliated with, endorsed by, or sponsored by YouTube or Google.

Does it download videos? No. Both engines are used for caption metadata only; the Actor never requests, stores or delivers a video or audio file.

Whose data is it, and who is responsible? Transcripts are the copyrighted work of the video's author. Under the Apify Standard Actor Contract (§2.2, §5.2.1) you are the data controller and you are responsible for complying with YouTube's Terms of Service, copyright law and any other applicable law in how you store, redistribute or reuse the text. Use this Actor for lawful purposes such as research, accessibility, indexing and analysis you are permitted to carry out.

Does it work on private, unlisted or age-restricted videos? Private and age-restricted videos require a signed-in session, which this Actor does not use; they come back as notice rows. Unlisted videos work if you have the link.

What about videos with no captions at all? They come back as no-transcript. Transcribe them from the audio with Whisper Speech to Text.

Where do I report a problem? Open an issue on the Actor's Issues tab. Include the videoId and the attempts field from the row.