Every "free proxy list" you find is the same story: a giant wall of ip:port lines, 90% of them already dead, no idea which are HTTP or SOCKS, no idea where they exit. You paste 500 into your scraper and three of them work.
So I put up a small one that's actually checked: gproxynet/free-proxy-list. A checker validates each proxy, tags it with protocol, country and latency, and the repo is regenerated every 30 minutes. It's a rotating sample, not a 50k dump — the point is that what's in it was alive minutes ago, not last month.
Grab it
Plain text, one ip:port per line, split by protocol:
curl -s https://raw.githubusercontent.com/gproxynet/free-proxy-list/main/all.txt
curl -s https://raw.githubusercontent.com/gproxynet/free-proxy-list/main/socks5.txt
Or the structured version with protocol, country and latency:
curl -s https://raw.githubusercontent.com/gproxynet/free-proxy-list/main/proxies.json
[
{"proxy":"103.156.224.66:8080","protocol":"http","country":"ID","latency_ms":4225,"checked_at":"2026-07-04T09:34:16Z"},
{"proxy":"185.26.180.180:80","protocol":"http","country":"NL","latency_ms":340,"checked_at":"2026-07-04T09:41:02Z"}
]
Use it in Python
Filter to the protocol and speed you want:
import requests
proxies = requests.get(
"https://raw.githubusercontent.com/gproxynet/free-proxy-list/main/proxies.json"
).json()
fast_socks5 = [
p["proxy"] for p in proxies
if p["protocol"] == "socks5" and (p["latency_ms"] or 9999) < 2000
]
print(len(fast_socks5), "fast SOCKS5 proxies")
If you're rotating them across a scraper, feed the list straight into a pool. I use proxyspin (a small rotating pool with health tracking + ban detection), which can load a URL directly:
from proxyspin import ProxyPool
from proxyspin.requests_adapter import RotatingSession
pool = ProxyPool.from_url("https://raw.githubusercontent.com/gproxynet/free-proxy-list/main/all.txt")
session = RotatingSession(pool) # dead ones get benched automatically
print(session.get("https://httpbin.org/ip").json())
The honest part
These are public proxies. They're shared by strangers, they're slow, they die within minutes to hours, and you should never send anything sensitive through them. A checked list saves you the "which of these 500 is alive" step — it does not make public proxies reliable. They're great for testing, learning, one-off checks and throwaway requests.
The moment you need proxies that stay up — real scraping, account work, ad verification — you'll want dedicated ones (residential, mobile or datacenter) instead of public ones. But if a free, checked, auto-updating list is what you need today, it's there:
➡️ github.com/gproxynet/free-proxy-list
Bookmark the raw URL, poll it every so often, and you've always got a fresh handful to work with.
Top comments (0)