<!-- twin of https://specstream.ai/anti-bot-scraping-alternatives -->
# Anti-bot scraping alternatives in 2026: one price per protected page

Compared on Nov 12, 2026. The page: https://specstream.ai/anti-bot-scraping-alternatives

A page behind a bot check is the dearest page on every scraping plan: 25 credits on ZenRows and Scrape.do, 30 on Scrapfly, up to $16.08 per 1,000 on Zyte. On those entry plans that is $2.90 to $10.56 per 1,000 pages.

SpecStream is the live web data engine for teams and agents. Its Extract API has no anti-bot setting to choose and one price: $0.80 per 1,000 pages. A page that still refuses comes back as `blocked` and costs nothing.

[Get an API key](https://specstream.ai/signup?src=alternatives-anti-bot-scraping-alternatives&utm_source=alternatives-md&utm_campaign=anti-bot-scraping-alternatives&returnTo=%2Fworkspace%2Fagents%3Ftab%3Dkeys) New accounts get $10 of credit, no card. It covers 12,500 pages.

## A protected page on five APIs, Nov 12, 2026

| | SpecStream | Zyte API | ZenRows | Scrapfly | Scrape.do |
|---|---|---|---|---|---|
| What you set for a protected page | Nothing. A page that refuses a plain read is tried again as a browser would ask, then in a real browser, then from the site's own feed, then from its newest public archive capture | Nothing. Zyte picks the technology for each website and gives it a price tier | `js_render` and `premium_proxy`, or Adaptive Stealth Mode with `mode=auto` | Residential proxies with `proxy_pool=public_residential_pool`, `render_js`, and the Unblocker | `super=true` for residential and mobile proxies, `render=true` for a browser |
| What a protected page costs, per 1,000 | $0.80, the price of every page | Up to $16.08 for browser-rendered responses on the top tier | 25 credits: $10.56 on Build B1 | 30 credits: $4.50 on Discovery | 25 credits: $2.90 on Hobby |
| Who sets the price | One rate card, the same on every plan and every site | Zyte assigns each website a tier and reviews tiers quarterly, with 2 weeks notice of a change | Fixed weights of 1, 5, 10 or 25 credits. A crawl with Adaptive Stealth Mode takes 1 to 25 credits a page, by site | The Unblocker may upgrade the proxy pool, which can change the final cost | Some domains get `super` or `render` turned on by default, at that cost. The `Scrape.do-Request-Cost` header says what a call cost |
| A blocked or failed page | Not charged. It comes back as `blocked`, and a bot check's page is never returned as text | Rate-limited and unsuccessful responses are free | Failed or retried requests are not charged. A 404 or 410 counts as successful | Not billed, until 30% or more of a day's scrapes are blocked without the Unblocker. Then failed scrapes are billed | Failed requests cost nothing. 400, 404 and 410 count as successful |
| Entry plan | No plan. A balance you top up, and credit you buy never expires | Pay as you go with a $100 monthly spending limit, or a commitment of $100 to $500 for 25% to 52% off | Build B1: $19 a month for 45,000 credits, which expire at every renewal | Discovery: $30 a month for 200,000 credits | Hobby: $29 a month for 250,000 credits |
| Free start | $10 of credit, no card, which covers 12,500 pages | $5 of free credit on signup | Free plan: 5,000 credits a month | 1,000 credits on signup, no card | Free plan: 1,000 credits |
| Keep your client | Drop-in addresses for ZenRows, Scrapfly, Scrape.do, ScrapingBee, ScraperAPI and ScrapingAnt. Each call is one page at $0.0008 | Zyte API, and Scrapy Cloud for your spiders at $9 a month per unit | `https://api.zenrows.com/v1/`, answered by SpecStream at `https://api.specstream.ai/zenrows/v1/` | `https://api.scrapfly.io/scrape`, answered by SpecStream at `https://api.specstream.ai/scrapfly/scrape` | `https://api.scrape.do/`, answered by SpecStream at `https://api.specstream.ai/scrapedo` |

## Why teams send protected pages to SpecStream

### No tier to choose, one price

On a credit plan you pay for the settings a site needs. A ZenRows request with `js_render` and `premium_proxy` takes 25 credits, and so does a Scrape.do request with `super` and `render`. Scrapfly adds 5 credits for a browser to 25 for residential proxies. Zyte sets the tier itself.

SpecStream has no such setting. The Extract API tries a refused page again as a browser would ask, then in a real browser, then from the site's own feed, then from its newest public archive capture, and the page costs $0.0008 whichever step reads it. 10,000 protected pages that ZenRows bills at 250,000 credits cost $8.

### A blocked page costs nothing

A site that still refuses, or answers with a bot check, comes back with the status `blocked` and is not charged. A bot check's page is never returned as text, so a challenge page never reaches your parser as content. A 404 and a page with no main text are not charged either.

Each page that is read says where from: `read_from` is `live` for the page now, `site` for the site's own feed or API, and `archive` for its newest public archive capture, with `captured_at`. Your code knows which rows came from the live page.

### Test it on your hardest URLs

Put the URLs your current API fails on in `hard.txt`. This script reads them through the Extract API, 20 a call, and prints each status, where each page was read from, and the cost of the run.

```
import collections
import os

import requests

KEY = os.environ["SPECSTREAM_API_KEY"]
urls = [line.strip() for line in open("hard.txt") if line.strip()]
seen, cost = collections.Counter(), 0.0

for start in range(0, len(urls), 20):
    data = requests.post(
        "https://api.specstream.ai/v1/extract",
        headers={"Authorization": f"Bearer {KEY}"},
        json={"urls": urls[start:start + 20], "format": "text"},
        timeout=120,
    ).json()["data"]
    for page in data["results"]:
        seen[(page["status"], page.get("read_from"))] += 1
    cost += data.get("price_usd", 0)

for (status, read_from), count in seen.most_common():
    print(status, read_from, count)
print(f"${cost:.4f} for {len(urls)} URLs")
```

Only the pages counted `ok` are in the cost line. A `blocked` count tells you which sites refuse every step, at no charge.

### Search and rows on the same key

The same key runs the [Search API](https://specstream.ai/search-api?utm_source=alternatives&utm_campaign=anti-bot-scraping-alternatives), the most accurate web search API in the world: 97.9 F-score on all 1,000 SimpleQA Verified questions and 64.0 item F1 on all 200 WideSearch tasks ([benchmarks](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=anti-bot-scraping-alternatives)), at $5 per 1,000 searches or $1 on the fast tier. [Deep Search](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=anti-bot-scraping-alternatives) turns a request in plain words into structured rows at 5¢, 15¢ or $1 a delivered row, with the source URL and read time on every value.

## Other anti-bot scraping APIs

### SpecStream

The live web data engine for teams and agents. Its [Extract API](https://specstream.ai/extract-api?utm_source=alternatives&utm_campaign=anti-bot-scraping-alternatives) reads protected and plain pages at one price, $0.80 per 1,000, scores 0.908 F1 on WCXB and does not charge a blocked page. It answers six scraping APIs at their own paths. New accounts get $10 of credit, no card.

### Zyte API

Zyte charges $1.01 to $16.08 per 1,000 browser-rendered responses, by a tier it gives each website and reviews quarterly. In the benchmark on Proxyway's 2026 list it scored a 93.14% success rate at 2 requests a second. On SpecStream every page is $0.80 per 1,000 ([Zyte alternatives](https://specstream.ai/alternatives/zyte?utm_source=alternatives&utm_campaign=anti-bot-scraping-alternatives)).

### ZenRows

A protected request takes 25 credits on every plan, so Build B1's 45,000 credits read 1,800 protected pages for $19. Proxyway measured 70.39%. SpecStream answers ZenRows' `GET /v1/` at `https://api.specstream.ai/zenrows/v1/`, where `js_render` and `premium_proxy` are accepted and the price stays $0.0008 a page ([ZenRows compatible](https://specstream.ai/migrate/zenrows?utm_source=alternatives&utm_campaign=anti-bot-scraping-alternatives)).

### Scrapfly

Discovery is $30 a month for 200,000 credits, $0.15 per 1,000 credits. Residential proxies take 25 credits, a browser 5 more, and failed scrapes are billed once 30% of a day's scrapes are blocked without the Unblocker. SpecStream answers `/scrape` at `/scrapfly/scrape` and never bills a blocked page ([Scrapfly compatible](https://specstream.ai/migrate/scrapfly?utm_source=alternatives&utm_campaign=anti-bot-scraping-alternatives)).

### Scrape.do

Hobby is $29 a month for 250,000 credits. Residential and mobile proxies with a browser take 25 credits, some domains get them turned on by default, and 400, 404 and 410 replies count as successful. SpecStream answers its API at `/scrapedo`, at one price whatever the domain ([Scrape.do compatible](https://specstream.ai/migrate/scrape-do?utm_source=alternatives&utm_campaign=anti-bot-scraping-alternatives)).

### ScrapingBee

Hobby is $19 a month for 75,000 credits, valid one month. Premium proxies take 10 or 25 credits and the stealth proxy 75, which puts a stealth page at $19.00 per 1,000 on Hobby. Proxyway measured 84.47%. SpecStream answers its HTML API at `/scrapingbee/api/v1` ([ScrapingBee compatible](https://specstream.ai/migrate/scrapingbee?utm_source=alternatives&utm_campaign=anti-bot-scraping-alternatives)).

### ScraperAPI

Hobby is $49 a month for 100,000 credits. Premium proxies with rendering take 25 credits and ultra premium with rendering 75, $36.75 per 1,000 pages on Hobby, and a 404 is charged. Proxyway measured 68.95%. SpecStream answers its endpoint at `/scraperapi` ([ScraperAPI compatible](https://specstream.ai/migrate/scraperapi?utm_source=alternatives&utm_campaign=anti-bot-scraping-alternatives)).

## How to move protected pages to SpecStream

1. Create a key under Agents & API in the workspace. A new account gets $10 of credit, no card, which covers 12,500 pages.

2. From Scrapfly, set the address to `https://api.specstream.ai/scrapfly/scrape` and send the SpecStream key as `key`. In Python:

```
import os

import requests

reply = requests.get(
    "https://api.specstream.ai/scrapfly/scrape",  # was https://api.scrapfly.io/scrape
    params={"key": os.environ["SPECSTREAM_API_KEY"], "url": "https://en.wikipedia.org/wiki/Web_scraping", "format": "markdown"},
    timeout=60,
)
print(reply.json()["result"]["content"][:500])
```

3. From Scrape.do, set the address to `https://api.specstream.ai/scrapedo` and send the SpecStream key as `token`:

```
curl "https://api.specstream.ai/scrapedo?token=$SPECSTREAM_API_KEY&url=https://en.wikipedia.org/wiki/Web_scraping&output=markdown"
```

4. From ZenRows, set the address to `https://api.specstream.ai/zenrows/v1/` and send the SpecStream key as `apikey`. In JavaScript:

```
const url = new URL("https://api.specstream.ai/zenrows/v1/"); // was https://api.zenrows.com/v1/
url.search = new URLSearchParams({ apikey: process.env.SPECSTREAM_API_KEY, url: "https://en.wikipedia.org/wiki/Web_scraping", response_type: "markdown" });
const reply = await fetch(url);
console.log((await reply.text()).slice(0, 500));
```

5. Read `429` as a call to send again after `Retry-After`. It is not charged.

## Frequently asked questions

### What is the best anti-bot scraping API?

SpecStream, when you want one price for every page: $0.80 per 1,000, protected or not, and a page that still refuses comes back as `blocked` at no charge. Credit plans charge 25 credits or more for the same page: $2.90 to $10.56 per 1,000 on the entry plans of Scrape.do, Scrapfly and ZenRows.

### How much does it cost to scrape a protected page?

$0.0008 on SpecStream. On entry plans a protected page costs $2.90 per 1,000 on Scrape.do, $4.50 on Scrapfly, $6.33 to $19.00 on ScrapingBee, $10.56 on ZenRows and $12.25 to $36.75 on ScraperAPI, and up to $16.08 on Zyte's top browser tier.

### Is a blocked request charged?

Not on SpecStream: a page that refuses every step comes back as `blocked` and is not charged, and neither is a 404. Scrapfly bills failed scrapes once 30% or more of a day's scrapes are blocked without its Unblocker, and ZenRows and Scrape.do count 404 and 410 replies as successful.

### What happens when a site blocks SpecStream?

It tries the page 4 more ways before it gives up: as a browser would ask, in a real browser, from the site's own feed and from its newest public archive capture. A page read from the archive says so in `read_from`, with `captured_at`. A page none of them reads is `blocked`, at no charge.

### Can I choose a proxy country with SpecStream?

No. SpecStream has no proxy or country setting. On the ZenRows, Scrapfly and Scrape.do addresses, `premium_proxy`, `proxy_country`, `country`, `super` and `geoCode` are accepted and not applied, and the page costs $0.0008 either way.

### Is there a Zyte alternative for anti-bot scraping?

Yes. SpecStream reads any page at $0.80 per 1,000, against Zyte's $1.01 to $16.08 per 1,000 browser-rendered responses, by a tier Zyte gives each website. A failed page is free on both, and SpecStream credit you buy never expires.

### Does SpecStream have an MCP server?

Yes, at `https://api.specstream.ai/mcp` over Streamable HTTP, with OAuth or an API key. An agent gets `read_pages` and `search_web` on the same balance, inside the limits you set on its key.

## Sources

SpecStream wrote this page. Each figure about another company comes from that company's own page, and each success rate from Proxyway's benchmark page, read on the date shown. Prices per 1,000 pages are the entry plan's price divided by its credits, times the credits a page takes.

- [SpecStream pricing](https://specstream.ai/pricing), read Nov 12, 2026
- [SpecStream for agents](https://specstream.ai/agents.md), read Nov 12, 2026
- [SpecStream benchmarks](https://specstream.ai/benchmarks), read Nov 12, 2026
- [Zyte pricing](https://www.zyte.com/pricing/), read Nov 12, 2026
- [Zyte API pricing docs](https://docs.zyte.com/zyte-api/pricing.html), read Nov 12, 2026
- [Scrapy Cloud pricing](https://docs.zyte.com/scrapy-cloud/pricing.html), read Nov 12, 2026
- [ZenRows pricing docs](https://docs.zenrows.com/first-steps/pricing.md), read Nov 12, 2026
- [ZenRows authentication](https://docs.zenrows.com/authentication.md), read Nov 12, 2026
- [Scrapfly pricing](https://scrapfly.io/pricing), read Nov 12, 2026
- [Scrapfly billing](https://scrapfly.io/docs/scrape-api/billing), read Nov 12, 2026
- [Scrapfly getting started](https://scrapfly.io/docs/scrape-api/getting-started), read Nov 12, 2026
- [Scrape.do pricing](https://scrape.do/pricing/), read Nov 12, 2026
- [Scrape.do request costs](https://scrape.do/documentation/request-costs/), read Nov 12, 2026
- [ScrapingBee pricing](https://www.scrapingbee.com/pricing/), read Nov 12, 2026
- [ScrapingBee documentation](https://www.scrapingbee.com/documentation/), read Nov 12, 2026
- [ScraperAPI pricing](https://scraperapi.com/pricing.md), read Nov 12, 2026
- [Proxyway, best web scraping APIs](https://proxyway.com/best/best-web-scraping-apis), read Nov 12, 2026
