Suppose you buy 20 ISP proxies for a batch of seller accounts. You run the first IP through a lookup tool and it comes back tagged as hosting. A week later, three accounts sitting on the same /24 get checkpointed on the same afternoon.
The product page didn't warn you, because product pages describe ISP proxies as one thing with one property: trust. In reality they're a stack of five layers, and each layer can give you away on its own.
In this guide, I'll break down what ISP proxies are, how they differ from the four or five terms people use interchangeably with them, and how to check every layer yourself with a few lines of Python.
If you want, you can take a look at this YouTube video as well, where we explain ISP Proxies work easily.
What are ISP proxies?
ISP proxies are proxy servers that run on datacenter hardware but use IP addresses registered to a consumer internet provider like Comcast or AT&T. Websites that check the IP's ASN see a home broadband network, while you get server-grade speed and a static IP that stays yours for weeks. Use them for logged-in, long-session work.
Two things are true about an ISP proxy at the same time. On paper, the address belongs to a consumer ISP: the regional registry lists the ISP as the holder, and ideally the ISP's own network announces the route. Physically, the address terminates on a rack server with a gigabit uplink and no Wi-Fi anywhere near it.
That split is the product. Most IP reputation checks start with "whose network is this?", and an ISP proxy answers "Comcast" instead of "Amazon" or "Hetzner." You clear the first gate at server speed, and nobody's router going to sleep can end your session.
You'll also see them sold as static residential proxies. Same product, older name; the sneaker-bot crowd popularized "ISP proxies" and it stuck.
ISP proxies vs. static residential vs. datacenter vs. sticky residential
Provider pages blur these terms together. Pick the wrong one and you end up paying per-IP prices for a job that needed rotation, or per-GB prices for a job that needed one stable address.
| Term | What it is | When you'd use it | Example |
|---|---|---|---|
| ISP proxy | Datacenter server, IP registered to a consumer ISP, same IP for the whole rental | Logged-in sessions, account work, moderate scraping of sites that check IP reputation | One IP on AS7922 (Comcast) pinned to one seller account for 30 days |
| Static residential proxy | A second name for an ISP proxy | Same as above | Same product, older label |
| Dedicated datacenter proxy | Datacenter server, IP registered to the hosting company | Unprotected targets, internal tools, bulk jobs where nobody checks the ASN | An IP on AS24940 (Hetzner) polling a public API |
| Rotating residential, sticky session | Traffic exits through a real household device; the gateway holds one exit for a set time | Large crawls against strict targets, short sessions | Same exit for 10 minutes, then the timer ends or the device goes offline |
| Residential filtered by ISP | A rotating residential pool where you pick the carrier | Carrier-specific checks at scale | Every exit belongs to a Verizon Fios customer, but the exit keeps changing |
| Rotating ISP proxy | A gateway that cycles through a pool of ISP IPs | ISP-grade speed plus rotation | Each request leaves from a different ISP IP |
The "filtered by ISP" row causes the most mix-ups. Roundproxies sells that product as Proxy by ISP, and it's rotating residential traffic, not an ISP proxy. The shared word does nobody any favors.
A worked scenario makes the split clearer. Say you monitor prices on 10,000 product pages a day and also run 15 seller accounts on the same marketplace.
The 10,000 pages want rotation. A rotating residential pool is the safe default; a rotating ISP gateway works if the site only checks the ASN.
Each of the 15 accounts wants its own ISP proxy, held for months, because a login from a new IP every morning looks like account sharing. A cheap datacenter proxy can feed the marketplace's open API, if it has one. And if your invoice says "static residential," you bought ISP proxies.
The 5 layers of an ISP proxy
Every ISP proxy has five parts you can check independently. Providers usually get the first two right. Layers three to five are where the quality gap shows up.
1. The address block
Every IPv4 address traces back to a regional internet registry: ARIN for North America, RIPE NCC for Europe, APNIC for Asia-Pacific. Registries allocate blocks to ISPs, and ISP proxy providers lease slices of those blocks from the ISP under a commercial agreement.
The registry record is public. You can look it up through RDAP, the JSON-based successor to WHOIS. If the record names a consumer ISP, good. If it names a company you've never heard of, the "ISP" label is doing a lot of work.
Where you'll hit this: checking a provider's claims before you pay, or figuring out why one IP in your list behaves differently from the rest.
How it works in practice: this lookup goes from your machine straight to rdap.org, which redirects to the right registry. The proxy isn't involved.
import requests
IP = "203.0.113.10" # replace with one of your proxy IPs
def rdap_network(ip: str) -> dict:
# rdap.org redirects to ARIN, RIPE, APNIC, etc. based on the IP
r = requests.get(f"https://rdap.org/ip/{ip}", timeout=10)
r.raise_for_status()
data = r.json()
return {
"network": data.get("name"), # the network label on file
"range": f"{data.get('startAddress')} - {data.get('endAddress')}",
"country": data.get("country"),
}
print(rdap_network(IP))
The network name tells you who holds the block. It says nothing about who routes it, which is the next layer.
2. The route announcement (ASN)
Holding a block and routing it are separate jobs. An autonomous system (AS) announces "send traffic for this prefix to me" over BGP, and the AS number is what most IP intelligence databases key their classification on.
In a clean setup, the ISP's own AS announces the prefix. In a weaker one, the provider announces the ISP-held block from its own AS, so the registry says ISP, the routing says someone else, and IP checkers report two operators for one address.
At least one vendor tells customers this "dual ISP" result is expected. It's common, sure. It's also the cheapest mismatch for a detector to spot, so I'd rather not pay ISP prices for it.
Where you'll hit this: two IP checkers disagreeing about the same address, or an IP that passes one site and fails another.
How it works in practice: Team Cymru's IP-to-ASN service is free and answers over DNS. Two TXT lookups give you the origin AS and its name.
import dns.resolver # pip install dnspython
def origin_asn(ip: str) -> tuple[str, str]:
rev = ".".join(reversed(ip.split(".")))
# Answer format: "ASN | prefix | CC | registry | allocated"
txt = dns.resolver.resolve(f"{rev}.origin.asn.cymru.com", "TXT")[0]
asn = txt.to_text().strip('"').split("|")[0].split()[0]
# Second lookup maps the AS number to the operator name
txt = dns.resolver.resolve(f"AS{asn}.asn.cymru.com", "TXT")[0]
name = txt.to_text().strip('"').split("|")[-1].strip()
return asn, name
print(origin_asn("203.0.113.10")) # e.g. ('7922', 'COMCAST-7922 - Comcast ...')
Put the AS name next to the RDAP network from layer 1. Same ISP in both means routing matches registration. Different names means you're on the dual-ISP setup.
3. The server (where the hardware sits)
The registry and the route say "Comcast, Dallas." The server might sit in Ashburn, Virginia, because that's where the provider rents rack space. Geolocation databases mostly go by registration, so a basic lookup won't show the gap.
The network path does. Cloudflare's anycast network sends each connection to the data center closest, in routing terms, to where the server plugs into the internet, and its /cdn-cgi/trace page prints that data center's airport code.
Where you'll hit this: geo-targeted prices that don't match the city you paid for, or latency that's wrong for the claimed location.
How it works in practice: request the trace page through the proxy, then compare loc and colo with what you bought.
import requests
PROXY = "http://user:[email protected]:8000" # your ISP proxy
def cf_trace(proxy: str) -> dict:
r = requests.get("https://www.cloudflare.com/cdn-cgi/trace",
proxies={"http": proxy, "https": proxy}, timeout=10)
# The body is plain "key=value" lines: ip=..., loc=US, colo=IAD, ...
return dict(line.split("=", 1) for line in r.text.splitlines() if "=" in line)
t = cf_trace(PROXY)
print(t["ip"], t["loc"], t["colo"]) # colo is an airport code: IAD, DFW, FRA
A "Dallas" IP that keeps landing at IAD lives in Virginia. For most scraping, who cares. It starts to matter when a target compares the IP's claimed city with measured round-trip time, which fraud and bot vendors increasingly do.
If I could run only one check on a new batch, it would be this one. Registration and routing are paperwork. Where the box plugs in is physics, and physics is harder to fake.
4. The gateway (how your client connects)
This is the only layer your code touches. You connect to the provider's endpoint over HTTP(S) or SOCKS5 and authenticate with username and password or by whitelisting your own IP. The provider's server then opens a new connection to the target from the ISP address.
Endpoints come in two styles. A static endpoint maps one host:port to one IP for the whole rental. A rotating ISP gateway maps one host:port to a pool and changes the exit per request, or per session ID in the username. Same IP space, very different behavior, so confirm which one you got.
Where you'll hit this: "my IP keeps changing" on a product sold as static, or logins that break mid-session.
How it works in practice: reuse one session for a handful of requests and count the distinct exits.
import requests
PROXY = "http://user:[email protected]:8000"
with requests.Session() as s:
s.proxies.update({"http": PROXY, "https": PROXY})
seen = {s.get("https://api.ipify.org", timeout=10).text for _ in range(5)}
# A static ISP endpoint returns exactly one address
print("static" if len(seen) == 1 else f"rotating: {seen}")
More than one address means a rotating gateway. For account work, ask the provider for static endpoints. Retries, SOCKS5, and auth options are covered in our Python requests proxy guide.
5. The session (reputation sticks to the IP)
A static IP builds history. Every login, every captcha passed or failed, every burst of requests gets tied to that address in the target's logs and in shared reputation feeds. For account work that's the point: an IP that's logged into the same account for 60 days looks like somebody's house.
It's also the catch. A rotating pool forgets; an ISP proxy doesn't. Get it flagged on Tuesday and it's still flagged on Friday, with no pool to rotate into. Subnet blocks make it worse, because a target that bans a /24 takes out every neighbor you bought in that range.
Where you'll hit this: one IP that suddenly fails everywhere, or several IPs dying on the same day.
How it works in practice: count blocks per IP and bench an address after three in a row; a plain dict of counters does the job. After 24 to 48 hours of silence, send one low-stakes request. Still blocked? Ask for a replacement, which many providers include for flagged IPs.
What a detector sees when an ISP proxy connects
The ASN check is the first gate, not the only one. Bot-management and fraud stacks layer several network signals on top, and ISP proxies pass some of them better than others.
| Signal | Residential exit | ISP proxy | Datacenter proxy |
|---|---|---|---|
| ASN / usage type | Consumer ISP | Consumer ISP, if the provider is clean | Hosting |
| Registry vs. routing | Match | Match, or "dual ISP" | Match (both hosting) |
| Reverse DNS (PTR) | ISP-style, e.g. c-73-x-x-x.hsd1.ca.comcast.net |
Often missing or generic | Hosting-style or missing |
| TCP/IP stack | The device's own OS | Linux server, nearly always | Linux server |
| Latency vs. claimed city | Matches, with home-network jitter | Can be off by hundreds of miles | No residential claim to check |
| Subnet neighbors | Scattered households | Dense blocks of proxy IPs | Dense blocks of servers |
The TCP row is the one people forget. A proxy terminates your TCP connection and opens its own, so the target sees the proxy server's kernel, not your machine.
Passive fingerprinting tools like p0f read the initial TTL (64 on Linux, 128 on Windows) and the order of TCP options.
Send a Windows Chrome user agent through a Linux box and those two facts disagree. No ISP proxy fixes that. It's true of every server-hosted proxy, and it's one reason residential exits still win on the strictest targets.
Reverse DNS is the easiest of these to check yourself. Run it from your own machine, not through the proxy:
import socket
def ptr(ip: str) -> str | None: # Python 3.10+
try:
return socket.gethostbyaddr(ip)[0]
except (socket.herror, socket.gaierror):
return None # no PTR record at all
for ip in ["203.0.113.10", "203.0.113.11"]:
print(ip, ptr(ip) or "no PTR")
One missing PTR proves nothing; plenty of real business lines don't have one. Fifty "residential" IPs where none has a PTR is a pattern, and pattern is what detectors score.
How to set up ISP proxies without burning them
1. Decide which jobs need a static IP
Split your workload before you buy anything. Anything with a login, a cart, or a multi-step flow goes on static ISP proxies. Anything that's "fetch a lot of public pages" goes on rotation, residential or ISP.
Mixing the two on the same IPs is the most common way people burn ISP proxies: the scraper hammers an IP at 3am, and the account that lives on it pays for it at 9am.
2. Verify a sample before you commit
Buy the smallest package the provider sells and run layers 1 to 3 against five IPs. Then check how the full list spreads across /24 blocks:
import ipaddress
from collections import Counter
# isp_proxies.txt: one "host:port:user:pass" per line
hosts = [line.split(":")[0] for line in open("isp_proxies.txt") if line.strip()]
blocks = Counter(
str(ipaddress.ip_network(f"{h}/24", strict=False)) for h in hosts
)
for block, n in blocks.most_common():
print(f"{block:<18} {n} IPs")
Twenty IPs in one /24 means one subnet ban kills all twenty. Ask for a spread across several blocks before you scale. Our guide on how to test proxies covers speed and anonymity checks for the same sample.
3. Pin one identity to one IP
The value of an ISP proxy is that an account always comes from the same place. So write the assignment down instead of picking IPs at random:
import json
import pathlib
STORE = pathlib.Path("assignments.json")
POOL = [line.strip() for line in open("isp_proxies.txt") if line.strip()]
def proxy_for(account_id: str) -> str:
table = json.loads(STORE.read_text()) if STORE.exists() else {}
if account_id not in table:
free = [p for p in POOL if p not in table.values()]
if not free:
raise RuntimeError("More accounts than IPs; buy more or share on purpose")
table[account_id] = free[0]
STORE.write_text(json.dumps(table, indent=2))
return table[account_id]
A hash of the account ID modulo the pool size looks tempting and breaks the day you add one IP, since every account shifts to a new address. A stored table survives pool changes.
4. Make the rest of the fingerprint agree with the IP
A Comcast IP in Texas with a browser set to Europe/Berlin and German Accept-Language headers contradicts itself. Match timezone, locale, and language to the IP's registered location.
The TCP stack matters here too. If the target fingerprints at that level, a Linux user agent is more consistent than pretending to be Windows.
5. Start with five IPs and a spreadsheet
You don't need a rotation framework, a health dashboard, and a Redis-backed scheduler on day one. Five IPs, the assignments.json above, and a column for "last blocked" will tell you within a week whether the provider's IPs hold up on your targets. Build tooling once you know what breaks.
ISP proxies in practice
Multi-account work
Seller dashboards, ad accounts, and social profiles all watch login location. This is where ISP proxies earn their price: one IP per account, held for the life of the account, paired with a browser profile that doesn't change between sessions.
The trigger to watch is a security prompt right after login. If it appears on the first login from a new ISP proxy and never again, that's normal. If it keeps appearing, check layers 2 and 3 on that IP before blaming the account.
Price and stock monitoring at moderate volume
For a few thousand pages a day against a site that checks ASN but doesn't fingerprint heavily, a small pool of ISP proxies with per-IP rate limits beats paying per GB.
The math flips at tens of thousands of pages, or on a target with strict bot management. There, rotating residential costs less than replacing burned ISP IPs.
If the target sits behind aggressive fingerprinting, read how residential proxies work before you buy more static IPs.
SERP rank tracking
Rank tracking needs a consistent location more than a consistent identity. ISP proxies registered in the city you track give stable local results, and the gigabit uplink keeps batch runs short. Spread requests over the day and across several IPs; search engines rate-limit by IP and by subnet.
ISP proxy pitfalls and how to avoid them
Check the ASN yourself, not the product page
Some "ISP" IPs are hosting IPs with better marketing. When Proxyway tested one static residential provider, more than 35% of its IPs showed up as datacenter addresses in IP databases. Run the Team Cymru lookup on a sample before you pay for volume.
Spread IPs across subnets
Ask how many distinct /24 blocks your order will cover, then verify it with the subnet script. Ten IPs across ten blocks survive a range ban. Ten IPs in one block don't.
Keep one account per IP
Two unrelated accounts logging in from the same static IP is exactly the link platforms look for. If you have more accounts than IPs, buy more IPs, or group accounts on purpose knowing a ban on one can spread to the others.
Replace flagged IPs instead of retrying through them
Retrying through a flagged static IP adds more bad history to an address that's already marked. Bench it, test it once after a cooldown, and swap it if it's still blocked.
Fix the fingerprint when the IP isn't the problem
ISP proxies only fix IP reputation. If a target blocks you on a TLS fingerprint, a headless browser leak, or robotic mouse movement, a better IP changes nothing.
A quick test: send the same request from your home connection with the same client. If it's blocked there too, the IP isn't your problem, and no proxy type will be.
FAQ
Are ISP proxies the same as static residential proxies?
Yes. Both names describe a datacenter-hosted server using an IP registered to a consumer ISP. "Static residential" is the older label; "ISP proxy" is what most providers use now.
Are ISP proxies better than residential proxies?
For long logged-in sessions, usually yes, because the IP never changes and the connection is faster. For large crawls against strict targets, rotating residential proxies win, since a burned IP gets replaced by the pool instead of staying burned.
Can websites detect ISP proxies?
Some can. The ASN check usually passes, but detectors can also compare registry and routing records, read the server's TCP stack, check reverse DNS, and measure latency against the claimed city. The better the provider's routing and hosting, the fewer of those signals line up against you.
Why does an IP checker say my ISP proxy is a hosting IP?
Usually because the provider announces the ISP's block from its own network, so the routing record points to a hosting company while the registry still names the ISP. It can also mean the database has flagged the whole range from past proxy use. Either way, ask for a replacement.
Do ISP proxies rotate?
Not by default. A standard ISP proxy keeps one IP for the whole rental. Some providers also sell rotating ISP gateways that cycle through a pool of ISP IPs, which gives you rotation at server speed, with a smaller pool than residential.
Wrapping up
The one-line mental model: an ISP proxy is a server wearing an ISP's name tag, and detectors check more than the name tag. Registration and routing get you past the first gate; server location, TCP stack, and your own session habits decide how long you stay.
Start by running the ASN and colo checks on five IPs before you buy fifty. If you're weighing providers after that, our list of the best ISP proxies compares them on the layers covered here, and the datacenter proxies explainer covers the cheaper option for targets that don't check.