GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Docs
  • Pricing
  • Contact
  • Guides
  • Changelog
  • Affiliates
  • Supadata comparison
  • TranscriptAPI comparison
  • Help centre
  • Trust & reliability
  • Legal
  • Free tools

This view

  • Original page
  • New address

GeezerVison is showing transcriptfetch.com — YouTube Transcript API - Channels, Search, Playlists

50 free credits · no card

YouTube Transcript API, every video in one call.

Clean text with timestamped segments, for any public video, whole channel, playlist or keyword search: over REST, an MCP server, or the Python and JavaScript SDKs.

Start with 50 free creditsRead the docs

No card required. Failed fetches are free.

A woman talking on a video call in a bright home office
How we priced our first productExample channel
0:00 / 14:52
TranscriptEnglish · captions · ready in 1 call
Illustrative example

Why people use it

Every video, even without captions

When a video has no caption track, the audio is transcribed automatically on the same call. No second endpoint and no change to your code.

Whole channels, playlists and searches

Resolve a channel, playlist or keyword search into a list, then transcribe what you want. Up to 50 videos in one batch, 500 on Mega and Scale.

Pay for transcripts, not requests

A credit is a delivered result. Failed and empty results are never charged, and unused credits roll over.

It keeps working when YouTube changes

Extraction runs through several methods behind one endpoint, so a change that breaks one path usually falls through to another before anyone notices.

How it works

The same fetch, the same credit, whichever way you reach it.

  1. 01

    Paste a link or connect

    Any public video URL or id, from your code, from Claude, ChatGPT or Cursor over MCP, or from n8n, Make and Zapier.

  2. 02

    We fetch the transcript

    Captions when the video has them, AI transcription when it does not. Clean text with timestamped segments.

  3. 03

    Use it anywhere

    Summaries, search, RAG, research or automations. The response has the same shape every time.

What people build with it

AI apps and agents

Ground an assistant in what was actually said. Segments carry start times, so an answer can cite the second rather than paraphrase a video it never watched.

Search and RAG indexing

Turn a video corpus into text your index can reach. Chunk on timestamps and every retrieved passage keeps a link back to the moment.

Content analytics

Track a channel, a course, or a topic across more hours of video than anyone can sit through, then query the text.

Try it on a real video.

Paste any YouTube link and run it. No account, no key, no card.

6 free transcripts a month, no account needed.

Your transcript appears here, with timestamps.

Like it?Start with 50 free credits

Three ways to get YouTube text

Compared by approach rather than by vendor, because the real choice is whether you want to own the infrastructure.

TranscriptFetch

Best when you want transcripts, not infrastructure.

  • Language supportREST, any language
  • SetupGet a key, make a request
  • No captions on the videoAI Fallback Transcription, same endpoint
  • Blocks and rotationHandled for you
  • Channels, playlists, searchBuilt in, paginated
  • BatchUp to 50 per call
  • Cost of a failureNothing
  • When YouTube changesWe fix it
Start free

An open-source library

Best for a few videos from a Python script.

  • Language supportPython only
  • Setuppip install
  • No captions on the videoRaises an error
  • Blocks and rotationYour IP, blocked at scale
  • Channels, playlists, searchNot included
  • BatchManual loops
  • Cost of a failureYour time
  • When YouTube changesWait for a release

Your own scraper

Best when you need full control and have time to maintain it.

  • Language supportAny language
  • SetupRent proxies, write parsers, maintain
  • No captions on the videoBuild a whole second pipeline
  • Blocks and rotationYours to solve, forever
  • Channels, playlists, searchMore parsers
  • BatchYour queue
  • Cost of a failureYour time and your proxies
  • When YouTube changesYou fix it, tonight

One approach people expect to see here and will not: the YouTube Data API. It does not return caption text for videos you do not own: captions.download requires the owner's OAuth credentials, so for third-party videos it is not an option at any quota.

Pricing

One credit per delivered caption transcript. Failed or empty results are free. Unused credits roll over up to twice your monthly allowance.

How much will my volume cost?

10,000transcripts / month

Transcripts a month
50250,000

Best plan

Pro

You pay

$25 / mo

Per 1,000

$2.50

Choose Pro
PlanPriceCredits / monthPer 1,000Action
Free$0 /mo50 credits cover 50 caption transcripts, or 50 channel, playlist or search pages, or about 4 h 10 min of AI-transcribed audio. Failed or empty fetches are free.FreeGet started
Basic$5 /mo1,000 credits cover 1,000 caption transcripts, or 1,000 channel, playlist or search pages, or about 83 h 20 min of AI-transcribed audio. Failed or empty fetches are free.$5.00Start with Basic
ProPopular$15 /mo7,500 credits cover 7,500 caption transcripts, or 7,500 channel, playlist or search pages, or about 625 h of AI-transcribed audio. Failed or empty fetches are free.$2.00Go Pro
Mega$45 /mo35,000 credits cover 35,000 caption transcripts, or 35,000 channel, playlist or search pages, or about 2,916 h 40 min of AI-transcribed audio. Failed or empty fetches are free.$1.30Go Mega
Scale$229 /mo250,000 credits cover 250,000 caption transcripts, or 250,000 channel, playlist or search pages, or about 20,833 h 20 min of AI-transcribed audio. Failed or empty fetches are free.$0.92Scale up

Top-ups are billed at your plan's per-1,000 rate and never expire. AI Fallback Transcription is billed by audio duration rather than per transcript. Full pricing

Questions people ask first

Anything else is in the docs.

What happens when a video has no captions?

The audio is transcribed automatically on the same call: no second endpoint and no change to your code. Media under 20 minutes usually returns inline; longer media returns a 202 with a job you can poll or receive by callback. Transcription is billed by audio duration, one credit per started 5 minutes, and only on delivery.

Which languages does it return?

Whatever caption track the video carries, with the language stamped on the response. When several tracks exist you can ask for one; when none exists and the audio is transcribed, the language is detected automatically.

What are the rate limits?

Per-plan request rates, returned on every response as standard rate-limit headers so a client can back off without guessing. Batch is the cheaper path for volume: one call carries up to 50 videos on the free tier, Basic and Pro, and up to 500 on Mega and Scale.

Can I fetch many videos in one request?

Yes. POST /transcripts/batch takes up to 50 ids per call, 500 on Mega and Scale, and returns a per-item outcome rather than failing the whole request. You are charged one credit per successfully delivered caption transcript; failures cost nothing.

What is in the free tier?

50 credits, no card. Every endpoint is included, not a reduced subset, so you can build the real integration before deciding to pay for it.

Is a credit the same as a request?

No. A credit is a delivered result. A caption transcript is one credit, a channel, playlist or search page is one credit, and polling a job, checking your balance and the health probe are free. Failed and empty results are never charged.

Are there SDKs?

Python and JavaScript, both thin wrappers over the same REST endpoints with typed models. There is also an official n8n community node, and an MCP server if you would rather let an assistant make the call.

What happens when YouTube changes something?

We fix it. Extraction runs through several methods behind one endpoint, so a change that breaks one path usually falls through to another before anyone notices, and the response shape your code parses does not move either way.

For developers

One POST with a URL or a bare video id, from any language. Same response shape every time.

API reference
curl -X POST https://transcriptfetch.com/api/v2/transcripts/video \
  -H "Authorization: Bearer $TRANSCRIPTFETCH_KEY" \
  -H "Content-Type: application/json" \
  -d '{"video": "dQw4w9WgXcQ"}'
import os, requests

r = requests.post(
    "https://transcriptfetch.com/api/v2/transcripts/video",
    headers={"Authorization": f"Bearer {os.environ['TRANSCRIPTFETCH_KEY']}"},
    json={"video": "dQw4w9WgXcQ"},
)
data = r.json()["data"]

for seg in data["segments"]:
    print(seg["start"], seg["text"])
const res = await fetch(
  "https://transcriptfetch.com/api/v2/transcripts/video",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.TRANSCRIPTFETCH_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ video: "dQw4w9WgXcQ" }),
  },
);
const { data } = await res.json();

for (const seg of data.segments) {
  console.log(seg.start, seg.text);
}
<?php
$ch = curl_init("https://transcriptfetch.com/api/v2/transcripts/video");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer " . getenv("TRANSCRIPTFETCH_KEY"),
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode(["video" => "dQw4w9WgXcQ"]),
]);
$data = json_decode(curl_exec($ch), true)["data"];

foreach ($data["segments"] as $seg) {
    echo $seg["start"], " ", $seg["text"], PHP_EOL;
}
  • REST API and SDKs

    Call it from any stack, or use the typed Python and Node SDKs.

    POST /api/v2/transcripts/videoRead the reference
  • MCP server

    Give Claude, ChatGPT or Cursor transcripts, search and channel listings.

    https://transcriptfetch.com/mcpSet up MCP
  • n8n node

    Drop transcripts into a workflow without writing code.

    n8n-nodes-transcriptfetchSee the n8n node

Put the spoken web to work

  • 50 free credits
  • No card required
  • Failed fetches are never billed
Start fetchingRead the docs
    • YouTube0:42“No framework, just the standard library and one router.”
    • TikTok0:12“Okay so nobody talks about this part of moving cities.”
    • Instagram0:27“Toss the noodles straight from the pot.”
    • YouTube12:04“We charged from day one.”
    • Instagram0:18“Most houseplants die from too much water, not too little.”
    • TikTok0:19“Landed it. Took forty tries, but I finally landed it.”
    • YouTube27:41“Once retention passed six months, we doubled the price.”
    • TikTok0:05“Day fourteen of jump rope every single morning.”
    • Instagram0:09“The secret to latte art is the height of the pour.”
    • YouTube4:18“Routes are added one at a time and tested before moving on.”
    • YouTube0:42“No framework, just the standard library and one router.”
    • TikTok0:12“Okay so nobody talks about this part of moving cities.”
    • Instagram0:27“Toss the noodles straight from the pot.”
    • YouTube12:04“We charged from day one.”
    • Instagram0:18“Most houseplants die from too much water, not too little.”
    • TikTok0:19“Landed it. Took forty tries, but I finally landed it.”
    • YouTube27:41“Once retention passed six months, we doubled the price.”
    • TikTok0:05“Day fourteen of jump rope every single morning.”
    • Instagram0:09“The secret to latte art is the height of the pour.”
    • YouTube4:18“Routes are added one at a time and tested before moving on.”
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.