Zenrows
Talk to sales Start free

How do you bypass CAPTCHAs when scraping?

TL;DR

A CAPTCHA is a symptom. It appears because something about your request already scored badly, so the productive work happens before the challenge, not after it. Fix the IP reputation, the TLS handshake, the headers and the fingerprint, and most CAPTCHAs stop appearing. Keep a solver only for challenges a site shows every visitor.

Work out which kind you are facing

Two situations look identical and need opposite responses.

Triggered challenges appear because your request looked suspicious. The page loads normally in your own browser. Most scraping CAPTCHAs are this kind, and they are avoidable.

Universal challenges are on the page for everyone, gating a login, a signup or a checkout. Your browser sees them too. No amount of looking legitimate removes them, and this is where a solver earns its cost.

Load the URL in a normal browser before doing anything else. That single check tells you which problem you have.

What to fix, in order of impact

For a triggered challenge, work down this list. Each step is cheap to test and the order roughly matches how much each one contributes.

  1. IP reputation. A datacenter address is the single strongest trigger. Moving to residential IPs resolves a large share of challenges on its own.
  2. TLS handshake. A request claiming to be Chrome with an OpenSSL handshake contradicts itself before any HTTP is sent. This is invisible in your code and is checked first by most systems.
  3. Headers. Send a complete, correctly ordered browser set, including the Sec-Fetch-* family. Keep Accept-Language consistent with the country your IP is in.
  4. Fingerprint. If you are rendering, the browser must not report a software renderer, a missing font set, or navigator.webdriver. Consistency matters more than any individual value.
  5. Pacing. Requests at exactly regular intervals, with no images or stylesheets ever loaded, read as automation regardless of everything above.

The common mistake is starting at step four with a stealth plugin while still on a datacenter IP, which fixes the least visible signal and leaves the loudest one untouched.

Where Zenrows fits

Keeping all five consistent, and keeping them consistent as detection changes, is the actual difficulty. Adaptive Stealth Mode selects a coherent configuration per target site so the handshake, headers, fingerprint and IP describe one plausible visitor, and Premium Proxy supplies the residential routing that step one needs. The goal is that no challenge is ever issued, rather than answering one that was.

Key takeaways

Check whether the challenge is triggered or universal before spending any effort, because only one of them is avoidable. For triggered challenges, fix IP reputation first and fingerprint last, since that is the order of impact. A CAPTCHA that keeps appearing is telling you an earlier signal is still wrong.

Go deeper on the blog

In the docs

Last updated: Aug 16, 2026

Get reliable web data in minutes.

Free plan, 5,000 credits every month, no credit card required.