Proxy providers advertise pool size: millions of IPs, hundreds of millions. Pool size matters, but it hides a second question that matters just as much for reliability: how many different networks those addresses come from. A pool of ten million IPs on a handful of networks behaves very differently from one spread across thousands.
Every IP address belongs to a network operated by one organisation, identified by an autonomous system number (ASN). For residential proxies, the ASN is usually a consumer internet provider. This article explains why the spread of a pool across ASNs matters, how to measure it from a sample of exits, and how to read the numbers.
Why ASN diversity matters
Websites and anti-bot systems rarely judge an IP address on its own. They judge it in context, and the network is one of the strongest pieces of context they have.
- Blocks spread by network. When a site sees abuse from many addresses on one network, it can rate-limit or challenge the whole network. A pool concentrated on a few ASNs is exposed to that: one network-level decision affects a large share of your traffic.
- Reputation is shared. Addresses on the same network inherit some of its reputation. A diverse pool is less affected when one network’s reputation drops.
- Hosting networks give the game away. A “residential” pool with a meaningful share of addresses on hosting or data-centre networks is not fully residential, and sites treat those addresses accordingly.
- Local realism needs local networks. If you collect data as seen from a country or city, the exits should be spread over the providers people there actually use.
This is also why targeting a specific network is useful for some jobs. Our guide to ASN targeting for residential proxies covers when to pin requests to one provider, which is the opposite case: deliberate concentration for a specific test.
What “diverse” should look like
Real internet markets are concentrated. In most countries, a few large providers serve most households, with a long tail of smaller regional and mobile networks behind them. A healthy residential pool mirrors that shape: a few large consumer ISPs carrying a good share of exits, and many smaller networks behind them.
So the goal is not perfectly equal shares across networks. It is two things:
- No single network dominates beyond what that country’s internet market would explain.
- A long tail exists: many distinct networks, so that a block on any one of them affects only a small share of traffic.
How to measure it
You cannot see a provider’s whole pool, but you can sample it. Send requests through the rotating gateway, record which IP and network each request exits from, and compute concentration metrics over the sample.
Four metrics cover most of what matters:
| Metric | What it measures | How to read it |
|---|---|---|
| Distinct ASNs | How many networks appear in the sample | Higher is better; grows with sample size |
| Top-1 and top-5 share | The share of exits on the largest one and five networks | Lower means less exposure to one network’s decisions |
| Herfindahl-Hirschman index (HHI) | The sum of squared shares, from near 0 (spread out) to 1 (one network) | The standard measure of market concentration |
| Effective number of ASNs | 1 / HHI: how many equal-sized networks the sample behaves like | The most intuitive single number |
Add one more check that is not about concentration: the share of exits on non-residential networks. For a residential pool, that should be close to zero.
The module below samples exits through a proxy using ip-info.com, our free IP geolocation API, which returns each address’s ASN, network name and whether it is a residential or hosting network, and computes the metrics:
from collections import Counter
import requests
def sample_exit(proxy_url, get=requests.get):
"""One exit through a rotating proxy: its IP, network (ASN) and network type."""
info = get("http://ip-info.com/json", proxies={"http": proxy_url, "https": proxy_url}, timeout=20).json()
return {"ip": info["ip"], "asn": info["asn"], "as_name": info["as_name"], "user_type": info.get("user_type")}
def diversity(exits):
"""How spread out a sample of exits is across networks."""
exits = list({e["ip"]: e for e in exits}.values()) # count each IP once
counts = Counter(e["asn"] for e in exits)
n = len(exits)
shares = sorted((c / n for c in counts.values()), reverse=True)
hhi = sum(s * s for s in shares) # Herfindahl-Hirschman index, 0 to 1
return {
"unique_ips": n,
"asns": len(counts),
"top1_share": round(shares[0], 3),
"top5_share": round(sum(shares[:5]), 3),
"hhi": round(hhi, 4),
"effective_asns": round(1 / hhi, 1), # as many equal-sized networks as this
"non_residential_share": round(sum(e["user_type"] != "residential" for e in exits) / n, 3),
}
Two illustrative samples of 1,000 exits show how differently a broad and a narrow pool read (synthetic data, not real providers):
import random
from asn_diversity import diversity
random.seed(7)
# Illustrative samples of 1,000 exits from two pools (synthetic, not real providers)
broad = [{"ip": f"ip{i}", "asn": random.choice(range(60)), "user_type": "residential"} for i in range(1000)]
narrow = [{"ip": f"ip{i}", "asn": random.choice([1, 1, 1, 1, 2, 2, 3, 4]), "user_type": "residential"}
for i in range(1000)]
print("broad ", diversity(broad))
print("narrow", diversity(narrow))
broad {'unique_ips': 1000, 'asns': 60, 'top1_share': 0.028, 'top5_share': 0.125, 'hhi': 0.0176, 'effective_asns': 57.0, 'non_residential_share': 0.0}
narrow {'unique_ips': 1000, 'asns': 4, 'top1_share': 0.506, 'top5_share': 1.0, 'hhi': 0.3466, 'effective_asns': 2.9, 'non_residential_share': 0.0}
The broad pool behaves like 57 equal-sized networks, and its largest network carries under 3% of exits. The narrow pool behaves like fewer than three: half of all exits sit on one network, and every exit is on one of four. On the narrow pool, a single network-level block on the largest ASN would stop half your requests.
Getting a fair sample
A few precautions keep the measurement honest:
- Sample per country. Diversity only means something within a market. Mixing countries inflates the ASN count without telling you anything about any one of them.
- Use enough requests. The number of distinct ASNs keeps growing with sample size, so compare pools at the same sample size. A thousand exits per country is a reasonable start; shares and HHI stabilise faster than the count.
- Count each IP once. Rotating pools can return the same address more than once. The module above deduplicates by IP.
- Spread the sample over time. Residential pools change through the day as devices come and go. Sampling over several hours gives a truer picture than one burst.
- Use the same lookup source for every pool. Different geolocation databases can attribute an address to slightly different networks.
What this means when choosing a provider
Pool size and ASN diversity answer different questions. Size tells you how many addresses you might get; diversity tells you how exposed your traffic is to any one network’s decisions. When evaluating providers, ask for both, and verify them with a sample of your own in the countries you care about.
The same thinking applies to fixed IPs. If you buy ISP proxies for long sessions, spreading them over several providers and cities avoids putting every identity on one network. Our guide to buying ISP proxies without wasting money includes a script for checking a batch of trial IPs, and our ISP proxies let you choose the city and ISP for every IP. How a provider sources its addresses also shapes diversity; our explainer on how providers ethically source residential IPs covers what to ask.
FAQ
What is ASN diversity in a proxy network?
How widely a proxy pool’s IP addresses are spread across different networks (autonomous systems). A diverse pool has many networks with no single one dominating; a concentrated pool has most addresses on a few.
Why does ASN diversity matter for scraping?
Sites often act against whole networks, not single addresses. If most of your exits share a network, one network-level block can affect a large share of your requests.
How do I measure ASN diversity?
Send a sample of requests through the proxy, record the ASN of each exit, and compute the share of the largest networks, the Herfindahl-Hirschman index and the effective number of networks. Sample per country, over time, and at the same size for each pool you compare.
Is a bigger proxy pool always more diverse?
No. A large pool can still be concentrated on a few networks. Pool size and network diversity are separate measurements.
The bottom line
IP counts measure a pool’s size; ASN diversity measures its resilience. Sample exits per country, count each IP once, and look at the effective number of networks, the top-network share and the share of non-residential exits. A healthy residential pool mirrors the local internet market: a few large consumer ISPs and a long tail behind them, with no single network carrying an outsized share of your traffic.