On this page
Residential proxy addresses churn fast, and the usual conclusion is that a list of them is stale before it loads. IPinfo's churn study puts it as "yesterday's data is already outdated". We measured how outdated. We took every address we saw in residential proxy networks on 2026-09-27, 4,906,602 IPv4 and 302,853 IPv6, and checked it against our Residential Proxy IP lists as they stood 1, 7, 30 and 90 days before.
Yesterday's 90-day list already held 91.4% of the day's IPv4, and the one from three months earlier still held 63.0%. It held 11.2% of the IPv6, and 61.7% once IPv6 is matched on its /64 instead of the full address.
IPv4: what a list still catches
The share of the day's IPv4 that each list already held, by the list's window and its age:
| Window | IPv4 in the list | 1 day old | 1 week old | 1 month old | 3 months old |
|---|---|---|---|---|---|
| 1 day | 4.96M | 53.2% | |||
| 7 days | 15.1M | 77.3% | 62.9% | ||
| 14 days | 22.6M | 82.3% | |||
| 30 days | 35.3M | 86.5% | 76.3% | 64.5% | |
| 60 days | 54.0M | 89.7% | |||
| 90 days | 69.2M | 91.4% | 83.8% | 74.2% | 63.0% |
A 30-day list from yesterday (86.5%) beats a 90-day list a week old (83.8%): reloading daily buys more than reaching further back.
The longer window's cost is its size. The 90-day list holds 4.6 times the IPv4 of the 7-day list for 91.4% against 77.3%, and every extra address is a connection that carried proxy traffic at some point in the last three months and may carry a real customer today. So block on a short window, where a hit is recent, and score on a long one, where a hit is one signal among the rest of the session's. The 90-day file carries each address's last_seen and hits (schema), so a hit can be weighed by how recent and how frequent it was.
IPv6: match the /64, not the address
The share of the day's IPv6 that the 90-day list already held, by what's matched:
| Matched on | 1 day old | 1 week old | 1 month old | 3 months old |
|---|---|---|---|---|
| Full address | 11.2% | 3.7% | 1.5% | 0.9% |
| /64 | 61.7% | 46.9% | 31.5% | 21.2% |
| /48 | 98.6% | 97.1% | 94.5% | 90.6% |
A device picks a new IPv6 address within its home network's /64 on its own schedule, often daily, so the full address rarely comes back and the /64 often does. A /64 is one home network, the IPv6 counterpart of the one IPv4 address a home router shares. A /48 catches nearly all of it, but it holds 65,536 /64s, and depending on how the ISP hands out prefixes it's one subscriber's or thousands'. A /48 hit is a reason to look harder, not to block.
Run the list and your traffic through the same key, then look it up:
import ipaddress
def list_key(addr: str) -> str:
ip = ipaddress.ip_address(addr)
if ip.version == 6:
return str(ipaddress.ip_network((ip, 64), strict=False))
return str(ip)Which window for which job
All six windows, 1, 7, 14, 30, 60 and 90 days, are rebuilt daily as gzipped CSV, and the 1-day, 7-day and 14-day also as MMDB, for a lookup in process. By the numbers above:
- Blocking outright: the 7-day or 14-day list, reloaded daily.
- A step-up such as a CAPTCHA or a verification: the 30-day.
- Scoring, and looking into an incident after the fact: the 90-day.
How we measured
An address is caught when it was already in the list as that list stood the given number of days before. The base is every address we saw in residential proxy networks on 2026-09-27, so this measures how much of our own next day a list anticipates, not every proxy IP on the internet.
A month earlier, on 2026-08-31, the same check against yesterday's 90-day list gave 91.3% of IPv4, and of IPv6 19.0% on the full address and 66.6% on the /64. The IPv6 base was larger then, 831,665 addresses against 302,853: we've since temporarily lost tracking of a few networks, and that coverage will pick back up.
To license the lists, see pricing or talk to us.


