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
| Mode | How it works | Best for |
|---|---|---|
sticky (default) | Same IP is reused across requests in a session | Logged-in flows, pagination, Cloudflare CF-cookie reuse |
rotate | Fresh IP on every request | Large, stateless crawls where you don't want any IP to accumulate requests |
smart | Reuses the same IP, but automatically mints a new session if it gets blocked | Mixed 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"
}
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.