Open proxies anyone can use, and where their traffic exits.
HTTP, HTTPS, SOCKS4 and SOCKS5 proxies open to anyone, one row per proxy with its address, port, protocol and country, and for each that answered a request, how fast, the last day it did and the address its traffic left from.
Schema at a glance.
See documentation →The schema and metadata are in the docs. It is published as CSVGZ and MMDB.
| 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, and checksums() returns the published digests to verify it against.
download()downloadUrl()downloadBytes()metadata()checksums()import osfrom internetdata import InternetDataclient = InternetData(os.environ["INTERNETDATA_API_KEY"])# what is in today's build, without moving the filemeta = client.database.metadata("pubproxy_ip_90d_v1")client.database.download("pubproxy_ip_90d_v1", "mmdb", "./pubproxy_ip_90d_v1.mmdb")sums = client.database.checksums("pubproxy_ip_90d_v1", "mmdb")print(meta.updated, meta.entries, sums["sha256"])
Getting your hands on it.
Teams join Public Proxy IP against traffic they already log, inside their own infrastructure, and never send an address anywhere to get an answer.
Rules and scoring
Match a request on either end of a proxy, the address it listens on or the one its traffic leaves from, and weigh it by the last day the proxy answered.
Account and payment risk
Spot a signup, login or checkout that arrives through a proxy anyone can use, rather than from the person's own connection.
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: list what you're licensed for, poll a build, follow the download redirect and verify what landed. Install commands are in the docs.
What does a row tell us?
One proxy seen in the window: the address it listens on, its port and protocol, and the address's country. For a proxy that answered a request in the window, also the last day it did, how long its answers took on average and the address its traffic left from.
Why does exit_ip differ from ip?
Many proxies send their traffic out from another address than the one they listen on, so a request through one arrives from exit_ip. Match both: the MMDB has a record for each, marked entry, exit or both.
Why are avg_ms, last_usable and exit_ip empty on some rows?
The proxy didn't answer a request in the window. Most public proxies are unreachable much of the time, so weigh a row without an answer below one with a recent last_usable.
Why do some rows have no port or protocol?
The address ran a public proxy whose port isn't known. The row is dropped once a row of the same address has a port.
Which window should we use?
90 days is the widest net. The 1, 7, 14, 30 and 60-day windows hold the same proxies over shorter spans, each with an MMDB, for when a proxy seen weeks ago is too old to act on.
Can we see a sample?
Yes, by request: Download sample opens the contact form with this database named, and we send a slice of the current build.
How often is it rebuilt?
Daily. The metadata call answers when the current build landed and how many rows it holds, before you fetch it.
Which formats does a build ship in?
Gzipped CSV and MMDB, both cut from the same build. Poll the metadata call first and fetch only when the build has changed.
What if a row looks wrong?
Send it to us and we'll tell you what we hold on it, when we last saw it and how. Corrections land in the next build.
Test the real build first.
An evaluation license puts a full current build in your hands, with no sampling, so you can measure it against your own traffic before anyone talks about terms.