# Amazon ASIN Scraper: Bulk Product Lookup (`deepmine/amazon-asin-scraper`) Actor

Amazon ASIN scraper and bulk ASIN lookup: paste ASINs or product URLs, get one full row each with price, seller offers, rating, Best Sellers Rank, Prime, Best Seller and Climate Pledge flags, specs, images and variants. Any marketplace. Failed lookups listed free. No login.

- **URL**: https://apify.com/deepmine/amazon-asin-scraper.md
- **Developed by:** [DeepMine](https://apify.com/deepmine) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Amazon ASIN Scraper: Bulk Product Lookup

An Amazon ASIN scraper for bulk ASIN lookup: paste one ASIN or thousands (or product URLs) and get one full row per
product, on any Amazon marketplace. Each row has the title, brand, price and list price, up to 10 seller offers
(condition, price, seller, ships from, delivery), rating and star breakdown, Best Sellers Rank, explicit Prime, Best
Seller and Climate Pledge Friendly flags, specs, images, variants, the buy box seller and delivery for your postcode.
ASINs Amazon doesn't have are listed in a free Failed lookups dataset. No login, no cookies, no browser.

| asin | title | price | stars | reviewsCount | isPrime | isBestSeller | isClimatePledgeFriendly | offersCount | sellerName |
|---|---|---|---|---|---|---|---|---|---|
| B0CQF6T2K1 | Roku TV Remote Control (Official Manufacturer Product) | $9.99 | 4.6 | 12,390 | false | true | false | 4 | Amazon.com |
| B0F7Z4QZTT | Amazon Fire TV Stick 4K Plus with AI-powered Fire TV Search… | $69.99 | 4.6 | 115,415 | true | false | true | 1 | Amazon.com |
| B0FQFB8FMG | Apple AirPods Pro 3 Wireless Earbuds with Active Noise Cance… | $199.00 | 4.4 | 16,567 | false | false | false | 12 | Amazon.com |
| 1464249644 | The Witch (Deluxe Edition) | $20.98 | 4.4 | 20,544 | false | false | false | 8 | Amazon.com |
| B0DXXYS4BJ | Roku Streaming Stick HD with Voice Remote | $37.07 | 4.6 | 25,320 | false | false | false | 28 | Amazon.com |

<sub>Collected on the Apify platform from the prefilled run and a 90-ASIN run (2026-10-16, amazon.com, datacenter
proxy). The Roku remote's bestSellerBadge reads "#1 Best Seller in Remote Controls"; its first offer line reads
"1. New · $9.99 · FREE delivery Wednesday, October 21 on orders shipped by Amazon over $35 · sold by Amazon.com ·
ships from Amazon.com · buy box". Each row has 92 keys.</sub>

**$1.99 per 1,000 products** on the Starter plan ($2.35 Free, $1.69 Scale, $1.49 Business, Platinum and Diamond),
and that price includes up to 10 seller offers per product, the badge flags and the full product page. Failed
lookups are free. The prefilled run (10 products: everyday ASINs on amazon.com, 10 offers each)
costs about $0.02 on Starter.

### What you can look up

- **ASINs in bulk**: one per line, or paste a whole list separated by commas or spaces; duplicates are read once.
  Book ISBN-10s are ASINs too.
- **Product URLs**: `amazon.com/dp/…`, `amazon.de/…/dp/…`, `/gp/product/…`, from any of 23 marketplaces (US, UK, DE,
  FR, IT, ES, NL, SE, PL, BE, IE, TR, CA, MX, BR, JP, IN, AU, SG, AE, SA, EG, ZA). A URL keeps its own site; ASINs
  use the **🌍 Marketplace** you pick.
- **Seller offers** (included): the first page of Amazon's "Other sellers" panel, up to 10 offers, the buy box first,
  in the row as readable lines (`offers`) and as JSON records (`offersJson`), with the total offer count.
- **Badges as flags**: `isPrime`, `isBestSeller` (with the `bestSellerBadge` text, e.g. "#1 Best Seller in Remote
  Controls"), `isAmazonChoice`, `isClimatePledgeFriendly`, and every badge in `badges`.
- **Diagnostics**: each row says which core fields its page doesn't show (`missingFields`) and what was read only in
  part (`warnings`); lookups that give no product go to **⚠️ Failed lookups** with a reason (not found, refused,
  invalid input, not read before your spending limit).
- **Delivery location**: prices, availability and delivery dates for a postcode or a country.
- **Variants as separate products** ($: each variant row is a product, charged like one).

### How to use it

1. Paste **🆔 ASINs** (or **🔗 Product URLs**).
2. Pick the **🌍 Marketplace** the ASINs are on.
3. Press **Start**. Rows stream into the dataset in input order; export them as CSV, Excel or JSON.

Saved inputs of junglee/amazon-asins-scraper run as they are: `asins` and `amazonDomain` work the same way
(`language`, `proxyCountry` and `useCaptchaSolver` aren't needed: the log says so). `asin`, `bulkAsins`,
`startUrls` and the Amazon Scraper's `categoryOrProductUrls` work too. Search and best seller URLs aren't products:
they are listed as invalid input, and our Amazon Search Scraper and Amazon Best Sellers Scraper read them.

### Pricing

You pay per product in the dataset, once per product per run, at your Apify plan's price (see the Pricing tab). The
seller offers in the row are part of that price. Failed lookups, the run summary and anything Amazon doesn't return
are never charged. A run stops at your spending limit without reading pages it can't deliver, and lists the ASINs it
didn't get to.

### Output

**📦 Products** (the default dataset): one row per product, the same keys on every row; anything Amazon doesn't show
is `null`. Views: **📦 Products**, **🛍️ Offers & seller**, **📈 Stats**, **📝 Details** and **🩺 Diagnostics**.

| Key | What it is |
|---|---|
| thumbnailImage | The main picture |
| title, brand, author | Title, brand, book author |
| asin, url | Amazon's id and the product page |
| price, priceValue, currency | Price as shown ($19.00), as a number, ISO currency |
| listPrice, listPriceValue, discountPercent | Crossed-out list price, and how far below it the price is (%) |
| priceRange, priceRangeMin, priceRangeMax | Variation parents: the price range |
| unitPrice, subscribeSavePrice | Price per unit ("$4.25 / count"), the Subscribe & Save price |
| coupon, promotions | The buy box coupon ("Apply $2 coupon") and other promotions ("Buy 4, save 10%") |
| shippingPrice, shippingPriceValue | Delivery price ('Free' or the amount) |
| inStock, inStockText, stockLeft, condition | Availability, units left ("Only 4 left in stock"), the buy box condition |
| stars, reviewsCount | Average rating and number of ratings |
| fiveStarPercent … oneStarPercent | The star breakdown in percent |
| hasReviews | Whether it has ratings |
| aiReviewsSummarySnippet, aiReviewsSummary, aiReviewsKeywords | Amazon's "Customers say" summary and aspects |
| topReviews, topReviewsCount | The reviews the product page shows (8-13 when it shows them), one JSON object each: id, title, stars, date, country, verified purchase, helpful votes, variant, text, images. No reviewer names |
| reviewHighlights, reviewsLayout | Amazon's review snippets per aspect (~30, each with its review id); which of the two the page showed (A: full reviews, B: highlights) |
| monthlyPurchaseVolume, monthlyPurchases | "10K+ bought in past month" and the number |
| isAmazonChoice, amazonChoiceText | The Amazon's Choice badge |
| isPrime | The buy box offers Prime delivery |
| isBestSeller, bestSellerBadge | The "#1 Best Seller in …" badge |
| isClimatePledgeFriendly | Climate Pledge Friendly (its certifications are in sustainabilityFeatures) |
| badges | Every badge on the page |
| bestsellerRank, bestsellerCategory, bestsellerCategoryUrl | Best Sellers Rank in the main category |
| bestsellerRanks, bestsellerRankUrls | Every rank the product page shows ("#12 in Earbud Headphones") and its list |
| breadCrumbs | The category path |
| descriptionSnippet, description, bookDescription | Description (or the seller's A+ "Product description") |
| features | The "About this item" bullets |
| attributes, productOverview, manufacturerAttributes | Product details, overview and technical specs as "Key: Value" |
| modelNumber, manufacturer, dateFirstAvailable, isbn13 | The same facts as their own columns (date as YYYY-MM-DD) |
| importantInformation, sustainabilityFeatures | Safety/legal notes, Climate Pledge Friendly features |
| aPlusContent, aPlusImages, aPlusVideos | The A+ (From the manufacturer) block |
| brandStory, brandStoryImages | The "From the brand" block |
| productComparisonAsins | ASINs in the comparison table |
| relatedAsins, relatedAsinsSource | The "Customers also viewed / bought" carousel's ASINs and its heading (never a sponsored carousel) |
| galleryThumbnails, highResolutionImages, videosCount, videoUrls | Gallery images, videos and their video files (mp4 / m3u8) |
| variantAsins, variantDimensions, variantAttributes, variantDetails | Variants: ASINs, what they differ in, this one's values, each variant |
| variantPrices, variantImages | Each variant's price and picture |
| sellerName, sellerId, sellerUrl | The buy box seller |
| soldBy, shipsFrom, isFulfilledByAmazon | Who sells and who ships the buy box offer, and whether Amazon ships it |
| lowestOfferPrice, lowestOfferText | The all-offers link: "New & Used (5) from $17.87" and that lowest price |
| offersCount | Offers on the all-offers panel (the buy box included), else the count the page shows ("New & Used (12) from") |
| offers | Up to 10 seller offers, one line each: "1. New · $19.00 · FREE delivery … · sold by Amazon.com · ships from Amazon.com · buy box" |
| offersJson | The same offers as JSON (position, isPinnedOffer, condition, price, shippingPrice, delivery, shipsFrom, seller {name, id, url, rating, reviewsCount, averageRating, positivePercent12m}, url) |
| returnPolicy, support, storeUrl | Returns, support, the brand store |
| delivery, fastestDelivery, locationText, loadedCountryCode | Delivery promise and the location it was read for |
| answeredQuestions, reviewsUrl | Answered questions (when shown), the reviews page |
| missingFields, warnings | Diagnostics: core fields the page doesn't show; what was read only in part |
| marketplace, originalAsin, unNormalizedProductUrl, input, scrapedAt | Provenance and time (UTC) |

**⚠️ Failed lookups** (free, a second dataset): one row per input that gave no product, with asin, status
(`notFound`, `refused`, `invalidInput`, `notRead`, `error`), reason, url, marketplace, input and scrapedAt.

**🧾 Run summary** (the OUTPUT record): per input its status and failures; delivery location, calls, traffic.

#### Field map for junglee/amazon-asins-scraper users

Every field junglee returns has a column here: `price {value, currency}` → `price`, `priceValue`, `currency`;
`starsBreakdown` → `fiveStarPercent` … `oneStarPercent`; `seller` → `sellerName`, `sellerId`, `sellerUrl`;
`offers` → `offers` (lines) and `offersJson` (junglee's offer records); `bestsellerRanks` → `bestsellerRanks`,
`bestsellerRankUrls` and the main rank in `bestsellerRank`; `visitStoreLink` → `storeUrl`; `reviewsLink` →
`reviewsUrl`; `productComparison` → `productComparisonAsins`; `aPlusContent` → `aPlusContent`, `aPlusImages`,
`aPlusVideos`; `aiReviewsSummary` → `aiReviewsSummary`, `aiReviewsKeywords`; `attributesMapped` → `attributes`; the
other keys keep their names. Rows are flat: every value is text, a number, true/false or a list of text.

### Limits

- Reviews: the reviews the product page shows logged out (8-13 full reviews, or Amazon's highlight snippets); deeper
  review lists need a sign-in, which this Actor never uses.
- One page of seller offers (up to 10) per product. For every offer of a product, our Amazon Scraper reads the whole
  panel (charged per offer).
- Amazon device subscription plans (Blink, Ring) show their price with its term (`$11.99/month`, `priceValue` 11.99) and have no reviews or Best Sellers Rank; some digital items have no offers panel.
- Rows are read from Amazon's English pages; titles keep the language the seller wrote them in.
- A delivery postcode Amazon rejects stops that marketplace (rather than return another location's prices).

### FAQ

**Do I need proxies?** No: the default Apify datacenter proxy works for Amazon. A page Amazon refuses is asked
again on another IP, up to 6 times.

**What happens to an ASIN Amazon doesn't have?** It goes to the free Failed lookups dataset as `notFound`; you
aren't charged for it.

**What if a run is interrupted?** Resurrect it: products already in the dataset are never pushed or charged again,
and failed lookups already listed aren't listed twice.

### Your feedback

Found a bug, or a field you need? Open an issue on the Issues tab and we'll answer within two days. If the data
helped you, a short review on this page helps other users find the Actor.

# Actor input Schema

## `asins` (type: `array`):

Amazon product IDs, one per line (10 letters and digits, e.g. B0DCH8VDXF; a book's ISBN-10 works too). A pasted list separated by commas or spaces is split for you, and product URLs work here as well.

## `domain` (type: `string`):

The Amazon site the ASINs are looked up on. Product URLs keep their own site. Pick one, or type a host such as amazon.de or www.amazon.de.

## `productUrls` (type: `array`):

Amazon product pages (amazon.com/dp/B0…, amazon.de/…/dp/…, /gp/product/…), on any marketplace. Search and best seller pages belong to the Amazon Search Scraper and the Amazon Best Sellers Scraper.

## `maxOffers` (type: `integer`):

Also list up to this many seller offers per product in the row (price, condition, seller, ships from, delivery; the buy box first), from Amazon's all-offers panel. Included in the product price. 0 = skip the panel (a little faster).

## `zipCode` (type: `string`):

Read prices and delivery for this postcode, e.g. 10001 (amazon.com) or 10115 (amazon.de). Empty = each marketplace's capital; amazon.com uses the proxy's US location. The run stops if Amazon rejects it.

## `countryCode` (type: `string`):

Two-letter country to deliver to, for international shipping prices, e.g. DE on amazon.com. Empty = the marketplace's own country. Not used with a postcode.

## `maxProductVariantsAsSeparateResults` (type: `integer`):

Also return up to this many variants (sizes, colors…) of each product as their own rows, each with its own price, stock and offers, charged as products. Every row already lists its variant ASINs. 0 = none.

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

Leave as is: Apify datacenter proxies work for Amazon. Residential is replaced by datacenter (it costs more per page than a product row earns).

## `amazonDomain` (type: `string`):

Kept for saved junglee/amazon-asins-scraper inputs (e.g. amazon.de): wins over Marketplace when set.

## `asin` (type: `string`):

One ASIN, for inputs that send a single one: added to ASINs.

## `bulkAsins` (type: `string`):

ASINs as one text (comma, space or line separated): added to ASINs.

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

Product URLs under Apify's usual key: added to Product URLs.

## `categoryOrProductUrls` (type: `array`):

Product URLs under the Amazon Scraper's key: added to Product URLs.

## `maxConcurrency` (type: `integer`):

Engine setting.

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

Kept for saved junglee inputs: rows are read from Amazon's English pages.

## `useCaptchaSolver` (type: `boolean`):

Kept for saved junglee inputs: not needed (a refused page is retried on a new IP).

## `proxyCountry` (type: `string`):

Kept for saved junglee inputs: not used (see Delivery location).

## Actor input object example

```json
{
  "asins": [
    "B0DCH8VDXF",
    "B0FQFB8FMG",
    "B0F7Z4QZTT",
    "B0CQF6T2K1",
    "B07GBZ4Q68",
    "1464249644",
    "B00JUM4DKC",
    "B0BSHF7WHW",
    "B0CG1LGWR6",
    "B0DXXYS4BJ"
  ],
  "domain": "www.amazon.com",
  "maxOffers": 10,
  "maxProductVariantsAsSeparateResults": 0,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 12
}
```

# Actor output Schema

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

No description

## `failedUrl` (type: `string`):

No description

## `summary` (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 = {
    "asins": [
        "B0DCH8VDXF",
        "B0FQFB8FMG",
        "B0F7Z4QZTT",
        "B0CQF6T2K1",
        "B07GBZ4Q68",
        "1464249644",
        "B00JUM4DKC",
        "B0BSHF7WHW",
        "B0CG1LGWR6",
        "B0DXXYS4BJ"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("deepmine/amazon-asin-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 = {
    "asins": [
        "B0DCH8VDXF",
        "B0FQFB8FMG",
        "B0F7Z4QZTT",
        "B0CQF6T2K1",
        "B07GBZ4Q68",
        "1464249644",
        "B00JUM4DKC",
        "B0BSHF7WHW",
        "B0CG1LGWR6",
        "B0DXXYS4BJ",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("deepmine/amazon-asin-scraper").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 '{
  "asins": [
    "B0DCH8VDXF",
    "B0FQFB8FMG",
    "B0F7Z4QZTT",
    "B0CQF6T2K1",
    "B07GBZ4Q68",
    "1464249644",
    "B00JUM4DKC",
    "B0BSHF7WHW",
    "B0CG1LGWR6",
    "B0DXXYS4BJ"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call deepmine/amazon-asin-scraper --silent --output-dataset

```

## MCP server setup

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

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/yb9AtKC5mdPzuISIz/builds/YPYv1VJjhm1HwDBTb/openapi.json
