Docs menu
Docs · Error guide

Slow Proxies and Changing Sticky IPs

Proxies are usually slow for one of five reasons: the exit IP is far from the website's servers, the website itself answers slowly, your client opens a new connection and TLS handshake for every request, you run more parallel requests than your machine or the site can take, or a browser loads every image and script through the proxy. Measure where the time goes before you change anything; a sticky IP that changes and a scraper that fails only on a server have their own causes, covered below. ProxyField residential proxies have a typical response under 1 s, according to our service data, and you can test them on your own targets with the Easy Trial: 1 GB for $2.95.

residential IPs
412M+
from, traffic never expires
$1.95/GB
Easy Trial
1 GB for $2.95
On this page 7 sections

Why are my proxies slow?

A proxy adds one more hop to every request, so some extra time is normal; a proxy that is much slower than that has a cause you can find. The table puts the usual causes in the order to check them:

CauseHow you spot itFix
The website is slowIt is just as slow without the proxyNothing on the proxy side: lower your rate, cache what doesn't change
The exit is far from the websiteThe first byte comes late; another location is fasterTarget a country, region or city near the site's servers (location targeting)
A new connection for every requestThe TLS time repeats on every requestReuse connections with a session (code below)
Too many parallel requestsEach request gets slower as you add threads; timeouts and 429s appearFind the concurrency where the median time stays flat
A browser loads everythingPlaywright or Puppeteer pages pull images, fonts and videoBlock the resource types you don't need
One slow exit IPOne request is slow, the next one is fineSet a timeout and retry on a new IP
The IP typeMobile exits answer slower than residential onesUse the type the target needs, not the slowest one that works

ProxyField's figures for comparison: an average response of about 400 ms, according to our service data. By type, a typical response is under 1 s for residential and under 1.5 s for mobile, according to our service data. Datacenter proxies cost less per GB and suit sites that accept datacenter ranges; residential vs datacenter proxies compares them.

Measure where the time goes

One cURL command splits a request into its stages. Run it 5 times through the proxy, then without -x and -U, and compare:

Shell
curl -s -o /dev/null -x gate.proxyfield.io:7000 -U "<login>-country-us-city-new_york:<password>" \
  -w "dns %{time_namelookup}s  connect %{time_connect}s  tls %{time_appconnect}s  first byte %{time_starttransfer}s  total %{time_total}s\n" \
  https://example.com/

Each value counts from the start of the request (cURL --write-out variables):

  • dns: the proxy's host name was resolved. A high value points to your DNS resolver.
  • connect: the TCP connection to the proxy was open. A high value points to your network or a distant gateway.
  • tls: the TLS handshake with the website, through the proxy, was done. The gap from "connect" is the tunnel plus the handshake, and it repeats on every new connection.
  • first byte: the website started to answer. The gap from "tls" is mostly the website's own time plus the distance from the exit to the site.
  • total: the whole response arrived. A big gap from "first byte" means a large page.

If "first byte" is as slow without the proxy, the website is the bottleneck. If it drops when you target a location closer to the site, distance was the cause. The proxy checker gives a quick reading for one endpoint; each check uses a small amount of proxy traffic.

How to make your proxy faster

  1. Pick an exit near the website. ProxyField targets country, region (state) and city, with all 50 US states. A US retailer answers faster to a US exit than to one on another continent.
  2. Reuse connections. A requests.Session in Python, or keep-alive in any HTTP client, keeps the TCP connection and the TLS handshake for the next request to the same site. If you rotate on every request, read "Why a rotating proxy can return the same IP twice" below before you reuse connections.
  3. Tune concurrency. Start low (for example 10 parallel requests) and raise it in steps while the median time and the error rate stay flat. ProxyField allows unlimited concurrent threads, but your machine and the website have limits; past them, everything slows down.
  4. Download less. In a browser, block images, fonts and media you don't parse. Traffic is billed per GB ($2.95/GB for 1 GB down to $1.95/GB from 1,000 GB), so a lighter page is also a cheaper one.
  5. Time out and retry. Set a connect timeout and a read timeout, and retry a slow request on a new IP instead of waiting. On ProxyField, "If a node slows down, traffic automatically moves to the next one."
  6. Match the IP type to the target. Use datacenter IPs where the site accepts them, residential where it doesn't, and mobile only where the site expects mobile users.

This Python example reuses connections across 10 threads and prints each request's time, so you can see the effect of a change:

Python
import time
from concurrent.futures import ThreadPoolExecutor

import requests
from requests.adapters import HTTPAdapter

proxy = "http://<login>-country-us-city-new_york:<password>@gate.proxyfield.io:7000"
session = requests.Session()  # keeps connections open between requests
session.proxies = {"http": proxy, "https": proxy}
session.mount("https://", HTTPAdapter(pool_connections=10, pool_maxsize=10))


def fetch(url):
    start = time.perf_counter()
    try:
        r = session.get(url, timeout=(10, 30))  # (connect, read) in seconds
        result = r.status_code
    except requests.RequestException as e:
        result = type(e).__name__
    return url, result, round(time.perf_counter() - start, 2)


urls = ["https://example.com/"] * 20
with ThreadPoolExecutor(max_workers=10) as pool:
    for row in pool.map(fetch, urls):
        print(row)

In Playwright, one line blocks the heavy resource types before you open a page (setup: Playwright with proxies):

Python
page.route("**/*", lambda route: route.abort()
           if route.request.resource_type in ("image", "media", "font")
           else route.continue_())

More ways to speed up a scraper beyond the proxy are in how to make web scraping faster.

Why did my sticky IP change?

A sticky session keeps one IP only for its set time and only for the same session settings. Check these causes:

  • The session time ran out. ProxyField sticky sessions last from 30 s to 36 h, with presets of 1, 5, 10 and 30 min and 1, 3 and 6 h. When the time ends, the next request gets a new IP. Set a session longer than the task.
  • The session settings changed. A sticky session is tied to its session settings; another location, other session settings or a typo in the proxy line start a new session with a new IP. The syntax: -region-<region>, -session-<id> and -ttl-<seconds> (30 to 129,600 seconds, 20 minutes by default) after the location, as in <login>-country-us-region-new_york-city-new_york-session-he9f2qga-ttl-600
  • The session ended early. If the IP changed well before the session time and nothing above applies, send the 24/7 live chat the time, your session settings and both IPs. Whether a sticky session can end early, and what you see then: the IP is not guaranteed if the exit node drops; on a connection error the gateway retries once with a new session, so the IP may change, and a connection that breaks is not restored, so your client reconnects
  • Your tool rotates. Some tools pick a new proxy line for each profile, thread or retry. Check that every step of the flow uses the same proxy line.

Check the exit IP at the start of a flow and before each important step; if it changed, restart the flow instead of continuing with half a session. When to use sticky and when to rotate: sticky vs rotating proxies.

Why a rotating proxy can return the same IP twice

Per-request rotation gives each request a new IP from the pool, and a large pool can still hand out the same address again. Connection reuse may do it too: an HTTPS request travels inside a tunnel through the proxy, and requests that reuse one open tunnel may leave through the exit that opened it. If you need a new IP on every request and see repeats, close the connection after each one and compare. An open HTTPS connection keeps one exit IP until it closes.

Why your scraper works locally but fails on a server

When the same code works on your laptop and fails on a cloud server, the server usually sends something different, or sends some requests without the proxy:

CauseHow to checkFix
The proxy isn't applied on the serverPrint the exit IP from the server, through your scraper's own codeSet the proxy in code or config, not only in a shell variable that cron, systemd or a container doesn't load
Some requests skip the proxyCompare the IPs in your logs; check NO_PROXY and any second HTTP client in your codeRoute every client through the proxy, including browser contexts and API calls
The proxy refuses the serverThe error comes before any status codeAdd the server's IP to the allowlist or use username and password (cannot establish proxy connection)
Cloud IP ranges are blockedRequests that skip the proxy leave from the server's datacenter IPSend all traffic through the proxy; see the row above
The headless browser looks differentSame code, different results in headless mode on LinuxMatch the time zone and language to the exit location; see browser fingerprinting when scraping
The server is fasterErrors start after a burst, often 429Slow down: the 429 Too Many Requests guide

This line, run on the server, shows the IP the website sees for a request through the proxy:

Shell
curl -x gate.proxyfield.io:7000 -U "<login>-country-us-city-new_york:<password>" https://api.ipify.org

If it prints a ProxyField exit IP but your scraper is still blocked, compare the scraper's own requests with it: one of them leaves without the proxy.

Still slow?

Send 24/7 live chat the time and time zone, your location targeting, the target URL and the cURL timing line from above. If the requests fail rather than crawl, start with why is my proxy not working; timeouts have their own guide, 502 Bad Gateway and 504 Gateway Timeout.

Slow Proxies and Changing Sticky IPs FAQ

Why are my proxies slow?

ProxyField residential proxies have a typical response under 1 s, according to our service data, so when yours are much slower, find the cause step by step. Check, in order: whether the website is slow without the proxy, how far the exit is from the site, whether you open a new connection for every request, and how many requests you run in parallel.

How do I make my proxy faster?

Target an exit near the website, reuse connections instead of opening one per request, and keep concurrency below the point where response times climb. In a browser, block images, fonts and media you don't need, and retry slow requests on a new IP instead of waiting.

What causes high proxy latency?

Distance adds most of it: from you to the gateway, from the exit to the website, and back. New TLS handshakes on every request, a slow DNS resolver and an overloaded client add the rest.

How do I improve proxy performance at scale?

Raise concurrency step by step and stop where the median time or the error rate starts to climb, reuse connections, and set timeouts with retries on a new IP. Track success rate and time per request together, because more speed with more failures is not an improvement.

Why is my proxy slow when my internet connection is fast?

Your connection is only the first leg: the request also travels from the gateway to the exit and from the exit to the website, and the website's own response time counts too. A fast home line can't shorten a long route or a slow site.

Does reusing connections make a proxy faster?

Yes. Each new connection costs a TCP connection and a TLS handshake, and a session that keeps connections open skips them on the next request to the same site.

Should I replace a proxy whenever it becomes slow?

With a rotating gateway you don't replace anything: set a timeout, and the retry leaves through a new IP. Change the location or IP type only if every exit is slow for that site.

Why did my sticky IP change?

ProxyField sticky sessions keep one IP for the time you set, from 30 s to 36 h, so the usual causes are a session time shorter than the task, changed session settings, or a tool that switched to another proxy line. If the IP changed well before the session time, send the 24/7 live chat the time, your session settings and both IPs.

How do I stop a sticky session from dropping in the middle of a flow?

Set the session time longer than the whole flow, keep the same proxy line for every step, and check the exit IP before each important step. If the IP changed, restart the flow from its first step.

Why does my rotating proxy return the same IP twice?

Rotation picks an IP from the pool for every request, and a large pool can still pick an address you have seen before. If you see repeats across many requests, send the 24/7 live chat the times, the IPs and how your client opens connections.

Show 4 more questionsShow fewer questions

Why does my scraper work locally but fail on a server?

The server usually sends some requests without the proxy, doesn't load the proxy settings at all, or looks different to the website, for example a headless browser with another time zone. Print the exit IP from the server through your scraper's own code, and route every client through the proxy.

Why are my requests blocked from a cloud server even with proxies?

Usually some of them skip the proxy and leave from the server's datacenter IP, which many sites block. Check NO_PROXY, any second HTTP client in your code and the browser's own connections, and send everything through the proxy.

Why does my scraper fail after a few minutes?

A scraper that starts fine and then fails has usually hit a rate limit, an expired sticky session or the limits of its own machine. Look at the first error: a 429 means slow down, a changed exit IP means a longer session, and connection errors mean fewer parallel requests.

Will a proxy slow down my scraping tool?

It adds one hop, so each request takes a little longer than a direct one. With connections reused and an exit near the target, the difference is usually small next to the website's own response time.

Easy Trial: 1 GB for $2.95.

Try for the price of 1 GB, no subscription, traffic never expires.