The pattern is the same everywhere: an LLM cannot watch a video, but it is extremely good with the transcript of one. So the question is not “can ChatGPT watch YouTube” — it is how do I get a clean, timestamped transcript into my model's context, reliably and at scale? That is a data problem, and this site has an API built for exactly it.
Why the transcript is the right input
- Cheap — text is a fraction of the token cost of audio-in models, and you can reuse the same transcript in many prompts.
- Citable — every segment carries its start and end time, so a model answer can point to 12:40 instead of “somewhere in the video”.
- Complete — videos without captions are transcribed from the audio automatically, so the pipeline does not fall over on the no-subtitle cases.
- Structured — JSON and CSV give you per-segment start/duration/text, the natural shape for chunking and embedding.
REST API — three lines to a transcript
curl "https://yttranscript.dev/api/transcript?url=https://www.youtube.com/watch?v=VIDEO_ID&format=csv" \ -H "Authorization: Bearer ***"
format is json (default), txt, srt, vtt, csv, or bi-srt (bilingual subtitles, needs lang). If the video has no captions, the API returns 202 with an ASR job ID — poll /api/asr/job?videoId=… until it is done. Full reference: the API docs.
The csv format is the one for pipelines: index, start_s, end_s, text, one row per segment. Each row is a ready-made chunk — embed the text, keep the times as metadata, and your RAG answers can cite timestamps.
MCP — let the assistant fetch it itself
Copy-pasting transcripts into a chat is a workflow from 2024. If your assistant speaks MCP (Claude Desktop, Cursor, or an agent framework), it can pull a transcript on request. The server is POST /api/mcp, Streamable-HTTP, with the same Bearer key:
{
"mcpServers": {
"yttranscript": {
"url": "https://yttranscript.dev/api/mcp",
"headers": { "Authorization": "***" }
}
}
}Tools: youtube_transcript, youtube_transcript_translate, youtube_transcript_batch, and youtube_transcript_summary. After that, “summarize this lecture and cite the timestamps” is a tool call, not a clipboard marathon.
Three workflows people build with this
- Video → RAG corpus. Batch a playlist with
/api/batch(up to 25 URLs or a playlist link), pull the CSV, chunk and embed, keepstart_sas metadata. Your knowledge base now cites “video 12:40”. - Research assistant. MCP server in your assistant of choice; ask it to compare what two talks said, and it fetches both transcripts itself.
- Content pipeline. Transcript +
/api/summarizefor TL;DR, key points and takeaway — or translate withlang=…for multilingual notes.
Honest limits
YouTube rate-limits heavy clients (you will see 429s if you push hard), and ASR accuracy depends on audio quality — accents, music and overlapping speakers reduce it. There are no per-key rate limits yet, so be reasonable with batch size and spacing. Nothing is cached across users except your own re-fetches, which are free.
Related
Full endpoint reference and key management: the developer API docs. The batch endpoint powers the batch transcripts page. No code? The web tool does the same things with buttons.
Frequently asked questions
Why feed a transcript to an LLM instead of the video itself?
Because the transcript is the cheapest, most reliable representation of what the video says. You do not need to download the video, strip audio, or pay for audio-context models. Text goes in, structured text comes out, and a timestamped transcript lets the model cite the exact moment it is quoting.
How do I get a transcript with the REST API?
Send a GET to /api/transcript with the url parameter and your API key as a Bearer token. The format parameter controls the output: json (default, per-segment start/duration/text), txt, srt, vtt, csv, or bi-srt for bilingual subtitles. A video without captions is handled automatically: the API returns 202 with a job ID and you poll /api/asr/job until the audio transcription is done.
What is the CSV format good for?
CSV gives you one row per segment — index, start_s, end_s, text — ready for spreadsheets, pandas, or a vector store. If you are building a RAG pipeline, that is the natural shape: each row becomes a chunk, the start/end times become metadata you can cite, and the text becomes the embedding input.
What is the MCP server and who is it for?
MCP (Model Context Protocol) is the standard way AI assistants call external tools. The API exposes POST /api/mcp as an MCP Streamable-HTTP server with tools for transcript, translate, batch, and summary. In two lines of config it becomes a tool your assistant can use — for example, Claude Desktop or Cursor can fetch a transcript on request instead of you copy-pasting it from a browser.
Can I batch many videos at once?
Yes. POST /api/batch accepts up to 25 video URLs (or a playlist link, expanded server-side) and charges 1 credit per successful video. You get a batchId, poll the status, and download all results as one combined file or per video. That is how you turn a whole lecture series or a competitor playlist into a text corpus in one job.
How does pricing work?
Same credit system as the site: 1 credit per transcript (captions or one ASR job start), 1 credit per 90 s of audio for ASR, 1 per 2,500 translated characters, 1 per successful batch video. No account or card is needed to start testing — the web tool's free tier lets you try the API endpoints through the UI first.
Where does the data go?
Only to yttranscript.dev, running on the site's own hardware in the EU. The transcript is a cacheable result (re-fetching the same video does not re-charge), and batch results persist for 24 hours. There is no third-party SDK or analytics in the path.