Operating-system and browser privacy relays.
Apple Private Relay, Google's VPN and similar platform relays — privacy features shipped to ordinary customers, not abuse infrastructure.
Schema at a glance.
See documentation →The database's schema and metadata are documented carefully. Multiple formats are available, including CSVGZ and MMDB.
| start_ip | end_ip | provider | confidence | last_seen |
|---|---|---|---|---|
| 2a02:26f7:b550:4000:: | 2a02:26f7:b550:4000:ffff:ffff:ffff:ffff | apple_private_relay | high | 2026-09-06 |
| 2a02:26f7:e7c2:4000:: | 2a02:26f7:e7c2:4000:ffff:ffff:ffff:ffff | apple_private_relay | high | 2026-09-06 |
| 2606:40:21dc:4000:: | 2606:40:21dc:43ff:ffff:ffff:ffff:ffff | google_vpn | high | 2026-09-06 |
| 2606:40:219a:2000:: | 2606:40:219a:23ff:ffff:ffff:ffff:ffff | google_vpn | high | 2026-09-06 |
| 2a02:26f7:ef00:59d9:: | 2a02:26f7:ef00:59da:ffff:ffff:ffff:ffff | apple_private_relay | high | 2026-09-06 |
Downloading it from code.
Database API reference →One call gets you the current Relay IP build. Every official client wraps it three ways — straight to disk, a signed link you hand to your own runner, or bytes in memory — and each verifies the published checksum before it hands the build back.
download(path)url(expires)bytes()build()formatsince(build)from vpndetection import Clientclient = Client(os.environ["VPNDETECTION_API_KEY"])db = client.database("relay_ip_v1", format="csvgz")db.download("relay_ip_v1.csv.gz") # to diskurl = db.url(expires=3600) # signed linkblob = db.bytes() # in memorydb.build().published # last build
Getting your hands on it.
Where Relay IP earns its place in a risk stack — and what each of these decisions needs from the data rather than from a score.
Do not punish a checkbox
Relay users are usually your best customers with a privacy setting on. Separating them from VPN traffic prevents an expensive class of false positive.
Keep geo decisions honest
Relay egress rarely matches the customer's real region — treat location from these addresses as unknown rather than wrong.
Named per platform
Provider tells you whether it is Apple, Google or another platform, so you can allow one without allowing all.
An official client for every major language.
All SDKs on GitHub →Twelve official clients for the languages you ship in, each wrapping the database endpoints as well as the lookup — list what you are licensed for, poll a build, follow the download redirect. Install commands are in the docs.
No loose ends.
How often does this dataset rebuild?
Every dataset publishes its own cadence and its last build date. The proxy datasets additionally carry a rolling 90-day observation window, so first seen and last seen are relative to that window.
Start without signing up.
Paste it into a terminal — no account needed. 1k daily allowance per user, answering ip and is_vpn.
{"ip": "45.83.91.1","is_vpn": true}