Guide · yt-dlp · troubleshooting

Fix yt-dlp "Sign in to confirm you're not a bot"

yt-dlp works on your laptop, then on a server it stops with ERROR: [youtube] ...: Sign in to confirm you're not a bot. Here's what is going on and what you can do.

Why it happens

YouTube scores each request. Requests from cloud provider IP ranges, or many requests from one IP, look automated, and YouTube answers with a sign-in wall instead of the video. Updating yt-dlp (yt-dlp -U) is always the first step, because YouTube changes often and the project ships fixes quickly, but on a flagged IP an update alone rarely fixes it.

Option 1: pass cookies from a logged-in browser

yt-dlp --cookies-from-browser firefox URL
# or, on a server, an exported cookies.txt
yt-dlp --cookies cookies.txt URL

This usually gets past the wall. The cost: the requests are now tied to a Google account, and accounts used for heavy scraping can be flagged or suspended. Cookies also expire, so a server job breaks again after a while. Use a throwaway account and expect to refresh the cookies.

Option 2: rotating residential proxies

yt-dlp accepts --proxy. Residential IPs look like home users and are blocked far less than datacenter IPs. You pay for bandwidth, and downloading video uses a lot of it; subtitles alone use little. Expect some retries.

Option 3: PO tokens

YouTube increasingly expects a "proof of origin" token from its web clients. yt-dlp documents how to supply one, including plugins that generate it. It helps on some clients and IPs, but it is extra moving parts that change when YouTube changes.

Option 4: if you only need the transcript

Many people run yt-dlp only to get subtitles for an LLM, search or a summary. In that case you don't need to download anything: a transcript API returns the text in one request, from any server, with no cookies or proxies on your side.

curl -H "x-api-key: YOUR_KEY" \
  "https://api.transkrio.com/v1/transcript?url=https://youtu.be/dQw4w9WgXcQ&format=text"

Videos without captions are transcribed from the audio, and failed requests are free. The free key includes 100 credits. Compare yt-dlp and a transcript API side by side, or see the same problem in the Python library: RequestBlocked errors.

Try it with 100 free credits No card needed. Failed requests are free and unused credits roll over.
Get free API key

FAQ

Why does yt-dlp ask me to sign in?

YouTube decided your IP looks automated. It happens most on cloud servers (AWS, GCP, Azure, Hetzner, DigitalOcean) and after many requests from one IP.

Is passing my cookies to yt-dlp safe?

It often works, but it ties the scraping to a real Google account, which YouTube can flag or suspend. Use a throwaway account if you do it, never your main one.

I only need subtitles. Do I need yt-dlp at all?

No. If you only need the transcript or captions, a transcript API gives you the text without downloading video or managing cookies.