By Rajesh Kannan, Co-Founder & CTO, Gramosoft · Last updated: · Prices checked on each vendor's pricing page on October 23, 2026

Bright Data's Web Unlocker charges $1.50 per 1,000 successful requests on pay-as-you-go, and its first monthly plan starts at $499. If you mostly need pages back as HTML or Markdown, you can pay less. Below are seven cheaper web scraping APIs, starting with GcrawlAI, the one we build. We cover what each one charges once JavaScript and anti-bot are switched on, and how to move your traffic over without breaking anything.

TL;DR

  • GcrawlAI charges one request per successful page, whatever features it uses: JavaScript rendering, rotating residential proxies, anti-bot and CAPTCHA handling are all included, with no credit multipliers, and failed requests aren't charged. It has a free plan with no card, paid plans from $0.98 to $6.33 per 1,000 requests, and a self-hosted open-source core that costs nothing.
  • Credit APIs look cheaper than they are. ScraperAPI charges 11 credits for a rendered page and 26 with premium proxies. ScrapingBee charges 5 with JavaScript, 25 with premium proxies and 75 with stealth proxies.
  • Your mix of pages decides the bill. On mostly plain HTML, ScraperAPI is cheapest. Once about 20% of pages need premium proxies or anti-bot, GcrawlAI's flat rate comes out lowest in our worked example.
  • Oxylabs is the closest like-for-like swap, Zyte is cheap on easy sites and expensive on hard ones, and Decodo and Firecrawl have the lowest entry plans.
  • Switch gradually. Send 20% of URLs to the new API, check every page for a string that only the real page contains, and keep Bright Data as the fallback until the numbers hold.

What is the cheapest Bright Data alternative for web scraping? It depends on how many of your pages are protected. For mostly plain HTML, ScrapingBee and ScraperAPI cost the least per page. For JavaScript-heavy and bot-protected sites, GcrawlAI's flat price per successful request, with rendering, proxies, anti-bot and CAPTCHA included and failed requests free, avoids the credit multipliers that push other APIs' bills up as pages get harder.

What you actually pay Bright Data for

Bright Data's Web Unlocker costs $1.50 per 1,000 successful requests on pay-as-you-go, with 5,000 free requests a month. The Scale plan is $499 a month for 383,000 requests, then $1.30 per 1,000. That's the product a scraping API replaces, so it's the baseline for every price in this guide.

Two billing rules matter more than the headline rate. Bright Data's documentation says premium domains are billed at a higher rate than other sites, and that once you turn on a custom feature such as your own headers or cookies, every request is billed, failed or not. If your scrapers send custom headers, your real cost per usable page is higher than $1.50 per 1,000.

This guide compares scraping APIs: you send a URL and get the page back. If what you buy from Bright Data is raw residential proxy bandwidth, you're shopping for a proxy provider instead, and the units (gigabytes, not requests) don't compare. Our guide to running your own scraper versus a scraping API covers when that trade makes sense.

Bright Data alternatives at a glance

Here are the seven alternatives side by side, with the price that applies to a rendered, protected page, not just the headline rate. A credit plan's price per 1,000 depends on how many credits each page uses. Read the multiplier column before comparing entry prices, because that's where most bills go up. All prices were checked on October 23, 2026.

API Entry paid plan Billing unit JavaScript rendering Premium proxies / anti-bot Free to try
GcrawlAI Free plan; paid plans $19 to $149/month ($0.98 to $6.33 per 1,000); free if self-hosted 1 successful request per page; failed requests free Included Included (residential proxies, anti-bot, CAPTCHA), no multipliers Free plan, no card
Bright Data Web Unlocker (baseline) $1.50 per 1,000 pay-as-you-go; $499/month plan Successful request Included Included; premium domains cost more 5,000 requests/month
ScraperAPI $49/month for 100,000 credits Credits +10 credits +25 with rendering; anti-bot bypass 10 credits 7-day trial, 5,000 credits
ScrapingBee $19/month for 75,000 credits Credits 5 credits per page 25 premium, 75 stealth 1,000 credits
Oxylabs Web Scraper API $30/month Successful result $1.50 vs $1.00 per 1,000 (custom domains) Included $5 credit
Decodo Web Scraping API $19/month (about 38,000 pages) Request Included, used when needed Used when needed Free plan
Zyte API Pay as you go; plans from $100/month Successful response, by site tier $1.01 to $16.08 per 1,000 Priced into the site's tier $5 credit for 30 days
Firecrawl $19/month for 5,000 credits Credits Included (1 credit per page) Enhanced proxy costs extra 1,000 credits/month

Sources: each vendor's pricing page and credit documentation, checked October 23, 2026. Prices exclude tax and promotions.

The 7 cheaper web scraping APIs, one by one

Each entry covers what the API is best for, what you actually pay once JavaScript rendering and premium proxies are on, and where it falls short. GcrawlAI comes first because it's the one we build, and because its flat price per request is the simplest to compare against Bright Data. The rest follow by how often teams shortlist them.

1. GcrawlAI

Best for: teams leaving Bright Data because protected and JavaScript-heavy pages make the bill unpredictable. Pricing: a free plan with no card, then $19/month for 3,000 requests, $49 for 50,000 and $149 for 150,000, which is $0.98 to $6.33 per 1,000. The open-source core is free to self-host.

GcrawlAI is a scraping, crawling and Search API with a managed Cloud API and an MIT-licensed open-source core on GitHub. Like Bright Data's Web Unlocker, you send a URL and the browser, proxies and anti-bot handling run on our side. The difference is the bill. Every feature counts as the same single request: JavaScript rendering, rotating residential proxies, anti-bot bypass and CAPTCHA solving, with no credit multipliers. You pay only for successful requests, so a page that fails costs nothing, and a rendered, protected page costs the same as a plain one.

  • One request, every feature: JavaScript rendering for SPAs, rotating residential IPs, anti-bot bypass for Cloudflare, DataDome, Akamai and PerimeterX, and CAPTCHA solving, all in the same single request.
  • Failed requests are free: you're charged for successful requests only, so retries on a hard page don't eat your plan.
  • Scrape, crawl, map and search in one API: single pages, whole-site crawls with depth control and duplicate filtering, site maps without full rendering, full-page screenshots for mobile, tablet and desktop, and offline HTML bundles.
  • Batch and webhooks: synchronous requests or asynchronous batch jobs, with webhooks for progress and completion.
  • Clean output: Markdown with menus, footers and ads stripped, plus JSON, HTML, SEO metadata and images.
  • Search API and Deep Search: search results as JSON, with one search costing one request. Deep Search queries several engines and merges them into one ranked list.
  • Python SDK and MCP: call it from Python, or connect AI agents over MCP so they can search, scrape and crawl on their own.
  • Self-host option: run the open-source core on your own servers with your own proxy accounts, and pay nothing per request.

Here's one page through the Cloud API with the Python SDK. Our docs cover crawl, links, batch and search.

from gcrawl_sdk import GcrawlClient, ScrapeOptions   # pip install gcrawl-sdk

client = GcrawlClient(api_key="gc-YOUR_API_KEY")

# The same page on GcrawlAI: rendering, rotating proxies and anti-bot are part of the one request
result = client.scrape(
    url="https://shop.example.com/product/ridge-runner-3",
    options=ScrapeOptions(markdown_enabled=True, proxy_geo="US"),
    wait=True,
)
print(result.markdown[:300])

Where it falls short: it doesn't sell raw proxy bandwidth or ready-made datasets, so it can't replace those parts of Bright Data. The smallest plan has the highest price per request, so at very low volume a pay-as-you-go API can be cheaper. It's newer than ScraperAPI or Zyte and hasn't been in a public benchmark yet. Test it on your own failing URLs in the playground before you commit.

"Most teams don't leave Bright Data over the headline price. They leave because the bill moves every month. We price GcrawlAI per request so a hard page costs the same as an easy one, and you can work out the bill before you send the traffic."

Rajesh Kannan, Co-Founder & CTO at Gramosoft

2. ScraperAPI

Best for: high volumes of plain HTML pages, and structured JSON from sites like Amazon and Google. Pricing: $49/month for 100,000 credits, $149 for 1 million and $299 for 3 million, with a 7-day trial of 5,000 credits.

ScraperAPI is cheap on plain pages: on the Startup plan one standard request is about $0.15 per 1,000. Its credit documentation lists the add-ons: rendering adds 10 credits, premium proxies 10, both together 25, and ultra premium 30 or 75 with rendering. Amazon pages cost 5 credits, Google and Bing 25, and LinkedIn 30, and bypassing Cloudflare, DataDome, PerimeterX or Akamai costs 10 credits per scrape. It bills only 200 and 404 responses.

Where it falls short: a rendered page behind premium proxies uses 26 credits, so the plan that looked like 1 million pages becomes about 38,000. Check its URL cost endpoint on your own targets before you pick a plan.

3. ScrapingBee

Best for: small and mid-sized projects that want simple plans and a Google search API. Pricing: $19/month for 75,000 credits, $49 for 250,000 and $99 for 1 million, with 1,000 free credits at sign-up.

ScrapingBee's credit guide is clear: 1 credit without JavaScript, 5 with it, 10 or 25 with premium proxies, and 75 with stealth proxies, which always render. Google pages cost 15 credits, and AI extraction adds 5. It bills 200, 404 and 410 responses.

Where it falls short: the sites you probably used Bright Data for often need stealth proxies, and at 75 credits a page the Startup plan covers about 13,000 of them. It has no proxy-only product.

4. Oxylabs Web Scraper API

Best for: teams that want the same enterprise shape as Bright Data, with proxies, scraper API and datasets, from another vendor. Pricing: plans from $30/month, with a $5 welcome credit.

Oxylabs is the closest like-for-like replacement. Its Web Scraper API pricing starts at $0.50 per 1,000 results for generic pages. Custom domains cost $1.00 per 1,000 without JavaScript and $1.50 with it at entry volumes, falling to $0.75 and $1.22 at the top tiers. Responses with 2xx and 4xx status codes count as successful, and 5xx and 6xx failures aren't charged.

Where it falls short: at entry volumes a rendered custom-domain page costs the same $1.50 per 1,000 as Bright Data. You change vendor, not price model. The savings come at volume, and from the cheaper generic and Amazon rates.

5. Decodo Web Scraping API

Best for: small teams that want a low entry price, and residential proxies from the same account. Pricing: a free plan of about 10,000 pages a month, then plans from $19/month (about 38,000 pages) to $1,499.

Decodo, formerly Smartproxy, advertises its Web Scraping API from $0.15 per 1,000 requests. Its pricing page says every plan includes JavaScript rendering and that rendering and premium proxies are used only when needed. It also sells residential, ISP, datacenter and mobile proxies, so it can replace more of Bright Data than a pure API.

Where it falls short: the pricing page doesn't say what rendering or premium proxies add to a request, and points to its billing docs for the details. Check that before you compare it with a flat rate.

6. Zyte API

Best for: Scrapy teams with a mix of easy and hard sites. Pricing: pay as you go from $0.13 to $1.27 per 1,000 HTTP responses and $1.01 to $16.08 per 1,000 browser-rendered responses, with $5 of free credit for 30 days.

Zyte, the company behind Scrapy, puts every site into one of five pricing tiers, from Simple to Advanced. A $100 monthly commitment lowers the ranges to $0.10 to $0.95 and $0.75 to $12.00. Easy sites are the cheapest in this list, and it plugs straight into Scrapy projects.

Where it falls short: Zyte decides each site's tier, and a hard site rendered in a browser can cost $16.08 per 1,000 on pay-as-you-go, more than ten times Bright Data's rate. Price your own domains on its pricing page first.

7. Firecrawl

Best for: turning accessible sites into Markdown for LLM and RAG pipelines. Pricing: 1,000 free credits a month, then $19/month for 5,000 credits, $99 for 100,000 and $399 for 500,000.

Firecrawl charges 1 credit per scraped page, which makes Standard about $0.99 per 1,000 pages, and JSON output adds 4 credits. It has an AGPL open-source core and an MCP server. Its pricing page says credits on paid plans don't roll over.

Where it falls short: it's a crawler first and an unblocker second, and the pricing page doesn't list the cost of its enhanced proxy mode. Requests to pages that return 403 or 404 can still use credits. We looked at how its credits add up in why teams switch from Firecrawl to GcrawlAI.

The real cost per 1,000 pages

GcrawlAI's side of the comparison is simple, because every plan counts every feature as one request, from rendering and residential proxies to anti-bot and CAPTCHA solving, and charges nothing for failed requests. You can start on the free plan or self-host the core. Here are its plans from the pricing page, with the price per 1,000 requests worked out:

GcrawlAI plan Price Requests a month Price per 1,000
Free $0, no card Free monthly allowance $0
Starter $19/month 3,000 $6.33
Growth $49/month 50,000 $0.98
Pro $149/month 150,000 $0.99
Self-hosted open-source core $0 Unlimited, on your servers and proxies $0

Now price one workload in every API's own units. Our example is 100,000 pages a month: 50,000 plain HTML, 30,000 that need JavaScript, and 20,000 that need JavaScript plus premium proxies or anti-bot. The script below uses each vendor's published rates. It's arithmetic, not a benchmark, so swap in your own mix.

"""Price the same 100,000-page workload on each API, using published rates (checked Oct 23, 2026).

Edit MIX to match your own targets. Rates are USD per 1,000 pages for each page type.
"""
MIX = {"plain": 50_000, "js": 30_000, "protected": 20_000}   # pages per month by type

# (plain HTML, JavaScript rendered, JS + premium proxy / anti-bot), USD per 1,000 pages
RATES = {
    # Web Unlocker pay-as-you-go: one rate; premium domains are billed higher (not modelled)
    "Bright Data Web Unlocker": (1.50, 1.50, 1.50),
    # $149 for 150,000 requests = $0.99 per 1,000; every feature is one request, failed requests are free
    "GcrawlAI Cloud API": (149 / 150, 149 / 150, 149 / 150),
    # Startup plan: $149 for 1M credits = $0.149 per 1,000 credits; 1 / +10 render / 25 premium+render
    "ScraperAPI": (0.149 * 1, 0.149 * 11, 0.149 * 26),
    # Web Scraper API, custom domain, entry volume tier: $1.00 without JS, $1.50 with JS
    "Oxylabs": (1.00, 1.50, 1.50),
    # Pay as you go, assuming a tier-2 site for plain and JS pages and a tier-4 site for protected pages
    "Zyte API": (0.23, 2.01, 8.04),
}

def monthly_cost(rates, mix=MIX):
    plain, js, protected = rates
    return (mix["plain"] * plain + mix["js"] * js + mix["protected"] * protected) / 1000

if __name__ == "__main__":
    total = sum(MIX.values())
    print(f"{'API':<26}{'Monthly cost':>14}{'Per 1,000 pages':>18}")
    for name, rates in sorted(RATES.items(), key=lambda kv: monthly_cost(kv[1])):
        cost = monthly_cost(rates)
        print(f"{name:<26}{'$' + format(cost, ',.2f'):>14}{'$' + format(cost / total * 1000, '.2f'):>18}")
$ python cost_per_1000.py
API                         Monthly cost   Per 1,000 pages
GcrawlAI Cloud API                $99.33             $0.99
Oxylabs                          $125.00             $1.25
ScraperAPI                       $134.10             $1.34
Bright Data Web Unlocker         $150.00             $1.50
Zyte API                         $232.60             $2.33

On this mix, GcrawlAI comes out cheapest at $99, because a rendered, protected page costs it the same as a plain one. On mostly plain HTML, ScraperAPI is cheaper. The picture changes with the share of protected pages, because the credit APIs multiply while the flat rates don't. Here's the same 100,000 pages with 30,000 JavaScript pages and a rising share of protected ones:

Protected pages GcrawlAI Oxylabs ScraperAPI Bright Data Zyte API
None $99 $115 $60 $150 $76
20,000 $99 $125 $134 $150 $233
40,000 $99 $135 $209 $150 $389
60,000 $99 $145 $283 $150 $545

Monthly cost for 100,000 pages, USD, from the script above. GcrawlAI is priced at $0.99 per 1,000, the rate on its $149 plan for 150,000 requests, which covers this 100,000-page month with room to spare. Its failed requests aren't charged, so retries add nothing, and the free plan and self-hosted core cost nothing. Bright Data excludes premium-domain surcharges. Decodo and Firecrawl aren't modelled because their pricing pages don't publish the cost of premium proxies.

"Before you compare plans, count how many of your URLs actually need a browser and a residential IP. That one number decides which API is cheapest, and most teams have never measured it."

Rajesh Kannan, Co-Founder & CTO at Gramosoft

How to switch from Bright Data without breaking your pipeline

Switch one workload at a time and keep Bright Data running as the fallback. Send a small share of URLs to the new API, check every response for content that only the real page contains, and compare cost per usable page over a full billing cycle. Only then move the rest of that workload.

Here's the request most teams send to Bright Data's Web Unlocker today, using the format from its API reference:

import requests

# Today: one page through Bright Data's Web Unlocker API
resp = requests.post(
    "https://api.brightdata.com/request",
    headers={"Authorization": "Bearer YOUR_BRIGHTDATA_KEY", "Content-Type": "application/json"},
    json={
        "zone": "web_unlocker1",          # the zone you created in the control panel
        "url": "https://shop.example.com/product/ridge-runner-3",
        "format": "raw",
        "country": "us",
        "data_format": "markdown",
    },
    timeout=120,
)
print(resp.text[:300])

A wrapper like this sends 20% of URLs to GcrawlAI first and falls back to Bright Data when a page is missing. A 200 response with a captcha page counts as a failure, which is why it checks for a string from the real page:

"""Route a share of traffic to the new API, keep Bright Data as the fallback, and log both."""
import random
import requests
from gcrawl_sdk import GcrawlClient, ScrapeOptions   # pip install gcrawl-sdk

gcrawl = GcrawlClient(api_key="gc-YOUR_API_KEY")
NEW_API_SHARE = 0.2          # start with 20% of URLs, raise it as the numbers hold up

def via_brightdata(url):
    r = requests.post(
        "https://api.brightdata.com/request",
        headers={"Authorization": "Bearer YOUR_BRIGHTDATA_KEY"},
        json={"zone": "web_unlocker1", "url": url, "format": "raw", "data_format": "markdown"},
        timeout=120,
    )
    r.raise_for_status()
    return r.text

def via_gcrawl(url):
    result = gcrawl.scrape(url=url, options=ScrapeOptions(markdown_enabled=True, proxy_geo="US"), wait=True)
    return result.markdown or ""

def fetch(url, must_contain):
    """must_contain is a string that only appears on the real page (a price label, a product title...)."""
    first, second = (via_gcrawl, via_brightdata) if random.random() < NEW_API_SHARE else (via_brightdata, via_gcrawl)
    for fn in (first, second):
        try:
            page = fn(url)
            if must_contain in page:          # a 200 with a captcha page is still a failure
                print(f"ok   {fn.__name__:<14} {url}")
                return page
            print(f"miss {fn.__name__:<14} {url}")
        except Exception as exc:
            print(f"err  {fn.__name__:<14} {url} {exc}")
    return None

if __name__ == "__main__":
    fetch("https://shop.example.com/product/ridge-runner-3", must_contain="Add to cart")
  1. List what you use. Write down every Bright Data zone and product, and its monthly volume in its own unit.
  2. Measure your mix. Count how many URLs need JavaScript and how many need premium proxies. This decides the cheapest API.
  3. Test on your failing URLs. Start with the sites that already fail sometimes, and use each vendor's free tier or trial.
  4. Compare cost per usable page, not cost per request: count retries, captcha pages and empty responses.
  5. Move one workload per billing cycle, and keep the old zone until the new numbers hold. If you're seeing 403s along the way, our guide to fixing 403 Forbidden errors covers the usual causes.

Which Bright Data alternative should you choose?

Choose by the pages you scrape, not by the headline price. If most targets are protected or JavaScript-heavy, a flat price per request is cheapest and easiest to forecast. If most are plain HTML, a credit API wins. If you need proxies and datasets from one vendor, look at Oxylabs or Decodo.

If you need Choose Why
Protected or JavaScript-heavy sites at a predictable price GcrawlAI One request covers rendering, proxies, anti-bot and CAPTCHA, with no multipliers; failed requests are free
A scraper you can self-host for free GcrawlAI open-source core MIT-licensed, with stealth browsing and proxy rotation built in
AI agents that scrape and search on their own GcrawlAI with MCP Agents call search, scrape and crawl as tools
Huge volumes of plain HTML ScraperAPI or ScrapingBee 1 credit per page on simple sites
The same enterprise products from another vendor Oxylabs Proxies, scraper API and datasets, with plans from $30
The lowest entry plan plus proxies Decodo Free plan, paid plans from $19, proxies in the same account
A Scrapy project with mostly easy sites Zyte API Very low cost on simple tiers, native Scrapy support
Markdown from accessible sites for an LLM Firecrawl 1 credit per page, open-source core

When Bright Data is still the better choice

Stay with Bright Data when you need raw residential, ISP or mobile proxies at scale, ready-made datasets, or several web-data products under one contract and one compliance review. If your current setup returns the data you need at a cost you accept, a migration has no clear goal, and that's a fine reason to stay.

Whichever API you use, the legal side stays the same: collect public data, respect rate limits and site terms, keep personal data to a minimum, and don't scrape behind logins without permission. Our guide to what web scraping is and when it's legal covers the basics.

Frequently asked questions

Is there a cheaper alternative to Bright Data's Web Unlocker?

Yes. Bright Data charges $1.50 per 1,000 successful requests on pay-as-you-go. GcrawlAI has a free plan, and paid plans cost $0.98 to $6.33 per 1,000 successful requests, with every feature in one request and nothing charged for failed requests, or nothing at all if you self-host its open-source core. ScraperAPI, ScrapingBee and Zyte cost less on simple pages but more once premium proxies are needed.

Why do scraping API credits cost more than the advertised price?

Credit APIs charge extra credits for JavaScript rendering, premium proxies and some domains. On ScraperAPI a rendered page with premium proxies uses 26 credits, and on ScrapingBee a stealth-proxy page uses 75. A plan advertised as 1 million credits can cover fewer than 40,000 hard pages.

Does Bright Data charge for failed requests?

Web Unlocker normally bills only successful requests. Bright Data's documentation says that once you enable a custom feature such as your own headers or cookies, every request is billed, successful or not, and that premium domains are billed at a higher rate.

Is GcrawlAI open source, and is there a free plan?

Yes. GcrawlAI's core is MIT-licensed and you can self-host it for free with your own proxies. The managed Cloud API has a free plan that needs no card, plus a Python SDK and an MCP server for AI agents.

Which Bright Data alternative is the closest like-for-like replacement?

Oxylabs. It sells the same mix of residential and datacenter proxies, a Web Scraper API and datasets, with self-serve plans from $30 a month. At entry volumes its rendered custom-domain price, $1.50 per 1,000, matches Bright Data's, so the savings come at higher volume.

How do I migrate from Bright Data to another scraping API?

Move one workload at a time. Route a small share of URLs to the new API, check each response for content from the real page, compare cost per usable page over a billing cycle, and keep Bright Data as the fallback until the new numbers hold.

One price per page, whatever the page needs.

GcrawlAI's Cloud API includes JavaScript rendering, rotating proxies and anti-bot in every request, with no credit multipliers, and failed requests are never charged. Use the Python SDK, connect AI agents over MCP, or self-host the MIT-licensed core.

CTA Illustration