# Amazon Seller Profile Scraper (`cyprusapi/amazon-seller`) Actor

Public Amazon seller profiles across 18 marketplaces: seller name, feedback per period (30d/90d/12M/lifetime), business name + address, storefront link — from seller IDs or seller/storefront URLs. Pure HTTP, no browser; errors never charged.

- **URL**: https://apify.com/cyprusapi/amazon-seller.md
- **Developed by:** [Torchtechnology LTD](https://apify.com/cyprusapi) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.50 / 1,000 seller profiles

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/actors/running/actors-in-store.md#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

### What does this Actor do?

Amazon Seller Profile Scraper extracts **public seller profiles** from Amazon across **18 verified marketplaces**. Feed it seller IDs or seller/storefront URLs — or let it **discover the sellers for you**: point it at Amazon product, keyword search, bestseller or category URLs and it resolves every seller behind them (the full offer list of each product, not just the Buy Box). You get back, per seller: the **seller name**, the full **feedback breakdown** (rating count, average, positive/neutral/negative percent for 30 days, 90 days, 12 months and lifetime — exactly as Amazon renders it), the **business name and business address** that Amazon publishes for business sellers, further raw business details (VAT number, trade register, phone, email — as shown), and the **storefront link**. No guessing, no derived values: every field comes from the seller's public profile page (`/sp?seller=…`), with provenance attached.

### Why this Actor?

- **Due diligence & supplier research** — verify who you are buying from: legal entity, address, feedback history per period.
- **Competitor monitoring** — batch-track feedback trends of other sellers in your niche.
- **Lead generation** — discover all sellers behind a keyword, category or bestseller chart in one run: `startUrls` resolves every product's full offer list (Buy Box **and** all other offer sellers) into deduplicated seller profiles.
- **Marketplace coverage** — 18 marketplaces verified live: de, com, co.uk, fr, it, es, ca, com.au, co.jp, in, nl, se, pl, be, mx, br, ae, sa. Labels are parsed per marketplace language.
- **Honest billing** — deduplication happens *before* charging; sellers that are not found, blocked or fail in transit are pushed as transparency items and **never charged**.

### Quick start

```json
{
  "sellerIds": ["A115S3IK6RNUC2"],
  "marketplace": "de"
}
```

Or with URLs (marketplace is taken from each URL — mixed marketplaces in one run are fine):

```json
{
  "sellerUrls": [
    "https://www.amazon.de/sp?seller=A115S3IK6RNUC2",
    "https://www.amazon.com/s?ie=UTF8&me=ATVPDKIKX0DER"
  ]
}
```

Seller IDs are the 8–16 character codes in any "Sold by" / storefront link (`?seller=…` or `?me=…`) on a product page.

Or discover sellers from Amazon URLs — product pages (all sellers of the offer list, not just the Buy Box), keyword searches, bestseller charts and category pages:

```json
{
  "startUrls": [
    "https://www.amazon.de/dp/B08ABC1234",
    "https://www.amazon.de/s?k=usb+c+hub",
    "https://www.amazon.com/gp/bestsellers/electronics"
  ],
  "maxItems": 10
}
```

For product URLs the Actor opens the offer list and takes **every seller on it**. For search/bestseller/category URLs it collects the products of the first result page (up to `maxItems` per URL) and resolves each of them the same way. Seller IDs are deduplicated across the whole run — a seller appearing on ten products is scraped and charged once.

### Input reference

| Field | Type | Default | Description |
|---|---|---|---|
| `sellerIds` | string\[] | — | Seller IDs, queried on `marketplace` (batch freely) |
| `sellerUrls` | string\[] | — | Seller profile (`/sp?seller=…`) or storefront (`…?me=…`) URLs; marketplace auto-detected per URL |
| `startUrls` | string\[] | — | Seller discovery: product (`/dp/…`, `/gp/product/…`), search (`/s?k=…`), bestseller and category URLs; marketplace auto-detected per URL |
| `maxItems` | integer | `10` | Products taken from the first result page of each search/bestseller/category `startUrl` (1–100) |
| `marketplace` | string | `de` | Marketplace for the bare `sellerIds` — one of the 18 above |
| `proxyConfiguration` | object | Apify Residential | Proxy settings; custom `proxyUrls` supported |
| `proxiesByMarketplace` | object | — | Geo-pinned proxies per marketplace — tried first, ahead of the bundled pool and the Apify tiers |
| `apifyProxyFallback` | boolean | `true` | After the own pool, also try Apify datacenter then Apify residential (geo-targeted) on bot-detection/transport failures |

At least one of `sellerIds`, `sellerUrls` or `startUrls` is required; all three can be combined in one run.

### Output

One dataset item per **delivered seller profile**:

```json
{
  "sellerId": "A115S3IK6RNUC2",
  "sellerName": "trena_europe",
  "marketplace": "de",
  "profileUrl": "https://www.amazon.de/sp?seller=A115S3IK6RNUC2",
  "storefrontUrl": "https://www.amazon.de/s?ie=UTF8&marketplaceID=A1PA6795UKMFR9&me=A115S3IK6RNUC2",
  "feedback": {
    "days30": {"ratingCount": 10, "averageRating": 4.1, "positivePercent": 80, "neutralPercent": 0, "negativePercent": 20},
    "days90": {"ratingCount": 55, "averageRating": 4.7, "positivePercent": 92, "neutralPercent": 2, "negativePercent": 5},
    "days365": {"ratingCount": 661, "averageRating": 4.8, "positivePercent": 98, "neutralPercent": 0, "negativePercent": 2},
    "lifetime": {"ratingCount": 16649, "averageRating": 4.9, "positivePercent": 98, "neutralPercent": 0, "negativePercent": 1}
  },
  "businessName": "Trena Sp. z o.o.",
  "businessAddress": ["Świeradowska 47", "Warszawa", "mazowieckie", "02-662", "PL"],
  "businessDetails": {
    "Geschäftsart": "Unternehmen in Privatbesitz",
    "Handelsregisternummer": "0000267534",
    "UStID": "DE299869773",
    "Telefonnummer": "+48221225723",
    "E-Mail": "ebay@e-trena.de"
  },
  "source": "sellerIds",
  "proxyTier": "own-resi",
  "scrapedAt": "2026-08-18T12:00:00Z"
}
```

| Field | Meaning |
|---|---|
| `sellerId`, `sellerName` | Amazon's seller code and the display name from the profile page |
| `feedback` | Per period (`days30`/`days90`/`days365`/`lifetime`): rating count, weighted average, and Amazon's own positive/neutral/negative percents (4–5 stars = positive, 3 = neutral, 1–2 = negative). Periods Amazon does not render are absent, not zero-filled |
| `businessName`, `businessAddress` | The legal business name and address Amazon publishes (business sellers only; `null` when the seller renders none) |
| `businessDetails` | All further label/value pairs of the business block, raw, keyed by their rendered label (VAT number, trade register, phone, email, …) — labels follow the marketplace language |
| `storefrontUrl`, `profileUrl` | Links |
| `source`, `proxyTier`, `scrapedAt` | Provenance: which input produced the item, which proxy tier fetched it, when |

Error items (`invalid_input`, `invalid_url`, `unsupported_marketplace`, `seller_not_found`, `blocked`, `transport`, `unexpected_page`, plus discovery-level `not_found`/`no_results`/`no_offers` for `startUrls` that resolve to nothing) carry `error` + `description` and are **never charged**. `RUN_SUMMARY` (key-value store) reports delivered/requested counts, discovery statistics (startUrls processed, products resolved) and per-tier proxy statistics per run.

### Pricing

Pay per **delivered seller profile** (`seller` event) — a discovered seller costs exactly the same as a directly given one, and deduplication happens before charging. Discovery itself (opening offer lists and result pages) is free; not-found sellers, bot-blocks and transport failures are free. See the Pricing tab for the current price. Batch many sellers into one run — they share the startup cost.

### Use with AI agents (MCP)

Actor identity: `cyprusapi/amazon-seller`. Tool description: get public Amazon seller profiles (feedback per period, business name & address, storefront link) for seller IDs, seller/storefront URLs, or discovered from product/search/bestseller/category URLs across 18 marketplaces.

> Example prompt: "Get the feedback history and business address of seller A115S3IK6RNUC2 on Amazon.de." → input: `{"sellerIds": ["A115S3IK6RNUC2"], "marketplace": "de"}`

Pairs naturally with **cyprusapi/amazon-price-buybox** (which surfaces seller IDs from Buy Box and offer lists) and **cyprusapi/amazon-product**.

### FAQ & limitations

- **Only public data** — everything the Actor returns is visible on Amazon's public seller profile page. Business details appear only for sellers who publish them (mostly business sellers; private sellers render no business block — that is not an error).
- **Business block coverage by marketplace** (live-verified 2026-08-18): business name + address render on de, com, co.uk, fr, it, es, co.jp, nl, se, pl, be, mx, br. On ae and sa only the business name renders (no address). ca, com.au and in render no business block at all (in shows only a "contact seller c/o Amazon" mailbox) — feedback, name and storefront are delivered everywhere.
- **Feedback periods as rendered** — if Amazon shows only some periods for a seller (e.g. too few recent ratings), the others are simply absent.
- **Proxy tier chain per seller:** your `proxiesByMarketplace` pool first, then the bundled pool (per-Actor named KVS `proxy-pool-amazon-seller`, record `pool` — the user input always wins), then — with `apifyProxyFallback` on — Apify datacenter, then Apify residential. Retries only on bot detection/transport; `not_found` is final.
- **Bot protection:** Amazon occasionally hard-blocks even good residential exits. The Actor reports `blocked` honestly instead of fighting captchas — re-run later or with a different proxy pool.
- **Legality:** the data is publicly displayed by Amazon (in the EU largely because marketplace sellers are legally required to disclose it); comply with Amazon's ToS and applicable law when using it.
- Issues tab is open — marketplace/selector maintenance is part of the product.

# Actor input Schema

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

Amazon seller IDs (8-16 chars, A-Z0-9 — e.g. from a product page 'Sold by' link ?seller=…). Queried on the marketplace selected below. Batch as many as you like — they share startup cost.

## `sellerUrls` (type: `array`):

Seller profile URLs (https://www.amazon.de/sp?seller=…) or storefront URLs (…/s?…me=…). The marketplace is taken from each URL — mixed marketplaces in one run are fine.

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

Discover sellers instead of listing them: Amazon product pages (…/dp/ASIN or …/gp/product/ASIN — ALL sellers of the offer list are taken, not just the Buy Box), keyword search URLs (…/s?k=…), bestseller charts and category URLs. Search/bestseller/category pages contribute the products of their first result page (up to `maxItems` each), then every product's full offer list is resolved to sellers. Seller IDs are deduplicated across the whole run; each discovered seller is scraped and charged like a direct one. At least one of sellerIds / sellerUrls / startUrls is required.

## `maxItems` (type: `integer`):

How many products of the first result page of each search/bestseller/category startUrl are resolved to sellers (each product's offer list is read in full).

## `marketplace` (type: `string`):

Amazon marketplace for the bare seller IDs above (URLs carry their own marketplace).

## `proxyConfiguration` (type: `object`):

Residential proxies recommended. Custom proxies via proxyUrls.

## `proxiesByMarketplace` (type: `object`):

Optional: {"de": \["http://user:pass@host:port", …], "co.uk": \[…]}. Geo-pinned proxies per marketplace — exit-IP country should match the marketplace, otherwise Amazon serves wrong languages or bot-gates. Proxy tier chain per seller: this explicit pool FIRST; otherwise the bundled shared pool (we cover it); on blocked/transport the run falls back to Apify datacenter, then Apify residential. With useApifyProxy off and no pool at all: single direct attempt.

## `apifyProxyFallback` (type: `boolean`):

After the own pool, also try Apify datacenter then Apify residential (geo-targeted to the marketplace) on bot-detection/transport failures. Off = no Apify tiers (own pool or single direct attempt).

## Actor input object example

```json
{
  "sellerIds": [
    "A115S3IK6RNUC2"
  ],
  "maxItems": 10,
  "marketplace": "de",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "apifyProxyFallback": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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": [
        "A115S3IK6RNUC2"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cyprusapi/amazon-seller").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": ["A115S3IK6RNUC2"] }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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": [
    "A115S3IK6RNUC2"
  ]
}' |
apify call cyprusapi/amazon-seller --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cyprusapi/amazon-seller"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/EhRNKSwYvcM1l0TLq/builds/qzm54hLyI8n7V0XiA/openapi.json
