YouTube transcript RequestBlocked: routes that work
Third-party transcript endpoints get RequestBlocked. The official captions API only works for videos you can edit. Here is the accurate split between official and hosted routes.
RequestBlocked: YouTube transcript endpoint refused the request Short answer
YouTube transcript RequestBlocked means YouTube refused the transcript request, commonly because it blocked the requesting IP address. Use authenticated captions.download for videos you can edit; for other videos, consider the library’s documented rotating-proxy workaround or evaluate a hosted transcript service.
Diagnosis checked 2026-11-12; sources below.Why it happens
YouTube blocks most IP addresses known to belong to cloud providers such as AWS, Google Cloud and Azure, so youtube-transcript-api raises RequestBlocked or IpBlocked when the same code that works on a laptop runs on a server. A self-hosted IP that sends too many requests can be blocked the same way. Source: youtube-transcript-api README: working around IP bans.
Do this now
- Fix 1, documented: Route youtube-transcript-api through a rotating proxy (the library's own documented workaround). The library's README warns that YouTube bans static proxies after extended use and recommends a rotating pool; a proxy does not guarantee you will not be blocked. Source: youtube-transcript-api README: working around IP bans.
from youtube_transcript_api import YouTubeTranscriptApi from youtube_transcript_api.proxies import GenericProxyConfig ytt_api = YouTubeTranscriptApi( proxy_config=GenericProxyConfig( http_url="http://user:pass@my-custom-proxy.org:port", https_url="https://user:pass@my-custom-proxy.org:port", ) ) ytt_api.fetch(video_id) - If the data is yours or your use fits the official terms: YouTube Data API v3 (Public API). No per-call fee is published; the constraint is the daily quota. Extra quota is not self-serve.
- Fix 2, hosted: For video transcripts at volume, run a hosted route instead of patching your own requests: YouTube Caption & Whisper AI Transcript Extractor. The request below runs it with its published example input through the Apify API (your token, billed at the Store price).
- Compare every route, with fields and prices, on the YouTube page.
Python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "videos",
"videoUrls": [
"https://www.youtube.com/watch?v=jNQXAC9IVRw"
],
"maxVideosPerChannel": 50,
"maxVideosPerPlaylist": 50,
"includeAutoGenerated": True,
"useWhisper": True,
"whisperModel": "tiny",
"includeWordTimings": False,
"proxyCountry": "GB",
"outputFormat": "full"
}
run = client.actor("nimbryxo-studio/youtube-caption-and-whisper-ai-transcript").call(run_input=run_input)
if run is None:
raise RuntimeError("The Actor run was not found.")
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item) pip install apify-client
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_APIFY_TOKEN>" });
const input = {
"mode": "videos",
"videoUrls": [
"https://www.youtube.com/watch?v=jNQXAC9IVRw"
],
"maxVideosPerChannel": 50,
"maxVideosPerPlaylist": 50,
"includeAutoGenerated": true,
"useWhisper": true,
"whisperModel": "tiny",
"includeWordTimings": false,
"proxyCountry": "GB",
"outputFormat": "full"
};
const run = await client.actor("nimbryxo-studio/youtube-caption-and-whisper-ai-transcript").call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items); npm install apify-client
cURL
curl -X POST "https://api.apify.com/v2/actors/nimbryxo-studio~youtube-caption-and-whisper-ai-transcript/run-sync-get-dataset-items" -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" -d '{"mode":"videos","videoUrls":["https://www.youtube.com/watch?v=jNQXAC9IVRw"],"maxVideosPerChannel":50,"maxVideosPerPlaylist":50,"includeAutoGenerated":true,"useWhisper":true,"whisperModel":"tiny","includeWordTimings":false,"proxyCountry":"GB","outputFormat":"full"}' Waits for the run and returns the dataset items (runs over 300 seconds return HTTP 408; start an async run instead).
MCP (AI agents)
{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=nimbryxo-studio/youtube-caption-and-whisper-ai-transcript",
"headers": {
"Authorization": "Bearer <YOUR_APIFY_TOKEN>"
}
}
}
} Adds this Actor as a tool in an MCP client that takes a remote server URL (Cursor, VS Code, Claude Code) through Apify's hosted MCP server. OAuth sign-in also works without the header. Clients that only start local servers can wrap the URL with npx mcp-remote.
Open YouTube Caption & Whisper AI Transcript Extractor in Apify Store
Routes that work for YouTube data
The official route first, then the catalogue Actors that fit this problem (video transcripts), by their published fields. Store figures are the publisher's public numbers.
| Route | Core fields | Price / 1K | Success, 30 days | Link |
|---|---|---|---|---|
| Public APIYouTube Data API v3 | not compared | below | Official docs | |
| YouTube Caption & Whisper AI Transcript Extractor | 6/8 | $0.99 | 92% of 26 runs | Open in Apify Store |
| YouTube Video Metadata & Chapter Extractor | 7/8 | $0.99 | 16 runs, too few to rate | Open in Apify Store |
Official price: No per-call fee is published; the constraint is the daily quota. Extra quota is not self-serve. Compare all 25 YouTube routes.
The facts behind the error
| Fact | Value |
|---|---|
| Official transcript method | captions.download in the YouTube Data API |
| Permission needed | The authenticated user must have permission to edit the video |
| Quota cost per download | 200 units |
| Quota cost to list captions | 50 units |
| Default quota | 10,000 units per day across most endpoints, plus a separate 100 search.list calls per day |
| Why it happens | YouTube blocks most cloud-provider IPs (AWS, Google Cloud, Azure); heavy traffic from one IP can be blocked too |
Why deployment triggers the error
YouTube blocks most IP addresses associated with cloud providers, including AWS, Google Cloud and Azure. Heavy traffic can also get a self-hosted IP blocked, so moving outside a cloud provider does not remove the need to manage request volume.
What the library recommends
The youtube-transcript-api documentation recommends routing requests through a rotating proxy pool. It warns that static proxies can be banned after extended use, and rotating proxies can still encounter blocks. This is a library workaround, separate from the official YouTube Data API.
Choose the route by video permissions
The official captions.download method requires the authenticated user to have permission to edit the video. If you have that access, use the captions API and account for its quota costs. For videos outside your editing permissions, evaluate a hosted transcript service by its supported videos, caption availability and handling of failed requests.
When to stop fighting the error
Patching transcript parsing is pointless when YouTube refuses the request before captions reach your application. Switch to the official captions API when you can authenticate with editing permission; evaluate a hosted transcript service when maintaining proxy routing and handling recurring blocks no longer suits the job. Check the service’s video coverage and failure handling before moving your transcript requests.
Website pages
Questions people ask
Why does the same transcript code work locally but fail on a server?
YouTube blocks most IP addresses known to belong to cloud providers. Your laptop and server use different outgoing IP addresses, so identical code can receive different responses.
Can the official YouTube API download captions from any video?
The authenticated user must have permission to edit the video to use captions.download. For videos outside that permission, choose a different transcript route.
Will a static proxy fix RequestBlocked?
The library documentation warns that YouTube bans static proxies after extended use. It recommends a rotating pool, although requests through that pool can still be blocked.
Can a self-hosted connection also be blocked?
Yes, heavy traffic from a self-hosted IP can trigger a block too. Moving the application to another server is useful only if the outgoing connection and request pattern address the cause.
Sources
Every dated claim on this page comes from the public sources below. Check the source before you make a business decision on it.
- YouTube captions.download — checked 2026-11-09
- YouTube captions.list — checked 2026-11-09
- YouTube quota calculator — checked 2026-11-09
- youtube-transcript-api README: working around IP bans — checked 2026-11-12
Get YouTube data with a catalogue Actor
YouTube Search Results & Entity Type Scraper returns 7 of 8 core YouTube fields at $0.99 per 1,000 results. Compare all 25 YouTube routes.