ReaderClient or per-request via scrape() options. This guide covers the three common setups.
Single proxy per request
The simplest pattern: no client-level config, pass a proxy per call.url is set, all other fields are ignored.
Flat proxy pool with rotation
If you have multiple proxies of the same tier, configure them on the client and let Reader rotate:proxyRotation: "random" when you want stochastic selection (e.g., to avoid fingerprinting patterns).
Multi-tier pools (datacenter + residential)
For production, configure both tiers and pick per-request:Auto mode with escalation
The best pattern for mixed workloads:proxyTier: "auto". Reader starts with datacenter and escalates to residential only if the request is blocked.
Inspecting which proxy was used
Every successful scrape result includes proxy metadata:Proxy providers
Reader works with any HTTP/HTTPS proxy that supports basic auth. The exact URL format varies by provider — check their docs for thehost:port and whether they expect user-session-xxx style parameters in the username field. Reader handles the sticky session parameter automatically for residential proxies.
Troubleshooting
PROXY_CONNECTION_ERROR on every request
Check your proxy credentials and that the proxy is reachable from your machine. Try a manual curl -x http://user:pass@host:port https://example.com to verify.
PROXY_EXHAUSTED
All proxies in all configured tiers failed. Check provider status and whether you’ve hit a usage limit.
Residential is slow
Residential proxies route through real ISPs, adding 300-800ms. This is expected - use them only when datacenter is blocked.Where to go next
Proxy Tiers concept
The mental model for datacenter vs residential.
Error Handling
How to catch and retry proxy errors.

