NewMCP server live - use YouTube transcripts inside Claude Desktop & Cursor.Learn more →
Credits never expire. Not monthly, not ever.

The YouTube Transcript API
that doesn't break in production.

One API call. Timestamped JSON. No proxy setup, no RequestBlocked errors, no credits vanishing at midnight. Extract any YouTube transcript in your language, your format. Works in Python, JavaScript, PHP, and curl.

Get Started Free →

No credit card. No subscription. See all plans. Credits never expire.

99.9% uptime · responses in under 1.5 seconds
curl
python
javascript
php
# 1 credit, under 1.5s, no proxy setup
curl https://api.youtubetranscripts.co/v1/transcript \
  -H "x-api-key: yt_live_••••••••" \
  -d '{"url":"https://youtube.com/watch?v=dQw4w9WgXcQ","lang":"en"}'

# Response - clean JSON · ready for your pipeline
{
  "video_id":          "dQw4w9WgXcQ",
  "lang":             "en",
  "source":           "caption_auto",
  "word_count":       438,
  "requests_used":    1,
  "balance_remaining": 99,
  "content": [
    { "text": "Never gonna give you up",  "offset_ms": 18400 },
    { "text": "Never gonna let you down", "offset_ms": 20440 }
  ]
}
Never expire
Our credits
vs. monthly reset on Supadata
$5 entry
Lowest paid tier
vs. $9–10 elsewhere
<1.5s
Response time
native captions
100+ langs
Languages supported
auto-detect or specify
The problem

You've already tried
the free library.
It broke.

“Deployed to Railway Sunday night. Got RequestBlocked within the hour. Client demo Monday morning.”- Actual developer, actual Slack message

The open-source youtube-transcript-api library is brilliant on localhost. The moment it hits a cloud IP - AWS, GCP, Railway, Render, Vercel - YouTube sees it and blocks it. Every time.

So you spend a weekend on proxy rotation. Then the proxies get flagged. Then YouTube updates something and the whole thing breaks again. This is not a problem worth solving yourself.

production.log - 3:14 AM
$ python app.py ← local, works fine
$ git push && railway up
Deploying to prod...
Build complete. ✓

TranscriptsDisabled:
Could not retrieve a transcript
for the video dQw4w9WgXcQ.

RequestBlocked:
YouTube is blocking requests
from this IP address.

# Client demo at 9 AM.
# You are not okay.

$ curl api.youtubetranscripts.co \
-d '{"url":"..."}'
→ {"source":"caption_auto",...} ✓
# Went to bed.
How it works

Get a YouTube transcript
in under 2 minutes.

No infrastructure to manage. No proxies to rotate. No YouTube bot detection to battle. Just a clean YouTube Transcript API that returns what you need.

1

Sign up with email

Enter your email. Click the magic link. Your API key is on screen immediately, no credit card, no approval queue, no waiting.

100 free credits, waiting for you
2

Make your first call

Pass any public YouTube URL. Choose your language, format (segments, plain text, or SRT), and whether to enable AI fallback for videos without captions.

Response back in under 1.5 seconds
3

Ship your product

Timestamped segments, word count, balance remaining, video metadata - all in one response. Pipe it straight into your LLM, vector DB, or content pipeline.

Never worry about IP blocks again
Features

Built for developers
who ship fast.

Under 1.5 seconds

Native caption extraction is fast. You have a transcript before your UI spinner completes its first rotation.

Millisecond timestamps

Every segment returns offset_ms and duration_ms. Build transcript viewers, chapter markers, and searchable archives.

0
credits lost at month-end, ever

Credits that never expire

Buy once. Use whenever. No monthly resets, no “use it or lose it” anxiety.

AI fallback via Whisper

Video has no captions? Set ai_fallback=true. We run OpenAI Whisper automatically. 3 credits per video-minute. Response includes source: "ai_generated".

100+ languages

Auto-detect or pass an ISO 639-1 code. Every language YouTube supports.

enesfrdeptjazhkoar+94

Three output formats

Choose segments, plain text, or srt. Works as a YouTube captions API, subtitles API, or raw transcript source.

Metadata always free

Title, views, likes, duration, thumbnail — bundled with every transcript call at no extra cost. Never a separate API hit.

Works in production

Handles proxy rotation, IP management, and YouTube changes automatically. No more RequestBlocked errors on AWS, GCP, or Railway.

Use cases

What developers build
with the YouTube Transcript API.

The same API. Six completely different products.

AI · RAG

Chatbots & RAG pipelines

Feed transcripts into your vector DB. Let users ask questions about any video. Build knowledge bases from entire channels in hours.

Content

Content repurposing at scale

One 20-minute video becomes a blog post, 10 tweets, a newsletter section, and show notes. No manual copy-paste.

Research

Brand & competitor monitoring

Track what's being said about your brand across YouTube at scale. Mine transcripts for signals competitors haven't noticed.

Accessibility

Captions for uncaptioned videos

Meet ADA, WCAG, and EU accessibility mandates. AI fallback generates captions even when YouTube doesn't provide them.

SEO

Video SEO & search indexing

Search engines can't watch video. Publish the full transcript alongside each video. More text means more index surface.

Training data

AI training datasets

Process entire channels or curated playlists. Clean JSON straight into your labelling pipeline. 25 videos per batch call.

Integrations

Plug into your
existing stack.

LangChain
LlamaIndex
n8n
Make
Zapier
ActivePieces
Claude Desktop
Cursor
Windsurf
Supabase
Pinecone
Weaviate
SDKs & MCP

YouTube Transcript API
in the language you already write.

Native SDKs, MCP server, and no-code connectors, all from one API key.

python - pip install youtubetranscripts
from youtubetranscripts import Client

client = Client(api_key="yt_your_key")

# Native captions - 1 credit
result = client.transcript(
    url="https://youtube.com/watch?v=VIDEO_ID",
    lang="en",
    format="segments"
)

# Full text string
text = " ".join(s.text for s in result.content)

# Timestamped iteration
for seg in result.content:
    print(f"{seg.offset_ms}ms → {seg.text}")

# AI fallback - 3 credits/min, no captions needed
result = client.transcript(url=url, ai_fallback=True)
print(result.source)  # "ai_generated"
print(result.balance_remaining)  # credits left
javascript / typescript - npm install youtubetranscripts
import { Client } from 'youtubetranscripts'

const client = new Client({ apiKey: 'yt_your_key' })

// 1 credit - native captions
const result = await client.transcript({
  url: 'https://youtube.com/watch?v=VIDEO_ID',
  lang: 'en',
  format: 'segments',
  aiFallback: true  // auto Whisper if no captions
})

// Full text
const text = result.content.map(s => s.text).join(' ')

// TypeScript - full type safety on response
const { content, source, balance_remaining, word_count } = result
php - composer require youtubetranscripts/client
use YouTubeTranscripts\Client;

$client = new Client(['api_key' => 'yt_your_key']);

$result = $client->transcript([
    'url'    => 'https://youtube.com/watch?v=VIDEO_ID',
    'lang'   => 'en',
    'format' => 'plain',
]);

// Full transcript text
echo $result->content;

// Credits remaining
echo $result->balance_remaining;
curl - works anywhere HTTP works
# Single transcript
curl https://api.youtubetranscripts.co/v1/transcript \
  -H "x-api-key: yt_your_key" \
  -d '{"url":"https://youtube.com/watch?v=VIDEO_ID"}'

# Batch - 25 videos per call (Pro pack and above)
curl https://api.youtubetranscripts.co/v1/transcript/batch \
  -H "x-api-key: yt_your_key" \
  -d '{"urls":["ID_1","ID_2","ID_3"]}'

# Check balance
curl https://api.youtubetranscripts.co/v1/account/balance \
  -H "x-api-key: yt_your_key"
Claude Desktop

Pull transcripts directly inside Claude conversations via MCP

Cursor

Transcribe YouTube from your code editor, no context switching

Windsurf / Zed

MCP server installs in under 30 seconds

Comparison

Why developers
switch to us.

The only YouTube Transcript API with never-expire credits, AI fallback, and no subscription. Get YouTube transcripts in production without IP blocks or broken scrapers.

ProviderCredits expire?AI fallbackNo subscriptionEntry priceWorks in production?
YouTubeTranscripts.co us Never expire Whisper Pay once$5 for 300 Always
Supadata⚠ Monthly reset Sub only$5/mo → 300⚠ Intermittent
ScrapeCreators Never expire$10 for 1,000
TranscriptAPI.com⚠ End of period Sub only~$10/mo
Transcribr.io⚠ 6-month limit$9 for 500
Open-source libraryN/A - free$0 Blocked by cloud IPs
Pricing

Buy once.
Use forever.

No subscriptions. No resets. No auto-charge. Credits stack - buy multiple packs and balances combine.

Credits never expire
Packs stack and combine
No subscription ever
Failed requests = 0 credits
Free forever
Trial
$0
100 credits
no card needed
Never expire on active accounts
  • 100 real API calls
  • Native captions only
  • Full dashboard access
  • AI fallback (Whisper)
  • Batch API
Starter
$5
300 credits
$16.67 per 1,000
Never expire
  • 300 transcripts
  • Native captions
  • Full dashboard
  • AI fallback
  • Batch API
Basic
$19
2,000 credits
$9.50 per 1,000
Never expire
  • 2,000 transcripts
  • Native + AI fallback
  • Python & JS SDKs
  • MCP server access
  • Batch API
Most popular
Pro
$59
10,000 credits
$5.90 per 1,000
Never expire
  • 10,000 transcripts
  • Native + AI fallback
  • Batch API (25 videos)
  • Priority support
  • 99.5% uptime SLA
Growth
$149
40,000 credits
$3.73 per 1,000
Never expire
  • 40,000 transcripts
  • Native + AI fallback
  • Batch API (25 videos)
  • Priority + Slack support
  • 99.5% uptime SLA
Scale
$250
100,000 credits
$2.50 per 1,000
Never expire
  • 100,000 transcripts
  • Native + AI fallback
  • Batch API (25 videos)
  • Dedicated Slack channel
  • 99.9% uptime SLA
📄
1 credit = 1 transcript when the video has native captions. Covers ~85% of YouTube.
🤖
AI fallback = 3 credits/minute via Whisper when no captions exist. A 10-min video = 30 credits.
🎁
Metadata always free. Title, views, likes, duration, thumbnail, bundled with every call.
🛡️
Failed requests cost nothing. Credits are restored automatically if we fail for any reason.
FAQ

Everything you
need to know.

How do I use the YouTube Transcript API with Python?+
Install with pip install youtubetranscripts. Initialise a Client with your API key and call client.transcript(url='...'). The response includes .content (list of segments with text, offset_ms, duration_ms), .lang, .source, and .balance_remaining. Full docs with examples at docs.youtubetranscripts.co/python.
Do YouTube Transcript API credits really never expire?+
Yes. Paid pack credits are permanent, no expiry under any conditions. Unlike Supadata (monthly reset) and TranscriptAPI.com (end-of-period expiry), your balance is a permanent asset you spend at your own pace. The only exception: the free-tier 100 credits are forfeited after 180 days of complete account inactivity.
What happens when a YouTube video has no captions?+
On paid plans, set ai_fallback=true. We download the audio and transcribe it with OpenAI Whisper. Cost: 3 credits per video-minute. A 10-minute video costs 30 credits. The response includes source: "ai_generated" so you always know which path ran. On the free tier, videos without captions return HTTP 422 with a clear upgrade message.
Is there a YouTube Transcript API for JavaScript / TypeScript?+
Yes. Install with npm install youtubetranscripts. Full TypeScript types, Promise-based async/await, works in Node.js 18+, Bun, and Deno. MCP server also available for Claude Desktop, Cursor, and Windsurf - use YouTube transcripts inside your AI assistant without any HTTP calls.
Is there a free YouTube Transcript API?+
Yes. YouTubeTranscripts.co offers a free YouTube Transcript API tier — your first 100 credits are completely free with no credit card. These never expire on active accounts. Paid packs start at $5 for 300 credits, and those never expire either. There is no subscription, no monthly fee, no auto-charge of any kind.
How is this different from the open-source youtube-transcript-api?+
The open-source library works perfectly on localhost. The moment it hits a cloud provider - AWS, GCP, Railway, Render, Vercel - YouTube sees the cloud IP and blocks it with a TranscriptsDisabled or RequestBlocked error. YouTubeTranscripts.co handles proxy rotation, IP management, and YouTube API changes automatically. Your production app never breaks.
How fast is the API? What are the rate limits?+
Videos with native captions respond in under 1.5 seconds. AI-generated transcripts via Whisper take 15–45 seconds depending on video duration. Rate limits: free tier (2 req/sec), Starter and Basic (10 req/sec), Pro and above (30 req/sec). All responses include balance_remaining. You never need a separate balance-check call.
Can I stack multiple credit packs?+
Yes. Packs stack. If you have 500 credits remaining and buy a Pro pack (10,000 credits), your new balance is 10,500. Credits from different packs are pooled into a single balance. There is no cap on how many packs you can hold.

What is a YouTube Transcript API?

A YouTube Transcript API is a programmatic interface for extracting the text content of YouTube videos: auto-generated captions, manually uploaded subtitles, and AI-generated transcriptions for uncaptioned videos. It is also commonly referred to as a YouTube captions API or YouTube subtitles API — all three terms describe the same underlying capability. YouTube's official Data API v3 does not expose transcripts to third-party developers, so every service in this category works by accessing YouTube's public caption infrastructure directly.

The key differences between providers are: reliability in cloud environments, pricing model, and what happens when a video has no captions. The open-source youtube-transcript-api Python library is the most popular starting point, but it fails consistently when deployed to cloud providers because YouTube blocks their IP ranges.

Common production use cases include:

  • Building RAG (Retrieval-Augmented Generation) pipelines from YouTube content
  • Content repurposing - video to blog post, newsletter, or social thread
  • Brand and competitor monitoring across YouTube at scale
  • AI training dataset creation from video content
  • Accessibility compliance - generating captions for ADA and WCAG requirements
  • Video SEO - publishing full transcripts to improve search indexing

YouTube Transcript API: Python quick start

The YouTubeTranscripts.co Python SDK is the fastest way to get YouTube transcripts in production. Install once, make one function call, get structured data back with timestamps and metadata included.

pip install youtubetranscripts from youtubetranscripts import Client client = Client(api_key="yt_your_api_key") # 1 credit - native captions result = client.transcript( url="https://youtube.com/watch?v=VIDEO_ID" ) # Plain text text = " ".join(s.text for s in result.content) # With millisecond timestamps for seg in result.content: print(f"{seg.offset_ms}ms: {seg.text}") # AI fallback for uncaptioned videos - 3 credits/min result = client.transcript( url=url, ai_fallback=True ) print(result.source) # "ai_generated"

The response includes balance_remaining in every call. You never need a separate balance endpoint. Full API reference at docs.youtubetranscripts.co.

Start in the next
two minutes.

100 free credits. No card. No subscription. Credits that actually stay in your account.

Get Started Free →

No credit card. No subscription. Free credits never expire.