Black Friday · 30% off

Get 30% off
Back to blog
Errors

youtube-transcript-api Errors Explained: IpBlocked, RequestBlocked and More

What every youtube-transcript-api error means (IpBlocked, RequestBlocked, TranscriptsDisabled), what triggers it, which to retry, and what yt-dlp prints. Checked against v1.2.4.

00:09:00 · OCT 17, 2026 · UPDATED NOV 07, 2026

Quick answer

Sort the error before you fix it. Network errors (RequestBlocked, IpBlocked) say something about where your code runs, and are the only ones worth retrying. Errors about the video (captions off, unavailable, age-restricted) and about your request (wrong language, URL instead of ID) give the same answer every time, so retrying them only gets you blocked sooner.

Checked against youtube-transcript-api 1.2.4 on 17 October 2026. We make GetYouTubeTranscript, a hosted option mentioned at the end. Everything before that is about the free tools, and each error has a longer page with a reproducible example in the open reference repository.

01

Quick reference

The library defines 17 error classes. Fourteen can be raised, and the three cookie classes (CookieError, CookieInvalid, CookiePathInvalid) are never raised anywhere in version 1.2.4. The fourteen:

ErrorWhat it is aboutRetry?
IpBlockedNetworkLater, slower, or from another network
RequestBlockedNetworkLater, slower, or from another network
YouTubeRequestFailedNetworkRead the status code first
YouTubeDataUnparsableNetworkOnce, later
FailedToCreateConsentCookieNetworkFrom another region
TranscriptsDisabledNothing to fetchNo
VideoUnavailableNothing to fetchNo
VideoUnplayableNothing to fetchOnly after a live stream ends
AgeRestrictedNothing to fetchNo
NoTranscriptFoundYour requestNo, change the language
InvalidVideoIdYour requestNo, pass the ID, not the URL
NotTranslatableYour requestNo
TranslationLanguageNotAvailableYour requestNo, pick a listed language
PoTokenRequiredRareNo, check the library issues
02

Network errors: YouTube never gave a real answer

These come from the library's source as follows. IpBlocked is raised when YouTube answers with HTTP 429, or returns a page containing a reCAPTCHA form. RequestBlocked is raised when YouTube asks for a sign-in because it suspects a bot. YouTubeRequestFailed covers any other HTTP error status, such as a 403 or a 5xx. YouTubeDataUnparsable means the page was fetched but did not contain what the library looks for, and was not the reCAPTCHA page. FailedToCreateConsentCookie means YouTube showed its cookie consent page and the library could not get past it, which can happen in some regions.

The library's own message for the first two lists the usual causes: too many requests from one IP, or requests coming from a cloud provider such as AWS, Google Cloud or Azure.

What we saw on 17 October 2026

These are single-network observations, not a benchmark. From one home connection the library hit the bot check after a few dozen requests in under an hour, while yt-dlp fetched subtitles from the same address a few minutes later. A GitHub-hosted runner, which uses a cloud address, got RequestBlocked on its very first request. The block on the home address lifted after roughly 25 minutes and returned soon after requests resumed at about ten a minute.

What helps, roughly from least to most effort:

  • Back off. Wait, then retry slowly, with a cap. Do not loop.
  • Cache what you fetch so each video is requested once.
  • Run from a different network. A home or office connection is treated differently from a server.
  • Send the requests through a proxy provider. The library supports proxy configuration, and its documentation recommends rotating residential proxies for IP bans.
03

The video has nothing to fetch

  • TranscriptsDisabled: the video data has no caption tracks at all. If "Show transcript" is missing in a browser too, there is nothing for any tool to fetch, and your only route to text is speech-to-text on the audio.
  • VideoUnavailable: YouTube says the video is unavailable. It was removed, made private, blocked in a region, or the ID is wrong. yt-dlp prints This video is unavailable for the same ID.
  • VideoUnplayable: YouTube will not play it, with its own reason. Live streams that are not archived and premieres that have not started are the common cases. Wait for the stream to end.
  • AgeRestricted: YouTube only serves the video to signed-in users. yt-dlp prints Sign in to confirm your age and points to its cookie options. Automated use of an account can be restricted by YouTube, so treat these videos as unavailable unless you have a good reason not to.

Record these as normal answers and move on. A retry cannot change the result.

04

You asked for the wrong thing

  • NoTranscriptFound: none of the language codes you passed exist on the video. The error text lists what does. Codes must match exactly, so a request for es misses a track coded es-ES, and yt-dlp behaves the same way. Pass several codes in order of preference, or call list(video_id) and pick.
  • InvalidVideoId: you passed a URL. The library wants the 11-character ID, so call fetch("jNQXAC9IVRw"), not fetch("https://...").
  • NotTranslatable and TranslationLanguageNotAvailable: you asked for a machine translation that does not exist. Some tracks offer no translation languages at all (the first video ever uploaded to YouTube is one), and others offer a list, such as 18 languages on a popular math channel's video. Check is_translatable and translation_languages first.
05

Rare and legacy

PoTokenRequired appears when a caption track URL asks for a proof-of-origin token the library does not produce. Users report it for some videos, and the library asks you to open an issue, so check its tracker for the current state. The three cookie errors are left over from the 0.x versions, when cookies could be used to sign in. They are defined but never raised in 1.2.4, so code that catches them does nothing.

06

Handle them in code

One small function that turns an exception into a decision keeps retry logic in one place. This one was run against every error class listed above:

from youtube_transcript_api import (
    AgeRestricted,
    InvalidVideoId,
    NoTranscriptFound,
    NotTranslatable,
    RequestBlocked,  # IpBlocked is a subclass, so this catches both
    TranscriptsDisabled,
    TranslationLanguageNotAvailable,
    VideoUnavailable,
    VideoUnplayable,
)


def classify(exc: Exception) -> str:
    if isinstance(exc, RequestBlocked):
        return "blocked"  # about your network: back off, change network, do not loop
    if isinstance(exc, (TranscriptsDisabled, VideoUnavailable, VideoUnplayable, AgeRestricted)):
        return "nothing_to_fetch"  # record it and move on
    if isinstance(exc, (NoTranscriptFound, InvalidVideoId, NotTranslatable, TranslationLanguageNotAvailable)):
        return "bad_request"  # fix the language code or the video ID
    return "other"  # read the message: YouTubeRequestFailed, PoTokenRequired, ...

Retry only blocked, with exponential back-off and a limit. Log the rest and continue.

07

If you would rather not own the blocking problem

Everything above works with free tools, and for a handful of videos from your own machine you probably need nothing else. The network errors are what hurt once code runs on a server. At that point you can run proxies yourself, or call a hosted transcript service so the blocked address is not yours. Several exist, including Supadata, TranscriptAPI, youtube-transcript.io and ours, GetYouTubeTranscript. We compare them without ranking in the transcript tools roundup and list our own error codes in the API troubleshooting checklist.

If we got anything here wrong, or a tool's maintainers see it differently, tell us in the repository and we will correct it.

Frequently asked questions

Q01

What does RequestBlocked mean in youtube-transcript-api?

YouTube answered with a sign-in wall that says it suspects automated traffic, so the library could not read the video at all. It is about the network the request came from, not the video. IpBlocked is a more specific version of the same thing and is a subclass, so catching RequestBlocked catches both.

Q02

Why do I get TranscriptsDisabled when the video seems to have captions?

The library raises it when the video data it received contains no caption track list. If you can see "Show transcript" in a browser but the library disagrees, try again later or from another network and compare with another tool. We saw one video where the library and yt-dlp disagreed about whether it was available at all.

Q03

Is an IP block permanent?

Not in what we saw. On one home connection a block lifted after roughly 25 minutes, then returned soon after requests resumed at about ten a minute. That is one observation on one network, not a rule. Back off and slow down instead of looping.

Q04

Which youtube-transcript-api errors should I retry?

Only the network ones (RequestBlocked and IpBlocked), and only with a back-off and a cap. Errors about the video (captions disabled, unavailable, age-restricted) and about your request (wrong language, URL instead of ID) will give the same answer every time.

Q05

How do I fix NoTranscriptFound?

The video has captions, just not in the language you asked for. The error text lists what is available. Pass several codes in order of preference, for example languages=["de", "en"], or call list(video_id) and choose from the result.

Related

Featured on aitoolfame.comFeatured on Aura++Featured on DeepLaunch.ioFeatured on Dofollow.ToolsFeatured on EasyDoFollowFeatured on EarlyHuntFeatured on Findly.toolsFeatured on FoundrListGood AI ToolsFeatured on IndieHuntFeatured on LaunchBuffFeatured on launched.toolsFeatured on Launch Llama ToolsFeatured on LemonLaunchLiftOff launch badgeMy Launch StashGetYouTubeTranscript on Nick LaunchesOpenHunts Club MemberFeatured on saasfame.comShinyLaunchFeatured on ShowMeBestAIFeatured on toolfame.comListed on Turbo0Featured on Twelve ToolsHuzzler Embed BadgeFeatured on CodeHypeGetYouTubeTranscript on Better LaunchDokeyAIFeatured on WayfindioFeatured on LaunchZoneFeatured on NoonlaunchFeatured on WhatsthebigdataSurfaced on CodeTrendyFeatured on ScrollLaunchFeatured on ufind.bestFeatured on ShipBoostProduct WingWe Like ToolsAppa ListAcid ToolsPower Up ToolsToshi ListAIGC 160Appsy ToolsHunt for ToolsBeam ToolsTool Find DirTool SignalSaaS Tools DirSoftware BoltProduct List DirStack DirectorySaaS FieldSaaS WheelSaaS RootsStartup BenchmarksUnite ListTrustinerBest Tool VaultSolver ToolsAsh ListSmart Kit HubAI X CollectionAI Tech ViralMillion Dot HomepageThat App ShowLaunch ScrollMy Start ToolsLatest AI UpdatesSuper AI BoomTools Under RadarThe Key ToolsTool JourneyTools List HQThe App ToolsThe Mega ToolsSource DirTool CosmosTop Trend ToolsTiny Tool HubTool PrismStartup AIdeasFeatured on WonderLaunchFeatured on ShipycornFeatured on ToolsClawListed on ProofStoriesFeatured on ToolListedLaunched on Launch StreakIndieMarkdowns