# Which unlocker API fits: Bright Data, Oxylabs, Zyte or UpRock?

For pages that won't load from a plain datacenter request, Bright Data's Web Unlocker costs $1.00 to $1.50 per 1,000, Oxylabs' Web API $0.75 to $1.50 for a generic page, and Zyte API anything from $0.06 to $16.08, set by the tier it gives the site and whether it needs a browser. All three bill only successful responses. UpRock is $0.50 per 1,000 pages, loaded on a real device in the country you choose, and fits best as the second network for the pages your unlocker gives up on.

Updated 25 Oct 2026. Web page: https://uprock.ai/compare/web-unlocker-apis

## On this page

- [What each one is built for](#what-each-one-is-built-for)
- [What 1,000 hard pages cost on each](#what-1000-hard-pages-cost-on-each)
- [How each one tells you it gave up](#how-each-one-tells-you-it-gave-up)
- [An IP address or a whole computer](#an-ip-address-or-a-whole-computer)
- [Which one fits](#which-one-fits)
- [FAQ](#faq)
- [Other use cases to explore](#explore)
- [Related articles](#related)
- [References](#references)
- [Get started](#get-started)

## What each one is built for

All three sell the same promise: send a URL, get the page, and let them deal with proxies, rendering and retries. They differ in how they price it and what sits around it.

- **Bright Data Web Unlocker.** One endpoint, `api.brightdata.com/request`, that picks the proxy network, sets headers and fingerprints to match real-user browser traffic and retries with other configurations until a request succeeds. It sits in Bright Data's wider range: SERP API, Browser API, ready-made scrapers and datasets, and residential IPs in 195 countries.
- **Oxylabs Web API.** Launched on 7 October 2026, its `/scrape` endpoint handles headless rendering, proxy rotation and localization, and returns markdown, HTML, JSON or screenshots, with AI parsing for $3 per 1,000 pages more. Oxylabs also sells Web Unblocker, a proxy-style product billed by traffic at $7.20 down to $3 per GB.
- **Zyte API.** One API that chooses datacenter or residential IPs, and a browser or not, per site, and prices each site in one of five tiers. Around it: browser actions, screenshots, automatic extraction, Scrapy Cloud for running spiders, and spending limits per key.
- **UpRock.** One page per call, loaded on a device in one of 63 countries (or a region), returned as markdown over MCP or the CLI, for one credit.

## What 1,000 hard pages cost on each

Every number comes from the vendor's own pricing page or docs, checked 25 Oct 2026. "Hard" here means a page that won't load from a plain datacenter request, which is what the unlockers are for.

| | Bright Data Web Unlocker | Oxylabs Web API | Zyte API | UpRock |
|---|---|---|---|---|
| Per 1,000 pages, smallest plan | [$1.50](https://brightdata.com/pricing/web-unlocker) pay as you go | [$1.00 without JavaScript, $1.50 with](https://oxylabs.io/products/web-api/scrape/pricing) (Starter, $30 a month) | [$0.13 to $1.27 for an HTTP response, $1.01 to $16.08 with a browser](https://www.zyte.com/pricing/), pay as you go | $0.50, prepaid |
| Per 1,000 pages, larger plans | $1.30, $1.10 and $1.00 on the $499, $999 and $1,999 plans | $0.90 / $1.40 (Basic, $100), $0.80 / $1.30 (Flexible, $500), $0.75 / $1.22 (Enterprise, from $2,500) | $0.06 to $0.61 and $0.48 to $7.68 at the $500 monthly commitment | $0.40 with UPT |
| How the price is set | One rate for every site; the [premium-domain tier](https://docs.brightdata.com/products/web-unlocker/configuration) was retired for new customers on 20 May 2026 | One rate for any generic site, set by plan and JavaScript | [Five tiers per site and request type](https://docs.zyte.com/zyte-api/pricing.html), assigned by Zyte and reviewed quarterly | One credit per page |
| What's billed | [Successful requests only](https://docs.brightdata.com/products/web-unlocker/introduction), unless you turn on custom headers and cookies, which bills every request | [Faulted scrapes aren't charged](https://developers.oxylabs.io/api-reference/errors-and-status-codes) | [Successful responses only](https://docs.zyte.com/zyte-api/usage/errors.html); a site's own 404 counts as a success | Not documented yet |
| What a request runs on | IPs from its proxy networks, with headers and fingerprints it manages | Rendering and proxy rotation in Oxylabs' cloud | A datacenter or residential IP and, when needed, a browser, chosen per site | A browser on a real device whose owner opted in |
| Countries | [195 for residential IPs](https://brightdata.com/proxy-types/residential-proxies), down to city, ZIP and ASN | [195](https://oxylabs.io/products/residential-proxy-pool); a country code on the Web API | [249 country codes](https://docs.zyte.com/zyte-api/usage/reference.html); 20 standard, and the rest cost more when you set them | 63, or a region |
| Choosing residential IPs yourself | [Residential proxies are for verified companies](https://docs.brightdata.com/products/residential/network-access); Web Unlocker needs no verification | [Every customer answers a KYC questionnaire](https://oxylabs.io/kyc-and-safety) | [Requires business verification](https://docs.zyte.com/zyte-api/usage/features.html) and costs more | No IP pool to choose from: every page loads on an opted-in device |
| MCP server | [Official, hosted or local](https://github.com/brightdata/brightdata-mcp) | [Local or self-hosted](https://developers.oxylabs.io/ai-workflows/mcp) for the Web API | [Remote, with sign-in](https://docs.zyte.com/zyte-web-data/mcp.html) | Remote (streamable HTTP) |
| To try it | 5,000 requests a month | $5 welcome credit | $5 credit for the first month | Prepaid credits |

Two things to read into it. Bright Data and Oxylabs give you one number for any site, so a hard page costs the same as an easy one. Zyte makes easy sites very cheap and hard ones expensive, and its pricing page has a lookup that shows a site's tier before you commit. Zyte doesn't publish the extra cost of an extended country or an explicit residential IP on the pages we read; its docs say both have their own base cost plus network charges.

## How each one tells you it gave up

Each unlocker retries on its own before it reports a failure, so by the time you see one, another try through the same system rarely helps. This is where a second network earns its place. The full routing, with tested code, is on the [Bright Data](https://uprock.ai/compare/bright-data#reading-a-web-unlocker-failure) and [Oxylabs](https://uprock.ai/compare/oxylabs#reading-a-web-api-failure) pages.

| | What a failure looks like | Billed? | Worth a second network | Respect it |
|---|---|---|---|---|
| Bright Data Web Unlocker | HTTP 200 with an `x-brd-error-code` header, or 429 `sr_rate_limit` | No | `http_status`, timeouts, `document_load_failed`, `sr_rate_limit` | `ub_bad_endpoint_robots` (the site's robots.txt), policy blocks, broken certificates |
| Oxylabs Web API | HTTP 500 with `state: faulted` after its retries, or 408, 429, 503 | No, for faulted scrapes | 408, 429, 500, 503 | 400 (can mean a restricted target), 403 (your plan isn't entitled) |
| Zyte API | HTTP 520 (a temporary error, which Zyte says is usually a ban it couldn't avoid in time), 521 (permanent) or 500 (timed out) | No | 520 after your client's retries, 521, 500 | 451 (a domain Zyte doesn't allow), 421 (the domain is unreachable) |
| UpRock | `crawl_fetch` returns an error; the CLI exits 1 with the error on stderr | Not documented yet | | |

Zyte also sends 429 and 503 when it's rate-limiting you. Those are free and Zyte asks you to retry them on Zyte, so they aren't a reason to switch networks.

## An IP address or a whole computer

Underneath, the three unlockers work alike. Your request leaves from an IP address in their proxy networks (datacenter, ISP, mobile or residential), and when a page needs it, a browser they run renders it, with headers, cookies and fingerprints managed to look like ordinary traffic. The residential IPs are real people's connections shared with consent: Bright Data's come from users who opt in through apps that carry its SDK, and Zyte describes its residential IPs as end-user devices with explicit consent for bandwidth sharing.

UpRock does it the other way round. The page loads in a browser on the device itself, a desktop or phone whose owner opted in, in the country you pick. A proxy gives you an IP address. A Rocket gives you a whole computer.

That isn't a way around anyone's rules. UpRock fetches public pages only and never logs in. It's a different path to the same public page, through different devices and different software, which is what you want from a second network when the first one gives up, and it costs the same whatever the page needs.

## Which one fits

| If | Use | Why |
|---|---|---|
| Your pages load fine from a datacenter and you run your own scraper | A plain proxy, or a crawler's cheapest tier | You don't need managed rendering, retries or residential IPs, so an unlocker's per-page price buys you little |
| You fetch protected sites at volume and want rendering, retries and success-only billing in one call | An unlocker | That's the job they're built for. Compare Bright Data's and Oxylabs' flat rates with the tier Zyte's lookup gives your sites |
| You need city, ZIP or ASN targeting, or an SLA | Bright Data, or Zyte's Enterprise plan | Bright Data targets city, ZIP, carrier and ASN on residential IPs; Zyte Enterprise includes SLAs with a 1-hour weekday response |
| Your unlocker reports a failure after its own retries | A second network, such as UpRock | Retrying the same provider sends the page through the same system again; a device network is a different path, at one credit |
| You need a country an unlocker treats as extra | UpRock | Zyte charges more for any country outside its 20 standard ones; UpRock covers 63 countries, or a region, at one price |
| You need structured data, search results or scripted steps | An unlocker or its scraper APIs | UpRock returns one page per call |

Checked 25 Oct 2026: every price and policy above comes from the vendors' own pricing pages and docs on that date, linked in the table and listed under References. We didn't run requests through Bright Data, Oxylabs or Zyte for this page, so it compares what they publish, not measured success rates.

## FAQ

### What is a web unlocker API?

A scraping API that takes a URL and handles proxy choice, rendering and retries on the provider's side, then returns the page. You pay per successful request instead of per gigabyte of proxy traffic. Bright Data's Web Unlocker, Oxylabs' Web API and Zyte API all work this way.

### Which one is cheapest for hard pages?

It depends on the site. Bright Data and Oxylabs charge one rate for any generic site, $1.00 to $1.50 and $0.75 to $1.50 per 1,000. Zyte charges by the tier it gives each site, so an easy site can cost $0.06 per 1,000 and a hard one that needs a browser $16.08 pay as you go. Zyte's pricing page has a lookup that shows a site's tier before you start.

### Do they charge for failed requests?

All three say they charge only for successful responses. The fine print differs. Bright Data bills every request once you turn on custom headers and cookies, Zyte counts a site's own 404 as a successful response, and Oxylabs doesn't charge for a scrape that faulted after its own retries.

### Is UpRock an unlocker?

Not in the same sense. It doesn't send your request through a proxy to a browser it runs in a datacenter; it loads the page in a browser on a real device whose owner opted in, in the country you choose, for one credit. It fetches public pages only and never logs in, so it works best as a second network next to an unlocker, not a replacement for one.

### Why is Oxylabs' price here higher than its $0.50 headline?

The "from $0.50/1K results" line on its pricing page matches the Amazon rows. For any other site ("custom domain scraping") it's $1.00 per 1,000 without JavaScript and $1.50 with it on Starter, down to $0.75 and $1.22 on Enterprise.

## Other use cases to explore

- [Route each Web Unlocker error](https://uprock.ai/compare/bright-data#reading-a-web-unlocker-failure): which Bright Data error codes to retry, which to send elsewhere and which to respect, with tested code.
- [See what a generic page costs on Oxylabs](https://uprock.ai/compare/oxylabs#what-a-generic-page-costs-now): why the $0.50 headline is the Amazon row, plan by plan.
- [Price a residential surcharge](https://uprock.ai/compare/scrapfly#what-a-page-costs-by-proxy-pool-and-plan): a crawler where the proxy pool sets the price, from 1 to 30 credits a page.
- [See what automatic site tiers do to a bill](https://uprock.ai/compare/crawlbase#what-the-tiers-do-to-a-pages-price): a crawler that prices each site at 1 to 20 times its base rate, set for you.

## Related articles

- [How do I add a backup crawler to Firecrawl?](https://uprock.ai/compare/firecrawl.md): When to send a page from Firecrawl to UpRock, published prices side by side, and a tested fallback in TypeScript and Python.
- [How do I add a backup for Tavily Extract?](https://uprock.ai/compare/tavily.md): Retry the URLs in Tavily Extract's failed results on a real device, and read pages as they appear in a chosen country. Prices side by side and tested code.
- [How do I add a fallback for Exa contents errors?](https://uprock.ai/compare/exa.md): Read the per-URL statuses in Exa's /contents response and retry the right ones live on a real device. Error tags explained, prices side by side, tested code.
- [How do I add a backup to Jina Reader, and when is it cheaper?](https://uprock.ai/compare/jina-reader.md): Spot a failed read in Reader's JSON (it still answers 200), retry it on a real device, and see what six real pages cost in Reader tokens next to a flat per-page price.
- [How do I add a hosted fallback to Crawl4AI?](https://uprock.ai/compare/crawl4ai.md): Plug UpRock into Crawl4AI's fallback_fetch_function so blocked pages are fetched on a real device in the country you choose, then run through Crawl4AI's own markdown pipeline.
- [How do I add a backup to Bright Data's Web Unlocker?](https://uprock.ai/compare/bright-data.md): Which Web Unlocker errors to retry, which to send to a second network and which to respect, with Bright Data's published prices next to ours and tested fallback code.
- [How do I add a fallback to an Apify or Crawlee crawler?](https://uprock.ai/compare/apify.md): Hand the requests Crawlee gives up on to a second network with failedRequestHandler, see what a fetched page costs on Apify's own Actors, and run the tested code.
- [When should a Browserbase agent read a page without opening a browser?](https://uprock.ai/compare/browserbase.md): What 1,000 page reads cost on Browserbase three ways, when to send a read to UpRock instead (including when every browser is busy), and tested fallback code.
- [How do I cap ScrapingBee's credit cost and send the rest to a backup?](https://uprock.ai/compare/scrapingbee.md): ScrapingBee charges 1 to 75 credits a page depending on the options. Cap it with Auto-Mode and max_cost, watch the country fallback, and send the rest to UpRock with tested code.
- [Spider costs less per page than UpRock. When is a backup still worth it?](https://uprock.ai/compare/spider.md): Spider is cheaper per page, so keep it as your primary. How Spider reports a page it couldn't get (from our own tests), and tested code that sends only those pages to UpRock.
- [How do I add a fallback to Parallel's Extract API?](https://uprock.ai/compare/parallel.md): Make Parallel Extract report a failed live fetch instead of quietly serving an old cached copy, then retry those URLs on UpRock. Prices side by side and tested code.
- [How do I add a backup to ZenRows?](https://uprock.ai/compare/zenrows.md): Which ZenRows error codes to send to a second network and which to respect, what a page from one country costs once premium proxies are required, and tested fallback code.
- [How do I retry a ScraperAPI batch's failed jobs on another network?](https://uprock.ai/compare/scraperapi.md): Send the jobs ScraperAPI's async batch gives up on to UpRock, see which countries each ScraperAPI plan can target, and compare credit costs. Tested code for both.
- [How do I add a backup to Oxylabs' new Web API?](https://uprock.ai/compare/oxylabs.md): Which Oxylabs Web API failures to send to a second network and which to respect, what a generic page really costs after its October 2026 pricing change, and tested fallback code.
- [How do I add a backup to Context.dev's scrape API?](https://uprock.ai/compare/context-dev.md): Context.dev reports a failed scrape inside an HTTP 200. Which of its error codes to retry on a second network, what a page costs by plan, and tested fallback code.
- [How do I add a backup to Scrapfly instead of paying for residential?](https://uprock.ai/compare/scrapfly.md): A Scrapfly page costs 1 to 30 credits depending on proxy pool and browser. What that is per 1,000 pages on each plan, which errors to send on, and tested code.
- [How do I keep Crawlbase's site tiers from surprising my bill?](https://uprock.ai/compare/crawlbase.md): Crawlbase bills each site at 1 to 20 times its base rate. What that does to the cost per 1,000 pages, and tested code that moves pricey domains to UpRock.
- [Compare: all articles](https://uprock.ai/compare.md)

## References

1. [Bright Data, Web Unlocker pricing](https://brightdata.com/pricing/web-unlocker), checked 25 Oct 2026
2. [Bright Data docs, Web Unlocker introduction (how it works, billing)](https://docs.brightdata.com/products/web-unlocker/introduction), checked 25 Oct 2026
3. [Bright Data docs, Web Unlocker configuration (custom headers billing, premium domains)](https://docs.brightdata.com/products/web-unlocker/configuration), checked 25 Oct 2026
4. [Bright Data, Residential proxies (countries, targeting, how IPs are sourced)](https://brightdata.com/proxy-types/residential-proxies), checked 25 Oct 2026
5. [Bright Data docs, Residential network access (verified companies only)](https://docs.brightdata.com/products/residential/network-access), checked 25 Oct 2026
6. [Bright Data MCP server on GitHub](https://github.com/brightdata/brightdata-mcp), checked 25 Oct 2026
7. [Oxylabs, Web API scrape pricing](https://oxylabs.io/products/web-api/scrape/pricing), checked 25 Oct 2026
8. [Oxylabs, Web Unblocker pricing](https://oxylabs.io/products/web-unblocker/pricing), checked 25 Oct 2026
9. [Oxylabs docs, Web API /scrape](https://developers.oxylabs.io/products/web-api/scrape), checked 25 Oct 2026
10. [Oxylabs docs, Errors and status codes](https://developers.oxylabs.io/api-reference/errors-and-status-codes), checked 25 Oct 2026
11. [Oxylabs, Residential proxy pool (195 countries)](https://oxylabs.io/products/residential-proxy-pool), checked 25 Oct 2026
12. [Oxylabs, KYC and safety](https://oxylabs.io/kyc-and-safety), checked 25 Oct 2026
13. [Oxylabs docs, MCP](https://developers.oxylabs.io/ai-workflows/mcp), checked 25 Oct 2026
14. [Zyte, Pricing (tiers per 1,000 responses)](https://www.zyte.com/pricing/), checked 25 Oct 2026
15. [Zyte docs, Zyte API pricing (plans, request costs, successful responses)](https://docs.zyte.com/zyte-api/pricing.html), checked 25 Oct 2026
16. [Zyte docs, Zyte API error handling](https://docs.zyte.com/zyte-api/usage/errors.html), checked 25 Oct 2026
17. [Zyte docs, Zyte API features (geolocation, IP type)](https://docs.zyte.com/zyte-api/usage/features.html), checked 25 Oct 2026
18. [Zyte docs, Zyte API reference (geolocation codes)](https://docs.zyte.com/zyte-api/usage/reference.html), checked 25 Oct 2026
19. [Zyte docs, Zyte MCP](https://docs.zyte.com/zyte-web-data/mcp.html), checked 25 Oct 2026
20. [UpRock, everything in one file (API, CLI, MCP, pricing)](https://uprock.ai/llms-full.txt), checked 25 Oct 2026

## Get started

Get an API key: https://uprock.ai/app/api-keys

Paste this into your agent:

```text
Set up UpRock for me: read https://uprock.ai/agents.md, connect the UpRock MCP server, and run one test crawl. Tell me what it costs before you spend anything.
```

Setup for every client (MCP, skill, CLI): https://uprock.ai/agents.md
