Every YouTube transcript, one API call.

YouTube Transcript API with Python and JavaScript SDKs

100 free credits · no card

Captions when the video has them, AI transcription when it does not, from the same request. Per-segment start times, the title and the channel come back with every fetch, so a quote can be checked against the second it was said. One credit per transcript, nothing when a fetch fails.

video · 14:22200 OK
02:14The part everyone skips is that retrieval quality decides the answer, not the model you picked.
02:21We swapped in a model twice the size and the evaluation numbers barely moved at all.
02:29Then we fixed how the source documents were chunked and everything jumped in a week.
02:37Most of our corpus was video, which meant most of our corpus was not searchable.
02:45Transcripts with timestamps turned it into text we could actually index and cite.
02:53And citations matter more than people admit, because a claim nobody can check is a liability.
captions · en · 412 segments1 credit

Reading captions is the easy part.

A library on your own IP works until you run it at volume, then it gets blocked, and it returns an error rather than a transcript on any video without captions.

With a caption library

Python only, running from your address. No captions means an exception you have to handle. You rent and rotate the proxies yourself, you own every break, and channels, playlists and search are not in the box.

With TranscriptFetch

REST from any language, with cache, then captions, then AI transcription behind one call. Blocks and rotation are ours. Batch up to 50 videos, resolve a whole channel or playlist, and pay nothing for a fetch that fails.

Who it is for, and how they use it

Three ways in, depending on how you work. Same endpoint, same credit, same response shape underneath all of them.

DevelopersOne endpoint

Engineers building a product

You need YouTube text in a pipeline, and you do not want an outage the first week you run it at real volume.

  1. 01Create a key in the dashboard, send it as a Bearer token.
  2. 02POST a video URL or id to one endpoint, same shape every time.
  3. 03Store the segments next to your other sources and move on.
Read the API reference
Research and marketingRun at volume

Analysts and teams tracking a topic

You are covering a whole channel, course or category, at more hours of video than anyone can sit through.

  1. 01Resolve a channel, playlist or search into a video list.
  2. 02Send up to 50 ids in one batch call.
  3. 03Search the text and quote the second something was said.
See batch fetching
AI and agentsNo code

Teams building with assistants

Your agent needs to read a video mid-conversation and cite it without inventing a timestamp.

  1. 01Add the MCP server once, no deploy and no glue code.
  2. 02Ask in plain language, the assistant calls the tool itself.
  3. 03Answers come back with the timecode attached.
Set up MCP

One request, whichever way you build.

Write code if you want to. If you would rather not, the same fetch runs from a workflow tool or straight inside an assistant.

REST

Call the endpoint

One POST with the URL or the video id. Same JSON every time.

Read the API reference
NO CODE

Drop it in a workflow

An official n8n node. Run it on a schedule or a trigger.

See the n8n node
MCP

Let an assistant do it

Connect once and Claude or ChatGPT fetches transcripts mid-chat.

Set up MCP
curl -X POST https://transcriptfetch.com/api/v1/transcripts/video \
  -H "Authorization: Bearer $TRANSCRIPTFETCH_KEY" \
  -d '{"video": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}'
No code required

Let the assistant fetch the video itself.

Add the MCP server once and Claude, ChatGPT or Cursor can pull a transcript mid-conversation. Same key, same credit, no glue code and nothing to deploy.

https://transcriptfetch.com/mcp

ClaudeTool: transcriptfetch
What does this video say about chunking?
CALLING get_transcript(video="youtube.com/watch?v=dQw4…")
At 02:29 he says fixing how documents were chunked moved the numbers more than a bigger model did.

Questions people ask first

YouTube Transcript API vs the Python library vs the Data API

TranscriptFetch
youtube-transcript-api (OSS)
YouTube Data API
Type
REST API, any language
Python library only
Google Cloud API
Setup
Get a key, make a request
pip install, Python required
GCP project, OAuth, quota setup
No captions on the video
Transcribed with AI speech-to-text, same endpoint
Raises an error
Not available
Blocks and proxies
Handled for you, rotating infrastructure
Your IP, blocked at scale
N/A
Timestamps
Per-segment start and duration
Per-segment timestamps
Not available via captions
Batch
Up to 50 videos per call
Manual loops
10,000 units/day hard cap
Channels, playlists and search
Built in, paginated
Not included
Separate, quota-heavy calls
MCP server
Yes, for Claude, Cursor and others
No
No
SDKs
Python and JavaScript/TypeScript
Python only
Google client libraries

The Data API is worth a sentence on its own, because people assume it is the official answer: it does not return caption text for videos you do not own. captions.download requires the video owner's OAuth credentials, so for third-party videos it is not an option at any quota.

What happens when a video has no captions

TranscriptFetch
A caption-only fetch
Video has no captions
Transcribed with AI speech-to-text
Request fails
Changes needed in your code
None, same video endpoint
Separate fallback logic
Extra cost
Charged only when a transcript is delivered
Premium tier, or unavailable
Blocks and rate limits
Handled by our infrastructure
Yours to solve

What the endpoint returns

Native captions when the video has them
AI transcription when it does not, on the same call
Per-segment timestamps: start and duration
Transcripts in the languages YouTube provides
Batch endpoint for up to 50 videos per call
Plain text and segmented JSON in one response
Channels, playlists and keyword search
An MCP server, plus Python and JavaScript SDKs

Guides from the blog

Start with 100 free credits

Paste a YouTube link or copy the curl, whichever suits you. No card, no sales call.