Finding the cheapest web scraping API isn't about the lowest sticker price — it's about the lowest effective cost for your specific workload. A $0.001/request API that fails 20% of the time and charges for retries costs more than a $0.003/request API with 99.5% success.
This comparison strips out the marketing and shows what you actually pay per successful, usable response.
Key Takeaways
- ScraperAPI at $49/100K is the cheapest reliable option for raw HTML at volume ($0.0005/request)
- ZenRows at $49/250K offers the most requests per dollar for datacenter proxy scraping
- SearchHive ScrapeForge at $29/5K is the cheapest AI-ready option (Markdown + structured extraction)
- Jina Reader's free tier (1K/mo) covers most prototyping needs for static content
- Hidden costs — retries, CAPTCHA solving, residential proxy upgrades — can double your effective per-request price
The Absolute Cheapest (by category)
Cheapest for raw HTML at volume: ScraperAPI
$49/month gets you 100,000 requests with JS rendering and proxy rotation included. At $0.00049 per request, nothing else comes close for raw HTML output.
import requests
def scrape_batch(urls):
results = []
for url in urls:
r = requests.get("http://api.scraperapi.com", params={
"api_key": "your-key",
"url": url,
"render": "true"
})
if r.status_code == 200:
results.append({"url": url, "html": r.text})
return results
The catch: no Markdown conversion, no structured extraction. You get HTML and parse it yourself. For teams that already have extraction pipelines, this is ideal. For everyone else, add $0.01-0.05/page for LLM-based extraction.
Cheapest per-request at high volume: ZenRows
At $49/month for 250,000 requests, ZenRows delivers $0.00020 per request — the lowest per-request price in the market. The catch: that's for datacenter proxy requests without JS rendering. Add JS rendering (+50% credits) and you're at $0.00030. Switch to residential proxies (+$3/1K) and it jumps to $0.00320.
import requests
response = requests.get("https://api.zenrows.com/v1/", params={
"apikey": "your-key",
"url": "https://example.com/product/123",
"js_render": "true",
"premium_proxy": "true" # residential proxies
})
Cheapest for AI-ready output: SearchHive ScrapeForge
If you need Markdown or structured free JSON formatter (not raw HTML), SearchHive is the cheapest option that doesn't require you to build your own extraction pipeline.
from searchhive import ScrapeForge
client = ScrapeForge(api_key="sh_live_...")
# Markdown output — $0.0018/request at Starter tier
result = client.scrape("https://example.com/article")
markdown_text = result["markdown"]
# Structured extraction — same base price
result = client.extract(
"https://example.com/product",
schema={"name": "str", "price": "float", "rating": "float"}
)
# Returns clean JSON ready for your database
At $29/5K requests ($0.0058/request), it's more expensive per request than ScraperAPI. But when you factor in the cost of building and running your own extraction pipeline, it's often cheaper overall. GPT-4o-mini extraction at ~$0.02/page makes the all-in-one API the better deal.
Cheapest free tier: Jina Reader
1,000 free Markdown extractions per month with no credit card. Nothing else comes close for zero-cost prototyping.
import requests
# Literally just append your URL
response = requests.get(
"https://r.jina.ai/https://example.com/article",
headers={"Authorization": "Bearer jina_xxx"}
)
markdown = response.text
Limitation: no JS rendering, no proxy rotation, no structured extraction. If the page loads without JavaScript, it works. If it doesn't, it returns garbage. Best for blogs, docs, and news articles.
Complete Price Comparison
Sorted by effective cost per 1,000 successful requests at the lowest paid tier:
| Rank | Provider | Per 1K Requests | Output | JS Render | Free Tier |
|---|---|---|---|---|---|
| 1 | ScraperAPI | $0.49 | HTML | Yes | None |
| 2 | ZenRows (DC proxy) | $0.20 | HTML | Yes (+50%) | None |
| 3 | Brave Search API | $3.00 | JSON | N/A | 2K/mo |
| 4 | Bing Search API | $3.00 | JSON | N/A | 1K/mo |
| 5 | Jina Reader | $0.40 | Markdown | No | 1K/mo |
| 6 | Serper.dev | $1.00 | JSON (SERP) | N/A | 2.5K/mo |
| 7 | SearchHive ScrapeForge | $5.80 | Markdown+JSON | Yes | 500/mo |
| 8 | Tavily | $4.00 | Markdown | No | 1K/mo |
| 9 | Firecrawl | $6.00+ | Markdown+JSON | Yes | 500 credits |
| 10 | Apify | ~$1.00-2.00 | Varies | Yes | $5 credit |
| 11 | ScrapingBee | $49.00 | HTML | Yes | None |
| 12 | Oxylabs | $2.00 | HTML | Yes ($5-12) | None |
| 13 | Bright Data | $3.00+ | HTML | Yes ($6-15) | None |
Note: ScraperAPI's per-1K price looks anomalously low because their pricing is volume-based ($49 for 100K). Most competitors charge significantly more at equivalent volumes.
The Hidden Cost Multiplier
Your real cost is rarely the listed price. Here's what inflates it:
Failed requests. Most APIs don't charge for outright failures (5xx errors). But if a request "succeeds" but returns blocked content (CAPTCHA page, 403, empty response), you still pay. Typical block rates by provider:
- Bright Data: 1-3%
- Oxylabs: 2-5%
- ZenRows: 3-7%
- ScraperAPI: 5-10%
- SearchHive: 5-10%
- No proxy (DIY): 15-40%
Extraction costs. Raw HTML needs processing. Budget options:
trafilatura(free): Good for articles, poor for structured data- BeautifulSoup + custom rules (free): Full control, engineering time
- GPT-4o-mini extraction (~$0.02/page): High quality, adds up fast
- Provider-native extraction (included): SearchHive, Firecrawl
Residential proxy surcharges. Datacenter proxies work for easy targets. Protected sites need residential IPs. Premium proxy add-ons range from $1-8/1K additional requests.
Cost Optimization Strategies
1. Cache aggressively. SearchHive's built-in caching reduces repeat requests by 40%+. Build your own caching layer for other APIs.
import hashlib, json
from pathlib import Path
cache_dir = Path(".scrape_cache")
def cached_scrape(url, scrape_fn):
key = hashlib.md5(url.encode()).hexdigest()
cached = cache_dir / f"{key}.json"
if cached.exists():
return json.loads(cached.read_text())
result = scrape_fn(url)
cached.write_text(json.dumps(result))
return result
2. Batch at off-peak hours. Many providers have lower latency and fewer blocks during early morning US hours (2-6 AM EST).
3. Use the cheapest provider that works for each target. Not every page needs Bright Data's enterprise proxies. Easy targets can go through ScraperAPI at 1/10th the cost.
4. Start with free tiers. Between Jina Reader (1K), Serper.dev (2.5K), Brave Search (2K), and SearchHive (500), you can prototype most projects for free.
Which Is Actually Cheapest for You?
| Your Situation | Cheapest Option |
|---|---|
| Prototyping, static content | Jina Reader (free) |
| Prototyping, JS-heavy content | SearchHive (free tier) |
| Production, high volume, raw HTML | ScraperAPI ($49/100K) |
| Production, AI extraction needed | SearchHive ScrapeForge ($29/5K) |
| Production, maximum reliability | ZenRows ($49/250K) |
| Production, heavily protected targets | Bright Data (premium) |
| SERP data specifically | Serper.dev ($50/50K) |
→ Start with SearchHive ScrapeForge — 500 free requests/month including Markdown conversion and structured extraction. Sign up free
Related: Web Scraping API Pricing — Full Cost Comparison and Fastest Web Scraping APIs — Speed Benchmarks