ChannelText

YouTube Transcript API

One REST endpoint for videos, playlists and whole channels. Get the text as JSON or download TXT, SRT, VTT and ZIP files, paid per delivered transcript from a prepaid balance.

In short: ChannelText downloads the transcripts of YouTube videos, Shorts, playlists and whole channels as TXT, SRT, WebVTT or JSON files, in one ZIP with a CSV report. It costs $0.008 per delivered transcript from a prepaid balance topped up with $10 (1,250 transcripts): a one-time payment in USD, no subscription, no free sample, and videos without a transcript are not charged. Up to 50 links and 500 videos per run; it uses the captions YouTube publishes, so a video without captions has no transcript. Also available as a REST API and an MCP server.

Files
More formats
Limit and dates

One endpoint for videos, playlists and channels

POST up to 50 YouTube URLs (videos, Shorts, playlists or channels) and ChannelText lists the videos, fetches every transcript and charges your prepaid balance only for the ones delivered, up to 500 videos per job. Poll the job, then read the text as JSON or download the files.

curl

# Start a job (the most it can cost is reserved from your balance)
curl -X POST https://channeltext.com/api/v1/jobs \
  -H "Authorization: Bearer ct_live_…" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: my-first-job" \
  -d '{"urls": ["https://www.youtube.com/@channelname"], "maxVideos": 20, "formats": ["text", "srt"]}'

# Poll it until "state" is finished
curl -H "Authorization: Bearer ct_live_…" https://channeltext.com/api/v1/jobs/JOB_ID

# Read the transcripts as JSON, or download everything as one ZIP
curl -H "Authorization: Bearer ct_live_…" "https://channeltext.com/api/v1/jobs/JOB_ID/results?limit=50"
curl -H "Authorization: Bearer ct_live_…" -o transcripts.zip https://channeltext.com/api/v1/jobs/JOB_ID/files/zip

Python

import time, requests

API = "https://channeltext.com/api/v1"
H = {"Authorization": "Bearer ct_live_…"}

job = requests.post(f"{API}/jobs", headers=H, json={"urls": ["https://www.youtube.com/@channelname"], "maxVideos": 20}).json()
while job["state"] in ("queued", "running", "cancelling"):
    time.sleep(5)
    job = requests.get(job["links"]["self"], headers=H).json()

results = requests.get(job["links"]["results"], headers=H, params={"limit": 50}).json()
for video in results["videos"]:
    print(video["title"], video["status"], (video["text"] or "")[:80])

Endpoints

EndpointWhat it does
POST /api/v1/jobsStart a job
GET /api/v1/jobsYour jobs, newest first
GET /api/v1/jobs/{id}Job status and progress
GET /api/v1/jobs/{id}/resultsTranscripts and download links
GET /api/v1/jobs/{id}/files/{file}Download a file
GET /api/v1/balancePrepaid balance
GET /api/v1/openapi.jsonThis document

Full reference with every field and error code: API docs and the OpenAPI 3.1 document. Create an API key on your account page after signing in; send it as Authorization: Bearer ct_live_….

Or run the open-source library yourself

The free youtube-transcript-api Python library fetches a video's transcript from your own machine. Its README says YouTube blocks most IP addresses of cloud providers and recommends rotating residential proxies when you deploy it. ChannelText does the fetching for you, lists whole channels and playlists, and charges only for transcripts delivered.

Pay per transcript, not per month

Prices listed on these sites on 2026-09-26:

ServicePriceModel
ChannelText$8 per 1,000 deliveredprepaid $10, no subscription
transcriptapi.com$5 per month for 1,000, then $2.50 per 1,000monthly plan with top-ups
youtube-transcript.io$9.99 per month for 1,000monthly plan

Limits

  • Up to 50 URLs and 500 videos per job; every job is also capped by your balance, which never goes negative.
  • Rate limit per API key: 60 requests in a burst, refilled at 60 per minute.
  • Send an Idempotency-Key with POST /jobs so a retry never starts or charges a second job.

Pricing

$0.008 per delivered transcript ($8 per 1,000). No subscription.

  • Prepaid balance: add $10 (1,250 transcripts) when your balance is short. You only pay at that point, after you have seen how many videos your link has and the most it can cost.
  • Videos without captions, private or removed videos and videos YouTube blocked are free. You pay only for transcripts you get. “Update this channel” skips the videos of that channel you already received.
  • No free sample. Transcripts come from the captions YouTube publishes (the creator's or YouTube's automatic ones); there is no speech-to-text, so a video with no captions has no transcript.

Questions

How much does a YouTube transcript API cost?

The ChannelText API is paid: $0.008 per delivered transcript from a prepaid balance, and videos without a transcript cost nothing. The open-source youtube-transcript-api library is free but runs on your own machine and IP address.

Does YouTube's own API give you transcripts?

The official YouTube Data API is free within a daily quota, but its captions download only works for videos you own or manage. ChannelText gets the published captions of any public video that has them.

Is there an API for YouTube transcripts?

Yes. ChannelText has a REST API (docs) for videos, playlists and whole channels, and an MCP server for AI assistants, both paid from the same balance.