Rota

Rota

One HTTP port, many upstream proxies picked per request

Rota is a proxy server written in Go that spreads traffic across a list of upstream proxies. Clients point at a single HTTP proxy on port 8000, and each request leaves through one proxy from the stock, picked at random by default, or by round-robin, fewest active connections or a fixed time interval. Upstreams can be HTTP, HTTPS, SOCKS4, SOCKS4a or SOCKS5.

Rota works with whatever proxies it is given: ip:port lists published at a URL, or an uploaded file. It tests them, geolocates them and drops the ones that stop answering.

The comparison of open source web scraping tools sets this network layer next to crawling frameworks and anti-detect browsers.

Auto-refreshing sources, sticky IPs and health-check webhooks

  • Sources that refresh themselves: each list URL has its own protocol and refresh interval. New proxies are geolocated, then added to the pools set to auto-sync.
  • Pools by country, city, ISP or tag: every pool has its own rotation, including a sticky mode that keeps one IP for N requests.
  • Accounts with a fallback chain: http://user:pass@host:8000 sends traffic to the account's main pool, then to the next one once the first has no live IP left. Each retry picks a proxy that hasn't failed yet.
  • Health checks and alerts: scheduled checks per pool, and a webhook when the active proxy count drops below a threshold.
  • One-command install: docker compose up -d with no config file, and a TLS certificate issued automatically once SITE_ADDRESS holds a domain.

Sharing one rotation across scrapers and pinning exit countries

Crawlee for Python already rotates proxies inside its own process, round-robin, with one proxy pinned per session. Rota moves that rotation out of the program, so several scrapers in any language share one port and one set of health checks.

Camoufox has a geoip option that matches the browser's timezone, language and location to its proxy's exit IP. A Rota account tied to a single-country pool keeps every exit IP in that country.

Agent Reach only asks for a proxy on networks that block Reddit or Twitter, and hands it to the tools it calls as HTTP_PROXY. Rota's port 8000 plugs in the same way, provided there are proxies behind it.

Empty proxy pool, open port and a required TimescaleDB

You bring the proxies. The database starts empty, and the project neither ships a proxy list nor sells proxies. Exit IPs are only as good as the lists Rota is fed.

The proxy is open out of the box. Authentication on port 8000 is off by default, and any request goes through as long as no proxy account exists. Yet docker-compose.yml publishes that port on the host.

TimescaleDB is required, Docker or not. The standalone binary released with 2.3.0 bundles the proxy and the API, not the dashboard, and expects a TimescaleDB installed separately.

Geolocation goes through ip-api.com. By default Rota sends proxy addresses to the free ip-api.com API, which its terms of use restrict to non-commercial use. The other option is a local MaxMind GeoLite2 database.

Two gaps in 2.3.0, read in the code. The per-account requests_per_minute cap listed in the README is stored but never enforced, and upstream proxy passwords sit in the database in plain text. Version 3.0, a draft pull request since September 25, 2026, says it fixes both and adds inbound SOCKS5. On 2.x, port 8000 only accepts HTTP proxy clients, CONNECT tunnels to HTTPS sites included.

Five releases since July 2026, after nearly eight months without one. Version 2.1.0 brought sources, pools, accounts and geolocation, mostly through a pull request from an outside contributor. The latest, 2.3.0, shipped on September 20, 2026.

SOURCES

REPOhttps://github.com/alpkeskin/rota
LICENSEApache-2.0