Troubleshooting

CAPTCHA Solve Rate Drops: Performance Regression Diagnosis

Your CAPTCHA solve rate dropped from 95% to 60% overnight. Before contacting support, this guide walks through a structured diagnosis to pinpoint the root cause — whether it's your code, proxy, target site, or CaptchaAI service.

Diagnostic Decision Tree

Solve rate dropped
├── Is the API returning errors? → Check error codes
│   ├── ERROR_WRONG_USER_KEY → API key issue
│   ├── ERROR_ZERO_BALANCE → Balance depleted
│   ├── ERROR_NO_SLOT_AVAILABLE → Rate limiting
│   └── ERROR_CAPTCHA_UNSOLVABLE → CAPTCHA changed
├── Are tokens returned but rejected by the target site?
│   ├── Token expired before submission → Speed up injection
│   ├── Sitekey changed → Re-extract from page
│   └── Domain mismatch → Check pageurl parameter
├── Are proxies failing?
│   ├── Proxy banned by target → Rotate proxies
│   └── Proxy timeout → Check proxy health
└── Did the target site change?
    ├── New CAPTCHA type → Update method parameter
    ├── JavaScript changes → Re-analyze page
    └── Rate limiting by site → Reduce frequency

Step 1: Check CaptchaAI Error Codes

Run a quick diagnostic script:

# diagnose_solve_rate.py
import os
import requests
from collections import Counter

API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")

def check_balance():
    """Verify API key and balance."""
    resp = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "getbalance", "json": "1",
    })
    result = resp.json()
    print(f"Balance: {result}")
    return result

def test_solve(sitekey, pageurl, runs=5):
    """Run test solves and collect error statistics."""
    errors = Counter()
    successes = 0

    for i in range(runs):
        # Submit
        resp = requests.get("https://ocr.captchaai.com/in.php", params={
            "key": API_KEY,
            "method": "userrecaptcha",
            "googlekey": sitekey,
            "pageurl": pageurl,
            "json": "1",
        })
        result = resp.json()

        if result.get("status") != 1:
            errors[result.get("request", "UNKNOWN")] += 1
            print(f"  Run {i+1}: Submit error: {result.get('request')}")
            continue

        task_id = result["request"]
        import time
        time.sleep(15)

        # Poll
        for _ in range(25):
            poll = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": API_KEY, "action": "get",
                "id": task_id, "json": "1",
            })
            poll_result = poll.json()

            if poll_result.get("status") == 1:
                successes += 1
                print(f"  Run {i+1}: Solved")
                break
            if poll_result.get("request") != "CAPCHA_NOT_READY":
                errors[poll_result.get("request", "UNKNOWN")] += 1
                print(f"  Run {i+1}: Error: {poll_result.get('request')}")
                break
            time.sleep(5)
        else:
            errors["TIMEOUT"] += 1
            print(f"  Run {i+1}: Timeout")

    print(f"\nResults: {successes}/{runs} solved")
    if errors:
        print(f"Errors: {dict(errors)}")

# Run diagnostics
print("=== Balance Check ===")
check_balance()

print("\n=== Test Solves ===")
test_solve("YOUR_SITEKEY", "https://your-target-site.com", runs=5)

Step 2: Verify Target Site Parameters

The most common cause of solve rate drops is a changed sitekey or page structure.

Check if the sitekey changed

Visit the target page, open DevTools (F12), and search for:

  • reCAPTCHA: data-sitekey or grecaptcha.render call
  • Cloudflare Turnstile: data-sitekey in the Turnstile widget
  • GeeTest: gt parameter in the GeeTest initialization

Compare with the sitekey in your code. A single changed character causes 100% failure.

Check if the CAPTCHA type changed

Some sites migrate between CAPTCHA providers:

  • reCAPTCHA v2 → reCAPTCHA v3 (invisible)
  • reCAPTCHA → Cloudflare Turnstile
  • Image CAPTCHA → reCAPTCHA Enterprise

If the type changed, update your method parameter accordingly.

Step 3: Evaluate Proxy Health

Proxy quality directly affects solve rates, especially for token-based CAPTCHAs where CaptchaAI uses your proxy.

Proxy Issue Symptom Fix
Proxy banned by target Token solved but rejected Rotate to fresh residential proxies
Proxy returning errors ERROR_PROXY_NOT_FOUND Verify proxy is alive and accessible
Datacenter proxy detected Lower solve rates Switch to residential proxies
Proxy geo mismatch Inconsistent results Match proxy country to target site

Test without a proxy first (if the CAPTCHA type supports proxyless solving) to isolate whether the proxy is the issue.

Step 4: Check Token Timing

CAPTCHA tokens have limited validity:

CAPTCHA Type Token Lifetime
reCAPTCHA v2 ~120 seconds
reCAPTCHA v3 ~120 seconds
Cloudflare Turnstile ~300 seconds
GeeTest v3 ~60 seconds

If your pipeline takes too long between receiving the token and injecting it into the form, the token expires and the site rejects it.

Fix: Measure the time between getTaskResult and form submission. If > 60 seconds, optimize your pipeline.

Step 5: Analyze Error Distribution

Sort your errors by frequency to find the root cause:

Error Meaning Action
ERROR_CAPTCHA_UNSOLVABLE CAPTCHA too complex or changed Report to CaptchaAI; check if sitekey is correct
ERROR_WRONG_CAPTCHA_ID Polling wrong task ID Fix task ID tracking in your code
ERROR_ZERO_BALANCE Out of credits Top up balance
ERROR_NO_SLOT_AVAILABLE Rate limited Reduce concurrency or add delay
CAPCHA_NOT_READY (timeout) Solve taking too long Increase poll timeout; check if sitekey is valid

Step 6: Compare Against Baseline

If you ran benchmarks previously, compare current metrics against your baseline:

Metric Baseline Current Delta Concern?
Solve rate 95% ? > 5% drop = investigate
Median solve time 15s ? > 50% increase = investigate
Error rate 2% ? > 5% = investigate
Token acceptance rate 98% ? > 3% drop = site changed

When to Contact Support

Contact CaptchaAI support if:

  • All diagnostic steps pass but solve rate remains low
  • ERROR_CAPTCHA_UNSOLVABLE rate exceeds 20% on previously working sitekeys
  • Balance shows correct but solves still fail
  • The issue persists for more than 2 hours

Include in your report:

  1. CAPTCHA type and sitekey
  2. Target site URL
  3. Error distribution (from diagnostic script)
  4. When the issue started
  5. Any changes you made to your code

Troubleshooting Quick Reference

Scenario Most Likely Cause First Action
100% failures, all ERROR_WRONG_USER_KEY Invalid API key Re-check API key
Gradual decline over days Proxy degradation Rotate proxies
Sudden drop to 0% Sitekey or page changed Re-extract CAPTCHA parameters
Solved but tokens rejected by site Token expiry or domain mismatch Check timing and pageurl
Works on test site, fails on target Site-specific restrictions Compare parameters between sites

FAQ

Can CaptchaAI's solve rate change for a specific site?

Yes. If a site upgrades its CAPTCHA configuration (e.g., harder challenges, enterprise features), solve rates can temporarily decrease until CaptchaAI's solvers adapt.

Should I report every ERROR_CAPTCHA_UNSOLVABLE?

No. A 2–5% unsolvable rate is normal for complex CAPTCHAs. Report only if the rate exceeds 15–20% consistently.

How quickly should I expect solve rates to recover?

If the issue is on CaptchaAI's side, recovery typically happens within hours. If the target site changed, you may need to update your integration parameters.

Next Steps

Keep your CAPTCHA pipeline healthy — get your CaptchaAI API key.

Related guides:

Discussions (0)

No comments yet.

Related Posts

DevOps & Scaling Auto-Scaling CAPTCHA Solving Workers
Build auto-scaling CAPTCHA solving workers that adjust capacity based on queue depth, balance, and solve rates.

Build auto-scaling CAPTCHA solving workers that adjust capacity based on queue depth, balance, and solve rates...

Automation Python All CAPTCHA Types
Mar 23, 2026
Reference CAPTCHA Solving Performance by Region: Latency Analysis
Analyze how geographic region affects Captcha AI solve times — network latency, proxy location, and optimization strategies for global deployments.

Analyze how geographic region affects Captcha AI solve times — network latency, proxy location, and optimizati...

Automation Python All CAPTCHA Types
Apr 05, 2026
Troubleshooting CaptchaAI API Rate Limiting: Handling 429 Responses
Handle Captcha AI API rate limits and 429 responses.

Handle Captcha AI API rate limits and 429 responses. Implement exponential backoff, request throttling, and qu...

Automation Python All CAPTCHA Types
Apr 01, 2026
Explainers Rate Limiting CAPTCHA Solving Workflows
Sending too many requests too fast triggers blocks, bans, and wasted CAPTCHA solves.

Sending too many requests too fast triggers blocks, bans, and wasted CAPTCHA solves. Smart rate limiting keeps...

Automation Python All CAPTCHA Types
Apr 04, 2026
DevOps & Scaling Horizontal Scaling CAPTCHA Solving Workers: When and How
Scale CAPTCHA solving horizontally — identify bottlenecks, add workers dynamically, auto-scale based on queue depth, and manage costs with Captcha AI.

Scale CAPTCHA solving horizontally — identify bottlenecks, add workers dynamically, auto-scale based on queue...

Automation Python All CAPTCHA Types
Mar 07, 2026
Explainers DNS Resolution Impact on CAPTCHA API Performance
Understand how DNS resolution affects CAPTCHA API call latency and to optimize with DNS caching, pre-resolution, and DNS-over-HTTPS.

Understand how DNS resolution affects CAPTCHA API call latency and learn to optimize with DNS caching, pre-res...

Automation Python All CAPTCHA Types
Apr 03, 2026
Tutorials Testing CaptchaAI Before Full Migration: Parallel Run Guide
Run your existing CAPTCHA provider alongside Captcha AI in parallel — compare solve rates, speed, and cost before committing to a full migration.

Run your existing CAPTCHA provider alongside Captcha AI in parallel — compare solve rates, speed, and cost bef...

Automation Python All CAPTCHA Types
Feb 02, 2026
Comparisons Parallel vs Sequential CAPTCHA Solving: Performance Trade-offs
Compare parallel and sequential CAPTCHA solving approaches — throughput, resource usage, cost, and complexity trade-offs with Captcha AI examples.

Compare parallel and sequential CAPTCHA solving approaches — throughput, resource usage, cost, and complexity...

Automation Python All CAPTCHA Types
Feb 01, 2026
API Tutorials Semaphore Patterns for CAPTCHA Concurrency Control
Use semaphores to control concurrent CAPTCHA API calls — prevent rate limiting and manage resource usage in Python and Node.js.

Use semaphores to control concurrent CAPTCHA API calls — prevent rate limiting and manage resource usage in Py...

Automation Python All CAPTCHA Types
Jan 26, 2026
Tutorials CAPTCHA Solving Throughput: How to Process 10,000 Tasks per Hour
Architect a CAPTCHA solving pipeline that processes 10,000 tasks per hour using Captcha AI with async Python, connection pooling, and queue-based distribution.

Architect a CAPTCHA solving pipeline that processes 10,000 tasks per hour using Captcha AI with async Python,...

Automation Python All CAPTCHA Types
Mar 13, 2026
Troubleshooting GeeTest v3 Error Codes: Complete Troubleshooting Reference
Complete reference for Gee Test v 3 error codes — from registration failures to validation errors — with causes, fixes, and Captcha AI-specific troubleshooting.

Complete reference for Gee Test v 3 error codes — from registration failures to validation errors — with cause...

Automation Testing GeeTest v3
Apr 08, 2026
Troubleshooting Turnstile Token Invalid After Solving: Diagnosis and Fixes
Fix Cloudflare Turnstile tokens that come back invalid after solving with Captcha AI.

Fix Cloudflare Turnstile tokens that come back invalid after solving with Captcha AI. Covers token expiry, sit...

Python Cloudflare Turnstile Web Scraping
Apr 08, 2026
Troubleshooting Common GeeTest v3 Errors and Fixes
Diagnose the most common Gee Test v 3 errors — stale challenge, bad parameters, validation failures — and fix them with practical troubleshooting steps.

Diagnose the most common Gee Test v 3 errors — stale challenge, bad parameters, validation failures — and fix...

Automation Testing GeeTest v3
Jan 24, 2026