Skip to content

Start typing. Errors match on their exact yt-dlp output.

to move, to open esc to close

Fix "Video unavailable" in yt-dlp

Tested on yt-dlp 2026.07.28 Updated
What yt-dlp prints
ERROR: [youtube] dQw4w9WgXcQ: Video unavailable
ERROR: [youtube] dQw4w9WgXcQ: Video unavailable. This video is not available in your country
ERROR: [youtube] dQw4w9WgXcQ: Video unavailable. This video contains content from XYZ, who has blocked it

Quick answer

Six different situations print those two words, and only some are workable. Open the URL in a browser on the same connection first — that single check splits "the video is gone" from "something about this request is wrong", and they have nothing in common:

what yt-dlp knows, without downloading
yt-dlp --simulate -v "URL"

Which one do you have

SituationHow to recognise itWorkable?
Deleted or taken downBrowser says the same thingNo
PrivateMessage mentions signing inWith access — see below
Geo-restricted"not available in your country"Sometimes
Age-restrictedMessage mentions confirming ageSometimes
Uploader-blockedNames a rights holderSometimes
Extractor out of datePlays fine in the browserYes — update

It plays in the browser

Then the video is fine and the request is not. Update first — extractor breakage is the single most common cause of a false "unavailable":

bash
yt-dlp -U && yt-dlp --rm-cache-dir

Still refused? Ask as a different client. Some videos are withheld from one and served to another:

bash
yt-dlp --extractor-args "youtube:player_client=tv,web_safari" "URL"

If neither helps and the browser is signed in while yt-dlp is not, that difference is the whole explanation — see the cookies guide.

Geo-restriction

YouTube decides this from the connecting IP address, which means the flags that work elsewhere do nothing here:

works on some sites; not on YouTube
yt-dlp --geo-bypass --geo-bypass-country US "URL"

--geo-bypass sends a spoofed X-Forwarded-For. Sites that trust that header are fooled; YouTube is not. On YouTube the only thing that changes the answer is connecting from somewhere else, which means a proxy:

bash
yt-dlp --proxy "socks5://user:pass@host:1080" "URL"

Uploader-blocked

When the message names a rights holder, the block is per-region and applied by them. Occasionally the same content exists on another channel or another platform; there is no flag for it.

Inside a playlist

Any playlist more than a few months old contains videos that have since been deleted or made private. That is normal, and by default the first one ends the entire run:

bash
yt-dlp -i --download-archive archive.txt "PLAYLIST_URL"

-i keeps going. The archive file means an interrupted run resumes instead of starting over — the playlist guide covers the pattern.

Confirming what is really happening

Metadata extraction happens before format extraction, so this often succeeds even when downloading does not — and the JSON says considerably more than the error line:

bash
yt-dlp --dump-json "URL" | head -50

Nothing at all means the video is genuinely gone. Metadata with no formats means it exists and access is being refused, which is a different page: private video, age-restricted, or PO tokens.

If it still fails

  • Every video on the site. The extractor is broken, not the videos. Update, then check the issue tracker — site-wide breakage is always already reported.
  • Only livestreams. A stream that has ended but not yet been processed into a VOD is genuinely unavailable for a while. Wait.
  • Only YouTube Music links. Try the www.youtube.com form of the URL; the Music front end sometimes reports differently for the same video.
  • Only shorts. Rewrite /shorts/ID as /watch?v=ID — they are the same video and the watch URL is better supported.

Frequently asked

How do I tell a geo-block from a deleted video?
Open the URL in a browser on the same connection. If it plays there, the video exists and something about the yt-dlp request is the problem. If the browser also refuses, read what it says — YouTube is specific in a way the API response is not.
Does --geo-bypass work on YouTube?
No. It sends a spoofed X-Forwarded-For header, and YouTube ignores that entirely — the geo decision is made on the connecting address. It does work on some smaller sites that trust the header.
The video plays in a browser but yt-dlp says unavailable.
Usually an extractor problem rather than an availability one, and the fix is an update. If that does not help, try --extractor-args "youtube:player_client=tv" — some videos are refused to one client and served to another.
One video in my playlist kills the whole run.
Add -i. Deleted and private videos are normal in any playlist older than a few months, and without -i the first one ends the job.