Guide to Amazon Seller Scraper

Guide to Amazon Seller Scraper

WebScraping

Jump to section
  1. Choose the right seller input and page entry point
  2. Storefront URL, seller profile URL, and seller ID
  3. Starting from product offer pages to find sellers
  4. Build the scraper with Playwright or Puppeteer
  5. Python with Playwright: load seller pages and export a JSON or CSV record
  6. JavaScript with Puppeteer: scrape seller fields in an async workflow
  7. Extract seller fields with stable selectors and clean the output
  8. Selector patterns for seller name, ratings, reviews, and storefront links
  9. Product listing extraction, pagination, and data normalization
  10. Keep the scraper reliable and decide when to use a managed service
  11. Reliability safeguards for ongoing Amazon seller monitoring
  12. Conclusion: the shortest path to a usable Amazon seller scraper

If I want usable Amazon seller data, I start with the seller ID, the right page type, and a browser-based scraper. That gets me the seller name, storefront URL, rating, review count, product listings, fulfillment type, and price data without checking pages by hand.

Here’s the short version:

  • I use seller storefront pages for catalog data

  • I use seller profile pages for ratings and feedback

  • I use product offer pages to find sellers for a given ASIN

  • I use Playwright or Puppeteer because Amazon pages often load with JavaScript

  • I pull fields from visible text, links, and ARIA labels

  • I clean the output by turning ratings into floats, review counts into integers, and prices into $0.00 format

  • I add delays, retries, validation, and crawl-to-crawl checks so bad records do not pile up

In plain English: if you know the seller, start from the seller page. If you only know the product, start from the offer page, get the seller ID, and build from there.

Quick comparison

Starting pointBest useMain data I can get first
Storefront URLSeller catalog scrapingListings, titles, brands, categories, prices
Seller profile URLSeller feedback checksRating, review count, seller details
Seller IDData joiningLink profile, storefront, and offer-page records
Product offer page / ASINFind current sellers on a productSeller name, seller ID, price, fulfillment type

I also keep one rule in mind: the scraper is only as good as its selectors. If I use weak selectors or skip cleanup, the data can drift fast.

Below, I’d walk through the setup, field extraction, pagination, and the checks I’d put in place for repeat monitoring.

Amazon Seller Scraper: From Input to Clean Data

Choose the right seller input and page entry point

Once you’ve mapped the page types, the next step is picking the entry point that fits the data you already have. That choice shapes which seller fields you can pull and how much follow-up crawling you’ll need. In plain English, it decides whether your scraper starts with a known seller or finds one through a product page.

Storefront URL, seller profile URL, and seller ID

Each input type does a different job, so picking the right one early can save time.

Input TypeBest ForExample Use Case
Storefront URLCatalog extractionScraping all titles, brands, and categories a competitor lists
Seller Profile URLRatings and feedback collectionPulling ratings, review counts, fulfillment methods, and return policies
Seller IDJoining storefront, profile, and offer dataLinking storefront data to profile data under one record

Extract the seller ID first. It’s the stable key for joining storefront, profile, and offer-page data without duplicates.

For recurring monitoring, use storefront URLs and seller IDs. If you need to find sellers tied to a specific ASIN, start from product pages instead.

When the seller is unknown, product pages are often the fastest place to begin.

Starting from product offer pages to find sellers

If all you know is the product, start there and work backward to the seller.

The workflow is simple: load the product page, pull the seller name and seller ID from the Buy Box or offer section, then visit the storefront and profile pages to build the full record. This is an ASIN-based approach. It shows who is selling one specific product right now.

This entry point is especially useful for MAP compliance monitoring because it helps you identify which resellers are offering a specific ASIN right now [1]. Once you have the seller IDs from those product pages, you can switch to storefront crawls for recurring monitoring.

Build the scraper with Playwright or Puppeteer

Playwright

Amazon seller pages often load parts of the page with JavaScript. That means a static HTML parser can miss seller details you care about. A headless browser fixes that problem by loading the rendered page, waiting for the seller block to appear, and then pulling structured data from the DOM.

In plain English: load the page as a browser would, wait for the seller section, and read the fields from there.

Choosing between Playwright and Puppeteer mostly depends on the language you want to use and which browsers you need to support:

FeaturePlaywrightPuppeteer
Language supportPython, JavaScript/TypeScript, Go, .NETPrimarily Node.js (JavaScript/TypeScript)
Browser supportChromium, Firefox, WebKitPrimarily Chromium
Selector workflowLocator API with built-in auto-waitingTypically uses explicit waitForSelector calls
Async handlingNative async/await across supported languagesNative async/await in Node.js
Dynamic contentWell suited for JavaScript-rendered pagesWell suited for JavaScript-rendered pages

Python with Playwright: load seller pages and export a JSON or CSV record

Start by pulling the seller name, rating, review count, and storefront URL. The flow is the same in both tools: load the page, wait for the seller info container, grab the fields, and export them.

import asyncio
import json
import csv
from playwright.async_api import async_playwright

SELLER_URL = "https://www.amazon.com/sp?seller=SELLER_ID_HERE"
SELLER_CONTAINER_SELECTOR = "PUT_A_STABLE_SELLER_INFO_CONTAINER_SELECTOR_HERE"
NAME_SELECTOR = "PUT_NAME_SELECTOR_HERE"
RATING_SELECTOR = "PUT_RATING_SELECTOR_HERE"
REVIEW_COUNT_SELECTOR = "PUT_REVIEW_COUNT_SELECTOR_HERE"
STOREFRONT_SELECTOR = "PUT_STOREFRONT_SELECTOR_HERE"

async def scrape_seller(url: str) -> dict:
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)
        page = await browser.new_page()

        await page.goto(url, wait_until="domcontentloaded", timeout=30000)
        await page.wait_for_selector(SELLER_CONTAINER_SELECTOR, timeout=15000)

        async def get_text(selector):
            locator = page.locator(selector)
            return await locator.inner_text() if await locator.count() else None

        async def get_href(selector):
            locator = page.locator(selector)
            href = await locator.get_attribute("href") if await locator.count() else None
            if href and href.startswith("/"):
                return f"https://www.amazon.com{href}"
            return href

        seller = {
            "name": await get_text(NAME_SELECTOR),
            "rating": await get_text(RATING_SELECTOR),
            "review_count": await get_text(REVIEW_COUNT_SELECTOR),
            "storefront_url": await get_href(STOREFRONT_SELECTOR),
        }

        await browser.close()
        return seller

async def main():
    data = await scrape_seller(SELLER_URL)

    with open("seller_data.json", "w") as f:
        json.dump(data, f, indent=2)

    with open("seller_data.csv", "w", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=data.keys())
        writer.writeheader()
        writer.writerow(data)

    print(json.dumps(data, indent=2))

asyncio.run(main())

After that, swap the placeholders for stable Amazon-specific selectors. That step matters a lot. If your selectors are shaky, the scraper will feel fine one day and fall apart the next.

JavaScript with Puppeteer: scrape seller fields in an async workflow

The flow here is the same: load the page, wait for the seller info container, pull the fields, and export them.

const puppeteer = require("puppeteer");
const fs = require("fs");

const SELLER_URL = "https://www.amazon.com/sp?seller=SELLER_ID_HERE";
const SELLER_CONTAINER_SELECTOR = "PUT_A_STABLE_SELLER_INFO_CONTAINER_SELECTOR_HERE";
const NAME_SELECTOR = "PUT_NAME_SELECTOR_HERE";
const RATING_SELECTOR = "PUT_RATING_SELECTOR_HERE";
const REVIEW_COUNT_SELECTOR = "PUT_REVIEW_COUNT_SELECTOR_HERE";
const STOREFRONT_SELECTOR = "PUT_STOREFRONT_SELECTOR_HERE";

async function scrapeSeller(url) {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();

  await page.goto(url, { waitUntil: "domcontentloaded", timeout: 30000 });
  await page.waitForSelector(SELLER_CONTAINER_SELECTOR, { timeout: 15000 });

  const seller = await page.evaluate((selectors) => {
    const getText = (selector) =>
      document.querySelector(selector)?.innerText?.trim() || null;

    const getHref = (selector) => {
      const el = document.querySelector(selector);
      const href = el?.getAttribute("href") || null;
      if (href && href.startsWith("/")) {
        return `https://www.amazon.com${href}`;
      }
      return href;
    };

    return {
      name: getText(selectors.NAME_SELECTOR),
      rating: getText(selectors.RATING_SELECTOR),
      review_count: getText(selectors.REVIEW_COUNT_SELECTOR),
      storefront_url: getHref(selectors.STOREFRONT_SELECTOR),
    };
  }, {
    NAME_SELECTOR,
    RATING_SELECTOR,
    REVIEW_COUNT_SELECTOR,
    STOREFRONT_SELECTOR,
  });

  await browser.close();
  return seller;
}

async function main() {
  const data = await scrapeSeller(SELLER_URL);

  fs.writeFileSync("seller_data.json", JSON.stringify(data, null, 2));

  const headers = Object.keys(data).join(",");
  const values = Object.values(data).map((v) => `"${v}"`).join(",");
  fs.writeFileSync("seller_data.csv", `${headers}\n${values}`);

  console.log(JSON.stringify(data, null, 2));
}

main();

The next section covers the selector patterns and cleanup steps that make these fields more dependable.

Extract seller fields with stable selectors and clean the output

Once the page is loaded, pull seller fields from visible text using web scraping for beginners techniques, href values, and ARIA labels. Skip auto-generated CSS classes. They tend to change, and that can break your scraper for no good reason.

The seller name usually appears in the <h1> on the seller profile page. On a product offer page, you’ll often find it as the anchor text in the “Sold by” link.

For ratings, go after the aria-label or plain text near the stars instead of the star images themselves. Amazon often puts a string like "4.8 out of 5 stars" there, and that’s easy to parse with a simple regex. Review counts tend to sit nearby as text such as "1,500 total ratings". Strip out non-numeric characters, then cast the result to an integer.

Seller FieldPage SourceExtraction Target
Seller NameSeller profile header / “Sold by” linkText content of <h1> or anchor tag
Storefront URLProduct page “Sold by” sectionhref attribute of the seller link
Rating TextFeedback section / star iconsaria-label or text containing “out of 5”
Review CountFeedback summaryRegex from “X total ratings”

Normalize the storefront href into an absolute URL before saving it.

Product listing extraction, pagination, and data normalization

Use the storefront URL to pull the seller’s product grid. Each card is usually wrapped in a container with the s-result-item class. From each card, extract the product fields you need for your export.

Price needs a little extra care. Amazon often splits it across two elements: a-price-whole for the dollar amount and a-price-fraction for the cents. Join them as whole + "." + fraction so you end up with a clean decimal like 29.99.

After you have the storefront URL, paginate through the seller catalog with a page query parameter, such as ?page=2. Increment that value in a loop. Stop when the product grid is empty or when the next-page link no longer shows up.

Before writing data to disk, run a normalization pass. Convert ratings to floats, review counts to integers, and prices to two-decimal USD values. Clean the output early so you don’t end up fixing parsing issues later.

Keep the scraper reliable and decide when to use a managed service

Reliability safeguards for ongoing Amazon seller monitoring

Amazon

After extraction and normalization, the next job is keeping the crawler steady while Amazon changes around it. That’s where many production scrapers break. Rate limits hit. The DOM shifts. Bad records slip through. To keep Amazon seller monitoring stable, use four safeguards.

  • Randomized delays: Add randomized delays between requests, and use explicit waits for seller elements instead of fixed sleep timers.

  • Retry queue: Send 403s and timeouts into a retry queue, then rerun them through another proxy or with rotated headers.

  • Schema validation: Before any record reaches your database, flag empty names, invalid storefront URLs, and zero-item crawls.

  • Snapshot comparison: Compare each crawl with the previous snapshot so you can spot layout changes before they pollute the dataset.

This kind of setup acts like a smoke alarm. It won’t stop every problem, but it helps you catch trouble early instead of finding out after the data is already wrong.

Conclusion: the shortest path to a usable Amazon seller scraper

Once the scraper is stable, the last call is simple: maintain the stack yourself or hand off the hard parts.

If maintenance starts eating more time than engineering, move browser operations, proxy rotation, CAPTCHA handling, and change monitoring to a managed service. That trade-off is what decides whether you keep the stack in-house or shift to a managed workflow.

Want this done for you?

Send us the URLs. We'll quote it in 24 hours.

Paste the URL(s) you want scraped. We'll reply within 24 hours with a feasibility check and a ballpark quote.

Monthly budget

Or, browse our 3 case studies →

FAQ

FAQs

Find answers to commonly asked questions about our Data as a Service solutions, ensuring clarity and understanding of our offerings.

How will I receive my data and in which formats?

We offer versatile delivery options including FTP, SFTP, AWS S3, Google Cloud Storage, email, Dropbox, and Google Drive. We accommodate data formats such as CSV, JSON, JSONLines, and XML, and are open to custom delivery or format discussions to align with your project needs.

What types of data can your service extract?

We are equipped to extract a diverse range of data from any website, while strictly adhering to legal and ethical guidelines, including compliance with Terms and Conditions, privacy, and copyright laws. Our expert teams assess legal implications and ensure best practices in web scraping for each project.

How are data projects managed?

Upon receiving your project request, our solution architects promptly engage in a discovery call to comprehend your specific needs, discussing the scope, scale, data transformation, and integrations required. A tailored solution is proposed post a thorough understanding, ensuring optimal results.

Can I use AI to scrape websites?

Yes, You can use AI to scrape websites. Webscraping HQ’s AI website technology can handle large amounts of data extraction and collection needs. Our AI scraping API allows user to scrape up to 50000 pages one by one.

What support services do you offer?

We offer inclusive support addressing coverage issues, missed deliveries, and minor site modifications, with additional support available for significant changes necessitating comprehensive spider restructuring.

Is there an option to test the services before purchasing?

Absolutely, we offer service testing with sample data from previously scraped sources. For new sources, sample data is shared post-purchase, after the commencement of development.

How can your services aid in web content extraction?

We provide end-to-end solutions for web content extraction, delivering structured and accurate data efficiently. For those preferring a hands-on approach, we offer user-friendly tools for self-service data extraction.

Is web scraping detectable?

Yes, Web scraping is detectable. One of the best ways to identify web scrapers is by examining their IP address and tracking how it's behaving.

Why is data extraction essential?

Data extraction is crucial for leveraging the wealth of information on the web, enabling businesses to gain insights, monitor market trends, assess brand health, and maintain a competitive edge. It is invaluable in diverse applications including research, news monitoring, and contract tracking.

Can you illustrate an application of data extraction?

In retail and e-commerce, data extraction is instrumental for competitor price monitoring, allowing for automated, accurate, and efficient tracking of product prices across various platforms, aiding in strategic planning and decision-making.