7-day Trial

Scrape.do Review 2026: 7 Benchmark Tests, Pricing and Real Costs

Picture of Anthony Heath

Try Gologin for free

A scraping API is easy to judge on a static page and hard to judge on a site behind Cloudflare or DataDome, where the credits per page and the success rate both move. This Scrape.do review runs the Scrape.do API, a web scraping API, and Gologin on the same seven targets, with the same runs and the same success check.

Scrape.do sells one endpoint with credit costs set by proxy type, rendering and domain. Gologin enters as a stack: Gologin Web Unlocker for page retrieval plus Gologin Cloud Browser for jobs that need a live session.

Every number below comes from a logged run, including Gologin’s losses.

Scrape.do vs Gologin: Key Takeaways

  • Retrieval success: a tie. Scrape.do returned the full page in 45 of 50 runs across tests 1 to 5, Web Unlocker in 45 of 50, but on different targets.
  • DataDome target: Scrape.do got 5/10 on the Amway category page at its best setting, residential proxies plus rendering plus a 3-second wait, at 25 credits. Web Unlocker got 9/10 at a median of 15.57 s with the default request.
  • Walmart: Scrape.do won clearly, 10/10 at 4.71 s for 1 credit, against 7/10 at 15.17 s for Web Unlocker.
  • Speed: Scrape.do was faster on the static page, Indeed and Walmart; Web Unlocker on the JavaScript page (0.95 s against 3.50 s) and on Amway.
  • Infinite scroll: Scrape.do loaded 0 extra quotes in 15 runs until we set blockResources=false; then 10/10 at 16.54 s. Gologin Cloud Browser did it 10/10 at 15.32 s with no tuning.
  • Cost: Scrape.do is cheaper on easy pages, $0.12 per 1,000 on Hobby. Web Unlocker’s flat $0.98 is cheaper on Indeed ($1.16 on Scrape.do) and on Amway ($2.90).
Scrape.do Gologin Web Unlocker (+ Cloud Browser for #6, #7)
Success, tests 1 to 5 45/50 45/50
Median time, hardest target (#4 DataDome) 22.86 s 15.57 s
Cost per 1K, hardest target (entry plan) $2.90 $0.98
JS rendering render=true, 5 credits included
Sessions and interaction sessionId (5 min), playWithBrowser actions Cloud Browser, hourly
Charged responses 2xx, 400, 404, 410 successful pages only
Free start 1,000 credits every month, no card 1,000 requests, 7 days, no card

What Is Scrape.do?

Scrape.do is a web scraping API: you send a URL with your token and get the page back as raw HTML or Markdown. Parameters switch on residential and mobile proxies, a headless browser, geo-targeting and browser actions, and each one changes the credit cost.

It is built for developers and data teams that want pages from hard sites without running their own proxy pools or browsers, paying a monthly plan in credits.

Product What it does When you use it
API mode One request, one page, with all parameters Real-time scraping
Proxy mode The same service used as a proxy server Existing scrapers and tools
Async API Jobs with webhooks, a separate concurrency pool Large scheduled jobs
Scraper APIs Parsed data for Amazon, Google, Walmart, Home Depot, YouTube and others Ready fields instead of HTML
Integrations n8n and Zapier nodes No-code workflows

Scrape.do home page, the web scraping API reviewed here

How We Tested Scrape.do and Gologin

Tests ran on 4 November 2026 from one machine. Each tool got 5 runs per target, extended to 10 when a run failed or the slowest run took more than twice the median, at least 10 seconds apart, with a fresh cache-busting parameter (cb=timestamp) on every URL.

# Scenario Target Success marker
1 Static HTML books.toscrape.com product page h1 and .price_color
2 JavaScript-rendered quotes.toscrape.com/js/ at least 10 .quote elements
3 Site behind Cloudflare indeed.com job search, New York h1 and a job card, no challenge
4 Site running DataDome amway.com Skin Care category at least 10 prices, no DataDome markup
5 Marketplace product walmart.com item 5689919121 product title and price
6 Infinite scroll quotes.toscrape.com/scroll at least 50 quotes
7 Escalation walmart.com item 5689919121 product title and price
  • Direct requests first: a plain request got a DataDome device check from Amway and a “Robot or human?” page from Walmart. Indeed returned a Cloudflare challenge to some plain requests that day and the full page to others.
  • Configuration rule: Scrape.do started on the cheapest setup and stepped up through render, super, super plus render and a customWait of 3 seconds only when the marker failed. Every step is in our log.
  • Success and cost: a run counts only when one shared parser finds the marker in the body, never on HTTP 200 alone. Cost per 1,000 = price per credit x credits per request x 1,000; both vendors say failed requests are free, so there is no division by the success rate.
python -m venv .venv && source .venv/bin/activate && pip install requests beautifulsoup4 playwright python-dotenv

Scrape.do ran on the Hobby plan ($29 a month, 250,000 credits, 10 concurrent requests). All our tests used 836 credits.

Scrape.do Features and Full API Parameters

  • One endpoint, four base costs: a datacenter request is 1 credit, render 5, super 10, super plus render 25 (Scrape.do docs).
  • Domain costs: some sites have their own price, from 10 credits for Google to 200 for one UK grocer; Indeed cost us 10 credits per request though it is not in the published list.
  • Cost signals: every response carries Scrape.do-Request-Cost and Scrape.do-Remaining-Credits headers, and the /info endpoint returns the balance.
  • Output formats: raw HTML or Markdown, screenshots, and a JSON mode with the page’s network requests.
  • Geo-targeting: geoCode by country, regionalGeoCode by continent and postal code targeting, on every plan.
  • Sticky sessions: sessionId keeps one IP until 5 minutes pass without a request.
  • Browser actions: playWithBrowser runs click, fill, scroll, wait and JavaScript steps with render=true.
  • Billing rule: “You are only charged for successful requests (status codes 2xx, 400, 404, 410). Failed requests are free.”
Parameter Type Default What it does Cost effect
token string none Account token none
url string none Target URL, encoded domain cost where listed
super bool false Residential and mobile IPs, US by default 10, or 25 with render
geoCode string none Country of the IP none
regionalGeoCode string none Continent of the IP none
sessionId int none Same IP until 5 minutes idle none
customHeaders bool false Sends only your headers none
extraHeaders bool false Adds or changes headers none
forwardHeaders bool false Forwards your headers none
setCookies string none Cookies for the target none
disableRedirection bool false Stops redirects none
timeout int, ms 60000 Request limit, 5,000 to 120,000 none
retryTimeout int, ms 15000 Retry window none
disableRetry bool false Turns retries off none
device string desktop desktop, mobile or tablet none
render bool false Headless browser 5, or 25 with super
waitUntil string domcontentloaded When the page counts as loaded none
customWait int, ms 0 Extra wait after load none
waitSelector string none Waits for an element none
width, height int, px 1920, 1080 Viewport none
blockResources bool true Skips CSS, images and fonts none
screenShot, fullScreenShot, particularScreenShot bool, string false Screenshots rendering cost
playWithBrowser string none Browser actions rendering cost
output string raw raw or markdown none
transparentResponse bool false Target’s response without processing none
returnJSON bool false Network requests and content as JSON none
showFrames, showWebsocketRequests bool false Iframes and websocket requests in JSON none
pureCookies bool false Original Set-Cookie headers none
  • customWait=3000: on top of super and render, gave the best test #4 result, 5/10.
  • blockResources=false: made infinite scroll work on test #6; with the default true, the page loaded no further quotes.

Scrape.do Review: Hands-On Testing Results

Test #1: Static HTML page

We sent the books.toscrape.com product page with the default request.

from common import credits, scrapedo
from markers import static_page

TARGET = "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"

def run(**params):
    response, elapsed = scrapedo(TARGET, **params)
    found = static_page(response.text)
    print(f"Config        : {params or 'default'}")
    print(f"HTTP status   : {response.status_code}")
    print(f"Body          : {len(response.content):,} bytes")
    print(f"Marker found  : {found}")
    print(f"Elapsed       : {elapsed:.2f}s")
    print(f"Credits       : {credits(response):g}")
    return response, elapsed, found

run()

Every run returned the title and price.

Scrape.do review test #1: terminal output for the static books.toscrape.com page, 1 credit

10/10 successful, median 1.19 s, 1 credit each. The slowest run took 4.14 s, more than twice the median, so the test went to 10 runs.

Book product page with title and price returned by Scrape.do

Test #2: JavaScript-rendered page

We sent quotes.toscrape.com/js/ with the default request, then with render=true.

from common import credits, scrapedo
from markers import js_quotes

TARGET = "https://quotes.toscrape.com/js/"

def run(**params):
    response, elapsed = scrapedo(TARGET, **params)
    found = js_quotes(response.text)
    print(f"Config        : {params or 'default'}")
    print(f"HTTP status   : {response.status_code}")
    print(f"Marker found  : {found}")
    print(f"Elapsed       : {elapsed:.2f}s")
    print(f"Credits       : {credits(response):g}")
    return response, elapsed, found

run(render="true")

With rendering on, the quotes were in the body every time.

Scrape.do terminal output for quotes.toscrape.com/js/ with render=true, 5 credits

10/10 successful, median 3.50 s, 5 credits each, slowest 9.82 s. The default request got 0/5: Scrape.do returned HTTP 200 with the unrendered page and charged 1 credit for each.

JavaScript-rendered quotes page returned by Scrape.do with render=true

Test #3: Site behind Cloudflare

We sent an indeed.com job search with the default request.

from common import credits, scrapedo
from markers import job_search

TARGET = "https://www.indeed.com/jobs?q=python+developer&l=New+York%2C+NY"

def run(**params):
    response, elapsed = scrapedo(TARGET, **params)
    found = job_search(response.text)
    print(f"Config        : {params or 'default'}")
    print(f"HTTP status   : {response.status_code}")
    print(f"Marker found  : {found}")
    print(f"Elapsed       : {elapsed:.2f}s")
    print(f"Credits       : {credits(response):g}")
    return response, elapsed, found

run()

The default request returned the job list every time.

Scrape.do terminal output for an Indeed job search behind Cloudflare, 10 credits

10/10 successful, median 3.98 s, 10 credits each by the Scrape.do-Request-Cost header, although indeed.com is not in the published domain cost list.

Indeed job list for python developer in New York returned by Scrape.do

Test #4: Site running DataDome

We sent the Amway Skin Care category, which answers a plain request with a DataDome device check.

from common import credits, scrapedo
from markers import category_page

TARGET = "https://www.amway.com/en_US/Shop/Beauty/Skin-Care/c/105"

def run(**params):
    response, elapsed = scrapedo(TARGET, **params)
    found = category_page(response.text)
    print(f"Config        : {params or 'default'}")
    print(f"HTTP status   : {response.status_code}")
    print(f"Marker found  : {found}")
    print(f"Elapsed       : {elapsed:.2f}s")
    print(f"Credits       : {credits(response):g}")
    return response, elapsed, found

run(super="true", render="true", customWait="3000")

Half of the runs returned the product grid.

Scrape.do terminal output for the Amway category page running DataDome with super, render and customWait

5/10 successful, median 22.86 s, 25 credits each, after the default request (0/5), render (0/5), super (0/5) and super plus render (0/5). The other 5 runs at this setting ended in HTTP 502 and were free.

Amway Skin Care product grid with prices returned by Scrape.do

On the cheaper steps, 13 runs came back as HTTP 200 with the category frame, the message “A system error has occurred” and no products, and those were billed: 1, 10 or 25 credits each, 130 in total. Test #4 used 255 credits for 5 product grids.

Amway page without products that Scrape.do returned and billed as a successful request

Test #5: Marketplace product page

We sent the Walmart product page for item 5689919121 with the default request.

from common import credits, scrapedo
from markers import product_page

TARGET = "https://www.walmart.com/ip/5689919121"

def run(**params):
    response, elapsed = scrapedo(TARGET, **params)
    found = product_page(response.text)
    print(f"Config        : {params or 'default'}")
    print(f"HTTP status   : {response.status_code}")
    print(f"Marker found  : {found}")
    print(f"Elapsed       : {elapsed:.2f}s")
    print(f"Credits       : {credits(response):g}")
    return response, elapsed, found

run()

Every run returned the product title and price.

Scrape.do terminal output for a Walmart product page, 1 credit

10/10 successful, median 4.71 s, 1 credit each. The test went to 10 runs because Web Unlocker missed on this target.

Walmart product title and price parsed from Scrape.do HTML

Test #6: Infinite scroll

Scrape.do has no browser product, so we used playWithBrowser: scroll and wait steps inside one rendered request.

from bs4 import BeautifulSoup
from common import credits, scrapedo

TARGET = "https://quotes.toscrape.com/scroll"

def scroll(times, wait):
    return [step for _ in range(times) for step in ({"Action": "ScrollY", "Value": 5000}, {"Action": "Wait", "Timeout": wait * 1000})]

def run(times=6, wait=2, **params):
    response, elapsed = scrapedo(TARGET, actions=scroll(times, wait), render="true", **params)
    quotes = len(BeautifulSoup(response.text, "html.parser").select("div.quote"))
    print(f"Quotes loaded : {quotes}")
    print(f"Marker found  : {quotes >= 50}")
    print(f"Elapsed       : {elapsed:.2f}s")
    print(f"Credits       : {credits(response):g}")
    return response, elapsed, quotes >= 50

run(blockResources="false")

With resources allowed, every run loaded 70 quotes.

Scrape.do terminal output for the infinite scroll test with blockResources=false, 70 quotes

10/10 successful, median 16.54 s, 5 credits each. With the default blockResources=true, 15 runs returned only the first 10 quotes and were still billed, 75 credits in total.

Scrape.do scroll test with default resource settings loading only 10 quotes

Test Target Configuration Success Median s Slowest s Units per success
#1 Static books.toscrape.com default 10/10 1.19 4.14 1 credit
#2 JavaScript quotes.toscrape.com/js/ render=true 10/10 3.50 9.82 5 credits
#3 Cloudflare indeed.com default 10/10 3.98 10.65 10 credits
#4 DataDome amway.com super, render, customWait=3000 5/10 22.86 41.99 25 credits
#5 Marketplace walmart.com default 10/10 4.71 6.20 1 credit
#6 Scroll quotes.toscrape.com/scroll render, playWithBrowser, blockResources=false 10/10 16.54 23.12 5 credits
#7 Escalation walmart.com super, render, customWait=3000 10/10 3.49 4.65 25 credits

Gologin Web Unlocker and Cloud Browser: Same Targets, Same Method

What is the Gologin stack

Gologin Web Unlocker is a page retrieval API: one GET request returns the rendered HTML at one flat price per page, JavaScript included. It is stateless. Gologin Cloud Browser is the second layer: a cloud browser with a residential IP, billed by the hour and driven from Playwright or Puppeteer with a profile id, the same job a scraping browser does.

Feature Web Unlocker Cloud Browser
Unit page browser hour
Entry price $49 for 50k pages $4.50 for 50 hours
JavaScript rendering included full browser
Failed requests free billed by time
Interaction none clicks, scroll, login
Connection HTTP GET Playwright, Puppeteer
IPs managed residential, per profile
Free start 1,000 requests 3 runs of 15 min

Gologin Web Unlocker product page, the Scrape.do alternative used in this benchmark

Test #1: Static HTML page

We sent the same books.toscrape.com URL with the default request.

from common import unlocker
from markers import static_page

TARGET = "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"

def run():
    response, elapsed = unlocker(TARGET)
    found = static_page(response.text)
    print(f"HTTP status   : {response.status_code}")
    print(f"Body          : {len(response.content):,} bytes")
    print(f"Marker found  : {found}")
    print(f"Elapsed       : {elapsed:.2f}s")
    return response, elapsed, found

run()

Every run returned the title and price.

Gologin Web Unlocker terminal output for the static books.toscrape.com page

10/10 successful, median 1.80 s, 1 request each, about 0.6 s slower than Scrape.do.

Book product page with title and price returned by Gologin Web Unlocker

Test #2: JavaScript-rendered page

We sent quotes.toscrape.com/js/ with the same default request, no rendering option.

from common import unlocker
from markers import js_quotes

TARGET = "https://quotes.toscrape.com/js/"

def run():
    response, elapsed = unlocker(TARGET)
    found = js_quotes(response.text)
    print(f"HTTP status   : {response.status_code}")
    print(f"Marker found  : {found}")
    print(f"Elapsed       : {elapsed:.2f}s")
    return response, elapsed, found

run()

The rendered quotes were in the body every time.

Gologin Web Unlocker terminal output for the JavaScript-rendered quotes page

10/10 successful, median 0.95 s, 1 request each, with the slowest run at 6.69 s.

Rendered quotes page returned by Gologin Web Unlocker with the default request

Test #3: Site behind Cloudflare

We sent the indeed.com search URL with the default request.

from common import unlocker
from markers import job_search

TARGET = "https://www.indeed.com/jobs?q=python+developer&l=New+York%2C+NY"

def run():
    response, elapsed = unlocker(TARGET)
    found = job_search(response.text)
    print(f"HTTP status   : {response.status_code}")
    print(f"Marker found  : {found}")
    print(f"Elapsed       : {elapsed:.2f}s")
    return response, elapsed, found

run()

Nine runs returned the job list.

Gologin Web Unlocker terminal output for the Indeed job search behind Cloudflare

9/10 successful, median 6.88 s, 1 request each. One run returned HTTP 200 with a 200-byte body and no jobs. For job data without writing a parser, Gologin also has a ready Indeed scraper.

Indeed job list returned by Gologin Web Unlocker

Test #4: Site running DataDome

We sent the Amway Skin Care category URL with the default request.

from common import unlocker
from markers import category_page

TARGET = "https://www.amway.com/en_US/Shop/Beauty/Skin-Care/c/105"

def run():
    response, elapsed = unlocker(TARGET)
    found = category_page(response.text)
    print(f"HTTP status   : {response.status_code}")
    print(f"Marker found  : {found}")
    print(f"Elapsed       : {elapsed:.2f}s")
    return response, elapsed, found

run()

Nine runs returned the product grid with prices.

Gologin Web Unlocker terminal output for the Amway category page running DataDome

9/10 successful, median 15.57 s, 1 request each. The slowest run took 87.19 s, and one run returned HTTP 200 with the page skeleton and no products.

Amway Skin Care product grid with prices returned by Gologin Web Unlocker

Test #5: Marketplace product page

We sent the Walmart product URL with the default request.

from common import unlocker
from markers import product_page

TARGET = "https://www.walmart.com/ip/5689919121"

def run():
    response, elapsed = unlocker(TARGET)
    found = product_page(response.text)
    print(f"HTTP status   : {response.status_code}")
    print(f"Marker found  : {found}")
    print(f"Elapsed       : {elapsed:.2f}s")
    return response, elapsed, found

run()

Seven runs returned the title and price.

Gologin Web Unlocker terminal output for the Walmart product page

7/10 successful, median 15.17 s, 1 request each. Three runs ended in HTTP 503, not charged, which makes Walmart Web Unlocker’s weakest target and the one for test #7. For ready product data, Gologin also has a Walmart scraper.

Walmart product title and price parsed from Gologin Web Unlocker HTML

Test #6: Infinite scroll with Gologin Cloud Browser

We connected to Cloud Browser from Playwright with a profile id that has a Gologin US residential proxy and scrolled until 50 quotes were on the page.

from playwright.sync_api import sync_playwright
from common import key

TARGET = "https://quotes.toscrape.com/scroll"
ENDPOINT = "wss://cloudbrowser.gologin.com/connect?token={}&profile={}"

def run():
    with sync_playwright() as p:
        browser = p.chromium.connect_over_cdp(ENDPOINT.format(key("GOLOGIN_CLOUD_BROWSER_TOKEN"), key("GOLOGIN_PROFILE_ID")))
        page = browser.contexts[0].pages[0]
        page.goto(TARGET)
        quotes = page.locator("div.quote")
        for _ in range(20):
            if quotes.count() >= 50:
                break
            page.mouse.wheel(0, 5000)
            page.wait_for_timeout(1000)
        count = quotes.count()
        browser.close()
    print(f"Quotes loaded : {count}")
    print(f"Marker found  : {count >= 50}")
    return count

run()

The loop stopped at 50 quotes.

Gologin Cloud Browser terminal output for the infinite scroll test through Playwright

10/10 successful, median 15.32 s including the connection, about 0.004 browser hours each.

Quotes page scrolled to 50 quotes in Gologin Cloud Browser

Test #7: Escalation to Cloud Browser on Walmart

We opened the Walmart URL in Cloud Browser and waited for the price, with a new profile and US residential proxy per run.

from playwright.sync_api import sync_playwright
from common import fresh, key, new_profile, stop_session
from markers import product_page

TARGET = "https://www.walmart.com/ip/5689919121"
ENDPOINT = "wss://cloudbrowser.gologin.com/connect?token={}&profile={}"

def run():
    profile = new_profile("walmart-run")
    try:
        with sync_playwright() as p:
            browser = p.chromium.connect_over_cdp(ENDPOINT.format(key("GOLOGIN_CLOUD_BROWSER_TOKEN"), profile))
            page = browser.contexts[0].pages[0]
            page.goto(fresh(TARGET), wait_until="domcontentloaded")
            page.wait_for_selector('[itemprop="price"]', timeout=30000)
            html = page.content()
            browser.close()
    finally:
        stop_session(profile)
    print(f"Marker found  : {product_page(html)}")
    return html

run()

Nine runs returned the full product page.

Gologin Cloud Browser terminal output for the Walmart page with a new profile per run

9/10 successful, median 17.86 s, about 0.005 browser hours each. One run could not connect: the session endpoint answered HTTP 503.

Walmart product title and price from Gologin Cloud Browser

Test Target Configuration Success Median s Slowest s Units per success
#1 Static books.toscrape.com Web Unlocker, default 10/10 1.80 3.68 1 request
#2 JavaScript quotes.toscrape.com/js/ Web Unlocker, default 10/10 0.95 6.69 1 request
#3 Cloudflare indeed.com Web Unlocker, default 9/10 6.88 14.44 1 request
#4 DataDome amway.com Web Unlocker, default 9/10 15.57 87.19 1 request
#5 Marketplace walmart.com Web Unlocker, default 7/10 15.17 30.42 1 request
#6 Scroll quotes.toscrape.com/scroll Cloud Browser, US residential 10/10 15.32 22.98 0.004 h
#7 Escalation walmart.com Cloud Browser, new profile per run 9/10 17.86 44.39 0.005 h

Scrape.do Pricing and Credit System Explained

Scrape.do pricing is credit-based. A datacenter request is 1 credit, render 5, super 10 and super plus render 25, and listed domains carry their own cost. We paid 1 credit for books.toscrape.com and Walmart, 5 for rendered pages, 10 for Indeed and 25 for Amway at the setting that worked.

Credits go only on “successful requests (status codes 2xx, 400, 404, 410)”, and our HTTP 502 runs were free. A 200 without the content still counts: we paid for 5 unrendered JavaScript pages, 13 Amway pages with no products and 15 scrolls that stopped at 10 quotes. The free plan gives 1,000 credits every month with no card; our tests used 836 on Hobby.

Scrape.do dashboard credit balance before the benchmark tests

Scrape.do dashboard after the benchmark tests: 836 of 250,000 credits used, with credits per domain

Plan Monthly price Units included Price per unit Concurrency Overage
Free $0 1,000 credits a month free 5 none
Hobby $29 250K credits $0.116 per 1K 10 upgrade
Pro $99 1.25M credits $0.079 per 1K 50 upgrade
Business $249 3.5M credits $0.071 per 1K 100 upgrade
Advanced $699 10M credits $0.070 per 1K 200 upgrade
Scenario (test) Units per request Cheapest plan $ (Hobby) Mid plan $ (Pro, $99)
Static (#1) 1 $0.12 $0.08
JavaScript (#2) 5 $0.58 $0.40
Cloudflare (#3) 10 $1.16 $0.79
DataDome (#4) 25 $2.90 $1.98
Marketplace (#5) 1 $0.12 $0.08
Scroll (#6) 5 $0.58 $0.40
Marketplace, escalation (#7) 25 $2.90 $1.98

Counting the billed empty pages on the cheaper steps, test #4 cost 51 credits per product grid, $5.92 per 1,000 on Hobby.

Gologin prices differently. Web Unlocker charges one flat price per returned page: $0.98 per 1,000 on Growth ($49 for 50k) and $0.75 on Professional ($149 for 200k), failed pages free. Cloud Browser bills browser time: $4.50 for 50 hours on Professional, so our 17.86 s Walmart run comes to about $0.45 per 1,000 pages, plus proxy traffic above the plan allowance at $1/GB.

Scrape.do Pros

  • Fast with the default request: 1.19 s on the static page, 3.98 s on Indeed and 4.71 s on Walmart.
  • Won Walmart: 10/10 at 1 credit, against 7/10 for Web Unlocker.
  • Cheap easy pages: $0.12 per 1,000 on Hobby for static and Walmart pages.
  • Every feature on every plan: residential proxies, rendering, geo-targeting and browser actions, even on the free plan.

Scrape.do Cons

  • Empty pages are charged: 5 unrendered JavaScript pages, 13 Amway pages without products and 15 short scrolls were billed.
  • Costs you must discover: Indeed cost 10 credits a request without appearing in the domain cost list.
  • Weak on our DataDome target: 5/10 at best, at a median of 22.86 s and 25 credits a request.
  • Defaults that need tuning: infinite scroll failed 15 times until we turned off blockResources.

Scrape.do Limitations

  • No browser product: no session to drive from Playwright; actions run inside one rendered request.
  • Short sessions: sessionId closes after 5 minutes without a request.
  • Timeout ceiling: a request can run for 120 seconds at most.
  • No pay as you go: when credits run out, requests stop until you upgrade or buy more.

Scrape.do vs Gologin: Head-to-Head Results

Both tools return pages from one request but price them differently. Scrape.do adds credits for proxy type, rendering and listed domains. Gologin keeps retrieval in Web Unlocker at one price per page and moves live sessions to Cloud Browser.

Aspect Scrape.do Gologin stack
What you send URL plus parameters URL (Web Unlocker) or a Playwright session (Cloud Browser)
Rendering render=true, 5 credits included in Web Unlocker
Price unit credit, by proxy, rendering and domain page (Web Unlocker), hour (Cloud Browser)
Interaction playWithBrowser inside one call full browser session
Structured output scraper APIs for listed sites HTML, Markdown, text, JSON (product page)

Scrape.do alternative: when Gologin is a better choice

Scenario Better fit From our tests
Sites running DataDome Web Unlocker 9/10 against 5/10 on test #4
JavaScript-heavy pages Web Unlocker 0.95 s against 3.50 s
Sites with a per-domain surcharge Web Unlocker $0.98 per 1,000 against $1.16 on Indeed and $2.90 on Amway
Pages that need scrolling or clicks Cloud Browser 10/10 at 15.32 s with default settings
Logged-in or multi-step flows Cloud Browser not tested; documented session product
Test Scrape.do success Scrape.do median s Gologin success Gologin median s
#1 Static 10/10 1.19 10/10 1.80
#2 JavaScript 10/10 3.50 10/10 0.95
#3 Cloudflare 10/10 3.98 9/10 6.88
#4 DataDome 5/10 22.86 9/10 15.57
#5 Marketplace 10/10 4.71 7/10 15.17
#6 Scroll 10/10 16.54 10/10 15.32
#7 Escalation 10/10 3.49 9/10 17.86
Scenario Scrape.do, cheapest plan Scrape.do, mid plan Gologin, entry plan Gologin, comparable plan
Static (#1) $0.12 $0.08 $0.98 $0.75
JavaScript (#2) $0.58 $0.40 $0.98 $0.75
Cloudflare (#3) $1.16 $0.79 $0.98 $0.75
DataDome (#4) $2.90 $1.98 $0.98 $0.75
Marketplace (#5) $0.12 $0.08 $0.98 $0.75
Scroll (#6) $0.58 $0.40 $0.38 $0.34
Marketplace in a browser (#7) $2.90 $1.98 $0.45 $0.40
Feature Scrape.do Gologin stack
Pricing model credits by proxy, rendering and domain per page, flat; browser per hour
JS rendering render=true, 5 credits included
Geo-targeting level country, continent, postal code country, state, city (product page)
Proxy tiers datacenter, residential and mobile (super) managed; residential on Cloud Browser
Sticky session, minutes 5 (sessionId) Cloud Browser session
Output formats raw HTML, Markdown, JSON with network data HTML, Markdown, text, JSON (product page)
Structured extraction scraper APIs for listed sites not documented
Screenshots yes, with render listed in the docs overview
Browser-level control no Gologin Cloud Browser
Batch and webhooks Async API with webhooks up to 1,000 URLs, webhooks (product page)
Failure signalling HTTP status, cost headers HTTP status
Charged responses 2xx, 400, 404, 410 successful pages only
Free start 1,000 credits a month 1,000 requests, 7 days

Scrape.do won tests 1, 3, 5 and 7 on speed and had the better success rate on Indeed and Walmart. Gologin won tests 2 and 4 and was even on test #6 with no tuning. The widest gaps run both ways: 10/10 against 7/10 for Scrape.do on Walmart, 9/10 against 5/10 for Web Unlocker on Amway.

On cost, Scrape.do Hobby is cheaper than Web Unlocker on static, JavaScript and Walmart pages, from $0.12 per 1,000. The order flips where a domain surcharge or residential rendering applies: $1.16 on Indeed and $2.90 on Amway, against Web Unlocker’s flat $0.98.

When the Unlocker Fails: Escalation to Cloud Browser

Walmart was Web Unlocker’s weakest target at 7/10, so test #7 ran it through Gologin Cloud Browser. With a new profile and US residential proxy per run, Cloud Browser returned the page 9/10 at a median of 17.86 s: about 5 browser hours per 1,000 pages, $0.45 on Professional before proxy traffic. Scrape.do has no browser product, so its side ran its most expensive working configuration, super plus render plus customWait: 10/10 at 3.49 s, 25 credits, $2.90 per 1,000 on Hobby. Its default request had already returned the page 10/10 for 1 credit on test #5.

On this target Scrape.do was the faster and more reliable option. The rule still holds: Web Unlocker for pages you can fetch in one request, Cloud Browser when the page needs scrolling, clicks or a login, as on test #6, where it worked 10/10 without any parameter tuning.

Frequently Asked Questions

Is Scrape.do worth it in 2026?

For static pages, Indeed and Walmart, yes: it returned all three 10/10, faster than Web Unlocker, at $0.12 to $1.16 per 1,000 on Hobby. On our DataDome target it got 5/10 at 25 credits a request, and it bills empty 200 pages. Test your own targets on the 1,000 free monthly credits first.

How much does Scrape.do cost per 1,000 pages?

It depends on proxy type, rendering and domain. On Hobby ($29 for 250K credits) a static or Walmart page costs $0.12 per 1,000, a rendered page $0.58, an Indeed page $1.16 and our DataDome page $2.90 with super and render. Gologin Web Unlocker is $0.98 per 1,000 for any page.

Does Scrape.do charge for failed requests?

Not for errors: our HTTP 502 runs were free. It charges 2xx, 400, 404 and 410 responses whatever they contain. We paid for 5 unrendered JavaScript pages, 13 Amway pages that showed “A system error has occurred” and no products, and 15 scrolls that stopped at 10 quotes.

Is there a Scrape.do alternative for DataDome sites?

On the Amway category page, which runs DataDome, Scrape.do got 5/10 at best, with super, render and a 3-second customWait, at a median of 22.86 s. Gologin Web Unlocker returned the full product grid 9/10 with the default request at a median of 15.57 s.

Does Scrape.do have a browser product like Gologin Cloud Browser?

No. Scrape.do runs browser actions (click, fill, scroll, wait, JavaScript) inside one rendered request with playWithBrowser. On our infinite-scroll test it worked 10/10 at 16.54 s only after we set blockResources=false. Gologin Cloud Browser runs a full Playwright session and reached 50 quotes 10/10 at 15.32 s.

Scrape.do Review Verdict: Which One Should You Use?

There is no single best web scraping API across these seven targets.

What Scrape.do does better or cheaper than the Gologin stack:

  • Walmart: 10/10 at 4.71 s for 1 credit, against 7/10 at 15.17 s for Web Unlocker.
  • Speed with the default request: 1.19 s on the static page and 3.98 s on Indeed, against 1.80 s and 6.88 s.
  • Easy pages on a budget: $0.12 per 1,000 on Hobby against $0.98.

Where the Gologin stack was weaker in this test:

  • Walmart through Web Unlocker: 7/10, three runs ended in HTTP 503.
  • Indeed and Amway: one Web Unlocker run on each returned HTTP 200 without the content.
  • Slow tail on Amway: the slowest Web Unlocker run took 87.19 s.
  • Cloud Browser on Walmart: 9/10, one connection got HTTP 503, and 17.86 s against 3.49 s.

What the Gologin stack does better or cheaper than Scrape.do:

  • Web Unlocker on DataDome: 9/10 against 5/10 on test #4.
  • Web Unlocker on JavaScript pages: 0.95 s against 3.50 s on test #2.
  • One price per page: $0.98 per 1,000 on Indeed and Amway against $1.16 and $2.90 on Scrape.do Hobby, and empty pages are not billed.
  • Cloud Browser for interaction: 10/10 on test #6 with default settings.

Choose Scrape.do if you need static pages, Walmart-type marketplace pages or Indeed-type pages fast and cheap, and are ready to tune parameters per site.

Choose Gologin if you need pages from sites running DataDome, JavaScript-heavy pages at one flat price, or a real browser session for scrolling and multi-step pages.

Conclusion

Scrape.do is a fast, low-cost API for static pages and marketplaces, and the clear winner on Walmart in this test. On our DataDome target it reached 5 grids in 10 at 25 credits a request, billing empty pages on the cheaper steps. Gologin Web Unlocker returned that page 9 times in 10 at one flat price, and Cloud Browser covers the session jobs that Scrape.do fits into one request.

Gologin Web Unlocker gives you 1,000 free requests for 7 days with no credit card, enough to repeat these tests on your own pages.

Also Read