Skip to main content
Proxies are configured on the 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.
You can also pass a full proxy URL:
When 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:
Use proxyRotation: "random" when you want stochastic selection (e.g., to avoid fingerprinting patterns).

Multi-tier pools (standard + premium)

For production, configure both tiers and pick per-request:

Inspecting which proxy was used

Every successful scrape result includes proxy metadata:
Useful for debugging which tier handled which URL.

Proxy providers

Reader works with any HTTP/HTTPS proxy that supports basic auth. The exact URL format varies by provider - check their docs for the host:port and whether they expect user-session-xxx style parameters in the username field. Reader handles the sticky session parameter automatically for premium (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.

Premium is slow

Premium (residential) proxies route through real ISPs, adding 300-800ms. This is expected - use them only when standard is blocked.

Where to go next

Proxy Tiers concept

The mental model for standard vs premium.

Error Handling

How to catch and retry proxy errors.