Skip to main content

Proxy Rotation Modes

By default OmniScrape assigns a sticky residential IP that stays the same for the life of a session. For some workloads you want a fresh IP on every request, or you want the efficiency of a sticky IP but with automatic fallback when one gets flagged. There are three modes.

Quick comparison

ModeHow it worksBest for
sticky (default)Same IP is reused across requests in a sessionLogged-in flows, pagination, Cloudflare CF-cookie reuse
rotateFresh IP on every requestLarge, stateless crawls where you don't want any IP to accumulate requests
smartReuses the same IP, but automatically mints a new session if it gets blockedMixed workloads — you want efficiency without manual intervention

Set the mode as a third colon-segment on the proxy field:

residential:<country>:<mode>

sticky — same IP for the session

The default. When you pass a session_id, the proxy engine pins the same residential exit IP for all requests sharing that ID. This is what you need for anything stateful.

{
"url": "https://shop.example.com/account",
"proxy": "residential:us:sticky",
"session_id": "user-checkout-flow"
}

Omitting the mode flag also gives you sticky — the two lines below are equivalent:

"proxy": "residential:us"
"proxy": "residential:us:sticky"

When to use: logins, cart flows, paginated crawls, any site that fingerprints sessions by IP.


rotate — new IP every request

Evomi assigns a fresh exit IP on each HTTP connection. No session continuity. Good for high-volume scraping of independent URLs where you want to spread traffic across as many IPs as possible.

{
"url": "https://catalogue.example.com/product/18234",
"proxy": "residential:de:rotate"
}
tip

When using rotate, omit session_id — they conflict. A session implies sticky state; rotation breaks it.

When to use: product catalogue scrapes, SERP fetches, news crawlers — anything where each URL is independent.


smart — reuse until blocked, then swap

Smart mode starts like sticky — it reuses the same IP to benefit from Cloudflare cookie caching and session warmth. But if the request comes back blocked (403, Cloudflare IUAM, or similar), it transparently mints a new proxy session and retries, without you having to handle the failure.

{
"url": "https://protected.example.com/data",
"proxy": "residential:us:smart",
"session_id": "batch-crawl-01"
}

When to use: mixed catalogues where most pages reuse a cached clearance cookie but a fraction of IPs get blocked. You get the speed of sticky with automatic recovery.


Combining with country targeting

All three modes work with country codes:

{ "proxy": "residential:gb:sticky" }
{ "proxy": "residential:jp:rotate" }
{ "proxy": "residential:br:smart" }

Omit the country for worldwide selection:

{ "proxy": "residential:global:rotate" }

Frequently asked questions

Can I mix rotation modes in one session?
No — the mode is resolved per request from the proxy field. If you pass rotate on one request and sticky on another with the same session_id, the IP may differ. Pick one mode per logical crawl job.

Does rotate cost more?
No, billing is per successful unlock request regardless of rotation mode.

What happens if I omit proxy entirely?
OmniScrape picks a healthy IP automatically. For most simple cases this is fine. Add proxy only when you need geo-targeting or a specific rotation behaviour.

I use smart but still see blocks — why?
Smart mode handles IP-level blocks. If a site blocks by user-agent fingerprint or TLS profile, try mode: js_rendering with enable_solver: true in addition to smart proxy rotation.