Crawlbase vs ScraperAPI vs CapSolver + IPRoyal (2026): Real 100k-Request TCO for Cloudflare Turnstile Scraping
This 2026 benchmark prices 100,000 monthly requests across Crawlbase, ScraperAPI and a CapSolver + IPRoyal pipeline, including how concurrent Cloudflare Turnstile challenges change the cost per usable page.
Unit prices
- Crawlbase: Provides pay-as-you-go pricing at $2.00 per 1,000 normal requests and $5.00 per 1,000 JavaScript requests, including 5,000 free trial requests. The Starter subscription costs $99 monthly, bundling request credits with higher concurrency limits. Across an initial 100,000 request workload, introductory credits reduce the first invoice to $190 for normal calls or $475 for JavaScript execution, stepping up to standard $200 and $500 monthly rates once trial credits expire. Teams must verify Starter concurrency limits, as exceeding provisioned thresholds causes request queuing or requires a larger allowance.
- ScraperAPI: Charges $49 monthly for 100,000 standard API credits with automated IP rotation and 5,000 free trial credits. Standard HTML endpoints consume one credit, while protected targets serve as an operational workload example where endpoints consume a 10x credit multiplier. Processing 100,000 protected pages under this scenario demands 1,000,000 credits. This 10x multiplier represents an operational workload example rather than a universal contractual obligation, and scaling past starter tiers requires upgrading to dedicated plans that supply necessary concurrency.
- CapSolver: Supplies automated challenge resolution tokens starting from a catalog floor of $0.80 per 1,000 tokens for Turnstile, reCAPTCHA, and DataDome challenges. This rate functions strictly as a catalog entry floor rather than a universal Turnstile price, as complex interactive challenges often cost more depending on challenge difficulty. CapSolver returns validation tokens exclusively, requiring teams to supply their own egress proxies, connection management, retry loops, and HTML parsing infrastructure.
- IPRoyal: Sells non-expiring residential proxies starting at $7.00 per gigabyte on pay-as-you-go terms with zero recurring monthly commitments. For larger data volumes, committed pricing drops to $1.84 per gigabyte on pay-as-you-go packages and $1.75 per gigabyte on recurring monthly subscription tiers, allowing engineering teams to retain unconsumed bandwidth across multiple billing cycles without monthly forfeitures.
- ZenRows: Offers a Developer subscription tier at $69 per month containing 250,000 standard request credits, reflecting an allocated cost of $27.60 for 100,000 standard requests. Anti-bot bypass features apply an aggressive 25x multiplier against account balances, meaning that scraping 100,000 protected pages requires 2,500,000 credits or the equivalent of 10 Developer subscription allowances. At 25 credits per call, one allowance covers 10,000 protected requests.
Building a custom self-hosted scraping architecture requires pairing unmanaged residential proxy egress with a specialized token-solving microservice. In this decoupled operational model, your infrastructure retains complete ownership over HTTP connection management, TLS fingerprint synthesis, request pipelining, and data extraction. Assuming an average page payload weight of 100 kilobytes across an extraction target of 100,000 successful records, the clean network payload represents 10 gigabytes of data under standard decimal measurement. Routing this volume through standard unmanaged residential proxy pools incurs an egress expense of $70.00 at standard pay-as-you-go rates. When targeting endpoints protected by Cloudflare Turnstile, combining token passes at the baseline entry floor of $0.80 per 1,000 solutions with 10 gigabytes of unmanaged proxy bandwidth establishes an initial theoretical floor of $150.00. However, this theoretical baseline excludes the cost of cloud virtual machines, proxy connection timeouts, payload parsing failures, and bandwidth spent downloading challenge verification assets.
Monthly bill
| Provider | Monthly base/model | 100k standard | 100k Turnstile | Trial/minimum | Action |
|---|---|---|---|---|---|
| Crawlbase | $99/mo Starter or PAYG | $190 to $200 | $475 first / $500 later if each protected request uses ordinary JS rate; actual protection tier can vary | 5,000 requests | Try Crawlbase |
| ScraperAPI | $49/mo (100k credits) | $49 | Tier upgrade (1M credits, 10x example not universal) | 5,000 credits | Try ScraperAPI |
| CapSolver + IPRoyal | PAYG consumption | $70 (Bandwidth only) | $150 floor (Turnstile may cost more) + compute/retries | No commit / PAYG | Try CapSolver / Try IPRoyal |
| ZenRows | $69/mo Developer (250k credits) | $27.60 allocated ($69 invoice) | 2.5M credits (10 Developer allowances) | Developer minimum $69/mo | No Link |
Calculating realistic monthly extraction budgets requires modeling operational failure overhead rather than assuming flawless single-attempt execution. In self-hosted pipelines utilizing raw residential proxy pools, the engineering organization absorbs every network failure, stalled socket, and rejected CAPTCHA challenge as an immediate cash loss. When an unmanaged egress IP encounters a Cloudflare Turnstile challenge that fails verification, the client still pays the full residential bandwidth cost for downloading JavaScript assets and challenge scripts, alongside the token generation charge billed by the external solving microservice.
Implementation
Quiet pilot, payload distribution, and validation profiling
Route ordinary HTML and catalog listings through Crawlbase normal PAYG or ScraperAPI at one credit where available. Compare the CapSolver and IPRoyal path on challenge-heavy Turnstile or DataDome traffic. Before committing production workloads to an extraction vendor, engineering teams should conduct a quiet pilot across representative target endpoints. This testing phase must capture the statistical distribution of payload sizes in kilobytes to detect soft blocks and truncated HTML documents. When anti-bot systems restrict scrapers, they often serve lightweight challenge stubs or blank template frames that trigger false positive success metrics in rudimentary monitoring systems.
A rigorous pilot formalizes the explicit programmatic definition of an acceptable response. Engineering pipelines must verify that primary catalog identifiers, price tags, or structured JSON payloads exist in the body before marking an extraction as valid. During the pilot, teams should track failures and measure domain-specific credit costs across managed APIs to calculate the effective multiplier applied to dynamic endpoints. Correlating actual credit consumption with data completeness establishes a defensible benchmark for provider selection.
Multi-provider diagnostic probe architecture
Install requests and set TARGET_URL to a representative page you control or have permission to test. Set KNOWN_FIELD to a distinctive value from its expected record. Supply CRAWLBASE_TOKEN (normal or JavaScript), SCRAPERAPI_KEY, CAPSOLVER_KEY and TURNSTILE_SITE_KEY for the widget on that page. The two fetches report a field check, and ScraperAPI also reports the credit charge when available. The independent solver probe times token issuance. To count a completed transaction, also check acceptance and extraction in your application.
import os import time import requests target = os.environ["TARGET_URL"] field = os.environ["KNOWN_FIELD"].strip() if not field: raise ValueError("Set KNOWN_FIELD to a distinctive value from the target record.") routes = [ ("Crawlbase", "https://api.crawlbase.com/", {"url": target, "token": os.environ["CRAWLBASE_TOKEN"]}), ("ScraperAPI", "https://api.scraperapi.com/", {"url": target, "api_key": os.environ["SCRAPERAPI_KEY"]}), ] for name, endpoint, params in routes: try: reply = requests.get(endpoint, params=params, timeout=100) except requests.RequestException as error: print(name, type(error).__name__) continue print(name, "http", reply.status_code, "origin", reply.headers.get("original_status"), "record", reply.status_code == 200 and field in reply.text, "credits", reply.headers.get("sa-credit-cost", "unreported")) def solver_call(method, **fields): reply = requests.post("https://api.capsolver.com/" + method, json={"clientKey": os.environ["CAPSOLVER_KEY"], **fields}, timeout=20) reply.raise_for_status() result = reply.json() if result.get("errorId"): raise RuntimeError(result.get("errorCode", "Solver error")) return result started = time.monotonic() job = solver_call("createTask", task={"type": "AntiTurnstileTaskProxyLess", "websiteURL": target, "websiteKey": os.environ["TURNSTILE_SITE_KEY"]}) while time.monotonic() - started < 120: time.sleep(3) result = solver_call("getTaskResult", taskId=job["taskId"]) if result.get("status") == "ready" and result.get("solution", {}).get("token"): print("Token ready in", round(time.monotonic() - started, 1), "seconds") break else: raise TimeoutError("Polling deadline reached")Conditional 429 backoff and bounded automated fallback
A production-grade scraping pipeline must incorporate defensive error handling to protect operational budgets from infinite retry loops and rate-limiting penalties. When an upstream target or intermediate gateway issues an HTTP 429 status code, the client must parse the Retry-After response header, extract the recommended delay interval, and conditionally back off and suspend outbound requests for that duration. Uncontrolled hammering during rate-limiting events triggers severe IP reputation penalties and burns through prepaid credit balances without yielding data.
Similarly, encountering an HTTP 403 Forbidden challenge response requires bounded automated fallback. The client should conditionally escalate from standard HTTP fetching to JavaScript rendering, enforcing a strict upper bound of two retry attempts. Bounded automated fallback ensures that persistent access denials do not consume expensive rendering credits in continuous failure loops. If an endpoint fails to return valid business fields after two escalated attempts, the job must be flagged for manual review rather than continuing to consume expensive browser credits indefinitely.
Questions
How do credit multipliers distort commercial API pricing models?
Credit multipliers obscure true operational expenses by accelerating credit consumption on protected targets. A vendor may advertise a base rate of 100,000 requests for $49, but applying a 10x multiplier on bot-protected pages reduces effective output to 10,000 successful pages per billing cycle. Engineering leaders must model monthly budgets based on actual target difficulty rather than headline base tier request quotas.
What hidden failure expenses inflate self-hosted Turnstile resolution?
Self-hosted bypass architectures accumulate substantial hidden expenses through wasted proxy bandwidth, server compute resources, and engineering maintenance. When an unmanaged proxy encounters an interactive Turnstile challenge, downloading the full DOM and security assets consumes residential bandwidth regardless of outcome. Furthermore, developers must continually patch browser fingerprints and TLS signatures whenever security vendors deploy updates, turning maintenance into an ongoing payroll expense.
Which operational threshold dictates moving from unmanaged proxies to managed unlockers?
Compare the managed plan for your measured credit demand with the DIY bill for the same number of usable records. Subtract bandwidth, tokens and compute from that managed price. Divide the remainder by your loaded hourly engineering rate. The result is the monthly maintenance time the DIY route can absorb before the managed plan becomes cheaper. A team with existing on-call coverage and a team buying new coverage can reach different decisions on the same traffic.