Choosing the best web scraping API in 2026 comes down to four numbers and a few hard limits: what a page really costs once you need JavaScript and better proxies, what the free tier lets you test, which countries you can scrape from, and what structured data you get without writing parsers.
This comparison covers eight APIs developers actually shortlist: ScrapingBot, ScraperAPI, ZenRows, Zyte API, Bright Data, Oxylabs, Apify and Firecrawl. When we searched Google (US) for "web scraping api" on October 3, 2026, several of these held spots on the first page of organic results. Every price and feature below comes from the vendor's own pricing page or documentation, checked on October 3, 2026, and each section links its sources. Where a vendor's own pages disagree, or we couldn't confirm something, we say so.
Disclosure
ScrapingBot is our product. We've tried to be as specific about its limits as about anyone else's, and every number here can be checked against the linked pages. Test on your own targets before you decide.
Key takeaways
- Compare cost per 1,000 of your real request type, not plan prices. Credit multipliers for JavaScript, premium proxies and special domains like Google can move the price by 10x or more.
- Cheapest plain pages at about $50 a month: ScrapingBot ($0.18 per 1,000).
- Cheapest rendered pages behind premium proxies: Oxylabs ($1.35), Bright Data ($1.50) and ScrapingBot ($1.82).
- Need country targeting on any site? ScrapingBot doesn't offer it for website scraping. ZenRows, Bright Data, Oxylabs, Zyte and Firecrawl do, and ScraperAPI does from its Business plan.
- Feeding LLMs? Firecrawl is built for markdown and crawling; several others now have a markdown option.
- All eight have an MCP server, so the agent integration story is no longer a differentiator.
The best web scraping APIs at a glance
| API | Pricing model | Entry paid plan | Free tier | Best for |
|---|---|---|---|---|
| ScrapingBot | Credits | $49.99 / 275K credits | 100 credits once, no card | One key for pages, Google, Amazon US, TikTok, Instagram |
| ScraperAPI | Credits | $49 / 100K credits | 7-day trial with 5K credits, then 1K/month | Many structured endpoints, async batches |
| ZenRows | Credits | $19 / 45K credits | 5K credits/month, no card | Protected sites, flexible plan sizes |
| Zyte API | Per request, tiered by site | Pay as you go | $5 credit for 30 days | Scrapy users, automatic product/article extraction |
| Bright Data | Per 1K requests or records | Pay as you go, $1.50/1K | 5K requests/month | Enterprise scale, city/ZIP targeting, many SERP engines |
| Oxylabs | Per 1K results, by target | $49/month | Up to 2K results, no card | Enterprise scale, parsers for 100+ targets |
| Apify | Prepaid platform usage | $19/month | $5 usage/month, no card | Ready-made scrapers, scheduling, workflows |
| Firecrawl | Credits | $19 / 5K credits | 1K credits/month, no card | LLM-ready markdown, site crawls |
All prices are USD with monthly billing. Several vendors discount annual plans (ScraperAPI and Apify 10%, ZenRows about 17%, Firecrawl 16 to 20%).
Web scraping API pricing compared: cost per 1,000 requests
Plan prices are misleading on their own because a "credit" buys very different things. ScraperAPI charges 25 credits for a Google search; ScrapingBot charges 10. The fair comparison is cost per 1,000 requests of a specific type, on a plan near the same budget. The table uses the plan closest to $50 a month, or pay-as-you-go where there are no plans.
| API (plan) | Plain HTML page | JS-rendered page | JS + premium proxy | Google search |
|---|---|---|---|---|
| ScrapingBot (Starter, $49.99) | $0.18 | $0.91 | $1.82 | $1.82 |
| ScraperAPI (Hobby, $49) | $0.49 | $4.90 | $12.25 | $12.25 |
| ZenRows (Build, $39) | $0.33 | $1.63 | $8.13 | No dedicated API found |
| Zyte API (pay as you go) | $0.13 to $1.27 | $1.01 to $16.08 | Tier price; forcing residential IPs costs more | Request price plus free SERP parsing |
| Bright Data (pay as you go) | $1.50 | $1.50 | $1.50 | $1.50 |
| Oxylabs (Micro, $49) | $1.15 | $1.35 | $1.35 | $1.00 |
| Apify (Starter, $19) | Compute-based | Compute-based | Compute-based | $2.50 per 1K result pages |
| Firecrawl (Hobby, $19) | $3.80 | $3.80 | $3.80 | $7.60 per 1K searches |
How the numbers were derived, so you can redo them for your own plan:
- Credit-based APIs: plan price ÷ plan credits × credits per request. ScrapingBot costs 1, 5, 10 and 10 credits for the four columns (premium proxy is 10 whether rendered or not). ScraperAPI costs 1, 10, 25 and 25. ZenRows costs 1, 5 and 25.
- Zyte API assigns every site to one of five price tiers (Simple to Advanced), so the range runs from the easiest to the hardest sites. Committing to $100, $200 or $500 a month lowers the rates.
- Bright Data lists Web Unlocker and its SERP API at $1.50 per 1,000 on pay-as-you-go, or $499 a month for about 380,000 requests ($1.30 per 1,000 after that). A list of hard "premium domains" costs more, at a rate it doesn't publish.
- Oxylabs prices per 1,000 successful results by target: Amazon $0.50, Google $1.00, other sites $1.15, or $1.35 with JavaScript rendering. Its help center gives a different Amazon figure for the Starter plan than its pricing page does.
- Firecrawl charges 1 credit per page with no listed surcharge for its enhanced proxies. Search costs 2 credits per 10 results. Its Standard plan ($99 for 100,000 credits) brings a page to $0.99 per 1,000.
- Apify bills compute units for most scrapers, so page cost depends on the scraper and the site. Its Google Search Results Scraper is priced per result page: $4.50 per 1,000 on the free plan and $2.50 on Starter.
Two things to keep in mind. First, larger plans cut per-request costs substantially everywhere: ScrapingBot's Business+ plan brings a Google search to $0.65 per 1,000. Second, a cheap request that fails on your target is worth nothing, which is why the testing section below matters more than this table.
Feature comparison: rendering, proxies, AI extraction and SDKs
| API | Country targeting | Structured data and AI | Markdown output | Official SDKs | Failed requests |
|---|---|---|---|---|---|
| ScrapingBot | Not for website scraping; Google takes gl | Google, Amazon (US), TikTok, Instagram JSON; AI extraction (+5 credits) | No | None; plain HTTPS with examples | Refunded; target 400/404 charged |
| ScraperAPI | US/EU on Hobby and Startup; 70 countries from Business, 155 more with premium | Amazon, Google (SERP, News, Jobs, Shopping, Maps), Walmart, eBay and more; AI Parser | Yes | Python, Node, PHP, Ruby, Java | 200 and 404 charged, plus requests cancelled before 70 s |
| ZenRows | 190+ countries with premium proxies | Extract (beta, prepared domains only); CSS extractor | Yes | Python, Node, Go | Only successes; 404/410 count as success |
| Zyte API | Standard geolocations plus 200+ countries via residential IPs | AI extraction for products, articles, job postings, page content; SERP parsing | Not verified | Python client, Scrapy plugin | Unsuccessful responses free |
| Bright Data | 195 countries; city and ZIP | SERP API (7 engines), 1,000+ prebuilt scrapers, datasets | Yes | Python, JavaScript | Successes only, with exceptions |
| Oxylabs | 195+ countries | Parsers for 100+ targets, custom parsers, OxyCopilot | Yes | Python, Go | 2xx and 4xx charged; 5xx and 429 not |
| Apify | Per proxy type, by country | Tens of thousands of store scrapers | Via Website Content Crawler | JavaScript, Python, plus Crawlee | No explicit policy found |
| Firecrawl | 26 countries on basic proxies; US and NL on enhanced | JSON extraction (+4 credits), search, crawl, map, agent | Yes | 9 languages incl. Python, Node, Go | No document, no charge; error pages 1 credit |
Every API here renders JavaScript and supports some form of browser actions (clicks, scrolls, waits), and every one of them documents an MCP server for AI agents. Those used to be differentiators; in 2026 they're table stakes.
ScrapingBot
ScrapingBot is a credit-based API with one key for website scraping plus dedicated JSON APIs for Google search, Amazon, TikTok, Instagram and a ChatGPT endpoint. Website requests cost 1 credit plain, 5 with JavaScript rendering, 10 with premium proxies and 75 with stealth proxies; AI extraction with ai_query or ai_schema adds 5. TikTok calls cost 1 credit, Instagram 5, Google and Amazon 10. Plans run from Starter ($49.99 for 275,000 credits, 10 concurrent requests) to Business+ ($999.99 for 15.5 million, 200 concurrent).
Strengths: low per-credit price, social and e-commerce data next to general scraping, browser scenarios of up to 49 steps, screenshots, an MCP server, and automatic refunds for timeouts, blocks and server errors.
Limits, stated plainly:
- No country targeting for website scraping.
country_codeis accepted for compatibility, but requests aren't guaranteed to come from a particular country. If your target shows different content by country, pick a vendor with real geotargeting. - Amazon is the US store only, through ten endpoints (search, product details, batch product details, search suggestions, categories, best sellers, new releases, deals, seller profile, seller products). There's no reviews or offers endpoint and no marketplace parameter.
- Google returns at most 10 organic results per request. We asked for 20 while researching this post and got 10. Ads aren't included; images, news, shopping and maps are separate endpoints.
- No official SDKs and no markdown output. You call plain HTTPS, and website responses are HTML (plus
ai_resultwhen you ask for it). - The free tier is 100 credits once, not a monthly allowance, and a website request times out after 45 seconds.
Sources: ScrapingBot docs and pricing.
ScraperAPI
ScraperAPI has a broad catalog of structured endpoints: Amazon (product, search, offers), Google (SERP, News, Jobs, Shopping, Maps), Walmart, eBay, Home Depot and Redfin, plus endpoints for AI answer engines. It adds an async API that takes up to 50,000 URLs per batch with webhooks, a no-code DataPipeline, markdown and text output, and an AI Parser. SDKs cover Python, Node, PHP, Ruby and Java.
Watch out for: the multipliers. JavaScript rendering costs 10 credits, premium proxies with rendering 25, and Google and Bing 25 per request, which makes it the most expensive per request in our table at the entry tier. Hobby and Startup plans only target the US and EU; country-level targeting starts at Business ($299). It also bills requests you cancel before 70 seconds. Its docs list premium plus rendering at 25 credits on one page and 20 on another.
Sources: pricing, credit costs, geotargeting, structured endpoints.
ZenRows
ZenRows sells many plan sizes, from $19 for 45,000 credits up to $2,999 for 45 million, and every plan unlocks every feature. Weights are simple and documented as fixed: 1 credit standard, 5 with JavaScript, 10 with premium (residential) proxies, 25 for both. Premium proxies enable targeting in 190+ countries. The free plan is a real recurring allowance: 5,000 credits a month with no card. Unused paid credits roll over for a month, and Batch handles up to 100,000 URLs per job.
Watch out for: no dedicated Google or Amazon APIs in its docs (a "Search" product appears in its navigation, but we couldn't find its pricing). Its Extract feature is in beta and only works on domains ZenRows has prepared. It states that it has no mobile proxies.
Sources: pricing, pricing docs, proxy countries.
Zyte API
Zyte API prices per request according to how hard the target is. Every site is assigned to one of five tiers; HTTP requests run from $0.13 to $1.27 per 1,000 on pay-as-you-go and browser-rendered requests from $1.01 to $16.08, with lower rates on $100, $200 and $500 monthly commitments. Its AI extraction returns structured product, product list, article, job posting and page content data, and SERP parsing is free. It's a natural fit for Scrapy projects through the scrapy-zyte-api plugin, and rate-limited and unsuccessful responses are free.
Watch out for: you only know a site's price once Zyte has classified it, and tiers are reviewed quarterly. Residential IPs and extended geolocation cost more. Its pricing page mentions mobile IPs that its API docs don't list, and we couldn't confirm from an official page whether the trial needs a card.
Sources: pricing, pricing docs, extraction, geolocation.
Bright Data
Bright Data sells proxies, datasets and several scraping APIs. For API buyers the relevant products are Web Unlocker (any site, $1.50 per 1,000 requests), the SERP API (Google, Bing, DuckDuckGo, Yandex, Baidu, Yahoo and Naver, also $1.50 per 1,000), and the Web Scraper API with prebuilt scrapers for popular sites ($1.50 per 1,000 records). Its proxy network covers 195 countries with city and ZIP targeting, and Web Unlocker can return markdown. A shared free tier gives 5,000 requests a month.
Watch out for: the product surface is large, and beyond pay-as-you-go, each API's monthly plan starts at $499. Hard "premium domains" cost more, at an unpublished rate. Sending custom headers or cookies makes every request billable, failed ones included. Its pricing pages say no card is needed for the free tier while its docs call adding a card "a verification step", and its Web Scraper page gives two different counts of prebuilt scrapers.
Sources: Web Unlocker pricing, SERP API pricing, Web Scraper API pricing, free tier.
Oxylabs
Oxylabs' Web Scraper API charges per 1,000 successful results with prices set by target: on the $49 Micro plan, Amazon is $0.50, Google $1.00, other sites $1.15 and JavaScript-rendered pages $1.35. Proxy handling is part of the service, with no separate premium-proxy multiplier on the pricing page, which makes it one of the cheapest options for rendered pages behind strong anti-bot systems. It ships dedicated parsers for 100+ targets, custom parsers, markdown output and OxyCopilot, which drafts scraper and parser settings from a plain-English prompt. Location targeting accepts 195+ countries.
Watch out for: there's no pay-as-you-go option, and plain pages cost more than with credit-based APIs. It bills 2xx and 4xx results, so a 404 or a block page with a 4xx status is charged. Its pricing page and help center give different Amazon prices for the Starter plan, and higher tiers aren't publicly priced. Official SDKs are Python and Go only.
Sources: pricing, billing rules.
Apify
Apify is a platform rather than a single API. Its store lists tens of thousands of ready-made scrapers ("Actors") for specific sites, which you run through one API, on a schedule or from no-code tools. Plans are prepaid usage: $5 free each month, then Starter at $19, Scale at $199 and Business at $999, with compute units getting cheaper on higher plans. Popular Actors are priced per result; the Google Search Results Scraper costs $2.50 per 1,000 result pages on Starter. Crawlee, its open-source crawling library, is Apache-2.0.
Watch out for: cost depends on which Actor you run, how it's built and how often it retries, so predicting spend takes a test run. Store Actors vary in quality and maintenance. We found no explicit policy on billing for failed runs, and its pricing page and limits docs give different concurrency limits for the free plan.
Sources: pricing, Google Search Results Scraper.
Firecrawl
Firecrawl is built for feeding web content to LLMs: scrape a page to clean markdown, crawl or map a whole site, search the web, or extract JSON from a prompt or schema. Scrape, crawl and map cost 1 credit per page, enhanced proxies cost nothing extra, and JSON extraction adds 4. The free plan gives 1,000 credits a month; Hobby is $19 for 5,000 and Standard $99 for 100,000. It has official SDKs in nine languages, and its core is open source under AGPL-3.0, with a self-hosted version that leaves out some cloud features.
Watch out for: per-page cost on the small plans is high ($3.80 per 1,000 on Hobby). Location targeting covers 26 countries on basic proxies and only the US and Netherlands on enhanced proxies. Error pages such as 403 and 404 are still charged 1 credit.
Sources: pricing, billing, proxies, self-hosting.
How to evaluate a web scraping API: a checklist
Spec sheets get you to a shortlist. Your own targets decide. Spend a week, use the free tiers, and check these:
- Success rate on your 50 hardest URLs, including at least one site behind Cloudflare or a similar bot shield.
- Usable content, not just HTTP 200. Check for the element you need; block pages and empty shells often return 200.
- Cost per 1,000 of the configuration that actually works, with JavaScript and proxy multipliers included.
- What gets billed: 404s, cancellations, retries and 4xx block pages.
- Latency at p50 and p95, plus the request timeout.
- Concurrency on the plan you'd buy, and what happens when you exceed it.
- Geotargeting for every country your targets vary by.
- Structured output for the sites you'd otherwise parse yourself (Google, Amazon, social).
- Docs and error messages clear enough that you never had to email support during the test.
A small harness keeps the test honest: same URLs, same definition of "usable", every vendor. Add one function per vendor following its docs.
# harness.py: run the same URLs through each API and count usable pages.
import os
import statistics
import time
import requests
URLS = [line.strip() for line in open("urls.txt") if line.strip()]
def scrapingbot(url):
r = requests.get(
"https://scrapingbot.io/api/v1/scrape",
headers={"x-api-key": os.environ.get("SCRAPINGBOT_API_KEY", "YOUR_API_KEY")},
params={"url": url, "render_js": "true"},
timeout=120,
)
data = r.json()
return data.get("success", False), data.get("html", "")
# def other_vendor(url):
# ...call that vendor's documented endpoint, return (success, html)...
def usable(html):
# Your definition of a good page: a selector you need, a minimum size, no block page.
return len(html) > 2000 and "captcha" not in html.lower()
def run(name, fetch):
good, times = 0, []
for url in URLS:
start = time.monotonic()
try:
success, html = fetch(url)
good += bool(success and usable(html))
except (requests.RequestException, ValueError):
pass
times.append(time.monotonic() - start)
times.sort()
p95 = times[min(len(times) - 1, int(len(times) * 0.95))]
print(f"{name}: {good}/{len(URLS)} usable, p50 {statistics.median(times):.1f}s, p95 {p95:.1f}s")
run("scrapingbot", scrapingbot)
// harness.mjs (Node 18+): the same test in JavaScript.
import { readFileSync } from 'node:fs';
const URLS = readFileSync('urls.txt', 'utf8').split('\n').map((s) => s.trim()).filter(Boolean);
async function scrapingbot(url) {
const qs = new URLSearchParams({ url, render_js: 'true' });
const res = await fetch(`https://scrapingbot.io/api/v1/scrape?${qs}`, {
headers: { 'x-api-key': process.env.SCRAPINGBOT_API_KEY ?? 'YOUR_API_KEY' },
signal: AbortSignal.timeout(120_000),
});
const data = await res.json();
return [Boolean(data.success), data.html ?? ''];
}
const usable = (html) => html.length > 2000 && !html.toLowerCase().includes('captcha');
async function run(name, fetchPage) {
let good = 0;
const times = [];
for (const url of URLS) {
const start = performance.now();
try {
const [ok, html] = await fetchPage(url);
if (ok && usable(html)) good++;
} catch {
// network error or timeout: counts as unusable
}
times.push((performance.now() - start) / 1000);
}
times.sort((a, b) => a - b);
const pct = (p) => times[Math.min(times.length - 1, Math.floor(times.length * p))].toFixed(1);
console.log(`${name}: ${good}/${URLS.length} usable, p50 ${pct(0.5)}s, p95 ${pct(0.95)}s`);
}
await run('scrapingbot', scrapingbot);
To port vendor examples between languages, the curl converter turns any curl command from a vendor's docs into Python or Node. For the anti-bot side of the test, our guides to common web scraping challenges and datacenter, residential and mobile proxies explain what each tier buys you.
Who should pick what
| If you need… | Start with |
|---|---|
| One key for web pages, Google, Amazon US, TikTok and Instagram on a small budget | ScrapingBot |
| Country targeting on arbitrary websites at a low price | ZenRows |
| Many structured endpoints (Google Jobs, Shopping, Maps, Walmart, eBay) and big async batches | ScraperAPI, on Business or higher for geotargeting |
| City or ZIP targeting, many search engines, enterprise procurement | Bright Data or Oxylabs |
| Cheap rendered pages on heavily protected sites | Oxylabs or Bright Data, then compare with ScrapingBot premium proxies |
| A Scrapy codebase, or automatic product and article extraction | Zyte API |
| Ready-made scrapers for long-tail sites, schedules and no-code workflows | Apify |
| Markdown for RAG, whole-site crawls, or a self-hosted option | Firecrawl |
| The biggest recurring free tier for a side project | ZenRows or Bright Data (5,000 a month) |
If Google results are the main job, read our guide to scraping Google search results without getting blocked. If you plan to pass scraped pages to an LLM, the ChatGPT API production guide covers prompts, JSON validation and cost. For ScrapingBot's full parameter reference, see the API docs.
FAQ
What is the best web scraping API in 2026?
There is no single best one; it depends on the job. For one key that covers web pages, Google, Amazon US, TikTok and Instagram on a small budget, ScrapingBot is a strong fit. For country targeting on any site, look at ZenRows or ScraperAPI. For enterprise scale and city-level targeting, Bright Data or Oxylabs. For LLM-ready markdown and site crawls, Firecrawl. For ready-made scrapers and scheduling, Apify.
What is the cheapest web scraping API?
It depends on the request type. At the roughly $50-a-month tier, plain HTML pages are cheapest on ScrapingBot ($0.18 per 1,000). For JavaScript pages behind premium proxies, Oxylabs ($1.35), Bright Data ($1.50) and ScrapingBot ($1.82) are the lowest published flat rates. Prices were checked on October 3, 2026 and change often.
Do web scraping APIs charge for failed requests?
Most charge only for successful responses, but the definition varies. ScraperAPI and ZenRows bill 404s as successes, and ScraperAPI also bills requests you cancel before 70 seconds. Oxylabs bills 2xx and 4xx responses. ScrapingBot refunds timeouts, blocks and errors, and charges target 400 and 404 responses on the website API. Read each vendor billing page before you compare prices.
Which web scraping APIs support geotargeting by country?
ZenRows, Bright Data, Oxylabs, Zyte, Firecrawl and Apify proxies all offer country selection, and ScraperAPI does from its Business plan up (Hobby and Startup are limited to US and EU). ScrapingBot does not offer country targeting for website scraping; its Google API takes a gl country code.
Which scraping APIs return markdown for LLMs?
Firecrawl is built around markdown output. ScraperAPI, ZenRows, Bright Data and Oxylabs also offer a markdown output option, and Apify has a Website Content Crawler that outputs markdown. ScrapingBot returns HTML, plus AI-extracted JSON when you add ai_query or ai_schema.
Do these web scraping APIs have MCP servers?
Yes. All eight vendors in this comparison document an MCP server, so AI agents such as Claude or Cursor can call them as tools. Calls through MCP are normally billed like regular API calls.
Is ScrapingBot good for scraping Google results?
Yes for organic results: each search costs 10 credits and returns organic results, People also ask and related searches as JSON, with gl and hl for country and language. It returns at most 10 organic results per request and no ads, images, news, shopping or maps blocks, so use another tool if you need those.