Residential proxies for web scraping and AI agents
At scraping volumes the price that counts is per 100 GB: Evomi is lowest at $49. Sessions, targeting and how your browser looks matter as much as the IPs.
What to compare
- Price at volume: the cheapest regular price for 100 GB is Evomi ($49), Geonode ($64.80) and Proxy-Cheap ($78).
- Sticky sessions: a login flow needs the same IP for minutes or hours; the longest stated is AnyIP, up to 7 days.
- Targeting: 26 of 30 providers target cities, 11 target ZIP codes.
- Protocols: 26 of 30 offer SOCKS5 as well as HTTP.
- Expiry: traffic never expires with 11 of 30 providers; with the others, unused gigabytes lapse.
Cheapest at 100 GB
| Provider | 100 GB | Sticky up to | Finest targeting | SOCKS5 | Unused traffic |
|---|---|---|---|---|---|
| Evomi | $49 | 1 day | ZIP code, ASN | Yes | Never expires |
| Geonode | $64.80 | 1 day | City, ASN | Yes | Expires |
| Proxy-Cheap | $78 | 30 mins | Country | Yes | Not stated |
| DataImpulse | $100 | 2 hrs | ZIP code, ASN | Yes | Never expires |
| FloppyData | $100 | Not stated | City, ASN | Yes | Expires |
| PacketStream | $100 | 1 hr | Country | Yes | Never expires |
| Shifter | $100 | 30 mins | City, ASN | Yes | Expires |
| Proxyrack | $110 | Not stated | City | Yes | Not stated |
| Thordata | $150 | 90 mins | City, ASN | No | Expires |
| Rayobyte | $200 | 2 hrs | ZIP code, ASN | Yes | Never expires |
Browsers that look like the exit
Sites compare more than your IP address. A browser whose time zone, language or WebRTC addresses don’t match the exit location looks like what it is. Browser agents need all three to agree with the proxy.
The checker’s browser mode tests the IP, the location and these three signals in one go, and stores nothing.
Set up a proxy
Every provider gives you a gateway host, a port and a login. Replace them below with yours.
curl -x http://USER:PASS@gate.example.com:8000 https://example.com/ import requests
proxy = "http://USER:PASS@gate.example.com:8000"
r = requests.get("https://example.com/", proxies={"http": proxy, "https": proxy}, timeout=30) import { chromium } from 'playwright';
const browser = await chromium.launch({
proxy: { server: 'http://gate.example.com:8000', username: 'USER', password: 'PASS' },
}); from playwright.async_api import async_playwright
async with async_playwright() as p:
browser = await p.chromium.launch(
proxy={"server": "http://gate.example.com:8000", "username": "USER", "password": "PASS"}
) import puppeteer from 'puppeteer';
const browser = await puppeteer.launch({ args: ['--proxy-server=http://gate.example.com:8000'] });
const page = await browser.newPage();
await page.authenticate({ username: 'USER', password: 'PASS' }); Chrome’s --proxy-server flag takes no login. With Selenium or a plain Chrome launch, allow your machine’s IP in the provider’s dashboard (IP allowlist) and use the gateway without a username.
Sticky sessions and locations
Most providers keep the same exit IP while you add a session ID to the username, and pick the country or city the same way; the syntax differs by provider. Each provider page links to its gateway documentation.
Before you scale
- Read each site’s terms and robots.txt before you collect from it, and keep request rates polite.
- Residential IPs are other people’s home connections. Prefer providers that say where theirs come from: see each provider’s sourcing check.