TranscriptFetch

TranscriptFetch

Development

Turn YouTube, TikTok, and Instagram videos into transcripts and structured data. Timestamped, LLM-ready, one API call.

Visit APIπŸ” Alternatives
Status: UP

πŸ“š Documentation & Examples

Everything you need to integrate with TranscriptFetch

πŸš€ Quick Start Examples

TranscriptFetch Javascript Examplejavascript
// TranscriptFetch API Example
const response = await fetch('https://transcriptfetch.com', {
    method: 'GET',
    headers: {
        'Content-Type': 'application/json'
    }
});

const data = await response.json();
console.log(data);

TranscriptFetch

TranscriptFetch turns a video URL into timestamped, structured text in one call. It reads published captions where they exist and transcribes the audio when they don't, returning the same JSON shape either way β€” across YouTube, TikTok, Instagram, X, Facebook and direct media files (mp4, mp3, wav). Built for RAG pipelines, research datasets and agents that need primary spoken sources.

Base URL: https://transcriptfetch.com/api/v2/transcripts/ Β· Docs: transcriptfetch.com/docs Β· OpenAPI: api/v2/openapi.json Β· MCP: https://transcriptfetch.com/mcp

How to Get a TranscriptFetch API Key

  1. Create an account at transcriptfetch.com/sign-up β€” no card required.
  2. Open Manage API keys and create a key (they look like tf_live_…).
  3. Store it server-side as TRANSCRIPTFETCH_API_KEY and send it as a bearer token. Requests without a valid key return 401.

Free tier: 50 credits every month, no card. Failed, blocked or empty results are never billed, and neither is job polling.

First Request

curl https://transcriptfetch.com/api/v2/transcripts/video \
  -H "Authorization: Bearer $TRANSCRIPTFETCH_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"video":"dQw4w9WgXcQ"}'

The video field accepts a bare 11-character YouTube ID, any YouTube / TikTok / Instagram URL, or a direct media file URL.

{
  "ok": true,
  "request_id": "req_…",
  "data": {
    "kind": "transcript",
    "video_id": "dQw4w9WgXcQ",
    "platform": "youtube",
    "title": "Example video",
    "segments": [
      { "start": 0, "duration": 3.5, "text": "We're no strangers to love" }
    ]
  },
  "usage": { "credits_spent": 1, "balance": 49, "bytes": 14233 }
}

Every response uses the same envelope: { ok, request_id, data, usage }. A synchronous transcript carries either joined text or timestamped segments, depending on the timestamps flag; job and batch results include both.

Endpoints

All under https://transcriptfetch.com/api/v2/transcripts/:

Endpoint What it does
POST /video One video β†’ timestamped transcript
POST /batch Up to 50 videos in one request (500 on Mega and Scale)
POST /search Find videos by keyword (YouTube, TikTok, Instagram)
POST /channel Resolve a channel or profile into a paginated video list, newest first
POST /playlist Playlist listing (YouTube and TikTok)

Every listed row carries a url the transcript endpoint accepts as-is. Instagram profiles use the channel endpoint. v1 (/api/v1/...) is still served for existing integrations under a 12-month deprecation policy β€” new work should use v2.

When There Are No Captions

mode: "auto" transcribes the audio automatically on the same endpoint. Short media may finish inline within about 45 seconds; longer work returns HTTP 202 with a job_id and poll_url, or you can supply a callback_url to receive the finished result instead of polling.

Their published coverage: captions exist for 82% of YouTube, 41% of TikTok and 38% of Instagram URLs; with audio transcription the API returns text for 99% / 96% / 94% of the same URLs.

Python

import os, requests

res = requests.post(
    "https://transcriptfetch.com/api/v2/transcripts/video",
    headers={"Authorization": f"Bearer {os.environ['TRANSCRIPTFETCH_API_KEY']}"},
    json={"video": "https://youtu.be/dQw4w9WgXcQ", "timestamps": True},
)
data = res.json()
for seg in data["data"]["segments"]:
    print(seg["start"], seg["text"])

JavaScript

const res = await fetch('https://transcriptfetch.com/api/v2/transcripts/video', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.TRANSCRIPTFETCH_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ video: 'https://www.tiktok.com/@user/video/123', timestamps: true }),
});
const { data, usage } = await res.json();
console.log(data.segments.length, 'segments Β·', usage.credits_spent, 'credits');

Official Python and Node SDKs read the key from TRANSCRIPTFETCH_API_KEY, and there's a prebuilt n8n community node.

Credits and Pricing

Plan Price Credits / month
Free $0 50 (no card)
Basic $5 1,000
Pro $15 10,000
Mega $45 50,000
Scale $229 300,000

A successful caption transcript or a YouTube listing call costs 1 credit. AI transcription costs 1 credit per started minute (minimum 1) and is billed only on delivery. Unused plan credits roll over up to 2Γ— the monthly allowance; top-ups never expire. Annual billing is 10 months for 12.

Rate limits: 10 requests/minute on free, 60 on Basic, 300 on Pro, 900 on Mega and Scale.

Error Codes

400 invalid input Β· 401 invalid key Β· 402 insufficient credits Β· 409 idempotency conflict Β· 422 input must change Β· 429 respect Retry-After Β· 500/502/503 server or transient upstream failure.

MCP Server

https://transcriptfetch.com/mcp (streamable HTTP, OAuth or API key) exposes five tools β€” get_transcript, search_videos, list_channel_videos, list_playlist_videos and get_credits β€” so Claude, ChatGPT, Cursor, Perplexity and other MCP clients can fetch primary sources themselves with no glue code. A machine-readable server card is published at /.well-known/mcp/server-card.json.

Use Cases

  • RAG and AI pipelines β€” ground answers in what people actually said, with timestamps to cite
  • Channel monitoring β€” poll a channel or playlist with since_video_id; a page with nothing new costs no credits
  • Research datasets β€” normalise interviews, reviews, demos and lectures into one timestamped schema
  • Agent tooling β€” let an assistant retrieve the original spoken source itself over MCP

Read the full API docs β†’

⚑

Performance & Stats

A
100%
Uptime
839ms
Avg Response
🟒
Status

Explore More

Best TranscriptFetch alternatives (2026)Best Development APIs

Related APIs in Development