A free proxy list that’s actually checked (HTTP/SOCKS4/SOCKS5, updated every 30 min)

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.

Leave a Reply