Every commercial VPN exit, with the operator named.
The addresses commercial VPN services exit from — attributed to the service, scored for confidence, and rebuilt every day.
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 |
|---|---|---|---|---|
| 216.131.87.112 | 216.131.87.127 | ipvanish | high | 2026-09-08 |
| 208.85.18.71 | 208.85.18.71 | tunnelbear | high | 2026-09-07 |
| 187.13.129.184 | 187.13.129.187 | nordvpn | high | 2026-09-07 |
| 172.235.240.0 | 172.235.240.11 | metrovpn_net | medium | 2026-09-04 |
| 95.170.13.20 | 95.170.13.23 | pingvpn_pingsecure | low | 2026-06-16 |
Downloading it from code.
Database API reference →One call gets you the current VPN 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("vpn_ip_v1", format="csvgz")db.download("vpn_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 VPN IP earns its place in a risk stack — and what each of these decisions needs from the data rather than from a score.
Stop account sharing and region hopping
Knowing the service, not just that a VPN is present, lets you treat a privacy-conscious customer differently from a bulk abuse network.
Tune rules per operator
Provider ids are stable across builds, so a rule you write against one service keeps working as its ranges rotate.
Explain the decision
Confidence and last seen give a support team something concrete to say when a legitimate customer is challenged.
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}