Open proxies anyone can use, and where their traffic exits.
HTTP, HTTPS and SOCKS proxies open to anyone, at the address each listens on and the one its traffic leaves from, with the last day each answered a request.
Schema
See documentation →Published as CSVGZ and MMDB. Every column is described in the docs.
| ip | port | protocol | country | avg_ms | last_usable | last_seen | exit_ip |
|---|---|---|---|---|---|---|---|
| 103.134.220.49 | 1080 | socks5 | ID | 2125 | 2026-10-17 | 2026-10-17 | 103.134.220.144 |
| 1.0.171.213 | 8080 | http | TH | 3460 | 2026-10-17 | 2026-10-17 | 1.0.171.213 |
| 102.0.35.254 | 1080 | socks4 | KE | 4236 | 2026-10-17 | 2026-10-17 | 102.0.35.254 |
| 1.12.125.97 | 8080 | https | CN | 2026-10-17 | |||
| 103.113.153.204 | BD | 2026-07-20 |
Downloading it from code.
Database API reference →One call gets you the current Public Proxy IP build. Every official client wraps it three ways: straight to disk, a time-limited link you hand to your own runner, or bytes in memory. A file written to disk lands only once the whole transfer has arrived, and checksums() returns the published digests to verify it against.
download()downloadUrl()downloadBytes()metadata()checksums()import osfrom vpndetection import VPNDetectionclient = VPNDetection(os.environ["VPNDETECTION_API_KEY"])# to disk, streamedclient.database.download("pubproxy_ip_90d_v1", "csvgz", "pubproxy_ip_90d_v1.csv.gz")# a time-limited linkurl = client.database.download_url("pubproxy_ip_90d_v1", "csvgz")# in memoryraw = client.database.download_bytes("pubproxy_ip_90d_v1", "csvgz")
What it's used for
Three decisions Public Proxy IP is bought for, and what each needs from the data rather than from a score.
Free to use, free to abuse
Anyone can send traffic through an open proxy, at no cost and with no account, which makes them a staple of credential stuffing, scraping and spam.
Both ends of the proxy
A request through a proxy often arrives from another address than the one it listens on. Every record says whether the address is where a proxy listens, where its traffic exits, or both.
Working, or gone quiet
Most public proxies answer only some of the time, so the last day one answered sits beside the last day it was seen, and a proxy that still works can be scored above one that stopped.
Official SDKs
All SDKs on GitHub →Twelve official clients, each wrapping the database endpoints as well as the lookup: list what you're licensed for, poll a build, follow the download redirect. Install commands are in the docs.
Common questions
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.
Are provider ids stable?
Yes. A provider id is stable across builds so a rule you write against an operator keeps working as its ranges rotate.
Can I download the whole dataset?
With the db.download scope, as gzipped CSV or MMDB where published. Poll the metadata endpoint first and fetch only when the build has changed.
What if an address looks wrong?
Send it to support and we will tell you what we hold on it, when we last saw it and by which method. Corrections go into the next build.
Does a flag here mean I should block?
No. It means the address has that property. Whether to block is your policy, and the evidence fields are there to inform it.
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}