Download YouTube transcripts in bulk with a pay-per-video scraper API: SRT, VTT, plain text, 15 languages, and MCP support for AI agents.

I kept hitting the same wall: I wanted the transcripts of a few hundred YouTube videos for a RAG project, and every script I wrote worked for about ten videos before the requests started bouncing. Rate limits, IP flags, fragile parsing. So I built the thing I wished existed.
The YouTube Transcript and Subtitles Scraper API downloads YouTube transcripts in bulk: paste one URL or a thousand, and it returns structured transcript data for each video at $0.00001 per video processed.

Each video comes back as one structured row:
Full transcript with timestamps, plus a clean non-timestamped text field for LLM prompts
Language of the caption track it picked, and whether it was human-made or auto-generated
Video duration and metadata: title, channel, view count, like count, upload date, tags
Optional SRT, VTT, and plain text files alongside the structured fields
A success or failure status per video, so one bad URL never kills the batch
It accepts every YouTube URL shape: watch URLs, Shorts, youtu.be links, embed and mobile URLs. One honest limitation: it can only return captions YouTube actually has. Videos with captions disabled come back as error rows.
Open the Actor page and click Try for free; you get an Apify account with free monthly credits.
Paste your YouTube URLs into the input (a single string or an array), pick preferred languages if you care, and hit Start.
Export the dataset as JSON, CSV, or Excel, or pull it over the API.
There is also a free discovery mode: set list_only to true and it returns every caption language a video offers, with translation options, before you spend anything.
Every run is callable over HTTP. From Python:
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("johnvc/YoutubeTranscripts").call(run_input={
"youtube_url": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"languages": ["en"],
})
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["non_timestamped"][:200])
This is where it gets fun. The Actor runs over MCP, so Claude, Cursor, ChatGPT, Windsurf, VS Code, and Cline can call it as a native tool:
claude mcp add --transport http youtube-transcripts "https://mcp.apify.com/?actors=johnvc/YoutubeTranscripts"Then ask your agent "get the transcript of this video and summarize the three main arguments" and it fetches the transcript mid-conversation. No scraping code, no copy-paste.
RAG corpora from channel archives, podcast search indexes, content repurposing pipelines that turn talks into blog posts, SEO research on spoken keywords, and study tools that translate lecture subtitles. The Actor ships with 35 runnable example tasks covering MCP setups for every major AI client, bulk workflows, subtitle translation, and transcripts in 15 languages; browse them on the examples page or see the full project on Peerlist.
It reads the caption tracks YouTube exposes for each video, at request time. If a video has manual captions, auto-generated captions, or translated tracks, you can pick between them; if captions are disabled, that video returns an error row instead of fake data.
Pricing is pay per event: $0.00001 per video processed, plus tiny per-run start and result events. A thousand videos costs a few cents. Discovery mode (listing available languages) is free.
Yes. Add the hosted MCP server to Claude, Cursor, or any MCP client and the transcript tool shows up natively. Nine of the example tasks are step-by-step setup guides for specific clients.
Both. Shorts URLs work exactly like watch URLs, and the languages parameter takes a priority list of ISO codes; there are preconfigured example tasks for 15 languages plus a translate_to option for translated subtitles.
If something breaks, open an issue on the Actor page; issues get answered within a day or two.
0
0
0