The official YouTube Data API does not return transcript text for videos you do not own. Here are two ways that do — a free command-line tool, and a hosted version for bulk jobs.
No signup, no key — run it with npx:
npx yt-transcript-cli "https://www.youtube.com/watch?v=dQw4w9WgXcQ"
For bulk jobs, scheduling, and reliability (rotating proxies, retries), the hosted version takes a list of video URLs in, clean text + timestamped segments + SRT out, pay only for transcripts actually delivered (videos with no captions are free).
feeding videos into an LLM/RAG pipeline, building a searchable archive, generating subtitles.
Getting "Sign in to confirm you're not a bot" once you deploy? See why it happens on servers and how to fix it.
A transcript only exists if the video has captions on YouTube. Private and age-restricted videos cannot be read.
Open-source CLIs (MIT) + hosted versions on Apify. Built by an indie dev. Found a bug? Open a GitHub issue.