Sneaker bot proxies: one sticky residential IP per task
Each task should look like one shopper on one home connection, from login to checkout. Here is how to set that up, with the IPs we measured.
In short
Give every task its own sticky session: same country as the shop, its own session label, a lifetime longer than the release. Put one line per task into your bot’s proxy list. Use a fresh label prefix for each release.
Shops limit what one visitor can do, and the IP address is the cheapest way to tell visitors apart. When ten tasks share one IP, they look like one person entering a raffle ten times or carting the same shoe ten times. Accounts that keep showing up on the same IP can also be linked to each other.
The IP also has to stay put. A task logs in, adds to cart, enters the queue and checks out. If the address changes between those steps, the shop sees a session that jumped to another city mid-checkout. That’s why a plain rotating proxy, with a new IP per connection, is wrong for checkout tasks. And it’s why the address should be residential: release sites are among the first to treat hosting networks with suspicion (how they tell the difference).
A sticky session is a label in the proxy username. Every connection with the same label leaves from the same exit until the lifetime runs out. Different labels get different exits. We gave five tasks their own label and checked each one three times, a minute apart, each time on a new connection, through the sticky port 10000:
| Task | 0 s | 60 s | 120 s |
|---|---|---|---|
task1 | 76.98.206.213 | same | same |
task2 | dropped | 75.110.104.162 | same |
task3 | 24.19.171.64 | same | same |
task4 | 152.55.180.69 | same | same |
task5 | 142.173.160.81 | dropped | same |
USER-country-us-session-drop1tN-lifetime-30, October 14, 2026, looked up on ipinfo.io. Task 2’s first request and task 5’s second dropped; both tasks kept their exit.Without a label, on the rotating port 9000, the same username gave three different IPs in three requests (Montgomery, New York City, Middletown). Fine for a monitor that only reads product pages. Wrong for a checkout task.
One caveat: an exit is someone’s home connection, not a server. It can go offline before the lifetime ends, and a request can drop, as task 2’s and task 5’s did. Good bots retry failed requests; set the retry count above zero.
Building the username
Everything is set in the username, separated by hyphens. Values contain no hyphens or spaces. Sessions go to the sticky port: 10000 for HTTP, 12000 for SOCKS5.
| Part | Example | What it does |
|---|---|---|
| Country | -country-us | Exit in that country. Match the shop’s region. |
| City | -city-chicago | Exit in that city, lower case without spaces (newyork). |
| Session | -session-drop1t1 | Same label, same exit. Letters, digits and underscores. |
| Lifetime | -lifetime-30 | How long the label holds its exit, in minutes. |
Match the shop’s region
A US release wants US addresses, a UK shop UK addresses. Country is the filter that matters; add a city only when you have a reason, because every extra filter leaves fewer exits to choose from. When no exit matches, the gateway refuses the connection with status 465 instead of quietly giving you another country.
Lifetime longer than the release
Pick a lifetime that covers the whole task, queue included. 30 minutes suits most releases; the gateway accepts up to 1440 minutes (24 hours) and refuses anything longer.
No hyphens inside a label
Hyphens separate the parts, so -session-task-1 is read as the session task, and nothing tells you: -session-task-1, -session-task-2 and -session-task-3 were all accepted in our test and left from the same IP, with or without a lifetime after them. task_1 and task_2 got two different IPs. Use task1 or task_1.
Build your proxy list
Choose tasks, country and lifetime, copy the result into a file and import it into your bot.
Your list
one sticky IP per task
via.proxies.vision:10000:USER-country-us-session-drop1t1-lifetime-30:PASS
via.proxies.vision:10000:USER-country-us-session-drop1t2-lifetime-30:PASS
via.proxies.vision:10000:USER-country-us-session-drop1t3-lifetime-30:PASS
via.proxies.vision:10000:USER-country-us-session-drop1t4-lifetime-30:PASS
via.proxies.vision:10000:USER-country-us-session-drop1t5-lifetime-30:PASS
via.proxies.vision:10000:USER-country-us-session-drop1t6-lifetime-30:PASS
via.proxies.vision:10000:USER-country-us-session-drop1t7-lifetime-30:PASS
via.proxies.vision:10000:USER-country-us-session-drop1t8-lifetime-30:PASS
via.proxies.vision:10000:USER-country-us-session-drop1t9-lifetime-30:PASS
via.proxies.vision:10000:USER-country-us-session-drop1t10-lifetime-30:PASSReplace USER and PASS with the credentials from your dashboard, then import the file into your bot.
1.New prefix, new list
Generate the list with a prefix you haven’t used, like
drop2t. Every task starts on an exit it has never used.2.Test before the drop
Most bots have a proxy tester. Run it ten minutes before the release: a line that fails points to a typo in the username or a filter with no exits.
3.One account per task
A separate IP doesn’t help if every task logs into the same account. Pair each task with its own account and its own line.
4.Check your traffic afterwards
Note your remaining GB before and after. That tells you what a release costs with your bot, and how much to top up next time.
Rotating or sticky proxies for sneaker bots?
How many proxies do I need?
What proxy format do sneaker bots use?
Should I use a new session label for every release?
How much traffic does a release use?
Keep reading
Go net/http Proxy Authentication: HTTP and SOCKS5
Authenticated HTTP and SOCKS5 proxies in Go without extra packages, why rotation needs DisableKeepAlives, and a code generator.
6 min read · #go#authentication
How to Rotate Proxies in Python (and Why Yours May Not Rotate)
requests.Session, httpx.Client and Scrapy reuse one IP through a rotating proxy. What rotates, measured, and code that gets a new IP per request.
7 min read · #python#scrapy
Tunnel connection failed: 407 in Python requests (and 403, 465)
The status is the proxy's answer, not the website's. Five causes of 407 we reproduced, and what 403 and 465 mean instead.
7 min read · #python#errors
Residential proxies, pay per GB
HTTP and SOCKS5. Country, city and sticky sessions in the username. No subscription.