<!-- twin of https://specstream.ai/migrate/scrape-do -->
# Scrape.do compatible: change the address, keep the call

Compared on Nov 10, 2026. The page: https://specstream.ai/migrate/scrape-do

Scrape.do sells monthly credits: Hobby is $29 for 250,000, and a rendered page takes 5 credits. SpecStream answers the same `?token=&url=` call with the page itself, at $0.80 per 1,000 pages, and a failed page costs nothing.

The switch is one line: `https://api.specstream.ai/scrapedo` in place of `https://api.scrape.do`, and a SpecStream key as `token`. Your parser stays.

The Extract API behind each call scores 0.908 F1 on WCXB. A new account gets $10 of credit, no card, which covers 12,500 pages.

[Get an API key](https://specstream.ai/signup?src=alternatives-migrate-scrape-do&utm_source=alternatives-md&utm_campaign=migrate-scrape-do&returnTo=%2Fworkspace%2Fsearch%3Froute%3Dscrapedo) New accounts get $10 of credit, no card. It covers 12,500 pages.

## Scrape.do to SpecStream, parameter by parameter and field by field

| | SpecStream | Scrape.do |
|---|---|---|
| Address | `GET https://api.specstream.ai/scrapedo?token=KEY&url=URL` | `GET https://api.scrape.do/?token=TOKEN&url=URL` |
| The key | A SpecStream key as `token` in the address | A Scrape.do token in the address |
| Output | The page's HTML, `output=markdown` for markdown, `returnJSON=true` with `render=true` for `{"content"}` | The page as returned, raw or markdown |
| Target status | A missing page answers `404`, and `transparentResponse=true` passes the target's status | `transparentResponse` returns the target's response |
| Errors | Scrape.do's `{"error", "message"}`: `401` for a wrong key, `400` with no `url`, `502` for a host that does not resolve, not charged. A busy call gets `429` with `Retry-After` and is not charged | Over the plan's concurrency, requests are queued or rejected until a slot opens up |
| Price | $0.0008 a page, $0.80 per 1,000, with no plan. A failed page costs nothing | Hobby $29 billed monthly for 250,000 credits, Pro $99 for 1,250,000. A rendered page takes 5 credits, a residential one 10 |
| Free to start | $10 of credit, no card, which covers 12,500 pages | 1,000 credits a month, no credit card |

## The Scrape.do reference, on SpecStream

### The call, before and after

```
# Before
curl -G https://api.scrape.do/ \
  --data-urlencode "token=$SCRAPEDO_TOKEN" \
  --data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping"

# After
curl -G https://api.specstream.ai/scrapedo \
  --data-urlencode "token=$SPECSTREAM_API_KEY" \
  --data-urlencode "url=https://en.wikipedia.org/wiki/Web_scraping"
```

Scrape.do's documented calls are plain HTTP, so the change is the address in that one line, in curl, Python `requests` or `fetch`.

### What the route reads, and what it refuses

Read and applied: `url`, `token`, `output=markdown` and `output=raw`, `returnJSON=true` with `render=true`, and `transparentResponse=true`. A page the site does not have answers `404`, as Scrape.do does.

Refused, in Scrape.do's `{"error", "message"}` form: `returnJSON` without `render=true` gets `400`, a call with no `url` gets `400`, a wrong key gets `401`, and a host that does not resolve gets `502` and is not charged. An account with no credit left gets `401`, as on Scrape.do. Every parameter was measured on production on Nov 10, 2026, and the full [pass table](https://specstream.ai/specstream/dialects/scrapedo.md) lists each one and its result.

### What comes back

The body is the page: its HTML by default, or markdown with `output=markdown`. With `returnJSON=true` and `render=true` the reply is a JSON object whose `content` is the page.

The `Scrape.do-*` response headers, such as `Scrape.do-Request-Cost` and `Scrape.do-Remaining-Credits`, are not sent, and the `returnJSON` reply has no `frames`, `networkRequests`, `websocketResponses` or `screenShots`.

### One price a page, no credits to count

On Scrape.do a page takes 1 credit, 5 with `render=true`, 10 with `super=true` and 25 with both. On SpecStream every page costs $0.0008, a failed page costs nothing, there is no plan to renew, and credit you buy never expires. A busy call gets `429` with `Retry-After` and charges nothing.

### Measured on the official benchmarks

The Extract API that reads each page scores 0.908 F1 on WCXB. Each call is one Extract API read of the page.

On SimpleQA Verified the SpecStream Search API scores 97.9 F-score on all 1,000 official questions, 978 of them correct. On WideSearch it scores 64.0 item F1 and 43.4 row F1 on all 200 official tasks. The Extract API scores 0.908 F1 on WCXB. Every score and its method is on the [benchmarks](https://specstream.ai/benchmarks?utm_source=alternatives&utm_campaign=migrate-scrape-do) page.

### You decide what is kept, on each key

Create the key with `zero_retention` and the pages it reads are not kept: the Extract API keeps the pages it returned for 7 days in the request log, and keeps none for a zero-retention key. `spend_cap_cents` is the most the key can spend.

```
curl -X POST https://api.specstream.ai/v1/account/keys \
  -H "Authorization: Bearer $SPECSTREAM_API_KEY" -H "Content-Type: application/json" \
  -d '{"name": "production", "scopes": ["account:read", "finds:spend"], "spend_cap_cents": 500000, "zero_retention": true}'
```

### Search, pages and rows on one key

The same key calls `GET /v1/web-search`, which returns up to 100 results for one search, at $5 per 1,000 searches of up to 10 results. [Deep Search](https://specstream.ai/deep-search?utm_source=alternatives&utm_campaign=migrate-scrape-do) returns every match for a request in plain words as structured rows, at 5¢, 15¢ or $1 a row, with a source URL on every value. The most a run can cost is approved before it starts.

## What else Scrape.do users price

### ScrapingAnt

A scraping API sold by monthly credits: Enthusiast is $19 for 100,000, and a page with its default browser takes 10. SpecStream answers ScrapingAnt's own `/v2/general` call at `/scrapingant/v2`, at $0.0008 a page.

### ScrapingBee

A scraping API sold by monthly credits: Hobby is $19 for 75,000, and a request with JavaScript rendering costs 5 credits. SpecStream charges $0.0008 a page, and its credit never expires.

### ScraperAPI

A scraping API on monthly plans: Hobby is $49 a month for 100,000 credits, and a standard page costs 1 credit. SpecStream charges $0.80 per 1,000 pages from a balance, and a failed page costs nothing.

## How to migrate, step by step

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. Set the address to `https://api.specstream.ai/scrapedo` where your code has `https://api.scrape.do`, and send the SpecStream key as `token`. In Python:

```
import requests

URL = "https://api.specstream.ai/scrapedo"  # was https://api.scrape.do/

reply = requests.get(URL, {"token": SPECSTREAM_KEY, "url": "https://en.wikipedia.org/wiki/Web_scraping", "output": "markdown"}, timeout=60)
reply.raise_for_status()
print(reply.text[:500])
```

3. In JavaScript:

```
const url = new URL("https://api.specstream.ai/scrapedo");
url.search = new URLSearchParams({ token: process.env.SPECSTREAM_KEY, url: "https://en.wikipedia.org/wiki/Web_scraping" });
const html = await (await fetch(url)).text();
console.log(html.length);
```

4. Read `429` as a call to send again after `Retry-After`. It is not charged, and neither is a page that fails.

## Frequently asked questions

### Is there a Scrape.do compatible API?

Yes. SpecStream answers Scrape.do's `GET /?token=&url=` at `https://api.specstream.ai/scrapedo` with the page itself, as measured on production on Nov 10, 2026. A page costs $0.0008.

### How do I migrate from Scrape.do?

Change one address: `https://api.scrape.do` becomes `https://api.specstream.ai/scrapedo`, and a SpecStream key goes in `token`. `url`, `output`, `returnJSON` and `transparentResponse` keep their meaning.

### How much does Scrape.do cost?

Hobby is $29 billed monthly for 250,000 credits and Pro $99 for 1,250,000, and a rendered page takes 5 credits. The free plan has 1,000 credits. SpecStream costs $0.80 per 1,000 pages with no plan.

### Is there a Scrape.do SDK whose address I can change?

Scrape.do's documented calls are plain HTTP, so the change is the address in that one line, as tested on production on Nov 10, 2026. The same holds for `requests`, `fetch` and curl.

### Is a failed page charged?

No. A page that cannot be read costs nothing, and a host that does not resolve answers `502`, as on Scrape.do. A read page costs $0.0008.

### What does SpecStream not return from Scrape.do's API?

The `Scrape.do-*` response headers, screenshots, frames and network logs. The page comes back as HTML, markdown, or `content` in the `returnJSON` form.

## Sources

SpecStream wrote this page. Each Scrape.do figure comes from Scrape.do's own pages, and each other provider's figure from that company's own page. The route's behavior comes from its code and the pass table measured on production.

- [Scrape.do pricing](https://scrape.do/pricing/), read Nov 10, 2026
- [Scrape.do request costs](https://scrape.do/documentation/request-costs/), read Nov 10, 2026
- [Scrape.do documentation](https://scrape.do/documentation/), read Nov 10, 2026
- [SpecStream Scrape.do pass table](https://specstream.ai/specstream/dialects/scrapedo.md), read Nov 10, 2026
- [ScrapingAnt pricing](https://scrapingant.com/price-scraping-api), read Nov 10, 2026
- [ScrapingBee pricing](https://www.scrapingbee.com/pricing/), read Nov 10, 2026
- [ScraperAPI pricing](https://scraperapi.com/pricing.md), read Nov 10, 2026
- [SpecStream benchmarks](https://specstream.ai/benchmarks), read Nov 10, 2026
- [SpecStream pricing](https://specstream.ai/pricing), read Nov 10, 2026
- [SpecStream for agents](https://specstream.ai/agents.md), read Nov 10, 2026
