Skip to main content
Google reCAPTCHA has three versions in active use: v2 (checkbox or invisible widget), v3 (score-based, often no visible interaction), and Enterprise (adds risk signals on top of standard v2/v3). Surfsky solves reCAPTCHA by clicks in the browser: it ticks the checkbox, recognizes each image challenge, and clicks the matching tiles. No token is injected into the page. Both Captcha.solve and Captcha.autoSolve work, and each solve with an image challenge is charged.

Before you start

Start a browser and create a page-level cdp session as in the CAPTCHA setup example.

Manual captcha solving

Wait for the reCAPTCHA widget, then send Captcha.solve:
A solve can take up to 180 seconds. Keep timeout at 180000 and raise your CDP client’s own limit for one command to match, or use Captcha.autoSolve and wait for its events. With an SDK, start the browser with command_timeout=200 in Python or commandTimeout: 200_000 in TypeScript. Do not click or navigate until the command returns. Invisible reCAPTCHA has no checkbox and opens its challenge when the site calls it, usually on submit. Submit the form, wait for the image challenge, then send Captcha.solve.

Automatic captcha solving

Use the Playwright or Puppeteer lifecycle. Create a page-level CDP session and attach listeners before enabling automatic mode with "recaptcha" in types:
Replace the target URL with your page. Add a bounded wait for the form result or protected content after navigation. {"status": "started"} only confirms that automatic mode started. Detection also finds reCAPTCHA inside a site’s own iframes.

Reducing challenges

reCAPTCHA v2, v3, and Enterprise can behave differently. A v2 challenge may display a widget, while v3 relies on a score and can require no visible interaction. Verify the form submission or protected response for the version the site uses; Surfsky does not promise a particular score. Keep the CDP connection open while solving. Avoid running a second solver against the same challenge — a second concurrent attempt at the same widget can invalidate both.

reCAPTCHA v3 score

reCAPTCHA v3 never shows a widget. Instead, Google returns a numeric score from 0.0 to 1.0 for every request — 1.0 means the interaction looks very likely human, 0.0 means it looks very likely automated. The target site reads this score in its own server-side response and decides what to do with it; there is no universal “passing” number, because each site sets its own threshold. Google’s official response format for a v3 check includes:
A few things worth knowing about how the score behaves:
  • Google doesn’t publish the scoring formula. The score reflects a mix of browsing behavior, IP reputation, and session signals Google doesn’t fully disclose — there’s no fixed checklist to “pass.”
  • 0.5 is a common default threshold, not a Google-mandated one. Sites choose their own cutoff; a score that clears one site’s threshold can fail another’s.
  • Enterprise adds more granularity. The free tier effectively reports coarse bands, while an Enterprise project with billing enabled can request an 11-level scale across the same 0.0–1.0 range, plus reason codes explaining why a score landed where it did.
  • A score near 0.9 on Google’s public test keys is expected, not a sign the integration is broken — Google’s shared test key pair always returns a fixed score for wiring up an integration, independent of real traffic.
Surfsky’s solver answers visible challenges only. It cannot see or influence the score a target site’s backend assigns: that check happens on Google’s and the site’s side, and the score depends on the browser, proxy, and how your script behaves.

Verify bypass worked

If verification completes but the page is still blocked, inspect the next network response or form validation error — a v3 score that clears the widget does not guarantee the site’s own check accepted the request.

Troubleshooting

If nothing happens, confirm that "recaptcha" is in types and the challenge is present. Observe failure events before retrying. See CAPTCHA troubleshooting for shared errors and DevTools to inspect a running attempt. Stop the browser after the job completes.

reCAPTCHA bypass FAQ

That’s often expected, not broken. Both v3 and invisible v2 are designed to require no visible widget for most visitors — the score-based check runs in the background, and a challenge only surfaces when the risk signal is high enough. If your automation never sees a checkbox or puzzle, verify the form submission or protected response instead of waiting for a widget that may never render.
v2 invisible still returns a pass/fail outcome and can escalate to a visible challenge if Google’s risk check is uncertain; Surfsky solves that challenge. v3 never shows a widget and instead returns a numeric score for the target site to interpret on its own threshold, so there is nothing to click.
No. v3 is score-based and the required threshold is set by the target site, not by the solver — see reCAPTCHA v3 score for what the 0.0–1.0 range means and why Google doesn’t publish the exact formula. Surfsky attempts to clear the widget but does not promise a particular score.
It only confirms automatic mode began — not that a challenge was found, solved, or accepted. Attach Captcha.solveCompleted and Captcha.solveFailed listeners and wait for the actual page result before treating the job as done.
Enterprise adds risk signals on top of standard v2 or v3 checks and is billed separately by Google. Surfsky solves an Enterprise checkbox or image challenge the same way as v2; the difference is in what the target site checks on its side, not in how you call the API.
Questions? Contact support.