Bright Data vs Oxylabs for large-scale scraping (2026)
Which is better for large-scale scraping, Bright Data or Oxylabs?
For most large scraping jobs, Bright Data is the better of the two. In the September 16, 2026 run of the Web Data Frontier Benchmark, Bright Data's Web Unlocker returned verified content on 74.6% of 500 requests across 100 real sites, and Oxylabs' Web Unblocker on 69.0%. Bright Data returned all five attempts on 15 sites where Oxylabs returned none, and Oxylabs did the reverse on 6. At scale, the billing rule matters as much as the success rate. Bright Data bills per successful request. Oxylabs bills per gigabyte, and its docs count a 4xx response or an empty 2xx page as a successful, billable result. Pick Oxylabs when your list is news, finance and grocery, or when you already buy its proxies.
Short verdict
- Choose Bright Data if your list includes travel, real estate, reviews or social media, or sites behind Cloudflare, Akamai or AWS WAF. It led Oxylabs on all four of those industries and all three of those systems.
- Choose Oxylabs if your list is news, finance and grocery, or sits behind DataDome or Kasada, or you need sessions, browser instructions and one subscription that also covers proxies. Oxylabs returned 95.6% on news and finance and 100% on grocery.
- String fits when the list mixes both groups. String, which we build, returned 97.0% of the same 500 requests, and all five attempts on 12 of the 16 sites where neither vendor did. Stay with Oxylabs for idealista.com, where it returned 5 of 5 and String none.
Last updated October 27, 2026. Benchmark figures come from the September 16, 2026 run; the per-attempt data is the public run file. Bright Data and Oxylabs pricing, billing, rate-limit and API docs were checked against their own pages on October 27, 2026.
TL;DR
- Bright Data: 74.6% (373 of 500), sixth of 16 providers. All five attempts on 63 of 100 sites, nothing on 16.
- Oxylabs: 69.0% (345 of 500), ninth of 16. All five attempts on 62 sites, nothing on 24.
- Who wins where: Bright Data led on Cloudflare (88.0% against 57.3%), AWS WAF (86.7% against 33.3%), travel and real estate. Oxylabs led on DataDome (65.3% against 47.4%), news and finance (95.6% against 75.6%) and grocery (100% against 76.0%).
- Failed but billable: 76 of Oxylabs' 155 failed attempts came back as a 4xx status or a 2xx page without the content. Oxylabs' billing docs count both as successful, billable traffic.
- Two contracts still miss 16 sites: neither vendor returned all five attempts on 16 of the 100. String returned all five on 12 of those 16.
- Near $100 a month: Oxylabs Basic is $100 for up to 16 GB of Web Unblocker traffic at $6 per GB. Bright Data has no $100 plan; pay as you go is $1.50 per 1,000 successful requests, and premium domains bill at a rate it does not publish.
- Time at scale: both spent about 18.4 seconds of attempt time per usable page, counting failures. String spent 5.47.
How we tested
The September 16, 2026 run sent 16 web scraping APIs to the same 100 sites, five loads each, 500 requests per provider, with a 90-second timeout. A load counts as a pass only when the response body contains a marker string unique to the real page, so a CAPTCHA page, a consent wall or an empty 200 counts as a failure. The target list, the adapters and every per-attempt result are in the public repository.
We build String and we rank first in this run. That is a conflict of interest. The answer to it is that the harness is public, and you can run it against your own sites with your own keys. If your list looks different from ours, your numbers will too.
The adapters decide the result, so here is what each one sent. The Bright Data adapter posts to the Web Unlocker /request endpoint with format: "raw", a US country and no custom headers or cookies. The Oxylabs adapter sends a GET through the Web Unblocker proxy at unblock.oxylabs.io:60000 with one header, X-Oxylabs-Geo-Location: United States. Neither adapter forces JavaScript rendering. Oxylabs' Web Unblocker docs suggest adding the x-oxylabs-render: html header "if you are observing low success rates or retrieve empty content." A run with that header could score higher, and the repository accepts a pull request that adds it. Both adapters have been unchanged since the harness's first commit in July.
One caveat cuts against Oxylabs' numbers in particular. The harness runs one general adapter per provider. Oxylabs also sells dedicated scrapers for Amazon, Walmart, Target and other named sites through its Web API. Its 0 of 5 on amazon.com measures the general Web Unblocker path, not the Amazon scraper, which Oxylabs prices separately. Bright Data sells site-specific Scraper APIs on the same argument. On a short list of named sites, test the dedicated product. On a long list of arbitrary domains, the general path measured here is what you buy.
Both vendors publish their own success figures. Bright Data's Web Unlocker overview cites "a 98% success rate," and its pricing page FAQ says "typically 100%," with no published test set for either. Oxylabs' docs say Web Unblocker "guarantees a much higher success rate in comparison with regular proxies" and give no number. Neither is the same measurement as ours.
The September run replaces the August one. In August, on 99 sites, Bright Data read 78.0% and Oxylabs 76.8%. Both adapters were the same; the sites changed. Our Oxylabs alternatives page lists the eight sites behind most of Oxylabs' drop.
What each product is
Bright Data is a web data company with a wide catalog: residential, ISP and datacenter proxies, the Web Unlocker API, a SERP API, a Browser API, site-specific scrapers and prebuilt datasets. Web Unlocker takes one REST call, handles proxies, fingerprints, CAPTCHAs and retries on its side, and also works as a proxy port. It sells async requests with webhook delivery, which matters for batch jobs.
Oxylabs sells a similar catalog: residential, mobile, ISP and datacenter proxies, Web Unblocker, a Web API with dedicated scrapers, an agent browser and datasets. On October 27, 2026, its pricing page sold one subscription that covers every product. Web Unblocker is a proxy, not a REST API. You send your normal request through unblock.oxylabs.io:60000, with options set in headers. Oxylabs' own migration guide from Bright Data says an API endpoint is "Not supported yet" and points to the Web Scraper API for that. The same guide lists features Web Unblocker has that it says Bright Data's lacks: sessions of up to 10 minutes, POST requests, browser instructions and PNG rendering. Bright Data's own request guide shows an optional body field for POST payloads, so read the POST row as Oxylabs' view.
Both are proxy-network companies first. Their unlocker products are what a scraping team buys when it wants a URL in and a page out without managing proxies.
The same request in Bright Data and Oxylabs
One job, done both ways: fetch a JavaScript-heavy product page and get its content back. Each request follows the vendor's own docs for that job, checked on October 27, 2026, and reads its credentials from shell variables.
curl https://api.brightdata.com/request \
-H "Authorization: Bearer $BRIGHTDATA_API_KEY" \
-H "Content-Type: application/json" \
-d '{"zone": "'"$BRIGHTDATA_ZONE"'", "url": "https://www.example.com/product/123", "format": "raw", "data_format": "markdown", "render": "true"}'
curl -k -x https://unblock.oxylabs.io:60000 \
-U "$OXYLABS_USERNAME:$OXYLABS_PASSWORD" \
-H "X-Oxylabs-Render: html" \
-H "X-Oxylabs-Geo-Location: United States" \
"https://www.example.com/product/123"
Bright Data's request is a REST POST with a bearer key. It also needs a zone, created in the dashboard before the first call, and the request guide says zone, url and format must all be present. data_format: "markdown" converts the page, and render forces a browser, which the docs say to use "only when needed, and scarcely." Oxylabs' request is a plain GET through a proxy with a username and password. The -k flag is required, because the docs ask you to ignore the proxy's SSL certificate. X-Oxylabs-Render: html renders the page, and the docs ask for a 180-second client timeout when you use it. The Web Unblocker docs describe HTML and PNG output; markdown is not among the options they list.
At scale, the shape matters. A REST call is easy to schedule, retry and log as a job. A proxy fits code that already speaks to proxies, such as Scrapy or a crawler with its own scheduler.
Where Bright Data wins and where Oxylabs wins
The headline gap is 5.6 points. The per-site picture shows two products that fail on different parts of the web.
| Result on a site | Bright Data | Oxylabs | String |
|---|---|---|---|
| All 5 attempts returned | 63 | 62 | 93 |
| 1 to 4 attempts returned | 21 | 14 | 5 |
| Nothing returned | 16 | 24 | 2 |
Both returned all five attempts on 41 sites. At least one of the two did on 84.
Bright Data returned all five and Oxylabs none on 15 sites: trustpilot.com, apartments.com, realtor.com, skyscanner.net, stockx.com, zara.com, kayak.com, zoopla.co.uk, congress.gov, facebook.com, amazon.com, booking.com, att.com, cargurus.com and stackoverflow.com.
Oxylabs returned all five and Bright Data none on 6 sites: canadagoose.com, saksfifthavenue.com, idealista.com, etsy.com, finance.yahoo.com and buybuybaby.bedbathandbeyond.com.
The first list is travel booking, real estate listings, reviews and resale, plus amazon.com on the general path. The second is luxury retail, a Spanish property portal and financial news. Oxylabs gives up completely more often: 24 sites at zero against 16. A zero is a known gap you find on day one. A partial result is harder to catch in production, and Bright Data had 21 of those against Oxylabs' 14.
By industry, averaged across each group's sites:
| Industry (sites) | Bright Data | Oxylabs | String |
|---|---|---|---|
| Retail and e-commerce (17) | 67.1% | 68.2% | 92.9% |
| Fashion and luxury (11) | 72.7% | 74.5% | 98.2% |
| Marketplaces and classifieds (10) | 70.0% | 70.0% | 96.0% |
| Travel (9) | 86.7% | 62.2% | 100.0% |
| News and finance (9) | 75.6% | 95.6% | 100.0% |
| Social media (8) | 100.0% | 87.5% | 100.0% |
| Real estate (7) | 85.7% | 57.1% | 85.7% |
| Reviews and local (6) | 56.7% | 53.3% | 96.7% |
| Jobs and hiring (5) | 80.0% | 72.0% | 100.0% |
| Grocery and food (5) | 76.0% | 100.0% | 100.0% |
| Tickets and events (4) | 25.0% | 0.0% | 100.0% |
Retail, fashion and marketplaces, the three largest groups, are close to a tie. The decision lives in the smaller groups. Ticketing is the one row where both fail. Oxylabs returned nothing on all four ticketing sites, and Bright Data 25.0%. Our ticketing answer covers that category on its own.
Two contracts still miss 16 sites. Running both and routing each site to the vendor that does better on it is a common plan for a large job. In this run it leaves 16 of the 100 sites without all five attempts: temu.com, mouser.com, autozone.com, us.louisvuitton.com, yelp.com, g2.com, coupang.com, stubhub.com, ticketmaster.com, seatgeek.com, allegro.pl, indeed.com, reuters.com, axs.com, roblox.com and bing.com. Five of them returned nothing from either vendor across ten attempts: temu.com, g2.com, ticketmaster.com, seatgeek.com and allegro.pl. With perfect routing, the pair averages 89.0% across the 100 sites. String returned all five attempts on 12 of the 16, some content on 15, and nothing on temu.com, which no provider in the run returned.
Anti-bot coverage, system by system
Neither vendor is better everywhere. Success rate by the anti-bot system in front of each site:
| Anti-bot system (sites) | Bright Data | Oxylabs | String |
|---|---|---|---|
| DataDome (19) | 47.4% | 65.3% | 92.6% |
| Akamai (20) | 79.0% | 67.0% | 98.0% |
| Cloudflare (15) | 88.0% | 57.3% | 100.0% |
| PerimeterX (9) | 100.0% | 86.7% | 100.0% |
| AWS WAF (6) | 86.7% | 33.3% | 100.0% |
| Kasada (3) | 66.7% | 86.7% | 93.3% |
| Proprietary or other (27) | 72.6% | 82.2% | 96.3% |
Bright Data led on Akamai, Cloudflare, PerimeterX and AWS WAF. Its Cloudflare lead is 30.7 points and its AWS WAF lead 53.4. Oxylabs led on DataDome by 17.9 points, on Kasada and on the proprietary group, which holds most self-defended sites. Kasada covers three sites and AWS WAF six, so read those rows as small samples. Fastly, one site, is left out.
In August, Oxylabs led PerimeterX at 97.8%. In September it read 86.7%, and Bright Data 100%.
What changes at large scale
A large job multiplies three things the headline rate hides: what a failure costs, how long it takes, and how fast you can send.
What you are billed for. The two vendors use different units. Bright Data bills per 1,000 successful requests. Its features doc says usage "is measured by CPM," the cost of 1,000 successful requests, "meaning only successful Web Unlocker API requests will count toward your billing." Oxylabs bills per gigabyte. Its billing docs say "You will be billed for both request and response traffic of successfully extracted data." They also define success broadly: "All responses from the target site with 2xx or 4xx status codes are counted as successful," and a 2xx or 4xx response without the expected information still counts. Oxylabs does not bill its own 5xx errors, and its response codes page says a 550 "Faulted After Too Many Retries" job is not charged.
Failed but billable, from the run. Oxylabs failed 155 of its 500 attempts. Of those, 75 were 550 faulted jobs and 4 hit our 90-second timeout. The other 76 fall under the docs' definition of success: 63 came back with a 4xx status (45 at 400, 13 at 403 and 5 at 429), and 13 came back as a page without the expected content. The run cannot show what Oxylabs invoiced for each one. Read by its own billing docs, though, about half of Oxylabs' failures are billable traffic. Bright Data failed 127 attempts. Of those, 116 ended in an explicit Bright Data error, a 502 or our timeout, which its docs do not bill. The other 11 returned a page without the expected content, which Bright Data may have counted as a success. That is the largest billing difference between the two products at volume, and it lands on the sites where each one struggles.
The two exceptions. Bright Data bills every request, failed or not, once you turn on custom headers, cookies or expect elements. The features doc says "you'll be billed for 100% of the requests (both successful and failed)." Oxylabs bills traffic, so page weight drives the bill. Its docs warn that with rendering on, "total traffic for the job may be higher than the size of the HTML file alone." Oxylabs also forces rendering on some page types of specific domains, and notes that rendered jobs use more traffic.
Time spent on failures. Both vendors spent close to half their wall-clock time on attempts that failed: 41.3% for Bright Data and 46.9% for Oxylabs. Bright Data's median failed attempt took 10.13 seconds and 13 hit the 90-second timeout. Oxylabs' median failed attempt took 15.74 seconds and 4 hit the timeout. Counting every attempt, Bright Data spent 18.40 seconds per usable page and Oxylabs 18.48. Per million usable pages, that is about 5,100 hours of open connections on either vendor, against about 1,500 on String at 5.47 seconds. On pages both returned in full, Bright Data was faster: a median of 3.3 seconds per site against 4.6 for Oxylabs, and faster on 28 of the 41.
How fast you can send. Bright Data's pricing page promises "Unlimited concurrency" on pay as you go and on Scale. Its error codes still include an auto-throttle: a 429 that reads "The request was auto-throttled due to low success rate." In the run, 11 Bright Data attempts failed on a rate-limit error. Oxylabs publishes a rate-limit table: 50 requests a second and 13 rendered requests a second on its smaller plans, and 100 and 25 on the larger ones. The table uses plan names (Micro, Starter, Advanced, Venture) that do not match the current pricing page, so confirm the limit for your plan before you size a job.
Watching a large job. Bright Data has a per-domain success-rate API that returns a domain's success rate and p90 response time. Oxylabs has a usage statistics API for traffic, response times and request counts. Both are worth wiring into a dashboard before the first big run.
Pricing at $100 a month
Pricing is hard to compare across these two. Bright Data sells requests; Oxylabs sells gigabytes. A per-page figure for Oxylabs depends on how heavy your pages are, and Bright Data does not publish its premium-domain rate. These figures are each vendor's published rate on October 27, 2026.
- Bright Data, pay as you go: $100 buys about 66,700 successful requests at $1.50 per 1,000. There is no $100 plan. The nearest, Scale, is $499 a month for 383,000 requests, then $1.30 per 1,000. The free tier is 5,000 requests a month, shared across Web Unlocker, SERP API, Scraper API and Scraper Studio, with no card (free tier docs). Premium domains bill at a higher rate that appears only in the zone's "Estimated cost" section.¹
- Oxylabs Basic, $100 a month: up to 16 GB of Web Unblocker traffic at $6 per GB (pricing). The same subscription covers Oxylabs' other products. At the 201 kB per request in Oxylabs' own billing example, 16 GB is about 79,600 requests, or about $1.26 per 1,000. At 500 kB per request it is about 32,000 requests, or about $3.13 per 1,000. Both are our arithmetic, not Oxylabs' figures. The nearest plans are Starter at $30 ($7.20 per GB) and Flexible at $500 ($4.80 per GB). New accounts get $5 of welcome credit.
- Oxylabs Web API, same subscription: on Basic, the /scrape pricing lists custom domains at $0.90 per 1,000 results without JavaScript and $1.40 with it, and Amazon at $0.45. This is the per-result product with the dedicated scrapers. The benchmark did not test it.
- String Growth, $99 a month: $0.16 per 1,000 standard fetches, $0.90 per 1,000 premium fetches, $0.80 for a browser on a standard proxy and $3.25 for a browser on a premium proxy (pricing). Blocked requests are not billed, and unused credit rolls over.
¹ Bright Data's features doc says premium domains "require additional Web Unlocker API resources" and bill at a higher rate once enabled. Neither the doc nor the pricing page states that rate. The part of the bill that is unknown is the per-request price on those domains, which are often the hard targets a large job is built around. This page makes no "cheapest" claim for Bright Data for that reason.
At this level, the comparison runs both ways. String's standard and premium fetch rates are below Bright Data's $1.50 and below Oxylabs' derived $1.26 at 201 kB. String's browser-on-premium rate of $3.25 is above both.
Which to pick
Pick Bright Data when your list leans toward travel, real estate, reviews or social media, or sits behind Cloudflare, Akamai, PerimeterX or AWS WAF. Its billing is easier to forecast, because a request either succeeds and bills or fails and does not. Leave custom headers off unless you need them, since they switch the zone to billing every request. Set a client timeout well under 90 seconds.
Pick Oxylabs when your list leans toward news, finance and grocery, or sits behind DataDome or Kasada. It also fits when you need sessions, POST requests or browser instructions on the unlocker, or one subscription that also buys proxies. Price your 4xx and empty-page rate before you commit, because those responses bill. If your list includes Amazon or another site with a dedicated scraper, test that scraper rather than the general path.
Run both when your list really splits along the lines above and the second contract costs less than the coverage it adds. In this run, perfect routing between the two reached 89.0%, and 16 sites still came back incomplete.
Pick String when the list mixes both groups, includes ticketing, or includes sites neither vendor returns. String returned all five attempts on 93 of 100 sites, including all 15 sites Bright Data won outright and 5 of the 6 Oxylabs won.
Stay where you are when your list is idealista.com, autotrader.com or footlocker.com. Oxylabs beat String on all three, and Bright Data beat String on the last two.
Switching from Bright Data or Oxylabs to String
What carries over. A Bright Data /request POST keeps its bearer-key shape and becomes a POST to https://request.usestring.ai/v1/fetch. Drop zone and format, and map data_format: "markdown" to "format": "markdown", because String returns a JSON envelope by default. An Oxylabs Web Unblocker GET moves from a proxy setting to an API call: the URL goes in the body, the username and password become a bearer key, and X-Oxylabs-Geo-Location becomes countryCode with a two-letter code. You can drop the render headers, because String renders pages that need it without being asked. The fetch reference lists every field.
curl https://request.usestring.ai/v1/fetch \
-H "Authorization: Bearer $STRING_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://www.example.com/product/123", "format": "markdown"}'
What you rebuild. From Bright Data: Scraper APIs and datasets, async Unlocker jobs with webhook delivery, the SERP API and the Browser API, and the proxy networks. String's /search endpoint covers live search results, and its remote browser takes Playwright or Puppeteer over CDP. From Oxylabs: Web Unblocker sessions, the Web API's dedicated scrapers and parsers, and the residential, mobile and ISP proxies. Browser instructions map to String's actions, and PNG rendering to screenshot. String has no proxy-port interface, so code that speaks to a proxy moves to API calls. Datasets and raw proxies stay with the vendor you have.
Integrations to reconnect. Bright Data publishes Python and JavaScript SDKs, a hosted MCP server with an open-source repo, and automation integrations. Oxylabs publishes an MCP server and a LangChain integration. String ships no language SDK, so an SDK call becomes one HTTP POST. Its hosted MCP server is in the official registry and runs at mcp.usestring.ai. n8n calls String through the HTTP Request node, and Zapier, LangChain and the Vercel AI SDK have setup guides in String's docs.
Test on your own failing URLs first. Start with the domains that fail or cost the most today. Bright Data's success-rate API and Oxylabs' usage statistics show which ones those are. Add the travel, ticketing, review and news sites where either vendor was partial or absent in this run. Run them through String beside your current setup, compare pages returned and cost per usable page, and move only the targets that improve. Leave custom headers off for the test, because String bills a blocked request only when it sent custom headers. The first 20,000 String standard fetches are free with no card. For one vendor at a time, see String vs Bright Data and String vs Oxylabs.
FAQ
Bright Data vs Oxylabs: which is better for large-scale scraping?
Bright Data, for most lists. It returned 74.6% of 500 benchmark requests against Oxylabs' 69.0% in the September 16, 2026 run, and it bills only successful requests. Oxylabs bills per gigabyte and counts 4xx responses as billable. Oxylabs is the better pick for news, finance and grocery sites, where it returned 95.6% and 100%.
Does Oxylabs charge for blocked requests?
Under its billing docs, often yes. Oxylabs counts every target response with a 2xx or 4xx status as successful and bills its traffic, even when the page lacks the expected content. A 403 block page is a 4xx. In the run, 76 of Oxylabs' 155 failed attempts were 4xx responses or 2xx pages without the content. Oxylabs does not bill its own 5xx errors or 550 faulted jobs.
Does Bright Data charge for blocked requests?
Its docs say no: "you are charged only for successful requests to your target domain." The exception is a zone with custom headers, cookies or expect elements turned on. Those zones bill 100% of requests, successful or failed.
Which one is cheaper at $100 a month?
Neither one can be ranked on the published numbers. Oxylabs Basic is $100 for 16 GB, which is about $1.26 per 1,000 requests at 201 kB a page and more on heavier pages. Bright Data's pay-as-you-go rate is $1.50 per 1,000 successful requests, but premium domains bill at a rate it does not publish. String Growth is $99, with standard fetches at $0.16 per 1,000 and a browser on a premium proxy at $3.25.
Which sites does Bright Data get that Oxylabs does not?
Fifteen sites returned all five attempts on Bright Data and none on Oxylabs, including Trustpilot, Booking.com, Kayak, Realtor.com, Apartments.com, Facebook, Zara and amazon.com on the general path. Oxylabs did the reverse on six, including Etsy, Yahoo Finance and Saks Fifth Avenue.
Is it worth running Bright Data and Oxylabs together?
Only if your list splits cleanly between them. With perfect per-site routing, the pair averaged 89.0% across the 100 sites, and 16 sites still came back incomplete, including Ticketmaster, SeatGeek, StubHub, G2 and Reuters. String returned all five attempts on 12 of those 16.
Why did Oxylabs fail on amazon.com?
The benchmark used Oxylabs' general Web Unblocker path, which returned 0 of 5 on amazon.com. Oxylabs sells a dedicated Amazon scraper through its Web API, priced at $0.45 per 1,000 results on Basic, and the benchmark did not test it. If Amazon is on your list, test that scraper.
How do I check these results on my own sites?
Clone the benchmark harness, add your own URLs, and run it with your own keys. Use at least 20 sites, because close providers swap places often on a short list.
Sources
Checked October 27, 2026 unless noted.
- String, Web Data Frontier Benchmark: /benchmark and the September 2026 results post
- Benchmark harness repository
- September 16, 2026 run file
- Bright Data adapter and Oxylabs adapter
- Bright Data Web Unlocker pricing
- Bright Data Web Unlocker overview
- Bright Data Web Unlocker features
- Bright Data first request guide
- Bright Data free tier
- Bright Data Scraper APIs
- Bright Data MCP server and repository
- Bright Data SDKs and automation integrations
- Oxylabs Web Unblocker pricing
- Oxylabs Web Unblocker docs
- Oxylabs Web Unblocker billing
- Oxylabs Web Unblocker response codes
- Oxylabs Web Unblocker rate limits
- Oxylabs JavaScript rendering
- Oxylabs sessions
- Oxylabs usage statistics
- Oxylabs migration guide from Bright Data Web Unlocker
- Oxylabs Web API /scrape pricing
- Oxylabs dedicated commerce scrapers
- Oxylabs MCP server and LangChain integration
- String pricing, fetch API reference, integrations and MCP registry entry
- Related String pages: String vs Bright Data, String vs Oxylabs, Bright Data alternatives, Oxylabs alternatives, Firecrawl vs Bright Data, web scraping API vs web unblocker vs proxy