Which web scraping APIs do not charge for failed or blocked requests?
Most major web scraping APIs say they do not charge for failed or blocked requests, including ScrapingBee, Zenrows, ScraperAPI, Bright Data’s Web Unlocker API, Scrapfly, Crawlbase, Scrapingdog, Zyte API, Oxylabs Web Unblocker and ScrapeUnblocker. The differences are in edge cases: a target’s own 404 or 410 page, a domain that does not resolve, timeouts, and CAPTCHA pages served with HTTP 200. Firecrawl works differently for blocked pages: its billing documentation says a page returned with a 403 costs 1 credit.
What does each provider’s documentation say it bills?
Every provider below says a request that fails outright is free; the rules split on a target’s 404 or 410 and on returned block pages. Rows summarize each provider’s own pages; ScrapeUnblocker publishes this page.
| Provider | Blocked or failed request | Target’s own 404 or 410 | Other documented rules |
|---|---|---|---|
| ScrapeUnblocker | Not billed: 403 block, timeout, 523, 429 | Billed, returned with X-Origin-Status | Billed: unresolvable domain (400), failed steps action (422) |
| ScrapingBee | Not billed: an anti-bot 403 is reported as a 500 | Billed (404 and 410) | transparent_status_code=true bills anything below 500 |
| Zenrows | Failed or retried requests not charged | Billed, counted as successful | Unresolvable domain and allowed_status_codes requests billed |
| ScraperAPI | Not charged after up to 70 s of retries | 404 billed | Requests you cancel before 70 s are billed |
| Bright Data Web Unlocker API | Charged only for successful requests | Not stated in the pages checked | With Custom Headers & Cookies on, all requests are billed |
| Scrapfly | Failed scrapes not billed | Excluded from its failed-scrape protection | Unresolvable domain and slow-target timeout billed; protection lifts above 30% failed traffic |
| Crawlbase | Failed or blocked requests never billed | Billed | A CAPTCHA page served as 200 is reported as 503, not billed |
| Scrapingdog | Failed, blocked and timed-out requests credited back | Not stated in the pages checked | - |
| Zyte API | Only successful responses charged | Counted as a successful response | Rate-limited responses free |
| Oxylabs Web Unblocker | Only successfully extracted data counted (per GB) | Not stated in the pages checked | Blocked responses can be reported to support |
| Firecrawl | No document returned, 0 credits | 1 credit | A returned 403 page costs 1 credit |
Which edge cases change what you actually pay?
Four edge cases decide most of the difference. Dead URLs: ScrapingBee, Zenrows, ScraperAPI, Crawlbase, Zyte API, Firecrawl and ScrapeUnblocker bill a target’s 404, so lists of removed products still cost money. Domains that do not resolve: Zenrows, Scrapfly and ScrapeUnblocker bill them. Soft blocks: a CAPTCHA page can arrive with HTTP 200; Crawlbase documents reporting it as a 503, and Scrape.do says you can claim back credits from support when a 200 response has invalid content. Options: ScrapingBee’s transparent_status_code and Bright Data’s Custom Headers & Cookies change what is billed. Each provider decides what counts as a block, so check content, not status codes (HTTP 200 but blocked).
What does ScrapeUnblocker bill?
ScrapeUnblocker’s errors documentation marks only a few responses as billed: a delivered page, a target’s own 404 or 410 (with X-Origin-Status), an origin’s own 5xx page (a 200 with X-Origin-Status), 400 Hostname cannot be resolved and 422 step_failed. A 403 block, a 504 timeout, 523 Origin unreachable, 429, 402 and errors on its side are free. Branch on the header so you stop retrying dead URLs:
import requests
r = requests.post(
"https://api.scrapeunblocker.com/getPageSource",
params={"url": "https://www.g2.com/"},
headers={"x-scrapeunblocker-key": "YOUR_API_KEY"},
timeout=125,
)
if r.status_code in (404, 410) and r.headers.get("X-Origin-Status"):
print("dead URL: billed, do not retry")
elif r.status_code == 403:
print("blocked: not billed, retry later")
ScrapeUnblocker’s own 2026 benchmark averaged 97.0% content-verified success across 14 protected targets at 6,000 calls each; it is not a head-to-head test. To compare providers, send a known-404 URL, a fake domain and a hard target through each free allowance and read the cost headers: Spb-auto-cost (ScrapingBee Auto-Mode), X-Request-Cost (Zenrows), sa-credit-cost (ScraperAPI), X-Scrapfly-Api-Cost (Scrapfly).
Sources
- ScrapingBee FAQ and documentation, Zenrows pricing documentation, ScraperAPI credit costs, Scrapfly billing, Crawlbase pricing and Crawling API documentation, Scrapingdog pricing, Zyte API pricing documentation, Oxylabs Web Unblocker, Firecrawl billing, Bright Data Web Unlocker documentation and Scrape.do pricing, viewed 9 October 2026
- Zenrows error codes, Scrapfly error catalog and Bright Data Custom Headers & Cookies rule (per ScrapeUnblocker vs. Bright Data), viewed 24 September 2026
- ScrapeUnblocker errors and billing and 2026 benchmark
Competitor details come from each provider’s public pages as viewed between 24 September and 9 October 2026 and may have changed. Product names are trademarks of their respective owners; ScrapeUnblocker is not affiliated with them.
Try ScrapeUnblocker free
95%+ success rate · from 0.55€ per 1,000 calls · 500 free requests on signup.