# Amazon Seller Scraper · 20 Marketplaces (`santamaria-automations/amazon-seller-scraper`) Actor

Extract Amazon seller storefronts and full product catalogs across 20 marketplaces. Returns seller name, business address, ratings (30d/90d/12mo/lifetime), policies, contact options, About text, plus optional per-product rows (ASIN, price, stars, badges). Pay-per-result, no login.

- **URL**: https://apify.com/santamaria-automations/amazon-seller-scraper.md
- **Developed by:** [NanoScrape](https://apify.com/santamaria-automations) (community)
- **Categories:** E-commerce
- **Stats:** 5 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Amazon Seller Scraper

Extract Amazon seller storefronts and their full product catalogs across 20 marketplaces. Returns seller name, business address, ratings (30d / 90d / 12mo / lifetime), return and shipping policy summaries, contact options, About text, plus optional per-product rows (ASIN, price, stars, badges). Pay-per-result, no login required.

### What it does

You give it Amazon seller IDs or `/sp?seller=...` URLs. You get back one row per seller profile, and optionally one extra row per product in that seller's catalog.

- Resolve seller storefronts from a list of seller IDs or direct profile URLs
- Get back seller profile rows with name, business info, ratings, policies, contact options, About text
- Optionally fetch the seller's full product catalog via `/s?me=...` (one row per product)
- Mix multiple marketplaces in the same run
- Pagination stops automatically at the end of the seller's catalog or at your `maxProductsPerSeller` cap

#### Sample seller-profile output

```json
{
  "type": "seller",
  "sellerId": "A3JV1EJYQT3VW7",
  "sellerName": "Anker Direct",
  "sellerUrl": "https://www.amazon.com/sp?seller=A3JV1EJYQT3VW7",
  "marketplace": "US",
  "businessName": "Anker Technology Limited",
  "businessAddress": {
    "street": "5th Floor, Bldg D, ChuangXin Park",
    "city": "Shenzhen",
    "state": "Guangdong",
    "postalCode": "518071",
    "country": "China"
  },
  "ratingsAvg": 4.7,
  "ratingsCount": 184526,
  "ratingPositive30d": 1.0,
  "ratingPositive90d": 0.98,
  "ratingPositive12mo": 0.97,
  "ratingPositiveLifetime": 0.96,
  "sellerSince": "Selling on Amazon since 2014",
  "sellerSinceYear": 2014,
  "isAmazonOwned": false,
  "returnPolicySummary": "Returns within 30 days of delivery...",
  "shippingPolicySummary": "Ships from California, USA",
  "contactSellerUrl": "https://www.amazon.com/gp/help/contact-the-seller/...",
  "about": "Anker is a global leader in charging technology...",
  "logoUrl": "https://m.media-amazon.com/images/I/seller-logo.png",
  "storefrontUrl": "https://www.amazon.com/stores/Anker/page/abc-uuid",
  "totalProductsCount": 1247
}
```

#### Sample product-row output

```json
{
  "type": "product",
  "sellerId": "A3JV1EJYQT3VW7",
  "sellerName": "Anker Direct",
  "asin": "B09B8V1LZ3",
  "title": "Anker PowerCore 10000 Portable Charger",
  "url": "https://www.amazon.com/dp/B09B8V1LZ3",
  "marketplace": "US",
  "position": 17,
  "page": 2,
  "price": { "value": 24.99, "currency": "$", "raw": "$24.99" },
  "stars": 4.6,
  "reviewsCount": 73294,
  "thumbnailImage": "https://m.media-amazon.com/images/I/example.jpg",
  "isPrime": true,
  "isAmazonChoice": false,
  "isFulfilledByAmazon": true,
  "deliveryText": "FREE delivery Mon, Jun 16"
}
```

### Pricing

$0.001 per actor start, plus $0.003 per scraped row. Roughly $3 per 1,000 rows.

Each successfully extracted seller profile and each product-catalog row counts as one paid row. You only pay for rows that successfully return data. Failed fetches are not charged.

**New to Apify?** Every account gets a $5 free monthly platform credit, enough for around 1,600 results on this actor before you commit to paying anything. Plenty to test the full feature set.

### Why this scraper

**Profile AND catalog in one run.** Most competing seller actors return either the profile OR the product feed. This one returns both, as two distinct row types in the same dataset, filterable by the `type` field.

**More complete seller data.** Pulls the period-by-period positive-rating breakdown (last 30 days, 90 days, 12 months, lifetime), the business address (street, city, state, postal code, country) when Amazon shows it, return and shipping policy summaries, the contact-seller link, the About text, the storefront vanity URL, and the logo.

**Honest about Amazon's data.** Many fields on a seller profile are situational. When Amazon doesn't show a field, the JSON value is `null`. We don't fabricate placeholder strings. The full list of "may-be-null" fields is documented below.

**20 marketplaces.** Auto-detects marketplace from any `amazon.<TLD>/sp?seller=...` URL. For bare seller IDs the `country` input picks the marketplace. Amazon-owned sellers (like `ATVPDKIKX0DER`) sometimes redirect and are handled gracefully.

**Pay only for results.** $0.003 per successfully scraped row, profile or product. Failed fetches are not charged.

### Use with AI Agents (MCP)

Connect this actor to any MCP-compatible AI client: Claude Desktop, Claude.ai, Cursor, VS Code, LangChain, LlamaIndex, or custom agents.

**Apify MCP server URL:**

`https://mcp.apify.com?tools=santamaria-automations/amazon-seller-scraper`

**Example prompt once connected:**

> "Use `amazon-seller-scraper` to fetch the storefront and first 20 products for seller ID A3JV1EJYQT3VW7 on amazon.com."

Clients that support dynamic tool discovery (Claude.ai, VS Code) will receive the full input schema automatically.

### Input

| Field | Type | Description |
| --- | --- | --- |
| `sellerIds` | array of strings | Amazon seller IDs (13 to 14 char alphanumeric, e.g. `A3JV1EJYQT3VW7`). |
| `startUrls` | array | Direct `/sp?seller=...` URLs. Marketplace auto-detected from the TLD. |
| `country` | string | Marketplace for `sellerIds`: US, UK, DE, FR, IT, ES, CA, MX, BR, NL, SE, PL, TR, JP, IN, AU, SG, SA, AE, EG. |
| `language` | string | `AUTO` matches the marketplace, or pick one: en, de, fr, it, es, ja, pt, ar, tr, sv, nl, pl. |
| `scrapeProductListings` | boolean | When `true` (default), also fetch the seller's full product catalog via `/s?me=...`. |
| `maxProductsPerSeller` | integer | Cap on product rows per seller. `0` means no cap (walk until Amazon stops). Default `50`. |
| `maxSellers` | integer | Hard cap on total sellers processed. `0` means unlimited. |
| `concurrency` | integer | Sellers fetched in parallel, 1 to 20. Default `5`. |

You can mix `sellerIds` and `startUrls` in the same run.

#### How to find a seller ID

1. Open any Amazon product page.
2. Click the "Sold by ..." link near the buy box.
3. The seller-profile URL is `https://www.amazon.<tld>/sp?seller=<ID>`. Copy the `<ID>`.

#### Example input

```json
{
  "sellerIds": ["A3JV1EJYQT3VW7", "ATVPDKIKX0DER"],
  "country": "US",
  "scrapeProductListings": true,
  "maxProductsPerSeller": 100,
  "concurrency": 5
}
```

### Output fields

#### Seller-profile rows (`type: "seller"`)

##### Identity

- `sellerId`, `sellerName`, `sellerUrl`, `marketplace`
- `logoUrl`, `storefrontUrl` (branded `/stores/...` URL when linked)
- `isAmazonOwned`

##### Business information

- `businessName` (registered legal entity)
- `businessAddress` as `{street, city, state, postalCode, country}`
- `phoneNumber`, `email` (when listed)

##### Ratings

- `ratingsAvg` (0 to 5), `ratingsCount` (lifetime)
- `ratingPositive30d`, `ratingPositive90d`, `ratingPositive12mo`, `ratingPositiveLifetime` as fractions

##### Tenure

- `sellerSince` (literal display text), `sellerSinceYear` (parsed)

##### Policies and contact

- `returnPolicySummary`, `shippingPolicySummary`
- `contactSellerUrl`
- `about` (the seller's published About text)

##### Catalog hint

- `totalProductsCount` (when Amazon surfaces it on the profile)

#### Product-catalog rows (`type: "product"`)

- `sellerId`, `sellerName` (links the row back to the parent seller)
- `asin`, `title`, `url`, `marketplace`
- `position`, `page` (slot in the seller's catalog)
- `price`, `listPrice` as `{value, currency, raw}`
- `stars`, `reviewsCount`
- `thumbnailImage`
- `isPrime`, `isAmazonChoice`, `isFulfilledByAmazon`
- `deliveryText`

#### Run metadata (every row)

`input`, `scrapedAt`

### Common use cases

- **Competitive intelligence.** Benchmark a competitor's seller-feedback trend (30d vs 12mo vs lifetime) over time.
- **Brand safety.** Verify third-party sellers' business information and contact options.
- **Catalog mapping.** Extract every ASIN a competitor sells in one run (`scrapeProductListings: true`).
- **Marketplace audit.** Identify sellers shipping from specific countries via `businessAddress.country`.
- **New-entrant detection.** Filter `sellerSinceYear` within the past 12 months to find new market entrants.

### Notes and limits

- **Two row types in one dataset.** Profile rows have `type: "seller"`, catalog rows have `type: "product"`. Filter downstream by the `type` field.
- **Profile fields are situational.** Amazon shows business address, phone, email, and the rating breakdowns selectively. When the field isn't shown for a seller, the JSON value is `null`. We don't fabricate "N/A" strings.
- **Amazon-owned sellers redirect.** IDs like `ATVPDKIKX0DER` (Amazon.com) redirect to a different page layout. We detect the known IDs and flag them with `isAmazonOwned: true` so you can filter them downstream.
- **Branded Stores (`/stores/<slug>`).** v1 captures the storefront link when present on the profile but doesn't crawl the branded landing page itself. v1.1 will add deep `/stores/` parsing.
- **Pagination depth.** The seller's product feed paginates like Amazon search (~16 products per page). The actor stops at your `maxProductsPerSeller` cap, at an empty page, or at 20 pages, whichever comes first.

#### Fields that tend to be null

Populated only when Amazon shows them. Not parser bugs:

- `businessAddress`, `phoneNumber`, `email` only when the seller's Business Information block lists them. Many third-party sellers omit phone and email.
- `ratingPositive30d` / `90d` / `12mo` only when the seller has activity in that window. New sellers often have only a lifetime value.
- `sellerSince` and `sellerSinceYear` only when the profile carries the "Selling on Amazon since" line. "Just launched" sellers won't have a year.
- `returnPolicySummary`, `shippingPolicySummary` only when the seller exposes these blocks. FBA-only sellers often inherit Amazon's defaults and don't render their own.
- `about` only when the seller has published an About section. Many small sellers skip this.
- `storefrontUrl` only when the seller has built a branded `/stores/` page.
- `totalProductsCount` is hidden on many profiles. Use `scrapeProductListings: true` to count by walking the catalog instead.

#### Recommended concurrency

3 to 5 concurrent sellers is the sweet spot for runs under 1,000 sellers. Higher (up to 20) works but transient blocks become more frequent. Pages within a single seller's catalog are fetched sequentially to preserve session warmth.

#### Multi-marketplace runs

Mixing marketplaces in one run is supported. Accept-Language, locale headers, and the proxy country are tuned per task. Expect slightly longer runtime on smaller marketplaces (`.sa`, `.ae`, `.eg`, `.sg`) where Amazon's anti-bot is more aggressive.

#### How the Amazon-owned seller is detected

When `sellerName` matches `Amazon.com`, `Amazon`, `Amazon.com Services LLC`, or a clear `Amazon.com ...` prefix, the row is flagged with `isAmazonOwned: true`. This is a heuristic and doesn't catch every Amazon-affiliated subsidiary (Whole Foods, Ring, etc. ship under their own seller IDs).

### Related Actors

- [Amazon Product Scraper](https://apify.com/santamaria-automations/amazon-product-scraper): pull the full 50+ field PDP detail for any ASIN returned in a product row (description, A+ content, variants, AI review summary, top reviews).
- [Amazon Search Scraper](https://apify.com/santamaria-automations/amazon-search-scraper): scrape search results pages by keyword across the same 20 marketplaces.
- [Amazon Bestsellers Scraper](https://apify.com/santamaria-automations/amazon-bestsellers-scraper): scrape Amazon's bestseller, movers and shakers, new releases, most wished for and most gifted rankings.

### Support

For issues, feature requests, or marketplaces not yet supported, please open an issue on the [Issues tab](https://apify.com/santamaria-automations/amazon-seller-scraper/issues) of this actor. We typically respond within 24 hours.

Contact: contact@nanoscrape.com

# Actor input Schema

## `sellerIds` (type: `array`):

List of Amazon seller IDs (typically 13-14 character alphanumeric, e.g. `A3JV1EJYQT3VW7`). The actor constructs the `/sp?seller=...` URL on the marketplace you pick below. Find a seller ID by opening any product page, clicking 'Sold by ...', then copying the `seller=` value from the URL.

## `startUrls` (type: `array`):

Direct Amazon seller profile URLs (`https://www.amazon.<tld>/sp?seller=<id>` or any variant carrying `seller=<id>` / `me=<id>`). Marketplace is auto-detected from the URL TLD.

## `country` (type: `string`):

Which Amazon marketplace to use for the Seller IDs field above. Ignored for Seller URLs (TLD is detected from the URL).

## `language` (type: `string`):

Accept-Language preference sent to Amazon. `AUTO` matches the marketplace (e.g. de-DE for Germany, ja-JP for Japan) — recommended unless you need consistent English copy across all marketplaces.

## `scrapeProductListings` (type: `boolean`):

When true, after fetching the seller profile the actor also walks `/s?me=<sellerId>` to extract the seller's product feed. Each product becomes a separate row with `type=product`. Set to false to get profile rows only.

## `maxProductsPerSeller` (type: `integer`):

Cap the number of product rows extracted per seller. `0` = no cap (walks until Amazon stops returning rows). Each `/s?me=...` page returns ~16 products.

## `maxSellers` (type: `integer`):

Hard cap on the number of distinct sellers processed in this run. `0` = unlimited.

## `concurrency` (type: `integer`):

How many sellers to process in parallel. 3-5 is reliable for most workloads; higher (up to 20) is faster but increases the chance of transient blocks that force retries.

## Actor input object example

```json
{
  "sellerIds": [
    "A3JV1EJYQT3VW7"
  ],
  "startUrls": [],
  "country": "US",
  "language": "AUTO",
  "scrapeProductListings": true,
  "maxProductsPerSeller": 50,
  "maxSellers": 0,
  "concurrency": 5
}
```

# Actor output Schema

## `sellerData` (type: `string`):

Dataset containing scraped Amazon seller profiles and product rows

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "sellerIds": [
        "A3JV1EJYQT3VW7"
    ],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("santamaria-automations/amazon-seller-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "sellerIds": ["A3JV1EJYQT3VW7"],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("santamaria-automations/amazon-seller-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "sellerIds": [
    "A3JV1EJYQT3VW7"
  ],
  "startUrls": []
}' |
apify call santamaria-automations/amazon-seller-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=santamaria-automations/amazon-seller-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7vvcbcyX7RtegBNFK/builds/KjWRayPIczBy1lSRg/openapi.json
