YouTube Transcript Scraper + English Translation avatar

YouTube Transcript Scraper + English Translation

Pricing

from $2.00 / 1,000 transcript delivereds

Go to Apify Store
YouTube Transcript Scraper + English Translation

YouTube Transcript Scraper + English Translation

Get YouTube transcripts in the language actually spoken, in its own script, plus an English version for 60+ languages. Urdu in Urdu script, RTL-safe Arabic, clean Japanese and Chinese. Timestamps, SRT/VTT, RAG chunks, Shorts. From $2 per 1,000 videos. Failed videos are free.

Pricing

from $2.00 / 1,000 transcript delivereds

Rating

0.0

(0)

Developer

Panix AI LAB

Panix AI LAB

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Categories

Share

Get the transcript of any YouTube video or Short in the language it is actually spoken in, written in that language's own script, and an English version for 60+ languages. Optionally add YouTube's original caption text, timestamps, SRT/VTT subtitles and RAG-ready chunks. You choose one of three levels and only pay for transcripts you actually receive.

  • Original language first. Spanish stays Spanish, Japanese stays Japanese, Urdu is written in Urdu script.
  • English for 60+ languages, translated offline inside the Actor. English videos and creator English subtitles are never charged for translation.
  • From $2.00 per 1,000 videos. Failed, removed and caption-less videos are free.
  • Right-to-left and CJK done properly. Arabic, Urdu, Persian and Hebrew get RTL-safe subtitles; Japanese and Chinese are joined without stray spaces.
  • No API keys, no proxies, no AI account. Works from the Console, the API, MCP agents, n8n, Make and Zapier.

Built for AI agents, LLM and RAG pipelines, content repurposing, research, media monitoring, SEO, and n8n / Make / Zapier automations.

Three versions of every video, side by side

Most tools return one block of text and leave you to guess what it is. This Actor tells you exactly what you got:

{
"videoId": "27B0VvApWLg",
"title": "Pakistan, Turkey, Qatar and Indonesia - Defense Deal | 6PM Headlines Geo News",
"language": "ur",
"captionLanguage": "hi",
"textDirection": "rtl",
"scriptConverted": true,
"transcriptOriginal": "ملتان میں 15 سال کا یتیم لڑکا تیز رفتار گاڑی سے کچل دیا گیا۔ ...",
"transcriptCaption": "मुल्तान में 15 साल का यतीम लड़का तेज रफ्तार गाड़ी से कुचल दिया गया। ...",
"transcriptEnglish": "A 15-year-old orphan boy was crushed by a speeding car ...",
"englishSource": "machine-translation"
}
FieldWhat it is
transcriptOriginalThe spoken language, in its own script. Urdu is written in Urdu script, even though YouTube captions it in Hindi script.
transcriptCaptionExactly what YouTube's caption track says, cleaned. Identical to the original for most videos.
transcriptEnglishAn English version. It comes from the creator's own English subtitles when they exist, and from offline machine translation otherwise. englishSource tells you which.

Choose your level

LevelYou getPrice
OriginaltranscriptOriginal, language detection, text direction, word count, video metadata and chapters$2.00 per 1,000 videos
Captions (default)Everything in Original, plus timestamped segments, transcriptCaption, SRT, WebVTT, Markdown and RAG chunks$3.00 per 1,000 videos
EnglishEverything in Captions, plus transcriptEnglish, English segments, English SRT/VTT and English text on every chunk$3.00 per 1,000 videos, plus $0.50 per 1,000 minutes of video only when we machine-translate

You pay for translation only when translation actually happens:

  • English videos: no translation charge. You get the same transcript in the English fields.
  • Creator English subtitles: when the creator uploaded English subtitles, we return those. No translation charge.
  • Other languages: $0.0005 per started minute of speech, about $0.005 for a 10-minute video.
  • Languages we can't translate well yet: you still get the transcript, without an English version and without a translation charge.

Each run also has a small start fee of $0.001 per GB of memory: $0.001 for the Original and Captions levels, $0.002 for the English level, which needs more memory for translation.

Examples:

JobLevelCost
1,000 Shorts, text onlyOriginal$2.00
1,000 English videos with timestamps and SRTCaptions$3.00
1,000 English videos at the English levelEnglish$3.00 (nothing to translate)
100 Spanish news videos of 10 minutes, with EnglishEnglish$0.30 + $0.50 = $0.80
1 Urdu podcast of 60 minutes, with EnglishEnglish$0.003 + $0.03 = $0.033

Start fees are not included in the examples. Every result row shows exactly what it was charged in chargedEvents.

Why this Actor

We tested the most-used YouTube transcript tools on the same set of hard videos before building this one. These are the problems we found, and how this Actor handles them:

Common problemThis Actor
Non-English videos come back machine-translated into English, or fail with "no transcript in requested language"The original spoken language by default, with the English version as a separate, clearly labelled field
Urdu videos come back in Hindi script, because YouTube has no Urdu speech recognitionUrdu is detected and written in Urdu script. YouTube's text is kept alongside it
Pashto or Persian videos come back as meaningless Hindi textDetected and flagged. You get the creator's English subtitles when they exist, otherwise a free error explaining why
Auto-dubbed videos return the captions of a dub (for example Arabic for an English video)Detects the original audio track and its captions
Auto-generated "[Music]" captions picked over human-made captionsHuman-made captions first, in the spoken language
Japanese and Chinese text broken up by spaces between caption linesJoined correctly, without spaces. Korean and Thai keep theirs
Arabic, Persian, Urdu and Hebrew subtitles with punctuation on the wrong sideRight-to-left marks in SRT/VTT, dir="rtl" in Markdown, and textDirection on every result
' and other HTML codes left in the text, or the transcript returned as a stringified listClean UTF-8 text and real JSON arrays
One broken URL crashes the whole runEach video is isolated. Tested on 4-hour podcasts and 2.4-hour live replays
You pay for removed videos, videos without captions, and invalid URLsYou only pay for delivered transcripts
Transcripts sent to a third-party AI service for translationTranslation runs inside the Actor, offline. Your content isn't sent anywhere else

How to use it

  1. Paste one or more YouTube URLs or video IDs into YouTube video URLs or IDs.
  2. Choose the level you need: Original, Captions, or English.
  3. Optionally turn on SRT, VTT, Markdown or RAG chunks.
  4. Click Start. Results appear as the videos finish. Download them as JSON, CSV, Excel or HTML, or read them through the API.

The English level automatically runs with 2 GB of memory for translation, and the other levels with 512 MB. You don't need to change anything. In our tests it translated about an hour of non-English video per minute of run time.

Input example

{
"videoUrls": [
"https://www.youtube.com/watch?v=iG9CE55wbtY",
"https://youtu.be/27B0VvApWLg",
"https://www.youtube.com/shorts/Y8IJi7iP5vk"
],
"outputLevel": "english",
"removeNonSpeechTags": true,
"includeSrt": true,
"includeChunks": true
}

Output fields

FieldLevelsNotes
status, errorCode, errorMessageallok or error. Errors are never charged
language, captionLanguage, languageDetectionallThe spoken language, the caption track's language, and why they differ (when they do)
textDirection, scriptConverted, isAutoGeneratedallrtl or ltr; true when the script was converted (Urdu)
transcriptOriginal (also transcript)allThe spoken language in its own script
wordCount, characterCountallChinese, Japanese and Thai count characters
title, channelName, durationSeconds, viewCount, keywords, thumbnailUrl, description, chaptersallFree metadata
availableLanguagesallEvery caption track the video has
transcriptCaption, segments, srt, vtt, markdown, chunksCaptions, EnglishTimed data in the original script
transcriptEnglish, englishSource, englishModel, englishSegments, srtEnglish, vttEnglish, chunks[].textEnglishEnglishenglishSource is original, creator-subtitles or machine-translation
warnings, chargedEvents, attemptsallPlain-language notes, what this row cost, and retries used

A failed video looks like this, and is free:

{
"position": 3,
"videoId": "WJ3-F02-F_Y",
"status": "error",
"errorCode": "NO_CAPTIONS",
"errorMessage": "The video has no captions or subtitles (manual or auto-generated).",
"chargedEvents": {},
"charged": false
}

The run also saves a SUMMARY record in its key-value store, with counts of transcripts and failures by reason.

Languages

The Original and Captions levels work in every language YouTube has captions for: the 60+ languages YouTube captions automatically, plus any language a creator uploaded subtitles in.

English is available for more than 60 languages. Each language goes to the open translation model with the best published test score for it, and only when that score is high enough. Otherwise you still get the transcript, just without an English version and without a translation charge.

The 50 languages with the most YouTube viewing, by our estimate from YouTube users per country and regional viewing data (YouTube doesn't publish views by language):

#LanguageOriginal & CaptionsEnglish
1EnglishYesAlready English (free)
2SpanishYesYes, single-language model
3HindiYesYes, single-language model
4RussianYesYes, single-language model
5PortugueseYesYes, language-family model
6FrenchYesYes, single-language model
7GermanYesYes, single-language model
8ArabicYesYes, single-language model
9IndonesianYesYes, single-language model
10TurkishYesYes, single-language model
11ItalianYesYes, single-language model
12JapaneseYesYes, single-language model
13BengaliYesYes, single-language model
14VietnameseYesYes, single-language model
15PolishYesYes, language-family model
16ThaiYesYes, single-language model
17KoreanYesYes, single-language model
18UrduYes, written in Urdu script (YouTube captions it in Hindi script)Yes, single-language model
19FilipinoYesYes, single-language model
20ChineseYesYes, single-language model
21DutchYesYes, language-family model
22TeluguYesNot yet (never charged)
23TamilYesYes, multilingual model (gist)
24RomanianYesYes, language-family model
25UkrainianYesYes, language-family model
26MarathiYesYes, single-language model
27PunjabiYesYes, single-language model
28PersianYesNot yet (never charged)
29KannadaYesNot yet (never charged)
30CzechYesYes, language-family model
31MalayalamYesYes, multilingual model (gist)
32MalayYesYes, language-family model
33SwedishYesYes, language-family model
34HungarianYesYes, multilingual model (gist)
35GujaratiYesYes, language-family model
36BhojpuriWhen the creator uploaded captionsYes, language-family model
37BurmeseYesNot yet (never charged)
38GreekYesYes, language-family model
39HebrewYesYes, multilingual model (gist)
40OdiaWhen the creator uploaded captionsNot yet (never charged)
41UzbekYesNot yet (never charged)
42KhmerYesNot yet (never charged)
43NepaliYesNot yet (never charged)
44SerbianWhen the creator uploaded captionsYes, language-family model
45KurdishWhen the creator uploaded captionsNot yet (never charged)
46SwahiliYesNot yet (never charged)
47BulgarianYesYes, language-family model
48PashtoWhen the creator uploaded captions. YouTube's Hindi auto-captions for Pashto are flagged, not returnedCreator English subtitles only
49DanishYesYes, language-family model
50FinnishYesYes, multilingual model (gist)

English is also available for Catalan, Galician, Croatian, Bosnian, Albanian, Lithuanian, Latvian, Estonian, Slovenian, Macedonian, Belarusian, Armenian, Georgian, Azerbaijani, Afrikaans, Icelandic, Basque, Irish, Welsh, Sinhala, Maithili, Zulu, Xhosa, Maltese and a few more. When a creator uploaded English subtitles, those are returned for any language, free of translation charges.

Language-specific handling:

LanguageSpecial handling
UrduDetected from Urdu vocabulary and Pakistani metadata, then converted from Hindi script to Urdu script. Turn off with Write Urdu in Urdu script
Pashto, PersianWhen YouTube captions them with its Hindi recognizer, the result is flagged as CAPTIONS_LANGUAGE_MISMATCH. Creator English subtitles are returned when they exist
Japanese, ChineseCaption lines are joined without spaces. Word counts and chunk sizes use characters
Thai, Lao, Khmer, MyanmarPhrase spaces are kept. Counts use characters
Arabic, Persian, Urdu, Hebrew, PashtotextDirection: "rtl", RTL marks in subtitle files, dir="rtl" in Markdown. Stray invisible direction characters from YouTube are removed

By our estimate, the languages with an English version cover over 90% of YouTube viewing. Machine translation is best on clear speech such as news, lectures and talks. It is weaker on slang, very casual speech and mixed languages, for example Hindi videos with a lot of English words. When the creator uploaded English subtitles, those are used instead.

Error codes (all free)

CodeMeaning
NO_CAPTIONSThe video has no captions at all (often music-only videos)
CAPTIONS_LANGUAGE_MISMATCHThe only captions were made by YouTube's recognizer for a different language (common for Pashto). The message lists human-made tracks you can request instead
AGE_RESTRICTEDYouTube requires a signed-in adult account
PRIVATEThe video is private
MEMBERS_ONLYChannel members only
UNAVAILABLERemoved, deleted, or the ID doesn't exist
LIVE_NOT_FINISHEDThe live stream or premiere hasn't ended yet
UNPLAYABLEYouTube refuses playback here (often region-locked)
LOGIN_REQUIREDAnother sign-in wall
INVALID_URLNot a YouTube video URL or ID
BLOCKEDYouTube refused every retry. Running it again usually works
FAILEDUnexpected error. Please report it in the Issues tab

Use it with AI tools and automations

  • AI agents (MCP). Add this Actor to the Apify MCP server and let Claude, Cursor or ChatGPT fetch transcripts on demand.
  • RAG. Turn on includeChunks and send chunks[] straight to Pinecone, Qdrant, Supabase pgvector, Weaviate or Chroma. On the English level each chunk carries both the original text and textEnglish, so you can embed in one language and show the other. Store url as metadata so answers can link to the exact second.
  • n8n / Make / Zapier. Use the Apify integration and set "Run Actor" to wait for the result, then map transcriptOriginal, transcriptEnglish or markdown to your next step.
  • API (Python):
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("panix/youtube-transcript-scraper").call(
run_input={"videoUrls": ["https://www.youtube.com/watch?v=27B0VvApWLg"], "outputLevel": "english"}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["status"], item.get("language"), item.get("transcriptEnglish", "")[:200])
  • API (cURL, synchronous):
curl -X POST "https://api.apify.com/v2/acts/panix~youtube-transcript-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer <YOUR_APIFY_TOKEN>" -H "Content-Type: application/json" \
-d '{"videoUrls": ["https://youtu.be/8jPQjjsBbIc"], "outputLevel": "original"}'

How it works

The Actor reads the same caption data the YouTube mobile apps use. It doesn't run a browser or download any video or audio, which keeps it fast and inexpensive. Each video is fetched through a residential IP. If YouTube refuses a request, the Actor switches to a second app client and then to a fresh IP, up to the retry limit you set.

English translation uses open-source OPUS-MT models (University of Helsinki, Apache-2.0) running on CPU inside the Actor. No paid AI service is involved, and your transcripts are not sent anywhere.

Tested

The Actor returned the correct transcript for all 17 videos with captions on our benchmark of 20 deliberately difficult YouTube URLs. The set covered:

  • Short, 20-minute and 4-hour videos, plus a live replay.
  • Shorts.
  • Auto-dubbed videos.
  • Urdu, Hindi and Spanish.
  • A 64-track TED talk.
  • A music video.
  • Odd URL formats.

The other 3 (no captions, age-restricted, removed) returned clear, free error rows. On Apify, a batch of 50 normal talks returned 50 of 50 transcripts in about 40 seconds.

A separate multilingual set covered Pashto, Persian, Urdu, Hindi, Japanese, Arabic, English, French, German and Spanish:

  • Every original language was detected correctly.
  • Urdu was written in Urdu script.
  • The Pashto video, which YouTube only captions with its Hindi recognizer, was flagged at the Original and Captions levels. At the English level it returned the creator's English subtitles.
  • At the English level on Apify, 7 videos totalling about 1.8 hours of speech were machine-translated in about one minute.

A second set added Portuguese, Italian, Filipino, Polish, Dutch, Romanian, Ukrainian, Bengali, Marathi, Punjabi, Telugu and Urdu podcasts and news. Every video with captions was detected in the right language and translated, except Telugu, which correctly returned its transcript without an English version and without a translation charge.

Limitations

  • It extracts existing captions (human-made or YouTube's auto-generated ones). It does not run speech-to-text, so a video with no captions returns NO_CAPTIONS.
  • Auto-generated captions can mishear names and words. That is YouTube's speech recognition, and every caption-based tool returns the same text.
  • Urdu script conversion is rule-based with a dictionary of common words. It reads naturally, but some rare loanwords may be spelled phonetically.
  • Age-restricted, private and members-only videos need a signed-in account and are not supported.
  • Channel and playlist URLs are not expanded yet: pass video URLs. This is planned.

FAQ

Do I need a YouTube API key, a proxy or an AI key? No. Everything is included.

Why do language and captionLanguage differ? YouTube sometimes captions a language with another language's recognizer. Urdu is the most common case: it gets Hindi captions. language is what is spoken, and captionLanguage is what YouTube labelled the track.

Can I get auto-generated captions instead of human-made ones? Yes, turn off Prefer human-made captions.

Is translation charged when the video is already in English? No. It's also free when the creator uploaded English subtitles. You only pay the per-minute translation price when we actually machine-translate.

Why is there a start fee? Every run starts a container that already holds the translation models, so nothing is downloaded during your run. The $0.001 per GB start fee covers that start-up, so the per-video prices can stay low for small jobs and single-video calls from AI agents.

How do I keep costs lowest? Put many videos in one run instead of one video per run, and use the Original level when you don't need timestamps.

Is scraping YouTube transcripts legal? The Actor only reads publicly available caption data. You are responsible for how you use it, including YouTube's Terms of Service, copyright and the privacy laws that apply to you.

Found a problem? Open an issue in the Issues tab with the video URL. We read every one.


Translation models: OPUS-MT by the Language Technology Research Group at the University of Helsinki (Apache-2.0), run with CTranslate2 (MIT).