Home / Guides

What will I be billed when a scrape is blocked?

A block-specific guide to billable outcomes across every product record, automatic escalation versus preselected modes, and request-level invoice evidence.

Written against 74 products65 cited sourcesUpdated 2026-07-26

The dataset behind this guide

Products priced74
Latest recorded source date2026-07-26
Guide last reviewed2026-07-26
Sources cited below65

What is calculated and what is checked. This guide is not a market ranking, so it carries no computed winner: the site's market band prices 100,000 JavaScript-rendered pages a month, and quoting it here would answer a question this page never asked. The prose below is written by a person. Each money figure is checked against the dated vendor price stored with this guide, but that does not mean the vendor page was freshly rechecked. A mismatch must be explained by the shown arithmetic or another cited vendor fact, or the page is not published.

A block can cost 0 credits, the ordinary request rate, or a higher automatically selected rate. Firecrawl’s default auto route costs 1 credit when its basic route succeeds and 5 credits when the basic route fails and an enhanced retry succeeds, while Scrape.do does not bill a returned 403 but does bill its published successful response classes (Firecrawl enhanced mode and Scrape.do request costs, retrieved 2026-07-26).

This guide is only about a block encountered during a scrape. The separate failure-billing guide owns the broader explanation of target status codes, provider errors, retries, and plan cliffs.

What each vendor defines as a billable outcome

The table includes every current product record, including search APIs, cloud browsers, and platforms. That wider population prevents a product from disappearing merely because its billing model does not fit a request-based comparison. Quotation marks identify short wording published by the vendor. An unquoted statement is a narrow summary of the linked first-party policy. When the reviewed page does not answer the blocked-request question, the row begins Not published.

What each vendor defines as a billable outcome table

Product record Published rule for a blocked or failed request First-party source
AgentQL Not published. The public page does not state whether a failed API call or blocked page consumes credits. AgentQL, retrieved 2026-07-25.
Anchor Browser Not published. Completed tasks and infrastructure resources use different meters, and the reviewed pricing page does not give a complete blocked-task refund rule. Anchor pricing, retrieved 2026-07-25.
Apify Actor resources remain metered during a failed run: “When you run an Actor it generates platform usage that’s charged to the user account.” Apify usage documentation, retrieved 2026-07-26.
Microsoft Bing Search API Not published for a blocked page. The legacy API is retired, and the replacement page describes charged summarized-result transactions rather than blocked-request treatment. Microsoft Bing APIs, retrieved 2026-07-26.
Brave Search API “Failed requests don’t count against your quota,” so an error response is not billed as a successful call. Brave rate-limiting guide, retrieved 2026-07-26.
Bright Data Web Unlocker and Web Scraper API The regular Web Unlocker “only charges for successful requests.” A listed Custom Web Unlocker configuration instead bills “100% of the requests (both successful and failed).” Bright Data Web Unlocker features, retrieved 2026-07-26.
Bright Data Browser API Not published. Traffic is bandwidth-metered, but the reviewed FAQ does not state that bytes already transferred are refunded when a session ends on a block. Bright Data Browser API FAQ, retrieved 2026-07-25.
Bright Data SERP API “Only successful responses are billed.” Failed or errored requests and internal retries are not separately billed. Bright Data SERP billing, retrieved 2026-07-26.
Browse AI Not published. The current credit guide does not say whether a failed robot task consumes credits. Browse AI credit guide, retrieved 2026-07-26.
Browserbase A created session has “a one-minute minimum billing period,” so an error does not erase the session time already opened. Browserbase cost documentation, retrieved 2026-07-25.
BrowserCloud Not published. The pricing page does not state whether a failed session, blocked page, or unsuccessful HTTP operation consumes credits. BrowserCloud pricing, retrieved 2026-07-25.
Browserless Not published for the blocked page as a whole. Browser time is metered while the session remains open. The unit guide says each CAPTCHA attempt costs 10 units regardless of outcome, while the pricing page describes 10 units per successful solve, so CAPTCHA failure billing is unresolved. Browserless unit guide and pricing, retrieved 2026-07-25.
Browser Use Cloud Not published. Browser time is billed by the minute, but the page does not say whether a failed task reverses initialization or step charges. Browser Use pricing, retrieved 2026-07-26.
Cloudflare Browser Rendering Not published for blocked pages generally. Cloudflare does publish one narrow exception: a Quick Actions request that fails with waitForTimeout does not add billable browser hours. Cloudflare Browser Run pricing, retrieved 2026-07-25.
Crawlbase Billing applies only when page content is delivered successfully; failed and blocked retrievals are not charged. Crawlbase pricing, retrieved 2026-07-26.
DataForSEO SERP API Funds reserved for a failed or errored task are returned to the account balance. DataForSEO cost guide, retrieved 2026-07-26.
Decodo Web Scraping API “Responses with 2xx or 4xx status codes are considered successful if the results are retrieved.” Its response table marks 500, 524, and 613 as not billed. Decodo response codes, retrieved 2026-07-26.
Diffbot Not published as one product-wide rule. Crawl pages consume credits on successful extraction, while direct API credits are consumed per request and direct Extract failure treatment is not separately stated. Diffbot credit documentation, retrieved 2026-07-26.
Exa Not published. The reviewed pricing material does not state whether failed search requests are billed. Exa pricing, retrieved 2026-07-26.
Firecrawl Firecrawl does not charge for its own timeout or server error, but says it charges when a page is fetched even if the target returns 4xx or 5xx. Firecrawl pricing, retrieved 2026-07-26.
Google Custom Search JSON API Not published. The reviewed overview does not state whether failed requests count toward billing or quota. Google Custom Search overview, retrieved 2026-07-26.
Hyperbrowser Not published. The billing docs do not state whether a failed browser session or failed Fetch page consumes credits. Hyperbrowser pricing docs, retrieved 2026-07-25.
Jina AI Reader and Search Foundation APIs Not published. The Reader and Search pages do not state whether a failed fetch or blocked page consumes tokens. Jina Reader, retrieved 2026-07-25.
Kadoa Not published. No reviewed public billing document states whether failed runs, blocked pages, or empty results consume usage. Kadoa pricing, retrieved 2026-07-25.
Kagi Search API Not published. The reviewed pricing page does not state whether a failed search request is billed. Kagi API pricing, retrieved 2026-07-26.
Kernel Active browser resources are the meter, so compute consumed before a navigation or extraction failure remains usage. A separate blocked-page refund rule is not published. Kernel pricing, retrieved 2026-07-25.
Lightpanda Cloud Not published. The pricing page does not state whether failed navigation or JavaScript execution consumes browser hours. Lightpanda pricing, retrieved 2026-07-25.
Linkup “No credit is subtracted when an error occurs,” including a missing parameter, internal error, or no relevant result. Linkup pricing, retrieved 2026-07-26.
Nimble “Only successful requests are charged.” Failed retrieval attempts are outside the stated per-successful-URL rate. Nimble pricing docs, retrieved 2026-07-26.
Olostep Only successfully completed requests are billed. Its public page does not publish a complete status-code set. Olostep, retrieved 2026-07-25.
Oxylabs Web Scraper API “All scraping attempts that return 2xx or 4xx status codes are counted as successful.” Oxylabs system 5xx and 6xx errors are not charged. Oxylabs Web Scraper API pricing, retrieved 2026-07-26.
Oxylabs SERP Scraper API Target 2xx and 4xx results count as successful, while system 5xx and 6xx errors are not billed. Oxylabs billing guide, retrieved 2026-07-26.
Parallel Web Systems Search API Not published. The reviewed pricing page does not state whether failed Search requests are billed. Parallel pricing, retrieved 2026-07-26.
Perplexity Search API Not published. The reviewed pricing and endpoint pages do not state whether failed raw Search requests are billed. Perplexity pricing, retrieved 2026-07-26.
Scale SERP Not published. The reviewed product page does not state whether failed searches consume credits. Scale SERP, retrieved 2026-07-26.
Scrape.do “Status codes counted as successful: 2XX, 400, 404, 410.” Other failed or blocked responses cost nothing. Scrape.do request costs, retrieved 2026-07-26.
ScrapeGraphAI Not published. The public page does not state whether failed scrapes, blocked pages, or empty extraction results consume credits. ScrapeGraphAI, retrieved 2026-07-26.
ScrapeNinja Not published. Neither the vendor docs nor the reviewed marketplace table defines whether a failed or blocked call consumes quota. ScrapeNinja docs, retrieved 2026-07-26.
ScrapeOps Only HTTP 200 and 404 responses consume credits; other failed responses are not charged. ScrapeOps request costs, retrieved 2026-07-26.
ScraperAPI “We only charge for successful requests (200 and 404 status codes).” A client cancellation before ScraperAPI has had 70 seconds to finish is also charged. ScraperAPI billing docs, retrieved 2026-07-26.
Scrapfly “Failed scrapes are not billed” when failure protection applies. Listed client-error codes remain outside that protection, and protection is disabled when eligible failures exceed 30% over at least 1 hour. Scrapfly billing docs, retrieved 2026-07-26.
ScrapingAnt “Whenever your request gets blocked by anti-bot system or you get an error response from ScrapingAnt API, you don’t get billed for it.” ScrapingAnt migration guide, retrieved 2026-07-26.
ScrapingBee “We only charge for successful requests,” defined there as HTTP 200, 404, or 410. ScrapingBee FAQ, retrieved 2026-07-26.
ScrapingDog “Failed requests never charged.” Its current FAQ also says failed, blocked, and timed-out requests are credited back. ScrapingDog pricing, retrieved 2026-07-26.
ScrapingFish Only HTTP 200 and 404 responses are charged; other failed requests are free. ScrapingFish, retrieved 2026-07-26.
SearchApi.io “Only successful searches with a 200 status code incur charges.” SearchApi.io pricing, retrieved 2026-07-26.
SerpApi “Only successful searches are counted.” Cached, errored, and failed searches are not counted. SerpApi pricing, retrieved 2026-07-26.
Serper.dev One credit is deducted for each successful response; a failed response does not consume a credit. Serper.dev, retrieved 2026-07-26.
SerpWow Not published. The reviewed product page does not state whether failed searches consume credits. SerpWow, retrieved 2026-07-26.
SOAX Web Data API Not published. SOAX describes internal retries but does not say whether a final failed or blocked response consumes a request. SOAX Web Data API, retrieved 2026-07-26.
Spider.cloud Failed requests cost $0; requests rejected for exceeding Unlimited-plan concurrency are also not billed. Spider.cloud pricing, retrieved 2026-07-26.
Steel.dev Not published. The current pricing material does not state whether a failed session, scrape call, or CAPTCHA solve consumes usage credit. Steel pricing update, retrieved 2026-07-25.
Tavily Not published as one product-wide rule. Failed Extract and Map calls are not billed, but the reviewed credit guide does not make the same statement for Search. Tavily API credits, retrieved 2026-07-26.
ValueSERP Not published. The reviewed product page does not state whether failed searches consume credits. ValueSERP, retrieved 2026-07-26.
WebScrapingAPI “We only charge for successful responses.” Its quick-start guide defines that as status 200; the current pricing page does not publish a broader code list. WebScrapingAPI quick start and pricing, retrieved 2026-07-26.
You.com API Not published. The reviewed pricing page does not state whether failed calls are billed. You.com pricing, retrieved 2026-07-26.
ZenRows “Failed or retried requests don’t consume your balance.” HTTP 404 and 410 are treated as successful and billed. ZenRows pricing docs, retrieved 2026-07-26.
Zenserp “We only charge you for successful responses.” Invalid request errors do not affect usage volume. Zenserp pricing, retrieved 2026-07-26.
Zyte API “We charge only for successful responses,” where a successful API response is HTTP 200. That outer 200 can still contain a target error or failed browser action. Zyte error handling, retrieved 2026-07-26.

Which block responses count as success?

Do not treat “blocked” as one wire-level outcome. The block-specific decision has three branches:

Which block responses count as success? table

Block observed by your application Vendors with a specific published consequence
Challenge or CAPTCHA HTML arrives as HTTP 200 A semantic block that remains 200 sits inside the published billable status set at ScraperAPI, Scrape.do, ScrapeOps, ScrapingBee, ScrapingFish, SearchApi.io, and WebScrapingAPI. It also sits inside the billable 2xx class at Decodo and both Oxylabs product records. This is an inference from the published code definitions, not a claim that any vendor fails to detect blocks. Sources: ScraperAPI, Scrape.do, ScrapeOps, ScrapingBee, ScrapingFish, SearchApi.io, WebScrapingAPI, Decodo, Oxylabs Web Scraper API, and Oxylabs SERP Scraper API, retrieved 2026-07-26.
The target block is returned as 403 or 429 Firecrawl bills fetched target 4xx; Oxylabs counts target 4xx as successful; Decodo marks a non-empty retrieved 4xx billable. Scrapfly normally protects eligible 403 and 429 failures, but its protection is conditional. Scrape.do, ScrapeOps, ScraperAPI, ScrapingBee, and ScrapingFish do not include 403 or 429 in their published billable sets. Sources: Firecrawl, Oxylabs, Decodo, Scrapfly, Scrape.do, ScrapeOps, ScraperAPI, ScrapingBee, and ScrapingFish, retrieved 2026-07-26.
The provider recognizes the block and returns its own failure Crawlbase, ScrapingAnt, and ScrapingDog explicitly exclude a recognized block or failed delivery. Bright Data Web Unlocker, Nimble, Olostep, and WebScrapingAPI publish success-only wording but do not all publish a complete block-specific status list. Sources: Crawlbase, ScrapingAnt, ScrapingDog, Bright Data, Nimble, Olostep, and WebScrapingAPI, retrieved 2026-07-26.
The provider returns API 200 around a target error Zyte bills the outer API 200 even when the response carries a target 404, a failed browser action, or missing extraction fields. Store the outer API status and the target status separately. Zyte error handling, retrieved 2026-07-26.

For every Not published row in the full table, the answer remains unknown. A success-only slogan without a status definition does not prove that a challenge page, empty shell, consent wall, or login wall is free.

How anti-bot escalation changes the rate

The billing distinction is timing. Automatic escalation starts with one route and changes it while the provider is handling the request. A preselected mode is already fixed by the client, target profile, or product class before the provider sees whether the basic route would have worked.

Automatic retry or driver escalation inside one request

Automatic retry or driver escalation inside one request table

Vendor What changes during the request Published billing result
Firecrawl The default auto proxy tries basic, then retries with enhanced if basic fails. A basic success costs 1 credit. If enhanced is needed and succeeds, the request costs 5 credits. The published rule is a replacement final cost, not 1 + 5. Firecrawl enhanced mode, retrieved 2026-07-26.
Nimble Nimble automatically selects VX6, VX8, or VX10, and says protected pages escalate only when needed. The successful-URL rates are $0.90, $1.30, and $1.45 per 1,000 URLs respectively. The selected final driver sets the rate. Nimble pricing docs, retrieved 2026-07-26.
Scrapfly With Anti-Scraping Protection enabled, Scrapfly can change the proxy pool and can enable browser handling while bypassing the block. The published base is 1 credit for datacenter or 25 for residential, and browser rendering adds 5. A recovered request can therefore move from a 1-credit base to 25, or to 30 when residential and rendering apply. Scrapfly billing and ASP documentation, retrieved 2026-07-26.

Server or target class selected before the attempt

These are not mid-request fallback ladders, even when the vendor chooses the class.

Server or target class selected before the attempt table

Vendor Selection point Published charge
Scrape.do A per-domain profile can turn on proxy or rendering defaults server-side before processing. The ordinary published bundles are 1, 5, 10, or 25 credits. The observed Scrape.do-Request-Cost header is authoritative when a domain profile overrides the client parameters. Scrape.do request costs, retrieved 2026-07-26.
Browse AI Browse AI classifies some targets as premium sites. That target class is not a documented retry from a standard task. Premium sites have a 2-to-10-credit minimum and a 2-to-10-credit rate per task unit. Failure billing itself is not published. Browse AI credit guide, retrieved 2026-07-26.

Client-selected before dispatch

Client-selected before dispatch table

Vendor Published protected-mode price Why it is not automatic escalation
ScrapeOps Generic bypass modes cost 10, 25, or 40 credits; DataDome is 40. The caller selects a mode. The docs do not promise that an ordinary 1-credit request silently climbs the ladder. ScrapeOps request costs, retrieved 2026-07-26.
ScraperAPI Basic is 1 credit, named anti-bot bypass is 10, premium proxy plus rendering is 25, and ultra-premium plus rendering is 75. The target and request parameters choose the published class before dispatch. ScraperAPI billing docs, retrieved 2026-07-26.
ZenRows Universal Scraper modes replace one another at 1, 5, 10, or 25 credits. Basic, JavaScript, premium proxy, and protected mode are selected request classes, not a published automatic retry ladder. ZenRows pricing docs, retrieved 2026-07-26.
ScrapingBee The published bundles are 1 for classic without rendering, 5 for classic with JavaScript, 25 for premium with JavaScript, and 75 for stealth. The caller’s proxy and rendering options select the bundle. ScrapingBee credit guide, retrieved 2026-07-26.
ScrapeGraphAI Stealth adds 5 credits to Scrape or Extract and is applied per result, page, or tick for other operations. Stealth is an optional input. The page does not say that a blocked ordinary request turns stealth on automatically, and it does not publish failure billing. ScrapeGraphAI, retrieved 2026-07-26.
Bright Data Web Unlocker A listed Custom Web Unlocker configuration changes success-only billing to billing all requests. That is a zone configuration change, not a mid-request price escalation. Record it before dispatch because it changes whether a final block is billable. Bright Data Web Unlocker features, retrieved 2026-07-26.

Worked invoice: 1,000 attempts with two kinds of block

ScrapingFish makes the status boundary checkable because its record stores all four inputs needed here: one request unit per billable fetch, a $0.002 rate per charged request, a 1,000-request pack that costs $2, and a billing rule that charges HTTP 200 and 404 but not other failed statuses. The pack expires after one month. (ScrapingFish request and status rules, pack pricing, retrieved 2026-07-26.)

Assume a hypothetical log contains 740 usable HTTP 200 pages, 160 challenge pages that also arrived as HTTP 200, and 100 target 403 responses. These are scenario counts, not a vendor success-rate, speed, or reliability claim. Applying the stored status rule gives:

Worked invoice: 1,000 attempts with two kinds of block table

Logged outcome Attempts Billable requests Application-usable pages Source
Usable HTTP 200 740 740 740 ScrapingFish pricing, retrieved 2026-07-26.
Challenge HTML returned as HTTP 200 160 160 0 ScrapingFish pricing, retrieved 2026-07-26.
Target HTTP 403 100 0 0 ScrapingFish pricing, retrieved 2026-07-26.
Total 1,000 900 740 ScrapingFish pricing, retrieved 2026-07-26.

The challenge rows are billable because their wire status is 200; that is an inference from the published status rule, not a claim about whether ScrapingFish recognizes any particular challenge. The 403 rows are outside its published charged set. (ScrapingFish pricing, retrieved 2026-07-26.)

value of all billable requests = 900 x $0.002 = $1.80
value of billable challenge pages = 160 x $0.002 = $0.32
value estimated from usable pages alone = 740 x $0.002 = $1.48

cash purchase = $2.00 for the 1,000-request pack
unused pack capacity = 1,000 - 900 = 100 requests
cash cost per 1,000 usable pages = $2.00 / 740 x 1,000 = $2.702703

The $1.80 figure is consumed request value, not a second invoice added to the pack. The $2.00 cash purchase covers the 900 billed requests and leaves 100 request units unused. The gap between a usable-page estimate and the purchase comes from both the 160 billable challenge responses and unused pack capacity. (ScrapingFish request and status rules, pack pricing, retrieved 2026-07-26.)

How to instrument your side so you can audit the invoice

Write one immutable event for every outbound attempt. Do not collapse a client retry into the same row as its parent request.

attempt_id
logical_request_id
retry_ordinal
sent_at_utc
vendor
product
account_or_zone
target_domain
target_url_hash
requested_mode
mode_selection_origin
server_profile
automatic_escalation_enabled
observed_final_route
api_http_status
target_http_status
provider_error_code
provider_request_id
observed_vendor_units
semantic_outcome
response_body_hash
cancelled_by_client

Use mode_selection_origin values such as client, server_profile, and automatic_retry. Use your own semantic_outcome values such as usable, captcha, login_wall, consent_wall, empty_shell, target_error, and provider_error. Keeping those fields separate is what reveals a billable HTTP 200 challenge page and prevents a preselected protected mode from being mislabeled as automatic escalation.

Capture the provider’s request-level evidence before a client library discards headers. ScraperAPI publishes sa-credit-cost; Scrape.do publishes Scrape.do-Request-Cost; Scrapfly publishes X-Scrapfly-Api-Cost and context.cost; Cloudflare publishes X-Browser-Ms-Used for Quick Actions. Sources: ScraperAPI, Scrape.do, Scrapfly, and Cloudflare, retrieved 2026-07-26.

Reconcile in the vendor’s native unit before converting anything to dollars:

logged_units
  = sum(observed_vendor_units by vendor, account, day, requested mode,
        selection origin, and observed final route)

invoice_difference
  = invoiced_units - logged_units

For a vendor without a request-level cost field, preserve the two status layers, request identifier, requested features, selection origin, final route, semantic classifier, and body hash. Compare those attempt groups with the vendor’s daily usage export.

The finished ledger must answer four different questions:

  1. How many attempts did the client launch?
  2. Which attempts changed route automatically, and which started in a preselected mode?
  3. How many units did the provider deduct for each final route?
  4. How many responses did the application accept as usable rather than merely HTTP-successful?

Sources