Guide

YouTube "Sign in to Confirm You're Not a Bot": Fixes in the Browser and in yt-dlp

YouTube shows this when the address or session looks automated. What it means in a browser and in yt-dlp, the wiki's cookie advice, and where a proxy helps.

HProxy Team··7 min read
HProxy.Guide

Free proxies won't hold up here.

Shared datacenter IPs get flagged and dropped fast. When it has to hold, gaming, streaming, accounts, you need mobile and residential IPs that read as a real device, from $0.44/GB, pay as you go.

See plans & pricing

The message is short and a little insulting: "Sign in to confirm you're not a bot. This helps protect our community." It replaces the video, offers a Sign in button, and gives no other way through. In a browser it tends to appear on a VPN, on a work network, in a private window, or on a machine in a data centre. In yt-dlp it appears as an error line that ends with a link to the project's wiki, and it has become the most common reason the tool "stops working".

Both versions come from the same decision. YouTube looked at the request, weighed where it came from and what it carried, and decided it could not tell a person was behind it. The address is the largest part of that judgement, cookies are the second, and the rate of requests is the third. That ordering explains why the wall lands on VPN users who have done nothing, why yt-dlp on a server meets it almost by default, and why the fixes differ between the browser and the tool.

What YouTube is actually checking

YouTube, like the rest of Google, keeps a running estimate of whether traffic from an address looks human. Some kinds of address start with a bad score before anyone does anything: cloud and hosting ranges, VPN exits shared by thousands, Tor, and public proxies whose addresses have been used for exactly this a million times. On such an address, a request that also carries no cookies, or a browser that sends no history of being a viewer, is close to the definition of a bot. yt-dlp's own tracker documented YouTube blocking whole datacenter networks at the ASN level through 2024, which is why the error arrived for so many people at once and why it correlates with where the tool runs rather than with how it is used.

The message asks you to sign in because a signed-in session is the cheapest way for YouTube to attach an identity to the traffic. It is not the only way through, but it is the one YouTube built.

The three inputs, and which fix touches which

What YouTube weighs

  • The address

    datacenter, VPN, Tor, shared proxy score badly

  • The session

    cookies, signed-in identity, viewer history

  • The rate

    requests per address per hour

What changes it

  • A residential address

    VPN off, home network, or residential proxy

  • Cookies or signing in

    browser: sign in; yt-dlp: --cookies

  • Pacing

    sleep options, fewer parallel downloads

Source: yt-dlp wiki (Extractors, FAQ); yt-dlp issue tracker on YouTube's datacenter blocking

In a browser

Sign in. It is the fix the page names, and it works. If the account you are signed into is the reason you do not want to, a second account for watching is enough.

Turn off the VPN or proxy and reload. If the wall disappears, the exit address was the cause. Reconnecting to a different VPN server helps for a while, until that server, too, accumulates enough abusive neighbours. Where proxy settings live, for a proxy you did not set on purpose, is in how to turn off a proxy.

Switch networks. Play the same video from a phone on mobile data. If it plays there and not on the current connection, the address of the current connection is the problem, whether that is a VPN, an office gateway, or a home address your ISP shares.

Fix the session. A private window with no cookies, a browser extension that blocks YouTube's scripts, or a user-agent spoofer all remove the signals YouTube uses to recognise a viewer. Open a normal window, allow YouTube's scripts, and let cookies exist for the site.

Wait, when it is the rate. An address that has been hammering YouTube, from your machine or from a neighbour's, gets the wall as a rate limit. It lifts on its own; solving it faster means finding the traffic, which our guide on Google's unusual traffic message walks through.

In yt-dlp

The error reads, in full, something like: ERROR: [youtube] dQw4w9WgXcQ: Sign in to confirm you're not a bot. Use --cookies-from-browser or --cookies for the authentication. followed by two links into the yt-dlp wiki. Work through the fixes in this order, because each one is cheaper than the next.

1. Update yt-dlp

YouTube changes its player and its checks constantly, and the yt-dlp maintainers ship matching changes within days. An old build fails in ways that look exactly like the bot wall. Run yt-dlp -U, or update through pip or your package manager, before anything else.

2. Run it from an address YouTube trusts

If yt-dlp runs on a VPS, a cloud instance, or a server at work, the address is the problem, and the wiki's cookie advice only papers over it. YouTube has blocked hosting networks wholesale. Two ways out: run the tool on a home connection, or route it through a residential address with the --proxy option:

yt-dlp --proxy "http://user:pass@gateway.example:8080" "https://www.youtube.com/watch?v=VIDEO_ID"

Use one exit for the whole session, not a new address per request. YouTube's session state, including the cookies from step 3, is expected to arrive from a stable address, and an exit that changes mid-download is another automated-traffic signal. Sticky versus rotating sessions explains how a session id keeps one address. Do not use a free proxy for this: free addresses are datacenter ranges that thousands of other yt-dlp users already burned, and most fail the wall on the first request. Our YouTube proxy guide covers the setup in full.

3. Pass cookies, the way the wiki says

Cookies give YouTube a session to attach the request to. yt-dlp's wiki is specific about how to export them, because a careless export breaks within minutes when the browser rotates the session:

  1. Open a private or incognito window and sign in to YouTube.
  2. In the same tab, open https://www.youtube.com/robots.txt.
  3. Export cookies for youtube.com with a cookie-export extension to a cookies.txt file.
  4. Close the private window immediately, so the browser does not rotate the cookies you exported.
  5. Run yt-dlp --cookies cookies.txt URL.

Two warnings from the same wiki page. Using your account with yt-dlp "runs the risk of it being banned (temporarily or permanently)", so use an account you can afford to lose. And do not pass --cookies and --cookies-from-browser together; the second reads your normal browser profile and misses the private session you just prepared.

4. Slow down

YouTube's per-address limits are separate from the bot wall, and yt-dlp's wiki puts them at roughly 300 videos per hour for a guest session and around 2,000 per hour with an account, with "This content isn't available, try again later" as the message when you cross them. The wiki's advice is 5 to 10 seconds between downloads. yt-dlp has options for exactly that:

yt-dlp --sleep-requests 2 --sleep-interval 5 --max-sleep-interval 10 "URL"

Fewer parallel downloads from the same address does more than any other single change for a long batch.

5. Know about the PO Token

For some of YouTube's player clients, the wiki now states that a PO Token is required and that yt-dlp cannot generate one itself; it has to be supplied from outside, through a provider plugin, using the mweb client. If updating, cookies, pacing, and a residential address all fail and the log mentions a PO Token, the wiki's PO Token guide is the next stop. This part of YouTube changes often, so treat the wiki as the source of truth rather than any blog post, including this one.

What a proxy does and does not do here

A proxy changes exactly one of the three inputs: the address. That is a large change, because the address is the heaviest input and because yt-dlp on a server has the worst possible one. A residential exit turns a request that looks like a data centre into one that looks like a household, and for most server-side yt-dlp users that alone clears the wall.

It does not do the rest. A session with no cookies is still a session with no cookies. An account that YouTube has flagged is still flagged. And a per-address rate limit applies to the proxy's address as it did to yours, so pacing still matters. The setups that hold up combine all three: a stable residential exit, cookies exported the right way, and sleep options between requests. Our residential proxies support session ids in the username for the stable exit, and the YouTube guide shows how to size the rate.

In one line each

In a browser: sign in, or turn the VPN off. In yt-dlp: update, run from a residential address, pass cookies exported from a private window, and slow down. And when the wiki says the client needs a PO Token, follow the wiki.

Frequently asked questions

Why does YouTube say sign in to confirm you're not a bot?
YouTube's automated-traffic check decided that the request looked like it came from a program rather than a person, and the strongest input to that decision is the address it came from. VPN exits, datacenter and cloud ranges, Tor, and shared proxies trip it constantly; a browser with no YouTube cookies on such an address trips it almost every time. Signing in gives YouTube an identity to attach the session to, which is why the message asks for it.
How do I fix it in a normal browser?
Sign in, which is the fix the message names and the one that works most reliably. If you would rather not, turn off the VPN or proxy and reload, or switch to a different network to confirm the address was the cause. Clear the site's cookies and disable extensions that block scripts or spoof the browser, since a session with no cookies on a suspicious address is what the check is looking for.
What does the yt-dlp error mean?
yt-dlp received the same wall from YouTube and reports it as ERROR: Sign in to confirm you're not a bot, followed by a pointer to its cookie instructions. It means the address yt-dlp is running from, usually a server or a datacenter IP, is one YouTube does not treat as a viewer, and the request carried no cookies that would identify a person. The fixes are the ones in yt-dlp's wiki: update, pass cookies exported the right way, slow down, and run from an address YouTube trusts.
How do I pass cookies to yt-dlp safely?
yt-dlp's wiki recommends exporting them from a private or incognito window: sign in to YouTube there, open youtube.com/robots.txt in the same tab, export cookies with a browser extension to a cookies.txt file, then close the private window so the session is not rotated by the browser. Pass the file with --cookies cookies.txt. The wiki warns that using your account with yt-dlp risks a temporary or permanent ban, so use a spare account, and do not combine --cookies with --cookies-from-browser.
Will a proxy fix the not-a-bot error?
It fixes the address half of the problem. yt-dlp on a server sees the wall because the server's address is a datacenter range; routing through a residential proxy with --proxy makes the request arrive from a household address. It does not replace cookies when YouTube wants a session, it does not lift per-address rate limits, and free proxies make it worse because their addresses are already burned. Keep the same exit for the whole session so cookies and address stay consistent.
What is the difference between this and this content isn't available, try again later?
The bot wall is about trust; the try-again-later message is about volume. yt-dlp's wiki puts YouTube's limits at roughly 300 videos per hour for a guest session and around 2,000 per hour with an account, and recommends sleeping 5 to 10 seconds between downloads. If you see the second message, slow down; if you see the first, change what YouTube can see about the request.

Proxies that don't die mid-job

Residential, ISP, datacenter and mobile, verified by the same engine that runs tens of millions of checks. They read as a real device and hold up under load. Pay as you go, and your balance never expires. $0.44/GB is the 2,000 GB+ rate; a single gigabyte is $0.50/GB, with no minimum order.

129M+ proxy checks run · 100+ countries · HTTP / HTTPS / SOCKS · re-checked every few minutes · no signup