# Amazon Product Scraper (`codingfrontend/amazon-product-scraper`) Actor

Scrape product listings from Amazon.in based on search term, ASINs, product URLs, or category URLs with detailed product information.

- **URL**: https://apify.com/codingfrontend/amazon-product-scraper.md
- **Developed by:** [Coding Frontned](https://apify.com/codingfrontend) (community)
- **Categories:** Automation, E-commerce
- **Features:** Limited permissions
- **Stats:** 214 total users, 12 monthly users, 85.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 India Product Scraper

Find products on Amazon.in by search phrase, ASIN, product page URL, search results URL, or category URL. The Actor stores one record per unique product, matched to the ASIN published on a result card or product page.

### What the Actor collects

Product records can include the details Amazon shows for a product, such as its price, specifications, features, seller, delivery text, badges, images, ratings, and review cards. Optional values appear only when the page provides usable information. The Actor does not sign in or solve access challenges, and it does not fill in information that a page does not show.

A run reads public HTTPS pages on amazon.in or www.amazon.in. Use the matching source mode for the page or identifiers you have.

### Start a run

1. Open the Actor's Input tab.
2. Choose a source type and enter the matching phrase, URL, or ASIN list.
3. Set the maximum number of products and any request or proxy settings.
4. Start the run.
5. Open the Dataset for product records. Open the run summary for the saved count and completion status.

Collection has a 150-second budget followed by a short shutdown allowance. Long lists or slow pages can leave a run with fewer records than requested.

Use 1 GB or more of run memory when collecting product details, large image galleries, or longer lists.

### Source types

| Source type | Matching input | What to provide |
| --- | --- | --- |
| Search phrase | searchQuery | A phrase to search on Amazon.in. The default phrase is laptop. |
| ASINs | asins | One or more 10-character Amazon product identifiers. |
| Product page URLs | productUrls | Direct public Amazon.in product pages that identify an ASIN. |
| Search results URL | searchUrl | A public Amazon.in search URL with a search phrase in k or keywords. |
| Category URL | categoryUrl | A public Amazon.in /gp/bestsellers category page or /s results URL filtered by node or rh. |

Choose one source type for a run. Supply its matching input and leave fields for the other source types empty. ASINs and product page URLs are limited to the first maxItems entries; every supplied entry is checked before that run limit is applied. The Actor stores duplicate ASINs once.

### Input settings

All top-level inputs are optional in the JSON form because the Actor has defaults. A source-specific field becomes required when its source type is selected.

| Field | Type and limits | Required? | Default | What it controls |
| --- | --- | --- | --- | --- |
| mode | Text: search, asin, productUrl, searchUrl, or categoryUrl | Optional | search | Selects one source type. |
| searchQuery | Text, up to 300 characters | Optional; used in search mode | laptop | Search phrase. A blank value uses laptop. |
| asins | List of up to 100 text values; each is exactly 10 letters or digits | Required in asin mode | None | Product identifiers. The first entries up to maxItems are requested. |
| productUrls | List of up to 100 text values; each URL is up to 8,192 characters | Required in productUrl mode | None | Direct product pages. The first entries up to maxItems are requested. Amazon's normal product reference suffix is accepted. |
| searchUrl | Text URL, up to 8,192 characters | Required in searchUrl mode | None | Search results page. It must be a public HTTPS Amazon.in URL with a non-empty k or keywords value. |
| categoryUrl | Text URL, up to 8,192 characters | Required in categoryUrl mode | None | Category or best-seller results page. |
| maxItems | Integer from 1 to 100 | Optional | 10 | Maximum number of unique product records to save. |
| productReviews | Boolean | Optional | true | Include up to 10 public review cards already shown on each product page. |
| requestDelayMs | Integer from 0 to 60,000 milliseconds | Optional | 600 | Pause between page requests. |
| requestTimeoutMs | Integer from 5,000 to 120,000 milliseconds | Optional | 60,000 | Time limit for an individual page or robots-policy request. |
| maxRetries | Integer from 0 to 2 | Optional | 1 | Retry temporary network or server errors. Access denials and challenges are not retried. |
| proxyConfiguration | Object with the four settings below | Optional | Apify Residential proxy in India | Selects how requests are routed. Proxy use may add cost. |

#### Proxy settings

The default proxy configuration uses Apify Proxy with the Residential group and India location. Custom proxy URLs use HTTP or HTTPS and must be supplied without Apify groups or country settings.

| Setting | Type and limits | Required? | Default | What it controls |
| --- | --- | --- | --- | --- |
| useApifyProxy | Boolean | Optional | true with the default configuration | Uses Apify Proxy. Set to false when supplying custom proxy URLs. |
| apifyProxyGroups | List of up to 10 text values, each 1 to 100 characters | Optional | \[RESIDENTIAL] | Apify Proxy groups to use. |
| apifyProxyCountry | Two-letter country code | Optional | IN | Country location for Apify Proxy. |
| proxyUrls | List of up to 100 HTTP or HTTPS proxy URLs, each up to 2,048 characters | Optional | None | Custom proxy URLs. Do not combine these with Apify Proxy groups or country settings. |

The proxy settings accept only these four names. The default Actor input keeps the Residential IN configuration.

### Collection behavior

Search and category runs follow public next links until maxItems products are found, the page has no next link, or the run reaches its time limit. A safety limit also stops collection after maxItems listing pages; if a next page remains and fewer unique products were found, the run summary reports isPartial: true. The Actor requests product pages for the collected ASINs and saves each unique product once. Product page and ASIN lists are limited to the first maxItems entries before duplicate products are removed. Category URL mode supports bestseller pages and category-filtered search results; browse, new-release, movers-and-shakers, and most-wished-for pages are not supported.

Product reviews are read only from review cards already present on a fetched product page. The Actor does not open separate review pages. If review details are unavailable, the product can still be saved with its other available details. If a run saves products but cannot finish its requested work, the run summary reports limited results.

If a result card provides valid product data but its detail page cannot be opened, the Actor keeps the available card data and reports limited results. Missing prices, specifications, or other facts remain absent.

The Actor uses public page content only. Results can vary with the page, location, and time of the run. Prices, availability, delivery text, and review details can change.

### Copyable input JSON

Each example is valid input. The first example includes every setting used for a search run; change the source-specific fields for the other modes.

#### Search for products

```json
{
  "mode": "search",
  "searchQuery": "wireless headphones",
  "maxItems": 5,
  "productReviews": true,
  "requestDelayMs": 600,
  "requestTimeoutMs": 60000,
  "maxRetries": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IN"
  }
}
```

#### Use a search results URL

```json
{
  "mode": "searchUrl",
  "searchUrl": "https://www.amazon.in/s?k=wireless+headphones",
  "maxItems": 5
}
```

#### Use a category page

```json
{
  "mode": "categoryUrl",
  "categoryUrl": "https://www.amazon.in/gp/bestsellers/electronics",
  "maxItems": 5
}
```

#### Use product page URLs

```json
{
  "mode": "productUrl",
  "productUrls": [
    "https://www.amazon.in/dp/B0D926263M",
    "https://www.amazon.in/dp/B08N5WRWNW"
  ],
  "maxItems": 2,
  "productReviews": false
}
```

#### Use ASINs

```json
{
  "mode": "asin",
  "asins": ["B0D926263M", "B08N5WRWNW"],
  "maxItems": 2
}
```

### Full illustrative product output

The following example demonstrates the complete dataset shape. Its values are illustrative and are not a result from a run. Actual records omit values that are not available on the product page. Currency is included only when the source states it; a price amount alone does not imply a currency. A price range may contain a minimum without a maximum when the page only states a starting price.

```json
{
  "title": "Illustrative Wireless Audio Guide",
  "asin": "B0EXAMPLE1",
  "url": "https://www.amazon.in/dp/B0EXAMPLE1",
  "price": {
    "value": 1749
  },
  "priceRange": {
    "minimum": 1749,
    "currency": "INR"
  },
  "listPrice": {
    "value": 2099
  },
  "brand": "Example Press",
  "stars": 4.6,
  "starsBreakdown": {
    "5star": 0.7,
    "4star": 0.2,
    "3star": 0.07,
    "2star": 0.02,
    "1star": 0.01
  },
  "reviewsCount": 100,
  "offersCount": 3,
  "inStock": true,
  "inStockText": "In stock",
  "breadCrumbs": "Books > Arts & Photography > Music",
  "description": "A guide to wireless audio equipment and listening.",
  "manufacturerDescription": "An illustrative guide to choosing and using wireless audio equipment.",
  "descriptionSections": [
    {
      "heading": "Overview",
      "text": "A practical guide to wireless audio equipment."
    }
  ],
  "inTheBox": "Hardcover book and reference card",
  "features": [
    "Wireless audio basics",
    "Headphone and speaker comparisons"
  ],
  "attributes": [
    {
      "key": "Format",
      "value": "Hardcover"
    },
    {
      "key": "Language",
      "value": "English"
    }
  ],
  "specificationGroups": [
    {
      "name": "Product details",
      "attributes": [
        {
          "key": "Publisher",
          "value": "Example Press"
        },
        {
          "key": "Publication date",
          "value": "15 August 2026"
        }
      ]
    }
  ],
  "identifiers": {
    "isbn13": "9781234567890",
    "modelNumber": "AUDIO-GUIDE-01"
  },
  "variants": [
    {
      "asin": "B0EXAMPLE2",
      "url": "https://www.amazon.in/dp/B0EXAMPLE2",
      "options": [
        {
          "name": "Format",
          "value": "Paperback"
        }
      ],
      "price": {
        "value": 1499
      }
    }
  ],
  "offers": [
    {
      "asin": "B0EXAMPLE1",
      "condition": "New",
      "seller": {
        "name": "Example Retailer",
        "id": "A1EXAMPLE2XYZ",
        "url": "https://www.amazon.in/sp?seller=A1EXAMPLE2XYZ"
      },
      "fulfillmentText": "Fulfilled by Amazon",
      "terms": "Ships in protective packaging",
      "price": {
        "value": 1749
      },
      "availability": "In stock",
      "validUntil": "2026-12-31",
      "url": "https://www.amazon.in/gp/offer-listing/B0EXAMPLE1"
    }
  ],
  "documents": [
    {
      "title": "Sample chapter",
      "url": "https://www.amazon.in/audio-guide.pdf"
    }
  ],
  "videos": [
    {
      "id": "AUDIO-GUIDE-VIDEO-1",
      "title": "Meet the author",
      "url": "https://m.media-amazon.com/videos/example.mp4",
      "thumbnailUrl": "https://m.media-amazon.com/images/I/example-video.jpg",
      "durationSeconds": 120,
      "width": 1920,
      "height": 1080
    }
  ],
  "book": {
    "authors": ["Example Author"],
    "publisher": "Example Press",
    "publicationDate": "15 August 2026",
    "edition": "First edition",
    "language": "English",
    "printLength": "240 pages",
    "series": "Audio Guides"
  },
  "delivery": "FREE delivery on Tuesday",
  "fastestDelivery": "Or fastest delivery tomorrow",
  "seller": {
    "name": "Example Retailer",
    "id": "A1EXAMPLE2XYZ",
    "url": "https://www.amazon.in/sp?seller=A1EXAMPLE2XYZ"
  },
  "bestsellerRanks": [
    {
      "rank": 1,
      "category": "Wireless Audio Guides"
    }
  ],
  "discountPercentage": 17,
  "savings": 350,
  "isBestSeller": true,
  "isAmazonChoice": true,
  "badge": "Amazon's Choice",
  "coupon": "Save 100 with coupon",
  "videosCount": 1,
  "visitStoreLink": {
    "text": "Visit the Example Press Store",
    "url": "https://www.amazon.in/stores/ExamplePress"
  },
  "answeredQuestionsCount": 12,
  "monthlyPurchaseVolume": "100+ bought in past month",
  "images": [
    "https://m.media-amazon.com/images/I/example-product.jpg"
  ],
  "reviews": [
    {
      "reviewId": "R1EXAMPLE123456",
      "reviewerName": "Example Reviewer",
      "reviewerProfileUrl": "https://www.amazon.in/gp/profile/example-reviewer",
      "reviewUrl": "https://www.amazon.in/gp/customer-reviews/R1EXAMPLE123456",
      "rating": 5,
      "title": "Clear and useful",
      "date": "Reviewed in India on 15 August 2026",
      "verifiedPurchase": true,
      "body": "An illustrative review about the book.",
      "helpfulVotes": 8,
      "images": [
        "https://m.media-amazon.com/images/I/example-review.jpg"
      ]
    }
  ]
}
```

### Product record fields

Every dataset record includes title, asin, and url. The other fields are optional and have no default; they appear only when usable source data is available.

| Field | Type and nested values | Required? |
| --- | --- | --- |
| title | Text, at least 3 characters | Required |
| asin | Text containing 10 uppercase letters or digits | Required |
| url | Canonical Amazon.in product URL | Required |
| price | Object with value (number 0 or greater) and optional three-letter currency when stated by the source | Optional |
| priceRange | Object with minimum (number 0 or greater), optional maximum, and optional three-letter currency | Optional |
| listPrice | Object with value (number 0 or greater) and optional three-letter currency when stated by the source | Optional |
| brand | Text | Optional |
| stars | Number from 0 to 5 | Optional |
| starsBreakdown | Object with optional 5star, 4star, 3star, 2star, and 1star shares from 0 to 1 | Optional |
| reviewsCount | Integer 0 or greater | Optional |
| offersCount | Integer 1 or greater | Optional |
| inStock | Boolean | Optional |
| inStockText | Text | Optional |
| breadCrumbs | Text | Optional |
| description | Text | Optional |
| manufacturerDescription | Text | Optional |
| descriptionSections | List of up to 100 objects with required text and optional heading | Optional |
| inTheBox | Text | Optional |
| features | List of up to 50 text values | Optional |
| attributes | List of up to 100 objects; each has key and value text | Optional |
| specificationGroups | List of up to 80 objects; each has a name and up to 100 key/value attributes | Optional |
| identifiers | Object with optional gtin, upc, isbn10, isbn13, modelNumber, partNumber, sku, mpn, gtin8, gtin12, gtin13, and gtin14 text values | Optional |
| variants | List of up to 100 objects with an ASIN and URL; optional options (up to 30 name/value pairs), price, and list price | Optional |
| offers | List of up to 100 objects with an ASIN and optional condition, seller, fulfillment text, terms, price, availability, valid-until text, and URL. Seller can be text or a name/id/URL object. | Optional |
| documents | List of up to 100 objects with a PDF URL and optional title | Optional |
| videos | List of up to 100 objects with optional id, title, URL, thumbnail URL, duration, width, and height | Optional |
| book | Object with optional authors (up to 30 names), publisher, publication date, edition, language, print length, and series | Optional |
| delivery | Text | Optional |
| fastestDelivery | Text | Optional |
| seller | Object with optional name, id, and URL | Optional |
| bestsellerRanks | List of up to 100 objects with rank (integer 1 or greater) and category text | Optional |
| discountPercentage | Integer from 0 to 100 | Optional |
| savings | Number 0 or greater | Optional |
| isBestSeller | Boolean | Optional |
| isAmazonChoice | Boolean | Optional |
| badge | Text | Optional |
| coupon | Text | Optional |
| videosCount | Integer 0 or greater | Optional |
| visitStoreLink | Object with optional text and URL | Optional |
| answeredQuestionsCount | Integer 0 or greater | Optional |
| monthlyPurchaseVolume | Text | Optional |
| images | List of up to 100 image URLs | Optional |
| reviews | List of up to 10 review objects. Each may include review id, reviewer name/profile URL, review URL, rating from 0 to 5, title, date, verified-purchase status, body, helpful-vote count, and up to 20 image URLs. | Optional |

### Run status and output summary

The product dataset contains product records. A separate key-value record named OUTPUT_SUMMARY contains exactly these three fields:

```json
{
  "status": "SUCCEEDED",
  "itemsStored": 1,
  "isPartial": false
}
```

status is SUCCEEDED when at least one product record is stored, otherwise FAILED. itemsStored is the number of product records saved. isPartial is true when the run stored products but did not finish all requested collection work.

# Changelog

This Actor's version history is a separate document: https://apify.com/codingfrontend/amazon-product-scraper/changelog.md

# Actor input Schema

## `mode` (type: `string`):

Choose whether to find products by search phrase, product ASINs, product page URLs, a search results URL, or a category URL.

## `searchQuery` (type: `string`):

Amazon.in search phrase used only in Search phrase mode. If omitted or blank, the Actor searches for laptop.

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

Product identifiers used only in ASINs mode. Each entry must contain exactly 10 letters or digits. At most 100 entries can be supplied; every supplied entry is validated before the run limit is applied.

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

Public HTTPS Amazon.in product page URLs used only in Product page URLs mode. Each URL must identify an ASIN. At most 100 entries can be supplied; every supplied URL is validated before the run limit is applied.

## `searchUrl` (type: `string`):

Public HTTPS Amazon.in search results URL used only in Search results URL mode. The path must be /s and the URL must include a search phrase through k or keywords.

## `categoryUrl` (type: `string`):

Public HTTPS Amazon.in /gp/bestsellers category page or /s results URL filtered by node or rh, used only in Category URL mode.

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

Maximum number of product records to save in this run. For ASIN and product URL lists, the first entries up to this limit are requested.

## `productReviews` (type: `boolean`):

Include up to 10 public review cards already shown on each fetched product page.

## `requestDelayMs` (type: `integer`):

Pause between sequential Amazon page requests. Use a longer delay to reduce request pace.

## `requestTimeoutMs` (type: `integer`):

Maximum time allowed for each page or robots-policy request.

## `maxRetries` (type: `integer`):

Number of retries for temporary network or server errors. Access denials, challenges, and robots restrictions are not retried.

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

Proxy settings for the run. The default uses Apify Residential proxies in India. Custom HTTP or HTTPS proxy URLs may be provided instead of Apify Proxy.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "laptop",
  "maxItems": 10,
  "productReviews": true,
  "requestDelayMs": 600,
  "requestTimeoutMs": 60000,
  "maxRetries": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset of validated Amazon.in product records.

## `runSummary` (type: `string`):

Three-field product-based run summary stored in the default key-value store.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("codingfrontend/amazon-product-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("codingfrontend/amazon-product-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 '{}' |
apify call codingfrontend/amazon-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,codingfrontend/amazon-product-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/6JH8mrTaDa76WbSDa/builds/f34akYxTNpIaEXhyo/openapi.json
