Proxy providers bill for every byte that passes through them: your request, the response, and every image, script and font a browser fetches along the way. Work out the traffic before you pick a plan:
GB a month = requests a month × average size ÷ success rate
Divide by the success rate because blocked and failed requests use traffic too, and you'll send them again.
How big is a page?
| Median size | Desktop | Mobile |
|---|---|---|
| The HTML document only | 35 KB | 33 KB |
| An inner page, everything a browser loads | 1,963 KB | 1,769 KB |
| A home page, everything a browser loads | 2,862 KB | 2,559 KB |
These are medians across millions of sites from the HTTP Archive's Web Almanac 2025. API responses are often far smaller, a few kilobytes each. Your target can be far from the median, so open a few of its pages with your browser's network tab and read the transferred size.
Three examples
| Job | Traffic a month | Cheapest | Median |
|---|---|---|---|
| 10,000 pages a day, HTML only, 90% success | 12 GB | $8.64 | $35.34 |
| The same pages in a headless browser, 90% success | 625 GB | $249.00 | $984.38 |
| 1 million API calls a month, 10 KB each, 95% success | 11 GB | $7.92 | $32.95 |
Prices are the cheapest and median residential plans for that much traffic in our data today. Rendering the pages in a browser instead of fetching the HTML makes the same job cost 29 times as much at the cheapest provider.
How to use less traffic
- Fetch the data, not the page. If what you need is in the HTML, or in a JSON request the page makes, ask for that directly instead of rendering the page in a browser.
- If you need a browser, block what you don't need. Scripts usually have to run, but images, fonts and media rarely matter for scraping, and the median desktop inner page loads 442 KB of images and 138 KB of fonts. In Playwright:
await page.route('**/*', (route) =>
['image', 'font', 'media'].includes(route.request().resourceType())
? route.abort()
: route.continue(),
); - Ask for compressed responses. Send a header such as
Accept-Encoding: gzip, br. Browsers and Python's requests ask for compression by default; check your client. HTML shrinks several times over. - Don't retry blindly. Back off on errors and stop when a site blocks you. Every retry is billed.
- Use per-proxy plans for heavy pages on easy targets. Datacenter and ISP proxies are rented per address, usually with unlimited or large traffic allowances, so page size doesn't change the price.
- Cache. Don't download the same page twice in one run.
Put your own numbers into the bandwidth calculator, then compare plans at that volume on the residential price ranking.