A small API that absorbs an annoying problem
TranscriptAPI is an independently built product with one job: hand you YouTube transcripts, search results and channel data over an ordinary HTTP call, and take on the upkeep that normally comes with getting them.
Why this exists
YouTube's own Data API cannot give you captions for a video you do not own. The captions.downloadmethod requires OAuth as the video's owner, so unless you are pulling from your own channel, the official route is simply closed. What is left is metered: everything you do draws on a 10,000-unit daily quota, and a single search costs 100 units of it.
So everyone ends up writing the same scraper. It works beautifully on a laptop. Then it gets deployed and stops working, because YouTube blocks the IP ranges cloud providers publish. Now the project needs residential proxies, retry logic wrapped around an undocumented response format, and somebody paying attention on the day that format quietly changes.
Parsing a caption track is a weekend. Keeping it parsing — the proxy pool, the retries, the fix that has to land the day YouTube changes shape — is the part worth paying someone else for. That maintenance burden is what you are buying.
What runs it
No mystery, no architecture diagram with more boxes than it needs. The whole thing is deliberately boring, because boring is what stays up while the thing underneath it keeps moving.
| Layer | What it is |
|---|---|
| API | FastAPI, on a single Hetzner box |
| Cache | Redis — every hit it serves is free to you |
| Accounts & usage | Firebase Firestore |
| TLS & routing | Caddy |
| Deploys | Docker Compose |
| Egress | Rotating residential proxies |
| Translation | An LLM, called only when you pass translate_to |
| Frontend | Next.js on Vercel |
How we decide things
Every pricing and design choice below is already implemented — you can verify each one against the API reference.
- Cache hits cost nothing. If we did not have to go and fetch it, you are not charged for it.
- Failed calls are refunded automatically. A request that gets charged and then fails returns your credits and says so in the response, rather than quietly eating your balance.
- Translation is priced by transcript length, not as a flat fee, because a three-hour video genuinely costs more to translate than a three-minute one. Charging both the same would mean overcharging one of them.
- One bearer token reaches every route. No scopes to configure, no per-service keys, no OAuth handshake.
- 20 free credits, no card. Enough to find out whether this fits before anyone asks you for payment details.
Who builds it
TranscriptAPI is small and independently built. It is not a funded company, and there is no team page here because there is nothing honest to put on one — no investors, no offices, no logo wall of customers who have not agreed to appear on it. You will not find uptime percentages or request counts on this site either. Numbers like that are trivial to write and impossible for you to check, which makes them worth roughly nothing.
What is true is duller and more useful: whoever wrote the code also reads the mail. Bug reports go straight to the person who can fix them, and a video ID plus the response you got back is usually enough to reproduce anything.