Save 5% every month: use code 5OFFSTORM at checkout
Home / Guides / Amazon scraping

Which proxies work for scraping Amazon, and how to set them up

For Amazon, start with residential ports and a slow, even pace per IP: each port is one home IP for 5 minutes, so spread your product pages across several ports instead of pushing one. Rotating datacenter IPs can work at low volume, but Amazon is strict with them. Detect the robot check page and back off; no proxy makes Amazon stop checking.

Updated October 2026Proxies by use case

“Blocked on Amazon” and “I keep getting CAPTCHAs on Amazon” are two of the most common reasons people write to us about. Amazon is one of the hardest retail sites to collect data from at volume. It watches how many requests each IP sends, how much each visitor looks like a browser, and which networks the traffic comes from. Datacenter ranges get less patience than home connections.

No proxy provider can honestly promise you’ll never see Amazon’s robot check. What you can control is the pattern: how many requests each IP sends in a few minutes, how many run in parallel, how realistic each request looks, and how your scraper reacts when it does get challenged. Get those right and the block rate drops to something you can live with. Get them wrong and even the best IPs burn out within minutes.

This guide covers which Storm product fits Amazon, how to set up residential ports, a scraper that paces per port and detects robot checks, sizing for real ASIN counts, location and delivery-ZIP pitfalls, and the official route for sellers.

Which Storm plan fits

For Amazon product pages, residential ports are the Storm product to start with: Amazon tends to be stricter with datacenter ranges, and ports let you spread requests over 5, 10 or 20 home IPs at once. As a rough guide, 10 ports ($90) suits around 50,000 product pages a day at a gentle pace. If you already run a rotating plan, test Amazon on it first at low speed; if the robot check shows up even when you’re slow, that’s your answer.

Residential rotating proxies (from $19/mo): 20M+ residential IPs. Each port is one IP at a time that changes every 5 minutes, up to 50 threads per port. USA or EU. Unlimited bandwidth on every plan.

Get 5 ports for $50/mo See all residential rotating proxies plans

Before you start

  1. Log in to the member area and copy your gateway IP:PORTs. They never change; the rotation happens on our side.
  2. Add the public IP of the computer or server that will run your tool under Authorized IPs, click Save, and allow up to 15 minutes before testing. Rotating and residential proxies use IP authentication, so there is no username or password.
  3. Count your threads: the tool’s total open connections must stay within your plan (for example 40 threads on the 40-thread plan).

Set up an Amazon scraper with Storm, step by step

  1. Decide what you actually need from Amazon

    Product pages (/dp/ASIN) for price, stock and rating? Search result pages for rank? Reviews? Each is a separate request type with its own volume. Write down the number of ASINs or queries and how often you need each one refreshed. That number drives the plan.

  2. Start with a small residential package and a rotating test

    Order 1 to 5 residential ports in USA or EU to match the Amazon store you track. If you also have a rotating plan, keep it for a side-by-side test. The smallest package of each proxy type has a 24-hour money-back guarantee on your first order, so run the comparison in that window.

  3. Authorize your scraper’s IP

    Residential packages allow one authorized IP. Use the fixed public IP of your server, save it under Authorized IPs, and wait up to 15 minutes. A changing home IP can be covered with a dynamic DNS hostname instead.

  4. Give each port its own worker and a slow pace

    All threads on a port share its current IP, so the pace per port is the pace per IP. Start with one worker per port and a random 8 to 15 second pause between requests. That’s roughly 20 to 35 requests per IP in each 5-minute window. Add ports for more volume rather than adding threads per port.

  5. Send a full, consistent set of headers

    Use a current browser User-Agent with matching Accept, Accept-Language and Accept-Encoding, and keep cookies in a session per port. Requests with the default library User-Agent look like scripts no matter which IP they come from.

  6. Detect the robot check and back off

    Check every response body for the robot check before parsing it. On a hit, pause that port until its next IP change, then continue. Don’t hammer the same URL again from the same IP, and don’t treat the page as product data.

  7. Measure, then scale with ports

    Track the robot-check rate per hour. Under a few percent, you can add ports to reach your volume. If it climbs as you add speed, go back to the slower pace and add ports instead. Upgrade in the member area; the unused part of your current plan is credited.

Amazon product scraper with per-port pacing (Python)

One worker per residential port, a fresh session at each 5-minute IP change, and robot-check detection. Replace each GATEWAY_IP:PORT with a residential port from your member area. Keep parsing selectors in one place, because Amazon’s markup varies by category and changes over time.

amazon_ports.py
import random, threading, time, queue, requests
from datetime import datetime

PORTS = ["http://GATEWAY_IP:PORT", "http://GATEWAY_IP:PORT"]   # one entry per residential port
ROBOT_MARKERS = ("validatecaptcha", "enter the characters you see below",
                 "api-services-support@amazon.com", "robot check")
HEADERS = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                  "(KHTML, like Gecko) Chrome/130.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
}
jobs = queue.Queue()
for asin in open("asins.txt").read().split():
    jobs.put(asin)

def ip_window():
    # Storm residential IPs change at minute 1, 6, 11 ... of each hour
    m = datetime.now().minute
    return (m - 1) % 60 // 5

def sleep_until_next_window():
    w = ip_window()
    while ip_window() == w:
        time.sleep(5)

def worker(proxy):
    session, window = None, None
    while not jobs.empty():
        if ip_window() != window:                  # new IP: start a clean session
            session, window = requests.Session(), ip_window()
            session.headers.update(HEADERS)
            session.proxies = {"http": proxy, "https": proxy}
        asin = jobs.get()
        try:
            r = session.get(f"https://www.amazon.com/dp/{asin}", timeout=(10, 40))
            body = r.text.lower()
            if r.status_code == 503 or any(m in body for m in ROBOT_MARKERS):
                print(proxy, asin, "robot check - pausing port until next IP")
                jobs.put(asin)
                sleep_until_next_window()
                continue
            print(proxy, asin, r.status_code, len(r.text))   # parse and store here
        except requests.RequestException as e:
            print(proxy, asin, "retry later:", type(e).__name__)  # drops at rotation are normal
            jobs.put(asin)
        time.sleep(random.uniform(8, 15))          # per-port = per-IP pace

threads = [threading.Thread(target=worker, args=(p,)) for p in PORTS]
for t in threads: t.start()
for t in threads: t.join()

Residential or rotating datacenter for Amazon?

Amazon looks at where traffic comes from. Home broadband IPs look like shoppers; hosting ranges look like servers. That’s why most Amazon scrapers end up on residential IPs, and why “blocked on Amazon” is a common story from people running datacenter proxies at speed.

That doesn’t make datacenter useless. On the rotating Main gateway, every new connection exits from a different IP in a 700,000+ pool, so no single IP sends many requests. For small jobs, a few thousand pages a day with slow pacing and good headers, it may be all you need, and it’s cheaper per request. Test it rather than assuming either way. If the robot check appears even at a slow pace on datacenter IPs, move Amazon to residential ports and keep the rotating plan for your other sites.

Storm’s residential ports are USA or EU, change IP every 5 minutes at fixed times, and can’t be rotated on demand. If your workflow needs one IP for an hour (for example a logged-in seller session), use a private dedicated proxy for that account instead.

How many ports for your ASIN count

The number that matters is requests per IP per 5-minute window. With one worker per port and an average pause of about 11.5 seconds plus a few seconds for the response, each port makes about 20 requests per window, or roughly 6,000 a day.

  • 5,000 product pages a day: 1 port ($19) covers it, which is also a good test size.
  • 25,000 a day: 5 ports ($50).
  • 50,000 a day: 8 to 9 ports needed, so the 10-port plan ($90).
  • 100,000 a day: about 17 ports, so 20 ports ($160).
  • 250,000 a day: about 40 ports, so 50 ports ($300) with room to slow down further.

Treat the pause as a starting point, not a safe limit. If your robot-check rate is low, you can try a shorter pause; if it’s high, lengthen the pause and add ports. Bandwidth is unlimited, so heavy product pages and retries don’t change what you pay. More sizing examples are in proxy threads explained.

Reading Amazon’s responses

Amazon rarely says “blocked” in a status code. The signals to watch:

  • Robot check page: a short page asking you to type characters from an image, with a form that posts to /errors/validateCaptcha. Status is often 200, which is why you must check the body.
  • 503 with a “Sorry, something went wrong” page: often a soft block or overload. Treat it like a robot check: pause and retry later.
  • A page that mentions contacting Amazon about automated access: your traffic was recognized as automated.
  • Very small HTML or a missing price block: either a different page template or a partial block. Log these separately instead of storing empty prices.

Count each type per port and per hour. A spike on one port points to that IP; a spike on every port at once points to your pace or headers.

Prices, delivery ZIP and which store you see

Amazon shows prices, availability and some offers based on the delivery location set in the session, not only on the IP. Storm locations are USA or EU at country level, with no city or state targeting, so don’t expect a specific ZIP from the IP. If ZIP-specific data matters, set the delivery location the way a shopper does in a browser session and keep those cookies for that run.

Match the store to the gateway as well: scrape amazon.com through USA ports and EU stores such as amazon.de or amazon.fr through EU ports, so prices and currencies come back in the expected form.

Rules, and the official route for sellers

Amazon’s Conditions of Use exclude data mining, robots and similar extraction tools from the licence they grant, so check with your own legal advice before collecting at scale, stick to public pages, and don’t automate logged-in customer accounts. If you sell on Amazon and need your own listings, orders or pricing, the Selling Partner API is the supported way to get them. Proxies are for spreading load on public pages, not for working around anyone’s rules.

Common errors and fixes

Robot check page on the first few requestsUsually pace and headers, not the IP count. Check you send a full browser header set, keep cookies per session, and run one worker per port with long pauses. Then test again.
Robot checks on datacenter IPs even at low speedAmazon is treating those hosting ranges strictly for your targets. Move Amazon to residential ports and keep the rotating plan for other sites.
Requests fail around minute 1, 6, 11 of each hourThat’s the residential IP change. Open connections can drop at that moment. Retry the request; the code above requeues it.
All workers get robot checks at the same timeThey share one port, so they share one IP. Use one worker per port and add ports for volume.
Connection reset on every requestYour server’s IP isn’t authorized for the residential package (one access IP per package), or it was saved less than 15 minutes ago.
Prices missing or in the wrong currencyWrong store or location: match USA ports to amazon.com and EU ports to EU stores, and set the delivery location in the session if ZIP matters.

FAQ

What are the best proxies for Amazon scraping?

Residential IPs with careful per-IP pacing work best for most volume jobs. Rotating datacenter IPs can work for small, slow jobs. Test both on your own ASINs before you commit.

Why does Amazon show me a CAPTCHA even with proxies?

Amazon judges the whole request pattern: speed per IP, headers, cookies and network type. Proxies spread the load across IPs, but a fast or script-like pattern still gets checked. Slow down per IP and send realistic headers.

How many Storm residential ports do I need for Amazon?

At a gentle pace each port handles roughly 6,000 product pages a day. Divide your daily ASIN count by that and round up: 10 ports for about 50,000 a day, 20 ports for about 100,000.

Can I change the residential IP when Amazon blocks it?

Not on demand. Storm residential IPs change every 5 minutes at fixed times, with no manual rotation link. Pause the blocked port until its next change and keep the other ports working.

Can I scrape Amazon prices for a specific ZIP code with Storm?

Not by IP. Storm offers USA or EU without city or state targeting. Set the delivery location inside the browser session instead.

Is scraping Amazon legal?

It depends on what you collect, how, and where you are. Amazon’s terms restrict automated extraction, so get legal advice for commercial use, and stick to public product data.

Still have questions? Contact us here. A real person answers.

Related guides

Tool facts checked against the official documentation (October 2026): Amazon Selling Partner API documentation · Amazon Conditions of Use · Requests docs: Session objects. Storm Proxies facts: our plans page and refund policy.

Unlimited bandwidth. One flat monthly price.

Access is live the moment you pay, and the smallest package of each proxy type has a 24-hour money-back guarantee on your first order.