When to use sticky sessions
Sticky sessions keep the same residential exit IP for a chain of requests. Enable them when:- Your target site uses session cookies tied to IP (logged-in scraping)
- The target has per-IP anti-bot scoring that punishes IP rotation (Cloudflare Bot Management, Akamai)
- You’re doing multi-step checkout flows (add-to-cart → checkout → payment — same IP throughout)
- You’re scraping a pagination chain and don’t want the site to see “different user” for each page
- The target site rate-limits per-IP — rotating IPs is the correct strategy (omit the session tag)
- You’re scraping a static resource — no session state to preserve
Syntax
Append-session-<tag> to the username portion of your proxy auth:
Tag rules
| Rule | Value |
|---|---|
| Allowed chars | [a-z0-9_-] case-insensitive |
| Max length | 64 chars |
| Scope | (keyId, tag) pair — different keys with the same tag are separate sessions |
Lifetime
The sticky binding lives 10 minutes from the last request that uses it. Every request with the same tag refreshes the 10-minute window — so a continuously-used session never expires. If the underlying exit node goes offline (WebSocket disconnects), the sticky binding is dropped and the next request picks a fresh node. Your session tag keeps working — it just binds to a different exit node silently.Examples
One sticky session per scraper run
One sticky session per logged-in account
Per-worker session in a concurrent scraper
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Each request shows a different IP despite the tag | Tag contains invalid chars | Stick to [a-z0-9_-] — no spaces, no slashes |
| Sticky session “stops working” after ~10 min | TTL expired | Fire a keep-alive request every 5 min, or refresh on demand |
| 502 after the session was working | Node went offline | Retry — the next request binds to a fresh node |
| Different sessions seem to share an IP | You ran out of nodes in that country | Pool depth is beta-scale; happens in thin-pool countries |