Method
How we say a proxy works, and how to check
Success rate is the number everyone quotes and almost nobody defines. This page is our definition, our protocol, and a harness you can run against us and against everyone else.
Definitions
Six metrics, defined
Success rate
Requests that returned a page passing a per-target content check, divided by requests attempted. Status codes alone do not count: challenge pages return 200.
Response time
Time from sending the request to receiving response headers, reported as median and 95th percentile, never as a mean.
Bytes per success
Total bytes moved, failures included, divided by successful pages. This is the number that decides cost on per-GB products.
Retry amplification
Attempts made per successful page. A product that succeeds by retrying four times has a different cost to one that succeeds first time.
Pool freshness
Share of sampled exit addresses already seen in the previous sampling window. A high repeat rate means a smaller effective pool than the headline.
Block mode
Of failures, the share that were rate limits (429), refusals (403), challenges returned as 200, and timeouts. The mix tells you what to change.
Protocol
Rules for a fair comparison
- Run providers interleaved on the same targets in the same window, not one after another.
- Fix the sample size per target in advance, and publish it. Small samples give wide intervals; we state the interval.
- Pick targets by your workload, not by what is easy. Include your hardest three.
- Report per target. An average hides the hard one.
- Repeat on different days and at different hours.
- Publish the definition of success for every target beside its result.
Run it yourself
A minimal harness
Replace the target and the content check, point it at any provider, and run a few hundred requests. It reports success rate and response-time percentiles.
import statistics
import requests
PROXY = "http://USERNAME:PASSWORD@GATEWAY_HOST:PORT"
URL = "https://example.com/"
MUST_CONTAIN = "Example Domain"
N = 300
ok, times = 0, []
for _ in range(N):
try:
r = requests.get(URL, proxies={"http": PROXY, "https": PROXY}, timeout=30)
times.append(r.elapsed.total_seconds())
ok += r.status_code == 200 and MUST_CONTAIN in r.text
except requests.RequestException:
pass
times.sort()
print(f"success {ok}/{N}")
if times:
p95 = times[int(len(times) * 0.95) - 1]
print(f"response p50 {statistics.median(times):.2f}s p95 {p95:.2f}s")Use only targets you are permitted to test. Then turn the result into a cost with the cost per success tool.
Want us to run it with you?
For an evaluation, an engineer will agree the targets and success checks with you in advance and share the raw results.