YouTube Transcript Extractor avatar

YouTube Transcript Extractor

Pricing

from $2.00 / 1,000 transcript returneds

Go to Apify Store
YouTube Transcript Extractor

YouTube Transcript Extractor

YouTube transcripts from videos, playlists, channels or a search, in any language: text, SRT, VTT, JSON, RAG-ready chunks and chapters. Auto-translation, free language check, failed videos are free.

Pricing

from $2.00 / 1,000 transcript returneds

Rating

0.0

(0)

Developer

Haidong Nan

Haidong Nan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Categories

Share

🎬 YouTube Transcript Extractor: videos, playlists and channels β†’ text, SRT, VTT, JSON

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
  • βœ… Any language: picks human-made captions first, falls back to auto-generated, and translates when the language you want is missing (100+ languages, timestamps kept; 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…). Residential proxies + four YouTube clients + automatic retries
  • βœ… $2 per 1,000 transcripts, failures are free: no start fee, you pay only for transcripts actually returned

πŸš€ 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 or google-translate: which service produced the translation
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.002 (that is $2 per 1,000 videos)

No start fee. 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.

🧠 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.

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

About translation: YouTube's own caption translation is now rate-limited for almost every IP (a YouTube-side limit, also reported by yt-dlp users). The Actor tries it once; if YouTube refuses, it downloads the original captions and translates them line by line with Google Translate, keeping every timestamp, so SRT/VTT stay in sync. translationEngine tells you which one was used. Only if both fail do you get the original-language transcript with languageFallback: true and a translationError note.

🧩 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 only for results, 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.

Why residential proxies? YouTube blocks most datacenter IPs with a "confirm you're not a bot" check. The Actor uses Apify residential proxies by default; traffic is tiny (about 0.3 MB per video), so this costs a fraction of a cent.

Is it legal? The Actor reads publicly available caption data that YouTube serves to any viewer. It collects no personal data. Respect the copyright of the content you process.

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

What do I pay if a video fails? Nothing. 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.

πŸ“ Changelog

  • 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 with no start fee.
  • 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.