The log tells you what you actually paid for
Skip public adblock lists as a starting point. They are built around browser privacy, not scraping costs, and they block things a browser session can live without that a structured data job cannot. (Domain reputation lists like Spamhaus serve a different purpose — mail and network abuse filtering — and are likewise not a substitute for reading your own usage log.)
The dashboard network log is the right source. It shows every host the pool touched on your behalf: the host name, outcome (success, fail, blocked, timeout), latency in milliseconds, and byte totals as metered by the pool — not as reported by your app. That last distinction matters. App-side counters miss retries, hide redirect chains, and usually count only response bodies. The provider meters the wire. Compare those numbers before deciding anything is waste.
Start with one route. If a block breaks something, you want to know which route it broke.
Read the bytes column before the host column
Sort the recent usage export by bytes descending. The expensive surprises are usually not tiny — they are a video preview host pulling a few hundred KB per page load, a tag manager firing four trackers, or a font CDN that the parser never needed.
A browser scrape that looked cheap in devtools turned out to be pulling analytics, a video preview host, two font hosts, a tag manager, and a CDN image path for every page. The HTML and one JSON endpoint were the only things the job needed. Everything else was metered at the same per-GB rate as the target.
The columns to read: host (where traffic went), plan (which rate is burning), outcome (success vs fail vs blocked), latency (slow requests are often junk), bytes (the bill). Protocol is in there too — HTTP, HTTPS, and SOCKS5 clients all connect through proxynade.net:2555; the gateway decides what to do with the requested host from there.
First-pass candidates: any host that is not the target domain, not a required API endpoint, and not needed for login or page rendering. Analytics beacons are the most common hit. Media preview domains are second. Font hosts need a per-job check — some jobs need them, some do not. CDN hosts need the most care because the same CDN may carry both noise and required page content depending on the target.
Exact matching beats wildcard matching
The blocklist form accepts exact hostnames and subdomain wildcards. Use exact matching when the log names one specific host as the problem. Use subdomain matching only when the whole family is confirmed waste for that workflow.
Blocking static.example-analytics.com exactly is safer than blocking *.example-analytics.com because you know what static.example-analytics.com is. You may not know what else lives under that parent domain — and a future frontend change could move required content there.
After adding an entry, run the same job again with the same plan, protocol, country targeting, and browser settings. Required hosts should still return successful outcomes. Blocked hosts should show a blocked outcome and zero bytes. If any page starts returning an unexpected status, remove the most recently added block and test again.
Cost math uses provider-metered bytes, not app bytes
The arithmetic is: blocked GB (from the dashboard, not the app) multiplied by the plan rate. Volume Residential is $0.89/GB. Premium Residential is $5.00/GB. The difference between those two rates makes the same block worth very different amounts depending on which plan a job runs on.
Check dashboard bytes before and after the block. If the app-side counter drops but the dashboard bytes stay flat, the block did not take effect, or the pool is seeing traffic the app is not reporting. Both are worth investigating before treating the result as a success.
| Plan | Rate | 1 GB blocked saves |
|---|---|---|
| Volume Residential | $0.89/GB | $0.89 |
| Premium Residential | $5.00/GB | $5.00 |
| Static ISP | per-IP, unlimited bandwidth | n/a |
Blocklists age — annotate every entry
Keep a short note next to every domain added: why it was blocked, which job it affected, and when. Not a policy document — one line per entry is enough. "Analytics beacon, job: product-scrape, 2026-04-18" is sufficient.
Targets change their frontends. A CDN that served only noise last month may carry required JSON after a site redesign. A login page may move an asset host. When a job starts failing, the blocklist is the first thing to audit, not the last.
The dashboard usage export is CSV. Pull it periodically and compare host frequency across runs. A host that used to appear on every page load and has now disappeared may indicate the target changed — or that a block is hiding a failure rather than cutting waste.
Waste domain blocking FAQ
Should I start with a public adblock list? No. Public adblock lists are built for browsers, not scrapers. Start with the usage log's host and bytes columns — block what the log proves is waste for your specific job.
Which dashboard columns identify waste? Sort by bytes descending. Look at host, outcome, and bytes. Hosts that are not the target domain, not a required API, and not part of login or rendering are candidates.
How do I measure the money saved? Blocked provider-metered GB multiplied by your plan rate: $0.89/GB for Volume Residential, $5.00/GB for Premium Residential. Use dashboard bytes before and after, not app-side counters.
Is exact domain matching safer than subdomain matching? Yes. Block the exact host the log names. Wildcard subdomain blocks take out everything under a domain — use that only when the whole family is confirmed waste for the workflow.
What if a page starts failing after I add a block? Remove the most recently added entry and re-run. Targets change their frontend, and a CDN that served noise last month may carry required JSON today. The blocklist is the first thing to check when outcomes regress.
Before and after checklist
- Export usage CSV and sort by bytes descending.
- Identify non-target, non-required hosts in the top rows.
- Add exact hostname blocks one at a time.
- Re-run with identical job settings.
- Compare dashboard bytes, not app counters.
- Annotate every block with a one-line reason and date.
- Audit the list when job outcomes change.