How to choose a web scraping proxy and what it costs

Published Updated 17 min read

In short

If a page’s content depends on country, city or network type, use rotating residential or mobile proxies billed per GB for independent requests, a sticky session for steps that share state, and a per-IP ISP proxy for one fixed address in one country. If it does not, datacenter proxies are enough, but Proxeta does not sell them. This article was written by Proxeta, a proxy seller.

Proxeta wrote this article. We sell residential, mobile and ISP proxies, so our view is not neutral. We have not run comparative tests of providers and we do not assess their networks. What you get below is a set of rules for choosing by task, the math for traffic and budget, published prices as of November 2, 2026 with links to each provider’s own pages, and Proxeta’s limits.

Web scraping is the automated collection of data from web pages. A web scraping proxy does two jobs: it lets you open public pages from a location you choose and spread requests across different addresses, within what the site allows. A proxy does not give you the right to collect data; there is a separate section on that below.

Which web scraping proxy fits your task

Two questions decide the proxy type: does the page’s content depend on location and network type, and do your requests depend on each other? The billing model follows from the type.

TaskProxy typeSession modeHow you pay
Pages whose content does not depend on location or network type: your own sites, documentation, open datasetsDatacenter. Proxeta does not sell themDepends on the providerPer IP or per GB, depending on the provider
Independent requests to public pages whose content depends on country or network type: catalogs, prices, availabilityResidential“Rotation”Per GB of traffic
The local version of a public page: region, city, ISP or ZIP codeResidential“Rotation”; if the page takes several steps to open, “Sticky session”Per GB of traffic
The mobile-network version of a public pageMobile“Rotation” or “Sticky session”Per GB of traffic, same price and balance as residential
Steps that depend on each other: pagination with cookies, picking a region on the site, a search formResidential or mobile“Sticky session”Per GB of traffic
Regular large transfers from one country, when one fixed address will doISPOne static address, no rotationPer IP for 30 days, traffic is not counted in gigabytes
A project with both independent requests and stateful stepsResidential or mobileTwo separate lists: one rotating, one stickyPer GB of traffic

Proxy types in plain terms

Datacenter proxies are IP addresses of servers in data centers, sold per IP or per gigabyte depending on the provider. They are enough when the page’s content does not depend on location or network type: if a small sample returns the version you need, there is no reason to pay for residential traffic. Proxeta does not sell datacenter proxies.

Residential proxies are IP addresses from home internet providers; an address comes from a pool and is not assigned to you permanently. At Proxeta you can set the country, region and city, and also an ISP or a ZIP code. You pay for traffic, so the bill grows with page weight rather than the number of addresses.

Mobile proxies are IP addresses from 4G / 5G / LTE cellular carrier networks. They work like residential proxies: a pool, rotation or a sticky session, billing by traffic; at Proxeta they share a price and a balance, and you pick a carrier instead of an ISP. You need them when you care about the version of a page served to a mobile network; otherwise, residential will do.

ISP proxies are dedicated static IPs from an internet service provider: at Proxeta, the address stays with your order for 30 days, there is no rotation, and traffic is not counted in gigabytes. An address costs $2.20, the same as roughly 0.74 GB of traffic at the flexible rate (2.20 ÷ 2.99): if more than that passes through the address in 30 days, and one country and one address work for you, the flat fee comes out cheaper. The trade-offs: targeting by country only, all the load comes from one address, and each additional address is paid for separately.

Do not confuse ISP proxies with the “ISP” targeting mode in the generator: that mode only narrows the location and does not make the address static. There is more on this difference in ISP vs residential and mobile proxies.

Rotation or sticky sessions for web scraping

Rotation. A new IP from the pool goes to each new connection, not to each request: several requests over one open connection may leave from the same address. This mode suits independent requests to public pages.

Sticky session. This mode keeps one IP for as long as possible, until the provider drops the connection. It suits steps that depend on each other.

Rotation spreads requests across different addresses, but the site still has to serve all of them. So work out the acceptable rate for the whole project, not per IP.

The generator has no session duration setting, so your script has to cope with an address change; there is more on the modes in sticky session vs rotation. With rotation one string is enough, with a sticky session you need one string per session, and the generator defaults to “Sticky session”, so for rotation, switch the “Session type” field.

How much traffic web scraping uses and how to budget for it

Residential and mobile proxies are billed by traffic, so the math starts with the weight of your pages:

monthly traffic = number of pages × average page weight + margin for retries

How to measure your own pages

  1. Pick 20–50 typical pages: different sections of a site have different weights.

  2. For an HTTP client, capture the response size. The command below prints the size of the response body and headers in bytes, and --compressed asks for compression if the server supports it. These numbers do not include the request itself or connection setup.

    curl -sS -o /dev/null --compressed -w '%{size_download} %{size_header}\n' https://example.com/
    
  3. For a browser, open the Network tab in developer tools, turn on Disable cache, load the page and read the transferred total.

  4. Take the average, add a margin for retries, and on your first run compare the estimate with the “Statistics” section of your Dashboard. There is more in the article on tracking traffic usage.

Worked example

This is an illustrative example, not a measurement: the page weights were picked to show the difference, so plug in your own numbers. We assume 50,000 pages a month, a 10% margin and 1 GB = 1,000 MB = 1,000,000 KB. Proxeta prices are as of November 2, 2026, excluding exchange rates and fees charged by the payment provider and the network.

How the page loadsWeight (illustrative)TrafficWith 10% marginCost at Proxeta
HTTP client, HTML only200 KB50,000 × 200 KB = 10 GB11 GB10 GB package and 1 GB: $28.40 + $2.99 = $31.39
Browser without images or fonts600 KB50,000 × 600 KB = 30 GB33 GB25 GB package and 8 GB: $67.30 + 8 × $2.99 = $91.22
Browser with all resources2 MB50,000 × 2 MB = 100 GB110 GB100 GB and 10 GB packages: $254.15 + $28.40 = $282.55

The number of pages is the same in every row, so in this example the way they load decides the bill: check first whether you need a browser at all.

How to use less traffic

  • Do not load what you do not need. If you need text, do not request images, fonts and video. In Playwright you can abort such requests with page.route.
  • Cache. Store downloaded pages and do not fetch again what has not changed. Requests with If-None-Match or If-Modified-Since can get a 304 response with no body.
  • Ask for compression. Send Accept-Encoding: gzip: --compressed does this in curl, and requests sends the header on its own.
  • Cap retries. Set their number and the pause between them, as in the Python example below.

What a web scraping proxy costs: prices as of November 2, 2026

The table shows published residential traffic prices as of November 2, 2026; they change, so check the links before you buy. Providers are listed alphabetically, this is not a ranking, we compiled the list ourselves, and “calculated” marks our own arithmetic.

ProviderSmallest purchaseAround 100 GB
Bright DataPay As You Go: $8/GB list price, $4/GB with a 3-month coupon$499/month plan: 141 GB with the coupon ($3.54/GB, calculated)
DataImpulse$1/GB with no subscription; the 5 GB pack for $5 is one-time, for new customers; targeting finer than country: ×2$100, or $200 with targeting finer than country (calculated)
DecodoPay As You Go: $4/GB + VAT100 GB monthly plan: $275 + VAT ($2.75/GB)
IPRoyalPay As You Go: $7.35/GB for 1 GB, $5.51/GB for 10 GBNo 100 GB tier published
OxylabsStarter plan: $30/month, $6/GBFlexible plan: $500/month, $4/GB, up to 125 GB
Proxeta$2.99/GB from 1 GB, no subscription100 GB package: $254.15 ($2.54/GB)
SOAXSandbox plan, no monthly fee: $5/GB in Tier 1 countries, $4/GB in Tier 2, $2/GB in Tier 3Builder plan, $200/month + VAT: $3/GB in Tier 1, $2.25/GB in Tier 2, $200 in total in Tier 3 (calculated)

How to read this table

  • Where Proxeta costs more: at the smallest purchase, than DataImpulse and SOAX in Tier 3; at 100 GB, than DataImpulse and SOAX in Tier 2 and Tier 3. Above 100 GB, several providers list lower prices, because Proxeta’s largest package is 100 GB.
  • Where Proxeta costs less: at the smallest purchase, than the other options in the table; around 100 GB, than Decodo, SOAX in Tier 1, Bright Data and the Oxylabs plan.
  • Country and targeting: SOAX prices depend on the country of the exit IP, and DataImpulse charges more for targeting finer than country. At Proxeta, the price per GB depends only on volume.
  • The total, not the price per GB: compare the total for the volume you will actually use, because on a monthly plan unused volume may not carry over to the next month. For example, the $500 Oxylabs plan comes to $5/GB if you use exactly 100 GB (calculated).
  • Taxes and fees: some prices are before VAT. At Proxeta, the exchange rate and network fees are set by the payment provider and the blockchain network.
  • Other products: the table covers residential traffic only. Other providers also sell mobile and ISP proxies at different prices, and Proxeta is not cheaper across the board there either, so compare them on the providers’ pages.

What to check before you buy

  1. The total for your volume. Work out the cost of the gigabytes you will actually use, including any monthly fee, VAT, exchange rate and fees.
  2. Unused traffic. Ask whether it expires.
  3. Locations. Check whether the country, region, city, ISP or ZIP code you need is available and whether it costs extra.
  4. Session and protocol. Find out whether the address changes per request or per connection, and make sure the protocol you need works with a username and password in your client.
  5. Terms. Read about payment, refunds, territorial restrictions and what is allowed.
  6. A trial volume. Buy the minimum and run your own sample of pages before you commit to a large package or plan.

How to connect a proxy: curl, Python and Playwright

A Proxeta residential or mobile proxy string looks like host:port:login:password: port 8080 is HTTP, port 1080 is SOCKS5, and location and session are encoded in the login, so copy it whole. For ISP proxies, the IP, port, login and password are in your order in the “My proxies” tab. The details in the examples are placeholders: use your own.

proxy.example.invalid:8080:login-country-us:password
proxy.example.invalid:8080:login-country-us-sid-k7m2q9x4ab:password

The first string is rotation, and the second is a sticky session with the -sid- parameter. The string structure is explained in proxy string format.

Using a proxy in curl

Over HTTP:

curl -sS --max-time 30 \
  --proxy http://proxy.example.invalid:8080 \
  --proxy-user 'login-country-us:password' \
  https://example.com/

Over SOCKS5:

curl -sS --max-time 30 \
  --proxy socks5h://proxy.example.invalid:1080 \
  --proxy-user 'login-country-us:password' \
  https://example.com/
  • In socks5h://, the h means the proxy resolves the site’s name. With socks5://, your device resolves it, and DNS may return an address chosen for your location rather than the exit location.
  • The password in a command like this ends up in your shell history. Do not publish proxy strings: they contain your credentials.

Using a proxy in Python (requests)

You need the package: pip install requests.

import time
import requests
from urllib3.util.retry import Retry

PROXY = "http://login-country-us:password@proxy.example.invalid:8080"
PROXIES = {"http": PROXY, "https": PROXY}
session = requests.Session()

def fetch(url, retries=3, delay=5):
    for attempt in range(retries + 1):
        r = session.get(url, proxies=PROXIES, timeout=(10, 30))
        if r.status_code == 403 or (r.status_code == 429 and attempt == retries):
            raise RuntimeError(f"{r.status_code} from {url}: stop, check the site's terms and robots.txt")
        if r.status_code != 429:
            return r
        after = r.headers.get("Retry-After")
        time.sleep(Retry(0).parse_retry_after(after) if after else delay)
        delay *= 2

print(fetch("https://example.com/").status_code)

For SOCKS5, run pip install "requests[socks]" and change one line:

PROXY = "socks5h://login-country-us:password@proxy.example.invalid:1080"

What to know about this code:

  • On a 429, it waits as long as Retry-After says, or 5, 10 and 20 seconds if the header is missing. After three retries it stops with an error. With rotation, the retry may leave from a new IP if the connection closed during the pause; to retry from the same address, use a sticky-session string.
  • On a 403, it stops right away, with no retries.
  • Special characters in the password: if your password contains @, : or /, URL-encode them: @ as %40, : as %3A, / as %2F.

Using a proxy in Playwright

As of November 2, 2026, Chromium through Playwright does not work with SOCKS5 that requires a username and password: in Playwright 1.62.1 with Chromium 151, launching fails with Browser does not support socks5 proxy authentication. So use HTTP in Playwright, which is port 8080 on Proxeta’s residential and mobile proxies.

You need the playwright package and the Chromium browser (npx playwright install chromium).

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch({
    proxy: {
      server: 'http://proxy.example.invalid:8080',
      username: 'login-country-us-sid-k7m2q9x4ab',
      password: 'password',
    },
  });
  try {
    const page = await browser.newPage();
    const response = await page.goto('https://example.com/', { timeout: 60000 });
    console.log(response.status(), await page.title());
  } finally {
    await browser.close();
  }
})();

The example uses a sticky-session string: a browser can open several connections for one page, and with rotation they could leave from different addresses.

How the examples were run

The examples were run on November 2, 2026 through local test proxies and a local site, not through the Proxeta gateway: that checks the command syntax and how the clients behave, but not exit IPs or the real network.

How to collect data responsibly

A proxy changes the address a request leaves from, not the rules. What follows is general guidance, not legal advice: for harder cases, talk to a lawyer.

  • The law: the rules depend on your country, the kind of data and how you use it, and open texts and databases may be subject to third-party rights.
  • The site’s terms: read them before you start and, if they forbid automated collection, do not collect, or ask the owner for permission.
  • robots.txt: check it before you start and respect what it disallows for the sections you need.
  • Request rate: start with a low request rate and low concurrency, raise them gradually and count the load across the whole project, because rotation does not reduce it.
  • Transparency: do not pass your script off as someone else and, where you can, put your project name and a contact in the User-Agent.
  • Personal data: do not collect people’s names, contacts or profiles without a lawful basis, and if such data lands in your sample by accident, do not keep it.
  • Restricted areas: a page that only opens after sign-in is no longer public, so automate that access only if you have the right to it.

What to do on a 403 or 429

What the site returnedWhat it meansWhat to do
429Too many requestsLower the rate and concurrency, and honor Retry-After. If it keeps happening, stop and check the site’s terms and robots.txt
403The site refused accessDo not retry. Check the site’s terms and robots.txt. If access is closed, stop
A page asking you to sign in or pass a checkThe site will not serve the page without confirmationStop and ask the site owner for access

Do not answer a refusal by changing the IP or the proxy string: a refusal is still a refusal from another address.

Proxeta’s Acceptable Use Policy forbids scraping where that is unlawful or violates the rights or terms of the target, as well as deceiving people or systems and any activity intended to degrade or disable a system. You are responsible for your traffic and for the resources you access.

What Proxeta has and does not have

For residential and mobile proxies, country is required and you can also pick an ISP (a carrier, for mobile) or a ZIP code, but not both; you get 1 to 100 strings per generation, and as of November 5, 2026, the ISP proxy list has eight countries: Brazil, Germany, Hong Kong, Italy, Romania, Turkey, the UK and the US.

What it does not have

  • Datacenter proxies.
  • A scraping API or “unblocker”: your code makes the requests and parses the pages.
  • ISP proxy targeting finer than country.
  • A session duration setting or timed rotation.
  • Free trial traffic: neither the site nor the Terms offer it.
  • Payment other than cryptocurrency; on refunds, see the refund policy.
  • Sales in the EEA and the UK under the Terms: the restriction depends on where you are, not on the country of the exit address.
  • Promises on uptime or outcomes, or on a specific city, carrier or address: targeting is provided where available, and geolocation databases may place an address in a different city or country.
  • A traffic expiry period in the published terms: ask support.

Where to start

  1. Check current prices under plans and pricing.
  2. Sign in to the Dashboard and buy traffic in the “Buy traffic” section: a small amount is enough to test on your own pages.
  3. Get strings in the “Generate proxies” section (for a static address, in the “ISP proxies” section) and connect them by following connecting a proxy.

The @proxetabot bot also issues strings, but it replies in Russian only and issues sticky-session strings only; for rotation, use the Dashboard.

Frequently asked questions

What kind of proxy do I need for web scraping?

If content depends on country, city or network type, rotating residential or mobile proxies suit independent requests and a sticky session suits steps that share state. For one fixed address in one country, use ISP proxies. Otherwise, datacenter proxies suffice; Proxeta does not sell them.

How much traffic does web scraping use?

Multiply pages by average weight and add a margin for retries. In an illustrative example, 50,000 pages at 200 KB come to 10 GB, and at 2 MB in a browser to 100 GB. Measure your own pages and check against “Statistics” in your Dashboard.

How much does a web scraping proxy cost?

At Proxeta, residential and mobile traffic costs $2.99 per GB from 1 GB, the 100 GB package costs $254.15, and ISP proxies cost $2.20 per IP for 30 days. Other providers list both lower and higher prices: figures and links are in the article’s table.

What should I do if a site returns 403 or 429?

Slow down, honor the Retry-After header, and check the site’s terms and robots.txt. If the site refuses access, stop. Do not change the IP or the proxy string to carry on after a refusal.

Does Proxeta have datacenter proxies or a scraping API?

No. Proxeta sells residential, mobile and ISP proxies. It has no datacenter proxies, scraping API or “unblocker”: your code makes the requests and parses the pages.

Can I use SOCKS5 with a username and password in Playwright?

Not with Chromium: in Playwright 1.62.1 with Chromium 151, launching fails with the error “Browser does not support socks5 proxy authentication”. Use HTTP in Playwright (port 8080 on Proxeta’s residential and mobile proxies) and SOCKS5 (port 1080) in tools such as curl and requests.

Read next

All articles

Published 6 min read

What is a backconnect proxy and how does it work

What a backconnect proxy is: how one host and port hand out many IPs, rotation vs sticky sessions, and how the login controls the exit IP at Proxeta.

Read the article