1.Two products, two halves of the problem
Getting a page from a protected site requires clearing several independent gates: the origin network has to be acceptable, the TLS fingerprint has to look like a browser, JavaScript challenges have to execute, and cookies have to stay bound to a stable identity across requests.
A proxy provider addresses exactly the first gate. It gives you an IP in a network that scores well, and everything after that is your responsibility — your HTTP client's fingerprint, your challenge handling, your session bookkeeping. That is a completely reasonable division of labour if you already own a crawler that does those things well.
An unlock API takes all four gates. You send a URL and receive markup. The trade is control and per-request cost in exchange for not maintaining a browser fleet or a fingerprint library. Neither model is more sophisticated than the other; they draw the boundary in a different place.
2.When a proxy pool is genuinely sufficient
If your targets return real markup to an ordinary HTTP client and the only thing standing between you and the data is rate limiting or geographic restriction, a proxy pool is the correct and cheaper purchase. Adding an unlock API to that workload is paying for machinery you do not need.
This describes more targets than people expect. Public data portals, documentation sites, many news sites, most APIs, and a large fraction of long-tail e-commerce apply no meaningful bot scoring. Teams that have been burned by Cloudflare on one target often over-correct and route everything through heavy infrastructure.
The test takes two minutes. Fetch the target from a plain client through a clean IP. If you get the markup you expect, you are done — buy egress, not an unlock API.
3.What the free proxy list tier actually costs
Free proxy lists are compiled from open proxies found by scanning. They are free because nobody is maintaining them, and the economics of that show up as operational cost rather than invoice cost.
Availability is the visible problem: a large share of entries are dead when you fetch the list, and more die during the job, so you need liveness checking and aggressive timeouts before you get useful throughput. Reputation is the deeper one — these addresses are used by everybody who found the same list, so on any target that scores IPs they arrive pre-burned.
The security consideration deserves stating plainly because it is frequently omitted. An open proxy operator sits in the path of your traffic. Never send credentials, API keys, session tokens, or anything you would not publish through a proxy you do not control. Free lists are appropriate for fetching genuinely public pages and inappropriate for anything authenticated.
- High dead-entry rate; you build liveness checking before you get throughput
- Shared with everyone who downloaded the same list, so reputation is already spent
- Unknown operators sit in your traffic path — never send credentials through them
- Suitable for public pages, unsuitable for anything authenticated
4.Where clean egress stops being enough
The clearest signal is a block that persists after you switch to residential IPs in the right country. If the IP is clean and the request still fails, the block is not about egress — it is about the fingerprint your client presents or the JavaScript it never executed, and no proxy tier addresses either.
The characteristic failure is a 403 or a short 200 body containing challenge markup, arriving identically from every IP you try. Teams often respond by buying a larger pool, which changes nothing because the pool was never the constraint. Recognising this early saves a lot of money.
The second signal is session breakage: the first request works, the fifth re-challenges. That is anti-bot cookies bound to an IP, invalidated by rotation. It is fixable within a proxy-only architecture — hold the IP for the unit of work — but it requires session bookkeeping that a raw pool does not do for you.
5.Using both without paying twice
The efficient architecture on a mixed list is to route by target difficulty rather than picking one vendor for everything. Cheap egress for targets that return markup to a plain client, unlock API for targets that do not.
Build the classification from evidence rather than guessing. Run your URL list once through OmniScrape auto mode and aggregate metadata.method_used: URLs that came back as fast never needed a browser and can move to plain egress permanently. URLs that came back as js_rendering are the ones that justify the unlock path. That single field turns an open question into a routing table.
OmniScrape sells the egress half directly as well, at $2.00 per GB over HTTP, HTTPS, or SOCKS5, so consolidating onto one vendor is possible if that simplifies your billing. Note that direct proxy credentials require Pay-As-You-Go or an active plan — trial accounts get a PROXY_LOCKED error and should use Web Unlocker or BaaS instead.
12345678910111213141516import collections, os, requests
# Classify a URL list once, then route permanently on the result.
lanes = collections.Counter()
for url in url_sample:
body = requests.post(
"https://api.omniscrape.io/v1/scrape",
headers={"X-API-Key": os.environ["OMNISCRAPE_KEY"]},
json={"url": url, "mode": "auto", "enable_solver": True},
timeout=120,
).json()
if body.get("success"):
lanes[body["metadata"]["method_used"]] += 1
# "fast" URLs never needed a browser — move them to plain proxy egress.
print(lanes) # e.g. Counter({'fast': 812, 'js_rendering': 188})
6.Per-GB, per-port, and per-request compared
Per-GB billing tracks bandwidth, so cost scales with page weight rather than page count. It rewards blocking images, media, and fonts, which on a browser-rendered page can cut transfer by a large multiple. It is the natural fit for a self-managed crawler where you control what gets fetched.
Per-port rental is a fixed monthly cost for a fixed number of IPs. Predictable, and efficient only at sustained high utilisation — idle ports bill the same as saturated ones, which makes it a poor fit for bursty or seasonal work.
Per-request billing tracks records rather than bytes. OmniScrape charges $0.0035 per successful Web Unlocker request and nothing for failed unlocks, so retries on hard targets do not inflate the unit cost. Which model is cheaper depends entirely on your page weight and your failure rate — compute cost per successfully extracted record on a real sample rather than comparing list prices.
Frequently asked questions
Is ProxyScrape a competitor to OmniScrape?
Only partially. A proxy pool solves the egress gate; an unlock API solves egress plus fingerprinting, challenge execution, and session continuity. They overlap on residential proxies and diverge on everything else.
Are free proxy lists usable for scraping?
For genuinely public pages with tolerance for failure, sometimes. Expect a high dead-entry rate and reputation already spent by everyone else using the same list. Never send credentials or tokens through a proxy whose operator you do not know.
My residential proxies are clean and I am still blocked. Why?
Because the block is not about egress. A clean IP that still fails points at your client's TLS fingerprint or at a JavaScript challenge that never executed. Buying a bigger pool does not address either — you need a browser-grade client in the path.
How do I decide which URLs need an unlock API?
Run the list once through auto mode and aggregate metadata.method_used. URLs returning fast never needed a browser and can move to plain proxy egress; URLs returning js_rendering are the ones that justify the unlock path.
Which billing model is cheapest?
It depends on page weight and failure rate, so compute cost per successfully extracted record on a real sample. Per-GB rewards blocking heavy assets, per-port rewards sustained utilisation, and per-request with unbilled failures keeps retries on hard targets from inflating the unit cost.
Related guides
- Web Scraping Proxy Guide: Types, Sessions, Geo, and OmniScrape Integration
- Private Proxies for Scraping: What the Term Still Means
- OmniScrape vs Smartproxy
- Rotating Proxies for Web Scraping: Policies, Session Binding, and Geo Pools
- Bright Data Alternative for Enterprises Buying a Second Source
- OmniScrape vs ScrapingBee