YouTube Transcript Scraper – Subtitles, SRT & Text API avatar

YouTube Transcript Scraper – Subtitles, SRT & Text API

Pricing

from $4.00 / 1,000 transcript returneds

Go to Apify Store
YouTube Transcript Scraper – Subtitles, SRT & Text API

YouTube Transcript Scraper – Subtitles, SRT & Text API

YouTube transcripts and subtitles from videos, playlists, channels or a search: text, SRT, VTT, JSON, RAG-ready chunks and chapters. $2 per 1,000; videos without captions or that fail are free.

Pricing

from $4.00 / 1,000 transcript returneds

Rating

0.0

(0)

Developer

Haidong Nan

Haidong Nan

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

17 days ago

Last modified

Categories

Share

🎬 YouTube Transcript Scraper: subtitles to text, SRT, VTT and RAG chunks ($4 per 1,000)

Get the full transcript of any YouTube video in seconds, in the language you need. Paste video links, a playlist or a whole channel. No API key, no login, no browser. Built for AI pipelines, content teams and researchers.

  • ✅ Videos, Shorts, playlists, channels and YouTube search in one input: type andrej karpathy llm and get the top videos' transcripts, no URL collecting
  • ✅ Original language by default: with no language set you get the language actually spoken in the video (not a random fan translation), human-made captions first
  • ✅ Any language: picks human-made captions first, falls back to auto-generated, and asks YouTube for a translation when the language you want is missing (Simplified and Traditional Chinese handled separately)
  • ✅ 8 output formats: plain text, timestamped lines, readable paragraphs, timed JSON segments, SRT, WebVTT, RAG-ready chunks (with start/end time and a deep link to the second) and text per chapter
  • ✅ Video metadata included: title, channel, publish date, duration, views, category, description, keywords, thumbnail, chapters
  • ✅ Free language check: list every video's caption tracks before you pay for a big run
  • ✅ Never an empty row without a reason: every item has a status (OK, NO_CAPTIONS, LOGIN_REQUIRED, BLOCKED…). Four YouTube clients, automatic retries, and a residential proxy that switches on only when YouTube blocks the direct connection
  • ✅ $4 per 1,000 transcripts, failures are free: you pay for transcripts actually returned (plus Apify's tiny $0.00005 run start fee)

🚀 Quick start

  1. Paste one or more URLs into YouTube videos, playlists or channels: https://www.youtube.com/watch?v=…, https://youtu.be/…, …/shorts/…, …/playlist?list=…, https://www.youtube.com/@handle.
  2. (Optional) Set Preferred languages, e.g. en or ko, en.
  3. Pick Output formats, then click Start. Results appear in the Output tab and can be downloaded as JSON, CSV or Excel.

⬇️ Input example

{
"videoUrls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://www.youtube.com/playlist?list=PLFgquLnL59alCl_2TQvOiD5Vgm1hCaGSI",
"https://www.youtube.com/@veritasium"
],
"searchQueries": ["andrej karpathy llm"],
"maxResultsPerSearch": 10,
"languages": ["en"],
"outputFormats": ["text", "srt", "chunks"],
"maxVideos": 100
}

⬆️ Output example (one dataset item per video)

{
"videoId": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video)",
"channel": "Rick Astley",
"durationSeconds": 213,
"viewCount": 1650000000,
"thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"hasTranscript": true,
"language": "en",
"captionType": "manual",
"translated": false,
"availableLanguages": ["en", "en (auto)", "de-DE", "ja", "pt-BR", "es-419"],
"wordCount": 371,
"transcript": "We're no strangers to love. You know the rules and so do I…",
"segments": [{ "start": 18.6, "duration": 3.2, "text": "We're no strangers to love" }],
"srt": "1\n00:00:18,600 --> 00:00:21,800\nWe're no strangers to love\n…"
}
FieldMeaning
transcriptPlain text, one string
transcriptTimestamped[mm:ss] text lines, ideal for quoting
paragraphs~1-minute paragraphs with start/end times, ideal for LLM summarisation
segmentsTimed cues {start, duration, text}
srt / vttSubtitle files, ready to save
chunksRAG-ready pieces of ~300 words (chunkWords): {id, start, end, words, text, url}; url jumps to that second
chaptersThe video's chapters (from its description); with the chapters format each chapter also carries its transcript text
publishedAt / categoryUpload date and YouTube category
statusOK, or why there is no transcript (see below)
captionTypemanual (uploaded by the creator) or auto (speech recognition)
translatedtrue when the captions were translated into your preferred language
translationEngineyoutube when YouTube's translation was used
languageFallbacktrue when none of your languages was available and the original language was returned
error / errorCodeHuman-readable reason and code when there is no transcript

Status codes (never charged): NO_CAPTIONS (the video has no subtitles at all), ONLY_AUTO_CAPTIONS (you turned auto-captions off), LOGIN_REQUIRED (private or age-restricted), UNAVAILABLE (deleted or region-locked), BLOCKED (YouTube kept refusing after all retries; re-run later), POT_REQUIRED, UNKNOWN.

💵 Pricing

EventPrice
Transcript returned$0.004 (that is $4 per 1,000 videos)

Apart from Apify's $0.00005 start fee per run, you pay only for transcripts. Videos without captions, private, unavailable or blocked videos are not charged. Playlist, channel and search expansion is free, and Only list available caption languages runs are free (up to 200 videos per run).

🧠 How languages are chosen

  1. A caption track in one of your preferred languages (human-made first, unless Prefer human-made captions is off).
  2. Otherwise, if Translate is on, the best available track translated into your first preferred language.
  3. Otherwise the video's original captions, flagged with languageFallback: true.

With no preferred language, you always get the video's original spoken language (detected from YouTube's own speech track), human-made captions first. You get the original instead of a community translation.

Turn Allow auto-generated captions off to accept only creator-uploaded subtitles.

About translation: the Actor uses YouTube's own caption translation only. YouTube often refuses these requests (a YouTube-side limit, also reported by yt-dlp users); when it does, you get the original-language transcript with languageFallback: true and a translationError note, so you can translate it with a service of your choice.

🧩 Use cases for AI workflows

  • Summaries and chapters: feed paragraphs to any LLM; each paragraph carries timestamps for citations.
  • RAG / knowledge bases: turn on chunks and load them straight into a vector DB; each chunk has an id, timestamps and a url that opens the video at that second.
  • "Distill" an expert: search their name or paste their channel, get every talk as text, then let an LLM build notes, a course outline or a custom GPT/Skill from it.
  • Content repurposing: turn talks and podcasts into blog posts, newsletters and social posts.
  • Research and monitoring: schedule the Actor on a channel URL to collect every new video's transcript automatically.

Call it from Python, JavaScript, LangChain, n8n, Make or Zapier through the Apify API.

🤖 Use it from AI agents (MCP): Claude, Cursor & any MCP client

This Actor works as a ready-made connector for AI assistants. Add one URL and your agent can call it on its own:

https://mcp.apify.com?tools=lsso/youtube-transcript-extractor
  • Claude (claude.ai / Claude Desktop): Settings → Connectors → Add custom connector, paste the URL above, sign in to Apify.
  • Cursor / VS Code / any MCP client: add it to your MCP config:
{ "mcpServers": { "youtube-transcripts": { "url": "https://mcp.apify.com?tools=lsso/youtube-transcript-extractor" } } }
  • Claude Code: claude mcp add --transport http youtube-transcripts "https://mcp.apify.com?tools=lsso/youtube-transcript-extractor"

Sign-in uses Apify OAuth in the browser, so you never paste a token into the config. Then just ask:

"Summarize this video in 5 bullet points with timestamps: https://youtu.be/…"

"Get the transcripts of the last 10 videos on @channel and list the topics they cover."

"Translate the captions of this video to Korean and give me an SRT file."

Transcripts come back as clean paragraphs with timestamps, so the agent can quote and cite the exact second. You pay for transcripts returned, same as a normal run.

❓ FAQ

Does it work on videos without subtitles? It returns whatever YouTube has: creator subtitles or auto-generated captions (most spoken-word videos have them). Videos with neither are reported with hasTranscript: false and are free.

Does it use proxies? It connects directly first. If YouTube answers with a "confirm you're not a bot" check, the Actor switches to Apify residential proxies for the rest of the run; that traffic is small and included in the price. If many videos in a row still fail, the run stops early so nobody pays for a blocked run.

Is it legal? The Actor reads publicly available caption data that YouTube serves to any viewer and collects no personal data. Transcripts belong to the video creators: use them for research, analysis and accessibility, respect copyright and YouTube's Terms of Service, and do not republish full transcripts without permission. This Actor is not affiliated with YouTube or Google.

Some videos come back with languageFallback: true. Either no preferred language exists and Translate is off, or YouTube refused the translation. The original captions are returned instead; re-run those videos later.

What do I pay if a video fails? Nothing for that video. Only items with status: "OK" and a transcript are charged. Check status / errorCode for the reason.

How do I check which languages exist before a big run? Turn on Only list available caption languages. It returns every caption track (language, human or auto, translatable) for free.

Can I get channel videos older than the latest few hundred? Yes, raise Max videos; the channel's Videos tab is paged until the limit is reached.

🧰 More tools from us

ActorWhat it does
AI Search Visibility TrackerHow often ChatGPT, Perplexity & Gemini mention your brand
Reddit Scraper – Pain PointsReddit posts & comments labelled as complaints, requests, willing-to-pay
Google Trends Scraper & APICompare unlimited keywords on one shared scale
YouTube Comments ScraperComments & replies labelled by pain point
App Store & Google Play ReviewsReviews + what drives 1★ vs 5★
Y Combinator ScraperYC companies with a traction score
GitHub & Hugging Face TrendingAI tools ranked by momentum

📝 Changelog

  • 1.5 (2026-09-28): Original spoken language picked automatically when no language is set; automatic second pass for videos hit by temporary network errors; price set to $4 per 1,000.

  • 1.4 (2026-09-25): Direct connection first, residential proxy only when YouTube blocks it; runs stop early if YouTube blocks many videos in a row; translation now uses YouTube's own translator only (the third-party translation fallback was removed); clearer copyright note.

  • 1.3 (2026-09-24): youtube.com/c/<name> channel links now always resolve to the right channel; chapter parsing hardened against unusual descriptions; fewer wasted retries; clearer message when the charge limit is too low.

  • 1.2: YouTube search as input; RAG-ready chunks with deep links; chapters (and text per chapter); publish date and category; free list languages mode; a status code on every item; price cut to $2 per 1,000.

  • 1.1: Translation no longer depends on YouTube's rate-limited translator: automatic Google Translate fallback with timestamps kept, new translationEngine field; zh-Hans and zh-Hant are never mixed up.

  • 1.0: First release: videos, Shorts, playlists, channels; language preference + translation; text, timestamped, paragraphs, segments, SRT, VTT; metadata; residential proxy with multi-client retries.