<!-- twin of https://specstream.ai/compare/alterlab-vs-scrapfly -->
# AlterLab vs Scrapfly in 2026: both prices, and Scrapfly's call kept

Compared on Nov 12, 2026. The page: https://specstream.ai/compare/alterlab-vs-scrapfly

AlterLab bills $0.0002 to $0.02 a page by the tier that returned it, from a balance with a $10 minimum deposit. Scrapfly starts at $30 a month for 200,000 credits: 1 credit a datacenter page, 25 on residential proxies, 5 more for a browser.

SpecStream is the live web data engine. It answers Scrapfly's own `/scrape` call at `https://api.specstream.ai/scrapfly`, reads any page for $0.80 per 1,000, scores 0.908 F1 on WCXB, and never bills a blocked page.

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

## SpecStream, AlterLab and Scrapfly on Nov 12, 2026

| | SpecStream | AlterLab | Scrapfly |
|---|---|---|---|
| How you pay | A balance, with no plan. Credit you buy never expires | A balance with a $10 minimum deposit and no subscription. The balance never expires | A monthly plan: Discovery $30 for 200,000 credits, with no pay as you go. Pro $100 for 1,000,000 |
| A plain page, per 1,000 | $0.80 | $0.20 on a direct fetch, $0.30 on the full HTTP client, $2 with managed sessions | 1 credit on datacenter proxies: $0.15 on Discovery |
| A page in a browser, per 1,000 | $0.80. A real browser is one of the steps a refused page goes through, at the same price | $4 on full browser rendering, or $0.50 when the browser reads the page straight from AlterLab's servers | 6 credits with `render_js`: $0.90 on Discovery |
| A protected page, per 1,000 | $0.80. There is no proxy tier to choose | $20 on extended browser sessions, used only when no lighter tier returns the page | 30 credits with residential proxies and a browser: $4.50 on Discovery. The Unblocker may move a call to a dearer proxy pool |
| What is not charged | A blocked page, a 404, a page with no text, and a busy call that gets `429` with `Retry-After` | Failed requests. A cache hit bills at half the tier price | Failed scrapes, until 30% or more of a day's scrapes are blocked without the Unblocker. Then failed scrapes are billed |
| Free to start | $10 of credit, no card: 12,500 pages | Up to 5,000 free requests on a new account | 1,000 credits on signup, no card, no time limit |
| The cost of a call | `price_usd` in each reply, and the balance after the call in `X-Balance-Cents` | `billing.total_credits`, where $0.0002 is 200 | Credits in the `X-Scrapfly-API-Cost` header and in `context.cost` |
| Your code on SpecStream | `POST /v1/extract`, or `read_pages` over MCP at `https://api.specstream.ai/mcp` | The `url` you post to `/api/v1/scrape` goes to `POST /v1/extract` as `urls` | Runs as written: `https://api.specstream.ai/scrapfly/scrape` in place of `https://api.scrapfly.io/scrape`, a SpecStream key as `key` |

## Why AlterLab and Scrapfly users read pages with SpecStream

### Scrapfly code runs as written

SpecStream answers Scrapfly's `GET /scrape` with Scrapfly's result JSON and error codes. The address changes, and the key. `url`, `format` and `proxified_response` keep their meaning, and with `scrapfly-sdk` the change is the `host` argument of `ScrapflyClient`. Every parameter and field is in the [Scrapfly guide](https://specstream.ai/migrate/scrapfly?utm_source=alternatives&utm_campaign=alterlab-vs-scrapfly).

### Each price from its own vendor

AlterLab's comparison page puts Scrapfly at $1.40 or more per 1,000 basic HTML pages. Scrapfly's own pricing page sells Discovery credits at $0.15 per 1,000, and a datacenter page takes 1 credit. Every number on this page was copied from the vendor's own page on Nov 12, 2026, and each one is listed under Sources.

### One price, whatever the page needs

Both price the page by what it takes. On AlterLab 1,000 URLs cost $0.20 when a direct fetch reads them all and $20 when each needs an extended browser session. On Scrapfly the same 1,000 take 1,000 credits on datacenter proxies and 30,000 with residential proxies and a browser, and the Unblocker may change the pool.

SpecStream charges $0.0008 for every page that gives text, whatever it took to read it. 1,000 URLs cost $0.80, and there is no plan to renew.

### Blocked pages are tried again, and never billed

The Extract API tries a page that refuses a plain read 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. Each result says where it was read: `read_from` is `live`, `site` or `archive`, with `captured_at` for an archive copy.

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

### Test all three on your own URLs

This script sends the URLs in `urls.txt` to Scrapfly and to SpecStream with the same Scrapfly call, then to AlterLab, and prints how many pages each returned and what each run cost.

```
import os

import requests

urls = [line.strip() for line in open("urls.txt") if line.strip()]


def scrapfly_call(base, key):
    """The same Scrapfly call, sent to the address you name."""
    pages = credits = 0
    for url in urls:
        reply = requests.get(f"{base}/scrape", params={"key": key, "url": url, "format": "markdown"}, timeout=120)
        pages += reply.ok and reply.json()["result"]["success"]
        credits += int(reply.headers.get("X-Scrapfly-API-Cost", 0))
    return pages, credits


pages, credits = scrapfly_call("https://api.scrapfly.io", os.environ["SCRAPFLY_KEY"])
print(f"Scrapfly: {pages} pages, {credits} credits, ${credits * 0.15 / 1000:.4f} at the Discovery rate")

pages, _ = scrapfly_call("https://api.specstream.ai/scrapfly", os.environ["SPECSTREAM_API_KEY"])
print(f"SpecStream: {pages} pages, at most ${pages * 0.0008:.4f}")

pages, cost = 0, 0.0
for url in urls:
    reply = requests.post(
        "https://api.alterlab.io/api/v1/scrape",
        headers={"X-API-Key": os.environ["ALTERLAB_API_KEY"]},
        json={"url": url},
        timeout=120,
    ).json()
    pages += bool(reply.get("success"))
    cost += reply.get("billing", {}).get("total_credits", 0) / 1_000_000  # $0.0002 is 200
print(f"AlterLab: {pages} pages, ${cost:.4f}")
```

Scrapfly's credits are priced at the Discovery rate of $0.15 per 1,000. On SpecStream only a page that was read is charged, at $0.0008, so the script prices the pages that came back. A page with no text is not charged, so the real cost can be lower.

### Search and rows on the same key

The same key runs the [Search API](https://specstream.ai/search-api?utm_source=alternatives&utm_campaign=alterlab-vs-scrapfly), 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=alterlab-vs-scrapfly)). When you need records, not pages, [Deep Search](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=alterlab-vs-scrapfly) returns structured rows that meet every condition you wrote, at 5¢, 15¢ or $1 a delivered row.

## Other AlterLab and Scrapfly alternatives

### Oxylabs

One subscription for proxies and scrapers, from $15 a month. A custom domain costs $1.00 per 1,000 results without JavaScript and $1.50 with it, and a 2xx or 4xx reply counts as a result. SpecStream reads the same pages at $0.80 per 1,000 ([Oxylabs alternatives](https://specstream.ai/alternatives/oxylabs?utm_source=alternatives&utm_campaign=alterlab-vs-scrapfly)).

### Zyte API

Zyte puts each site in a price tier: $0.13 to $1.27 per 1,000 plain responses and $1.01 to $16.08 per 1,000 in a browser, pay as you go. On SpecStream every page is $0.80 per 1,000, whatever the site ([Zyte alternatives](https://specstream.ai/alternatives/zyte?utm_source=alternatives&utm_campaign=alterlab-vs-scrapfly)).

### Firecrawl

Scrape and crawl at 1 credit a page, with Hobby at $19 a month for 5,000 credits. SpecStream answers Firecrawl's v2 calls at `https://api.specstream.ai/firecrawl`, with pages at $0.80 per 1,000 and search from $1 per 1,000.

### ScrapingBee

Hobby is $19 a month for 75,000 credits, valid for one month. JavaScript rendering is the default at 5 credits a call. SpecStream answers its HTML API at `https://api.specstream.ai/scrapingbee/api/v1` for $0.80 per 1,000 pages.

## How to move Scrapfly or AlterLab code 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, change the address to `https://api.specstream.ai/scrapfly/scrape` and send the SpecStream key as `key`:

```
import requests

URL = "https://api.specstream.ai/scrapfly/scrape"  # was https://api.scrapfly.io/scrape

reply = requests.get(
    URL,
    params={"key": SPECSTREAM_KEY, "url": "https://en.wikipedia.org/wiki/Web_scraping", "format": "markdown"},
    timeout=60,
)
reply.raise_for_status()
result = reply.json()["result"]
print(result["status_code"], result["content"][:500])
```

3. From AlterLab, send the URLs to the Extract API, up to 20 a call. `{"url": ...}` becomes `{"urls": [...]}`, and the page comes back in `text`, as markdown by default:

```
import os

import requests

reply = requests.post(
    "https://api.specstream.ai/v1/extract",  # was https://api.alterlab.io/api/v1/scrape
    headers={"Authorization": f"Bearer {os.environ['SPECSTREAM_API_KEY']}"},
    json={"urls": ["https://en.wikipedia.org/wiki/Web_scraping"], "format": "markdown"},
    timeout=120,
)
reply.raise_for_status()
for page in reply.json()["data"]["results"]:
    print(page["url"], page["status"], page.get("title"), (page.get("text") or "")[:300])
```

4. Read `429` as a call to send again after `Retry-After`. It is not charged. Every call is listed in your workspace with its price.

## Frequently asked questions

### Is AlterLab better than Scrapfly?

They bill differently. AlterLab takes a $10 deposit and bills $0.0002 to $0.02 a page with no subscription. Scrapfly sells monthly credits from $30 for 200,000, and the proxy and browser decide how many a page takes. SpecStream reads any page for $0.80 per 1,000 with no plan, and answers Scrapfly's own call.

### AlterLab vs Scrapfly pricing: what does each cost?

AlterLab: $0.20 per 1,000 pages on a direct fetch, $4 in a full browser, up to $20 on extended browser sessions. Scrapfly Discovery: $0.15 per 1,000 datacenter pages, $0.90 with a browser, $4.50 with residential proxies and a browser. SpecStream: $0.80 per 1,000 for every page.

### Which is cheaper for protected sites?

Scrapfly, on Discovery: $4.50 per 1,000 pages with residential proxies and a browser, against $20 on AlterLab's extended browser sessions. SpecStream charges $0.80 per 1,000, with no proxy tier to choose, and does not bill a page it could not read.

### Can I keep my Scrapfly code?

Yes. Change `https://api.scrapfly.io` to `https://api.specstream.ai/scrapfly` and send a SpecStream key as `key`. `scrapfly-sdk` works with `host` set to that address, and each page costs $0.0008.

### Do failed requests cost money?

Not on AlterLab, which bills a cache hit at half price. Scrapfly stops covering failed scrapes once 30% or more of a day's scrapes are blocked without its Unblocker. SpecStream does not charge a blocked page, a 404, a page with no text or a busy call.

### Is there a free trial?

SpecStream gives $10 of credit, no card, which reads 12,500 pages. AlterLab gives up to 5,000 free requests on a new account, and Scrapfly 1,000 credits on signup.

### 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 AlterLab or Scrapfly comes from that company's own page, read on the date shown. Scrapfly prices per 1,000 pages are the Discovery plan's price per 1,000 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
- [SpecStream Scrapfly guide](https://specstream.ai/migrate/scrapfly), read Nov 12, 2026
- [AlterLab pricing](https://alterlab.io/pricing), read Nov 12, 2026
- [AlterLab, your first request](https://alterlab.io/docs/quickstart/first-request), read Nov 12, 2026
- [AlterLab vs Scrapfly, by AlterLab](https://alterlab.io/vs/scrapfly), 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
- [Oxylabs pricing](https://www.oxylabs.io/pricing), read Nov 12, 2026
- [Oxylabs Web Scraper API pricing](https://oxylabs.io/products/web-api/scrape/targets/pricing), read Nov 12, 2026
- [Zyte pricing](https://www.zyte.com/pricing/), read Nov 12, 2026
- [Firecrawl pricing](https://www.firecrawl.dev/pricing), 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
