Test
1 GB
$2.63
$2.63/GB
- Check one ISP in one city first
- ASN, state, city and ZIP targeting
- HTTP, HTTPS, SOCKS5
Use case · QA and support
Some tickets only make sense on one network. It fails on fixed wireless, the wrong city shows up, or an image is stale on one cable provider. A home IP on that network turns the ticket into a test you can repeat.
Quick answer
How do I reproduce a bug that only happens on one internet provider?
Network bug reproduction means repeating a customer's failure from the same kind of connection: same provider, same city, ideally the same hour. Broadband Proxies gives QA and support teams US home IPs by ASN and city. Sticky sessions last up to 30 minutes (the IP can change earlier, for example if the home device goes offline). A 1 GB plan costs $2.63; there is no KYC and payment is in crypto.
| Typical tickets | Fails only on fixed wireless, wrong city or state detected, stale content on one network, blocked as suspicious |
|---|---|
| Targeting | ASN plus state, city or ZIP, e.g. USERNAME-country-us-state-az-city-phoenix-asn-22773 (Cox network in Phoenix) |
| Sticky sessions | up to 30 minutes (the IP can change earlier, for example if the home device goes offline) |
| Protocols | HTTP, HTTPS (CONNECT) and SOCKS5 |
| What to log | Requested targeting, exit IP, origin ASN, UTC time window, session id |
| What it cannot copy | The customer's router, Wi-Fi, device and local DNS settings |
| Price | $2.63 for 1 GB, $5.94 for 10 GB, sub-users per project |
A residential exit gives your service the customer network's public IP. Any logic keyed on that IP will behave as it does for the customer. Four kinds of tickets come up often.
A proxy copies the public IP and its network, not the whole connection. The customer's router, Wi-Fi, browser extensions and device stay out of reach. Ask for a browser version and a screenshot to cover those.
DNS is another limit. Through a proxy, names may be resolved by the proxy network rather than by the ISP's resolver, so DNS-only bugs need another method.
IPv6 needs care too. The check below uses api.ipify.org, which answers over IPv4 only. If a bug appears only over IPv6, a proxy test can rule the IPv4 path in or out. You still need a native IPv6 line to confirm the rest.
Collect the network facts
Ask for the ISP name, the city or ZIP, the time of the failure and the error text. A lookup such as our exit IP guide gives the ASN without sharing passwords or router access.
Build a sticky username
For a Cox customer in Phoenix: USERNAME-country-us-state-az-city-phoenix-asn-22773-session-bug4521-ttl-30.
Confirm and log the exit
Run the script below. It records the exit IP, the origin ASN and the prefix, then watches for an IP change.
Reproduce within the session
Use the same username in the browser or test runner. Finish inside the session window, and note any IP change.
Run a control network
Repeat the steps on another ASN in the same city. If the bug disappears, the network is part of the cause.
# Keep one sticky exit for a bug reproduction and write a record for the ticket.
import json
import time
from datetime import datetime, timezone
import requests
GATEWAY = "gw.broadbandproxies.com"
PORT = 7777
TARGET = "country-us-state-az-city-phoenix-asn-22773" # Cox network in Phoenix
SESSION = "bug4521"
USERNAME = "USERNAME-" + TARGET + "-session-" + SESSION + "-ttl-30"
PASSWORD = "PASSWORD"
proxy = "http://%s:%s@%s:%d" % (USERNAME, PASSWORD, GATEWAY, PORT)
proxies = {"http": proxy, "https": proxy}
def now():
return datetime.now(timezone.utc).isoformat(timespec="seconds")
def exit_ip():
r = requests.get("https://api.ipify.org?format=json", proxies=proxies, timeout=30)
r.raise_for_status()
return r.json()["ip"]
def origin(ip):
r = requests.get(
"https://stat.ripe.net/data/prefix-overview/data.json",
params={"resource": ip, "sourceapp": "bug-repro"},
timeout=30,
)
r.raise_for_status()
data = r.json()["data"]
return [a["asn"] for a in data.get("asns", [])], data.get("resource")
ip = exit_ip()
asns, prefix = origin(ip)
record = {"target": TARGET, "session": SESSION, "start_utc": now(), "exit_ip": ip,
"origin_asns": asns, "prefix": prefix, "ip_changes": []}
# Reproduce the bug in the browser now, with the same username.
# This loop only checks every 5 minutes that the exit IP has not moved.
for _ in range(5):
time.sleep(300)
current = exit_ip()
if current != ip:
record["ip_changes"].append({"time_utc": now(), "new_ip": current,
"origin_asns": origin(current)[0]})
ip = current
record["end_utc"] = now()
print(json.dumps(record, indent=2))| Field | Example | Why it matters |
|---|---|---|
| Requested targeting | country-us-state-az-city-phoenix-asn-22773 | A colleague can run the same test later |
| Exit IP | 203.0.113.24 (documentation range) | Search your server and CDN logs for it |
| Origin ASN and prefix | AS22773, from RIPEstat | Proves the network, not just the request |
| UTC time window | 2026-10-18 14:05 to 14:30 UTC | Matches log lines across time zones |
| Session id and TTL | bug4521, 30 minutes | Shows whether the IP stayed the same |
| Result | HTTP 403 on /checkout/ | The bug, reproduced or not |
| Control | Same city on AS209: no error | Separates network causes from code causes |
Test your own site, app or API, or a system whose owner has asked you to. Reproducing a ticket should take a handful of requests, not a crawl. Our Acceptable Use Policy forbids floods and scans of systems without the owner's permission.
Keep customer data out of usernames and session ids. Use a ticket number such as bug4521, never an email or a name. Banking, government and payment-portal sites are blocked on every plan, so payment-provider pages cannot be tested through the gateway.
A single reproduction is often a few page loads plus the checks in the script. 1 GB ($2.63) covers a trial on one ISP and city. 10 GB ($5.94) suits a QA team with one sub-user per tester. Traffic never expires.
1 GB
$2.63
$2.63/GB
5 GB
$3.75
$0.75/GB
10 GB
$5.94
$0.59/GB
In every plan: Protocols: HTTP, HTTPS, SOCKS5 · Targeting: ASN (ISP), state, city and ZIP in the US; country elsewhere; city availability varies · Sessions: Rotating or sticky (up to 30 minutes) · Authentication: Username and password, or an IP allowlist (up to 10 IPs) · Traffic expiry: Never expires
Yes, within a sticky session: up to 30 minutes (the IP can change earlier, for example if the home device goes offline). Put -session-<id>-ttl-<minutes> at the end of the username, and reuse the same id in every tool. Log the exit IP at the start and the end. If it changed, say so in the ticket, because a new IP may be on a different prefix.
Often, yes. Target AS21928 for T-Mobile Home Internet or AS22394 for Verizon 5G Home. Exits on those networks usually share addresses with other users, as the customer's line does. Broadband Proxies cannot tell whether a given exit is a home gateway or a phone, so note the ASN rather than the device type.
Not as shown here. The example checks the exit with api.ipify.org, which answers over IPv4 only. If the customer's failure happens only over IPv6, the proxy test tells you whether the IPv4 path is fine. Confirm the IPv6 side from a native IPv6 connection.
The ISP name, the city or ZIP, the time of the failure, the browser and the exact error. The ASN helps most: a lookup page shows it without any login. Never ask for passwords, router access or remote control of the customer's device. Those are not needed to test the network side.
Yes. Create a sub-user for each tester or project. Each sub-user has its own credentials, traffic cap and usage totals. You can also allow up to 10 IPs instead of a password, which suits CI runners with fixed addresses. Traffic comes from the one plan you bought.
ASN availability varies by network, city and time of day; the checkout shows what is online, and no IP count per ISP is published. Drop the ZIP first, then the city, and keep the ASN with the state. A smaller provider may only be online at some hours, so retry at the time of day the customer reported. Note in the ticket which level of targeting you used.
1 GB $2.63 · ASN included · no KYC
Get started