A free rotating proxy, one address that sends each request out through a new working IP, is not something you can get for free and rely on. What you can get free is a list of public proxies that you rotate yourself, a trial or free quota of a paid rotating service, or Tor. We measured the list route. At 21:39 UTC on 26 September 2026, about one entry in five of our 48-hour list was working. Rotating a free list pays off only with short timeouts, a check that the page is real, and a list you reload often. The tested code is below.
What "rotating" means, and why free gateways are rare
A rotating proxy is one gateway address with a pool behind it. Each request, or each few minutes, leaves through a different IP from that pool. What is a rotating proxy explains the design in full.
People want rotation because sites limit requests per address. The standard answer is HTTP 429, which RFC 6585 defines as a client that "has sent too many requests in a given amount of time". Spread the same requests over many addresses and each one stays under the limit.
A free list is not a gateway. It is a file of addresses, and keeping the dead ones out is your job. The "rotating proxy" products sold next to free lists are paid gateways. One we read on 26 September 2026 rotates on every request on one port and every 30 minutes on others, with a 15-day money-back guarantee.
The free options, and the catch of each
Free ways to rotate proxies
| Option | What you get | The catch |
|---|---|---|
| A free list you rotate yourself | Thousands of addresses, no key | Many stop answering within hours; you drop the dead ones |
| A trial or free quota | Real rotation, for a while | A quota and conditions, then a bill |
| Tor | A fresh circuit every 10 minutes by default | Every exit is on a public list |
| A rotation library | Code that rotates and drops | It cannot make a dead proxy answer |
HProxy free proxy pool, 25 and 26 September 2026; the Tor manual and the Tor Project exit list, read 26 September 2026; seller and library pages read 26 September 2026.
Trials and free quotas
Paid rotating services give out trials and free request quotas, and directories of scraping services list which ones do. These are samples of a paid product, not free proxies, and each comes with a quota and conditions. Residential proxy free trial sorts the four kinds of offer sold as a free trial.
Tor
Tor is a free network that changes its exit for you. It opens a local SOCKS port, 9050 by default. Its manual says it will "never attach a new stream to a circuit that is too old", which means ten minutes by default. The catch is on the other side. The Tor Project publishes every exit address in one list, 1,376 of them on 26 September 2026, so a site can refuse all of Tor at once. How Tor differs from a proxy is in proxy vs VPN vs Tor.
Rotation libraries
Search GitHub for a free rotating proxy and you find libraries, not proxies. A typical one is a Scrapy extension that fetches a free list and rotates it while the crawler runs. It rotates what it is given. It cannot make a dead proxy answer, as the numbers below show. For Scrapy itself, see free proxies for Scrapy.
What a free list does in an hour
Our engine keeps checking the public proxies it finds, and it records every check in ten-minute slots. We took the 17,051 free proxies that passed a check between 00:00 and 01:00 UTC on 25 September 2026. Then we looked at the rest of that day, and every one of them was checked again in each later hour.
An hour later, 38 percent had stopped answering. From there the share stayed near half: 54 percent answered three hours later, and 53 percent in the last hour of the day. A list downloaded in the morning has lost almost half of its working entries a few hours later.
The list you download at any moment is no better. At 21:39 UTC on 26 September 2026, 12,658 entries were alive, against 59,828 that had answered within 48 hours: about one in five. The alive ones had passed a median 36.8 percent of all their checks. Their median latency at the last check was 9.5 seconds. Over the long run, the ones that work at all stay around. Those that worked and then stopped lasted a median {{stat:medianLifespanDays}} days, counting only addresses with fewer than 20 of them (measured {{stat:lifespanMeasuredAt}}). For most of that time, a proxy answers only some of its checks.
How to rotate a free list yourself
The code below uses our free proxy list API, which needs no key and no signup. It asks for HTTP proxies that are alive now and have passed at least half of their checks. It then tries proxies at random, drops every one that fails, and gives up after eight tries so you can reload the list.
import random
import requests
LIST_URL = "https://hproxy.com/api/proxy-list"
DEAD_STATUSES = {403, 407, 429, 502, 503, 504}
def load_proxies():
"""HTTP proxies alive now that passed at least half of their checks so far."""
r = requests.get(LIST_URL, params={"protocol": "http", "min_uptime_pct": 50}, timeout=30)
r.raise_for_status()
return r.text.split()
def fetch(url, pool, expect, tries=8, timeout=(3.05, 10)):
"""Try proxies from `pool` until one returns the real page; drop every proxy that fails."""
for proxy in random.sample(pool, min(tries, len(pool))):
address = f"http://{proxy}"
try:
r = requests.get(url, proxies={"http": address, "https": address}, timeout=timeout)
except requests.RequestException:
pool.remove(proxy) # refused, timed out, broken tunnel
continue
if r.status_code in DEAD_STATUSES or expect not in r.text:
pool.remove(proxy) # blocked, rate-limited, or not the real page
continue
return r
return None # nothing worked this round: reload the list
pool = load_proxies()
page = fetch("https://example.com/", pool, expect="Example Domain")
if page is None:
pool = load_proxies()
We ran this exact function against 20 stub proxies on our own machine. Four of them worked, the one-in-five share the list showed, and the rest failed the way free proxies fail. Twelve requests got the real page eleven times in 45.5 seconds, using 27 tries. After twelve requests, only the four working stubs were left in the pool. One request ran out after eight tries in 16.2 seconds, which is the signal to reload.
What each kind of dead proxy cost in our test
| The proxy | Per try | Caught by |
|---|---|---|
| Accepts, never answers | 10.0 s | ReadTimeout |
| Address that never answers | 3.1 s | ConnectTimeout |
| Refused port | 2.1 s | ProxyError |
| Answers 403, 407, 429 or 502 | under 0.1 s | Status code |
| Answers 200 with another page | under 0.1 s | Content check |
HProxy rotation test on stub proxies; the refused port took about 2 seconds on Windows and is faster on Linux.
Two lessons come out of it. First, the read timeout sets the price of every proxy that accepts a connection and then goes silent, so keep it short. Requests has no timeout unless you set one, and its documentation warns that your code "may hang for minutes or more". The median working entry in our list took 9.5 seconds to answer our checks, so a 10-second limit keeps about half of them and skips the slowest. The connect limit of 3.05 seconds follows the documentation, which suggests "slightly larger than a multiple of 3".
Second, check the content. Two stubs answered 200 with a page that was not the real one, and only the expect check caught them. Through an https:// page, a proxy that refuses the tunnel raises ProxyError instead of returning a status, which is why the code catches exceptions as well. Our Python requests guide covers those errors one by one.

Three more rules keep the rotation honest. Reload the list every few minutes, because our API documentation says the list "moves every few minutes as proxies die and new ones are found". Leave recent=true off, because it widens the list with quiet entries, and in the words of the documentation "many are not answering right now". And never send a login, a card number or a session cookie through a free proxy you did not set up; are free proxies safe explains why.
What free rotation cannot give you
Measured, it comes down to one line. At 21:39 UTC on 26 September 2026, one entry in five of the 48-hour list was working, and the working ones had passed a median 36.8 percent of their checks. A rotating pool whose addresses stay up is a paid product. HProxy residential proxies rotate or hold a sticky session, from $0.44/GB. The whole free list, without any rotation code, is on our free proxy list.
Sources
- IETF, RFC 6585: Additional HTTP Status Codes, April 2012, section 4 (429 Too Many Requests).
- IETF, RFC 9110: HTTP Semantics, June 2022, sections 15.5.8, 15.6.3 and 15.6.5 (407, 502, 504).
- Requests documentation, Advanced Usage: Timeouts and Proxies, read 26 September 2026.
- The Tor Project, tor(1) manual, as shipped in Debian 12: SocksPort and MaxCircuitDirtiness, read 26 September 2026.
- The Tor Project, bulk exit list, 1,376 addresses on 26 September 2026.
- HProxy, free proxy list API documentation, read 26 September 2026.
- HProxy free proxy pool, one read-only query on 26 September 2026 at 21:39 UTC, and the checks recorded on 25 September 2026.
- HProxy rotation test on 20 stub proxies, 26 September 2026: the published code, Python 3.13.7, requests 2.32.3.
- Seller, directory and library pages, read 26 September 2026 (not linked).


