# Amazon India Origin Products Scraper (`automation-lab/amazon-india-origin-products`) Actor

Search Amazon India and export products explicitly disclosed as made in India, with ASINs, details, ratings, review counts, origin, and URLs.

- **URL**: https://apify.com/automation-lab/amazon-india-origin-products.md
- **Developed by:** [Automation Lab](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.24 / 1,000 product extracteds

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 India Origin Products Scraper

Search Amazon India and export only products whose public detail page explicitly identifies **India** as the country of origin.

This Actor turns Amazon products into a sourcing-ready dataset with ASIN, product title, description and feature bullets, price, rating, review count, manufacturer, country-of-origin evidence, search context, and canonical URL. It is designed for catalog teams that need origin-qualified records rather than an unverified keyword list.

### What does Amazon India Origin Products Scraper do?

The Actor accepts Amazon.in search queries, Amazon.in product URLs, or both.

For a search query it:

1. loads Amazon India search results using an India residential session;
2. discovers product ASINs and search positions;
3. opens each product detail page;
4. reads the named `Country of Origin` specification;
5. saves the product only when that field explicitly equals `India`.

For direct product URLs it applies the same strict detail-page check. A URL is not accepted merely because its title says “made in India.”

### Who is it for?

- **Sourcing teams** building shortlists of publicly disclosed India-origin products.
- **Marketplace analysts** comparing assortment, ratings, and review signals by query.
- **Catalog operations teams** enriching internal ASIN tables with origin and manufacturer fields.
- **Brands and distributors** checking how relevant Amazon India listings disclose product origin.
- **Data engineers** feeding normalized records into a spreadsheet, warehouse, database, or API.

Use [Amazon Product Search Results Scraper](https://apify.com/automation-lab/amazon-product-search-results-scraper) when you need broad ranked Amazon search cards without detail-page origin qualification.

### Why use origin-qualified Amazon products data?

Search text alone is noisy. Product titles may mention India, imported designs, or marketing terms without disclosing the manufacturing origin.

This Actor verifies the structured label on each public product detail page. The resulting dataset is smaller than a normal search export, but every emitted record carries the qualifying `countryOfOrigin` value and its source URL.

The Actor also preserves query and rank when a record came from search, so analysts can separate product qualification from search visibility.

### What data is extracted?

| Field | Meaning |
| --- | --- |
| `asin` | Amazon Standard Identification Number |
| `title` | Product title from the detail page |
| `description` | Product description, or combined public feature bullets when no description block is present |
| `features` | Public “About this item” bullets |
| `brand` | Brand when disclosed |
| `price` / `priceText` | Numeric and displayed INR price when available |
| `currency` | `INR` |
| `rating` | Current displayed rating, nullable |
| `reviewCount` | Current displayed rating/review count, or `0` when absent |
| `countryOfOrigin` | Exact qualifying disclosure; emitted records contain `India` |
| `manufacturer` | Manufacturer disclosure when available |
| `modelName` | Model name or model number when available |
| `imageUrl` | Main public image URL when available |
| `searchQuery` | Query that discovered the product, or `null` for a direct URL |
| `searchRank` | Observed result-card position, or `null` for a direct URL |
| `isSponsored` | Sponsored-card signal, or `null` for a direct URL |
| `canonicalUrl` | Normalized Amazon.in `/dp/<ASIN>` URL |
| `sourceUrl` | Detail URL inspected for the origin disclosure |
| `scrapedAt` | ISO 8601 collection timestamp |

Missing optional fields are returned as `null`; a missing country-of-origin field causes the product to be excluded.

### How to get started

1. Open the Actor in Apify Console.
2. Enter one or more values in **Search queries**, or add Amazon.in product URLs.
3. Set **Maximum matching products** to the number of qualified records you want.
4. Keep **Maximum products to inspect** high enough to allow non-matching products to be filtered out.
5. Click **Start**.
6. Open the default dataset to preview, download, or connect the results.

A useful first run is:

```json
{
  "searchQueries": ["steel water bottle made in India"],
  "maxItems": 10,
  "maxProductsToInspect": 50,
  "maxPagesPerQuery": 2
}
```

### Input parameters

#### `searchQueries`

A list of Amazon India keyword searches. Empty strings and duplicates are removed.

#### `productUrls`

Amazon.in `/dp/` or `/gp/product/` URLs to verify directly. Other marketplaces and non-product URLs fail validation instead of silently changing scope.

#### `maxItems`

Maximum accepted India-origin records. Range: 1–500. Default: 20.

#### `maxProductsToInspect`

Maximum detail pages checked, including excluded products. Range: 1–2,000. It must be at least `maxItems`. Default: 100.

This is the main cost and runtime safety control because many search candidates may not disclose India as their origin.

#### `maxPagesPerQuery`

Maximum search pages loaded per query. Range: 1–20. Default: 3.

#### `includeSponsored`

When `false`, sponsored search cards are skipped before detail inspection. Direct product URLs are unaffected.

#### `maxRequestRetries`

Fresh India residential sessions attempted after a challenge, transient response, or incomplete page. Range: 1–8. Default: 4.

### Output example

This shortened record comes from a real Amazon.in product page:

```json
{
  "asin": "B0CKYZWVZD",
  "title": "Milton Sparkle 900 Thermosteel Water Bottle with Easy Sip Cap and Handle, 920 ml",
  "description": "Color: Military Green; Material: Stainless Steel...",
  "features": [
    "Color: Military Green; Material: Stainless Steel...",
    "High-Quality Materials: Vacuum insulated bottle..."
  ],
  "brand": "MILTON",
  "price": 980,
  "priceText": "₹980.00",
  "currency": "INR",
  "rating": 4.3,
  "reviewCount": 1115,
  "countryOfOrigin": "India",
  "manufacturer": "Hamilton Housewares P. Ltd.",
  "modelName": "Sparkle 900,Military Green",
  "searchQuery": "steel water bottle made in India",
  "searchRank": 1,
  "isSponsored": true,
  "canonicalUrl": "https://www.amazon.in/dp/B0CKYZWVZD",
  "sourceUrl": "https://www.amazon.in/dp/B0CKYZWVZD",
  "scrapedAt": "2026-09-16T08:07:09.113Z"
}
```

Prices, ratings, reviews, search positions, and availability can change between runs.

### How much does it cost to find India-origin Amazon products?

Pricing uses a **$0.005 start charge** plus one `product` event for each accepted India-origin record. Products inspected and rejected because origin is missing or not India do not create a product event, although their proxy and compute use still counts toward the run's platform usage.

| Apify tier | Price per accepted product |
| --- | ---: |
| FREE | $0.010053 |
| BRONZE | $0.0087414 |
| SILVER | $0.0068183 |
| GOLD | $0.0052448 |
| PLATINUM | $0.0052448 |
| DIAMOND | $0.0052448 |

At BRONZE rates, 1 accepted product costs about **$0.01374**, 10 cost about **$0.09241**, and 100 cost about **$0.87914**, including one start event. Actual total can also include the normal Apify platform usage associated with your account and plan.

Control total work with `maxProductsToInspect`; `maxItems` controls accepted output, not the number of detail pages Amazon may need to serve before those matches are found.

### Search, direct verification, and scheduled workflows

#### One-time sourcing search

Use one focused query and export the default dataset to CSV or Excel.

#### Direct ASIN qualification

Send known Amazon.in product URLs through `productUrls`. Only URLs with an explicit India origin record are returned.

#### Recurring assortment snapshot

Save an Actor task and schedule it in Apify. Store each run's dataset externally if you want to compare new, removed, or changed products over time. This Actor produces current snapshots; it does not maintain a historical database itself.

#### Data pipeline

Connect dataset webhooks, the Apify API, Make, Zapier, Google Sheets, or your own ETL job. The default dataset is intentionally flat and typed for downstream loading.

### Run from the Apify API with cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~amazon-india-origin-products/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "searchQueries": ["cotton bedsheet made in India"],
    "maxItems": 20,
    "maxProductsToInspect": 100,
    "maxPagesPerQuery": 3
  }'
```

Keep API tokens in environment variables or a secret manager.

### Run with JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/amazon-india-origin-products').call({
  searchQueries: ['steel water bottle made in India'],
  maxItems: 10,
  maxProductsToInspect: 50,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Run with Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/amazon-india-origin-products').call(run_input={
    'productUrls': [{'url': 'https://www.amazon.in/dp/B0CKYZWVZD'}],
    'maxItems': 1,
    'maxProductsToInspect': 1,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### Use with Apify MCP

#### Claude Code setup

Add this Actor to Claude Code:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/amazon-india-origin-products"
```

#### Claude Desktop, Cursor, and VS Code setup

Claude Desktop, Cursor, and VS Code can use this HTTP MCP configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/amazon-india-origin-products"
    }
  }
}
```

Example prompts:

- “Search Amazon India for steel lunch boxes and return only products whose country of origin is India.”
- “Verify whether these Amazon.in product URLs disclose India as their origin.”
- “Create a small origin-qualified homeware dataset with ASIN, rating, reviews, and URL.”

### Reliability and retry behavior

Amazon can return challenges or incomplete page variants. The Actor uses country-matched residential proxy sessions, keeps cookies and identity coherent, and rotates the complete session after a recognized failure.

Retries are bounded. If Amazon blocks every requested page, the run fails instead of returning a misleading successful empty dataset.

A successful run with zero records can be valid when reachable products omit the country field or disclose another country.

### Limits and data interpretation

- Only public anonymous Amazon.in pages are supported.
- The Actor does not log in, add delivery addresses, purchase products, or access personalized data.
- It does not infer origin from brand, seller, title, address, or keywords.
- It does not return products whose origin field is absent or ambiguous.
- Search rank is an observed anonymous-session position, not a universal ranking.
- Sponsored status reflects the search card at collection time.
- Product variants may have different origin disclosures; the inspected detail variant is the evidence source.
- Amazon may change HTML, availability, prices, ratings, and review counts.

### Responsible use and legality

Use the Actor only for lawful purposes and public data you are permitted to collect. Review Amazon's terms, applicable database and consumer-protection rules, and local privacy law for your use case.

Country-of-origin disclosures are source-provided facts, not legal certificates. Validate important sourcing, customs, procurement, or compliance decisions with the manufacturer or qualified counsel.

This Actor is not affiliated with or endorsed by Amazon. It uses deterministic HTML parsing and does not send inputs or output to an AI provider. Run data remains in Apify storage under your account's retention and deletion settings; the Actor creates no external database or cache.

Do not use the output to misrepresent origin, product safety, certification, or availability.

### FAQ

#### Why did I receive fewer records than `maxItems`?

`maxItems` is a ceiling, not a guarantee. Many products do not disclose India as origin. Increase `maxProductsToInspect`, add another relevant query, or allow more search pages.

#### Why did the run return zero records successfully?

Check the logs for recognized pages and skipped ASINs. Zero is valid when the inspected public detail pages were reachable but none had an exact India disclosure.

#### Why did the run fail after retries?

Amazon challenged every bounded session or returned incomplete pages. Retry later with a smaller inspection cap. Increasing retries may increase residential transfer without guaranteeing recovery.

#### Why is a known product absent?

Its current detail variant may omit origin, show another country, or no longer be reachable. Submit its canonical Amazon.in URL directly to isolate the check.

#### Can I search other Amazon marketplaces?

No. This Actor deliberately supports Amazon.in and verifies the India-specific public detail disclosure. Use the related general search Actor for broad multi-marketplace cards.

### Troubleshooting

When a run fails, open its log and identify whether validation rejected the input or every bounded Amazon request was challenged. For valid zero-output runs, compare `maxProductsToInspect` with the number of skipped ASINs. Share the run URL and first relevant warning with support; never share your API token.

### Related Automation Lab Actors

- [Amazon Product Search Results Scraper](https://apify.com/automation-lab/amazon-product-search-results-scraper) — broad ranked product cards across supported Amazon marketplaces.
- [Amazon Reviews Scraper](https://apify.com/automation-lab/amazon-reviews-scraper) — individual customer review records when review-level analysis is the goal.
- [Amazon Sellers Scraper](https://apify.com/automation-lab/amazon-sellers-scraper) — seller records rather than origin-qualified products.

### Support

For reproducible help, include the run URL, sanitized input, expected product or query, and the first relevant warning from the run log. Do not include API tokens, account cookies, or private customer data.

# Changelog

This Actor's version history is a separate document: https://apify.com/automation-lab/amazon-india-origin-products/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

Amazon India product searches, for example steel water bottle or cotton bedsheet.

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

Optional Amazon.in /dp/ or /gp/product/ URLs to verify directly. The India-origin filter also applies to these URLs.

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

Stop after saving this many products with an explicit India country-of-origin disclosure.

## `maxProductsToInspect` (type: `integer`):

Safety cap on product detail pages checked, including products excluded because their origin is absent or not India.

## `maxPagesPerQuery` (type: `integer`):

Maximum Amazon India result pages inspected for each search query.

## `includeSponsored` (type: `boolean`):

Inspect sponsored product cards as well as organic results.

## `maxRequestRetries` (type: `integer`):

Residential sessions attempted after Amazon challenges or transient failures.

## Actor input object example

```json
{
  "searchQueries": [],
  "productUrls": [
    {
      "url": "https://www.amazon.in/dp/B0DCZH69PP"
    },
    {
      "url": "https://www.amazon.in/dp/B0GSR6QG4T"
    },
    {
      "url": "https://www.amazon.in/dp/B07F5SL8HR"
    }
  ],
  "maxItems": 1,
  "maxProductsToInspect": 3,
  "maxPagesPerQuery": 1,
  "includeSponsored": true,
  "maxRequestRetries": 3
}
```

# Actor output Schema

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

Typed Amazon.in product details with ASIN, origin, ratings, review signals, manufacturer, search context, and canonical URL.

# 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 = {
    "searchQueries": [],
    "productUrls": [
        {
            "url": "https://www.amazon.in/dp/B0DCZH69PP"
        },
        {
            "url": "https://www.amazon.in/dp/B0GSR6QG4T"
        },
        {
            "url": "https://www.amazon.in/dp/B07F5SL8HR"
        }
    ],
    "maxItems": 1,
    "maxProductsToInspect": 3,
    "maxPagesPerQuery": 1,
    "maxRequestRetries": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/amazon-india-origin-products").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 = {
    "searchQueries": [],
    "productUrls": [
        { "url": "https://www.amazon.in/dp/B0DCZH69PP" },
        { "url": "https://www.amazon.in/dp/B0GSR6QG4T" },
        { "url": "https://www.amazon.in/dp/B07F5SL8HR" },
    ],
    "maxItems": 1,
    "maxProductsToInspect": 3,
    "maxPagesPerQuery": 1,
    "maxRequestRetries": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/amazon-india-origin-products").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 '{
  "searchQueries": [],
  "productUrls": [
    {
      "url": "https://www.amazon.in/dp/B0DCZH69PP"
    },
    {
      "url": "https://www.amazon.in/dp/B0GSR6QG4T"
    },
    {
      "url": "https://www.amazon.in/dp/B07F5SL8HR"
    }
  ],
  "maxItems": 1,
  "maxProductsToInspect": 3,
  "maxPagesPerQuery": 1,
  "maxRequestRetries": 3
}' |
apify call automation-lab/amazon-india-origin-products --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/amazon-india-origin-products"
        }
    }
}
```

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/4qOivhnarCoyDBPbk/builds/URzimVpaXzeGcPmm9/openapi.json
