# India E-commerce Price Tracker (`fascinating_lentil/india-ecommerce-price-tracker`) Actor

Track non-personal product prices, discounts, ratings, images, stock status, and URLs across major Indian e-commerce marketplaces for price monitoring and market research.

- **URL**: https://apify.com/fascinating\_lentil/india-ecommerce-price-tracker.md
- **Developed by:** [Md Jakaria Mirza](https://apify.com/fascinating_lentil) (community)
- **Categories:** Business, E-commerce
- **Stats:** 6 total users, 3 monthly users, 88.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 product scrapeds

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

## India E-commerce Price Tracker

Discover comparable products and review public prices, discounts, ratings, stock signals, and listing URLs across four Indian marketplaces in one normalized Apify dataset.

The Actor is built for competitor monitoring, assortment research, and recurring price snapshots. Structured product targets receive an explainable confidence score based on product-name terms, brand, pack size, and variant evidence. It saves product-level facts only and does not intentionally collect seller contacts, reviewer identities, emails, phone numbers, or other personal data.

### What It Extracts

- Product identity: source, search query, result position, product ID, title, brand, category, size, or variant.
- Product matching: target product, confidence (`exact`, `high`, `likely`, or `needs_review`), numeric score, and human-readable match evidence.
- Pricing: current price, MRP/list price, discount percentage, and currency.
- Market signals: aggregate rating, rating count, and stock status when exposed by the source.
- Links and media: absolute product URL and image URL.
- Monitoring metadata: an ISO scrape timestamp on every record.

### Supported Sources

| Source | Input value | Best for | Location-aware |
| --- | --- | --- | --- |
| Flipkart | `flipkart` | General retail and electronics | No |
| Myntra | `myntra` | Fashion, footwear, and accessories | No |
| BigBasket | `bigbasket` | Grocery and household products | Yes |
| Meesho | `meesho` | Value fashion and marketplace catalogs | No |

Each source runs independently. If one source is blocked or changes its payload, the Actor records a sanitized failure in `SOURCE_STATUS` and continues with the remaining selected sources. Explicit no-result pages remain distinct from parser or anti-bot failures.

Blinkit, JioMart, and AliExpress are temporarily unavailable in public inputs. Their browser-based paths produced unpredictable proxy costs and empty runs, so they are parked until a direct/API implementation or separate pricing model is verified.

### Quick Start

#### Product discovery and comparison

Use structured targets when you know the products but not every competitor URL. The Actor derives one marketplace search per target and scores the returned candidates.

```json
{
  "sources": ["bigbasket"],
  "targetProducts": [
    {
      "name": "Amul Gold Full Cream Milk",
      "brand": "Amul",
      "packSize": "1 L",
      "variant": "Gold Full Cream"
    },
    {
      "name": "Amul Taaza Milk",
      "brand": "Amul",
      "packSize": "1 L",
      "variant": "Taaza"
    },
    {
      "name": "Mother Dairy Full Cream Milk",
      "brand": "Mother Dairy",
      "packSize": "1 L",
      "variant": "Full Cream"
    }
  ],
  "city": "Mumbai",
  "latitude": 19.076,
  "longitude": 72.8777,
  "maxResults": 20,
  "maxPagesPerQuery": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IN"
  }
}
```

This mode is intended for 3-5 deliberate targets. Confidence remains visible so ambiguous matches can be reviewed instead of silently accepted.

#### Store QA-sized first run

This matches the bounded Store prefill used by Apify's automated quality check.

```json
{
  "sources": ["bigbasket"],
  "targetProducts": [
    {
      "name": "Amul Gold Full Cream Milk",
      "brand": "Amul",
      "packSize": "1 L",
      "variant": "Gold Full Cream"
    }
  ],
  "maxResults": 1,
  "maxPagesPerQuery": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IN"
  }
}
```

#### Multi-market price snapshot

```json
{
  "sources": ["flipkart", "myntra", "meesho"],
  "searchQueries": ["wireless earbuds"],
  "minPrice": 500,
  "maxPrice": 5000,
  "maxResults": 20,
  "maxPagesPerQuery": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IN"
  }
}
```

#### Location-aware grocery search

```json
{
  "sources": ["bigbasket"],
  "searchQueries": ["milk"],
  "city": "Mumbai",
  "latitude": 19.076,
  "longitude": 72.8777,
  "inStockOnly": true,
  "maxResults": 15,
  "maxPagesPerQuery": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IN"
  }
}
```

### Input Fields

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `sources` | array | `["bigbasket"]` | One or more supported marketplace input values. |
| `targetProducts` | array | Empty | Up to five structured product definitions with name, optional brand, pack size, and variant. |
| `searchQueries` | array | `["milk"]` | Broad product-discovery keywords. Ignored when `targetProducts` is supplied. |
| `city` | string | `Mumbai` | Location label used by BigBasket. |
| `latitude` | number | `19.076` | Latitude for location-aware catalogs. |
| `longitude` | number | `72.8777` | Longitude for location-aware catalogs. |
| `brands` | array | Empty | Optional case-insensitive exact brand filters. |
| `minPrice` | number | `0` | Minimum numeric product price to keep. |
| `maxPrice` | number | `1000000` | Maximum numeric product price to keep. |
| `inStockOnly` | boolean | `false` | Keep only records explicitly identified as in stock. |
| `maxResults` | integer | `1` | Maximum clean records saved across all selected sources, capped at `1000`. |
| `maxPagesPerQuery` | integer | `1` | Maximum pages or scroll payloads inspected per query and source, capped at `25`. |
| `proxyConfiguration` | object | India residential | Fallback proxy settings. Direct access is tried first; the proxy is used only after a request failure or block. |

Brand filters are exact after case normalization. Records with unknown stock are excluded when `inStockOnly` is enabled. Products without a numeric price or a source-owned product URL are never saved or charged.

### Output Overview

Each dataset item follows the same field order for predictable CSV, Excel, JSON, and API exports.

| Field group | Fields |
| --- | --- |
| Source and identity | `source`, `searchQuery`, `position`, `productId`, `title`, `brand`, `category` |
| Match decision | `targetProduct`, `matchConfidence`, `matchScore`, `matchReason` |
| Price and variant | `price`, `mrp`, `discountPercent`, `currency`, `packSize` |
| Market signals | `rating`, `ratingCount`, `inStock` |
| Links and timing | `productUrl`, `imageUrl`, `scrapedAt` |

### Verified Sample Output

The product facts in the following record came from a successful BigBasket run on July 28, 2026. The matching fields show how exact brand, product, and pack-size evidence produces a high-confidence result.

```json
{
  "source": "bigbasket",
  "searchQuery": "Amul Gold Full Cream Milk 1 L",
  "targetProduct": "Amul Gold Full Cream Milk",
  "matchConfidence": "high",
  "matchScore": 100,
  "matchReason": "name 4/4 terms; brand matched Amul; pack matched 1 l; variant 3/3 terms",
  "position": 1,
  "productId": "40175764",
  "title": "Gold Full Cream Milk",
  "brand": "Amul",
  "price": 72,
  "mrp": 72,
  "discountPercent": null,
  "currency": "INR",
  "packSize": "1 L",
  "category": "Bakery, Cakes & Dairy",
  "rating": null,
  "ratingCount": null,
  "inStock": true,
  "productUrl": "https://www.bigbasket.com/pd/40175764/amul-amul-gold-1-l/",
  "imageUrl": "https://www.bbassets.com/media/uploads/p/l/40175764_7-amul-amul-gold.jpg",
  "scrapedAt": "2026-07-28T14:52:42.645Z"
}
```

### Historical Cross-Store Comparison Example

This is a public-data capability sample from a successful June 19, 2026 run for `milk`. It demonstrates conservative matching, not live price monitoring or a client report. The current Actor automates the same confidence discipline and exposes the evidence on each row.

| Product | BigBasket | Blinkit | Difference | Match confidence | Action note |
| --- | ---: | ---: | --- | --- | --- |
| Amul Gold Full Cream Milk, 1 L | INR 72, in stock | INR 72, in stock | INR 0 (0.0%) | Exact | Same public price in this stored snapshot. |
| Amul Taaza Milk, 1 L | INR 57, in stock | INR 59, in stock | Blinkit +INR 2 (+3.5%) | High | Brand, Taaza product family, and 1 L pack match. Blinkit includes `Toned`; verify the product page before acting. |
| Mother Dairy Full Cream Milk, 1 L | INR 72, in stock | No safe match in the stored Blinkit result set | Not compared | Needs review | Do not infer a competitor price. Add a known competitor URL or broaden the search. |

This historical example is retained to explain matching confidence only; Blinkit is not currently selectable. The Blinkit rows were captured for Mumbai, while the stored BigBasket rows did not expose a city. Product titles that are merely similar are excluded instead of being silently compared.

### Export Quality

Before a product is saved, the Actor normalizes and validates it:

- every row has the same 22 output fields in the same order
- numeric fields are finite numbers or `null`
- missing text uses `N/A` only where that is clearer in spreadsheets
- product links are required source-owned HTTPS URLs; image links are absolute HTTPS URLs or `null`
- invalid or duplicate records are skipped
- records are saved and charged atomically

Each run also writes two default key-value-store records. `MATCH_REPORT` keeps the best saved candidate per source and shows any observed price spread. `SOURCE_STATUS` reports every selected source as `results`, `empty`, `failed`, or `not_run`, with candidate count, saved count, duration, and sanitized error details.

### Tips For Better Results

- Start with one source, one query, one page, and 1-3 results. Use 5-20 results for recurring reports so setup and proxy work are shared across more records.
- Runs default to 512 MB, with up to 1 GB available when selected manually.
- Use broad product terms for discovery and exact brand filters for monitoring.
- Split unrelated product categories into separate runs so result caps are easier to interpret.
- Use Mumbai coordinates only as a sample; set the city and coordinates to the BigBasket market you need.
- Enable an India residential proxy only when the selected source needs it.
- Schedule the same input and compare `price`, `mrp`, `discountPercent`, and `inStock` over time.

### Known Limits

- Marketplace layouts, public APIs, anti-bot systems, and regional catalogs can change without notice.
- Location-aware results can differ by city, coordinates, inventory zone, and run time.
- Some sources do not expose stock, rating, image, brand, or MRP data for every listing; those fields remain `null` or `N/A`.
- `maxResults` is shared across selected sources. Capacity unused by an earlier source is made available to later sources.
- Each structured target receives a small per-source search budget so the first product cannot consume the entire comparison run. Set `maxResults` to at least the number of targets multiplied by the number of sources when every target/source pair matters.
- Matching is heuristic. Similar names can still describe different variants, bundles, or regional listings, so `likely` and `needs_review` rows require source-page review.
- A run fails when no selected source produces a valid product, making empty outputs visible in monitoring.

### Pricing

This Actor uses pay-per-event pricing. The currently active Store prices are:

| Event | When charged | Price |
| --- | --- | ---: |
| `apify-actor-start` | At run start; event count depends on memory (one per GB, minimum one) | `$0.00005` per event |
| `product-scraped` | One clean product record saved | `$0.002` |

Before creating a proxy or requesting a marketplace page, the Actor verifies that the run budget can charge for at least one `product-scraped` event. It stops immediately when that is not possible, and it stops adding records when the user's maximum cost per run is reached. Apify displays the authoritative current event prices before a run; scheduled pricing updates may take effect later than documentation changes.

### Data Safety

The Actor is limited to public product-level information. It does not intentionally output seller names, merchant IDs, reviewer identities, emails, phone numbers, or contact fields. Email- and phone-like strings found in text are redacted before output.

### Responsible Use

This Actor is intended for lawful collection and processing of publicly available product information. Users are responsible for complying with source terms, robots.txt, applicable privacy laws, India's DPDP Act, and all local regulations.

Do not use this Actor to collect, store, sell, or misuse personal data without a lawful basis. The Actor author is not responsible for misuse by end users.

### License

Apache-2.0

# Actor input Schema

## `sources` (type: `array`):

Indian e-commerce sources to query. Each source is isolated; blocked sources are skipped without failing the full run. HTTP sources try direct access first and use the configured proxy only as a fallback.

## `targetProducts` (type: `array`):

Optional structured targets for cross-store discovery and matching. Add up to five products. The Actor searches for each target, scores candidate listings, and explains the confidence. When omitted, Search queries remain available for broad discovery.

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

Broad discovery mode for keywords such as milk, kurti, skincare, or wireless earbuds. Ignored when Products to compare is supplied.

## `city` (type: `string`):

Used for location-aware BigBasket results.

## `latitude` (type: `number`):

Latitude for location-aware sources.

## `longitude` (type: `number`):

Longitude for location-aware sources.

## `brands` (type: `array`):

Optional exact brand filters for competitor/product matching. Leave empty to keep all brands.

## `minPrice` (type: `number`):

Minimum product price to keep.

## `maxPrice` (type: `number`):

Maximum product price to keep.

## `inStockOnly` (type: `boolean`):

Keep only products clearly marked as in stock.

## `maxResults` (type: `integer`):

Maximum clean product records to save across all selected sources. Keep 1 for the first run, use 5-20 for small price-intelligence reports, and increase only for deliberate category monitoring.

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

Limits pagination or scroll payloads per source/query. Keep at 1 for cheap validation and agent calls.

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

Fallback proxy settings. Sources try direct access first to reduce run cost, then use this proxy after a block or request failure.

## Actor input object example

```json
{
  "sources": [
    "bigbasket"
  ],
  "targetProducts": [
    {
      "name": "Amul Gold Full Cream Milk",
      "brand": "Amul",
      "packSize": "1 L",
      "variant": "Gold Full Cream"
    }
  ],
  "searchQueries": [
    "milk"
  ],
  "city": "Mumbai",
  "latitude": 19.076,
  "longitude": 72.8777,
  "minPrice": 0,
  "maxPrice": 1000000,
  "inStockOnly": false,
  "maxResults": 1,
  "maxPagesPerQuery": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

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

Clean dataset items containing export-ready product price, discount, rating, stock, URL, and image data across supported Indian marketplaces.

## `matchReport` (type: `string`):

Markdown report showing the best candidate per source, confidence score, evidence, stock, price, source link, and observed price spread for each target product.

## `sourceStatus` (type: `string`):

Per-source outcome, candidate count, saved count, duration, and sanitized failure details for partial multi-source runs.

# 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 = {
    "targetProducts": [
        {
            "name": "Amul Gold Full Cream Milk",
            "brand": "Amul",
            "packSize": "1 L",
            "variant": "Gold Full Cream"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("fascinating_lentil/india-ecommerce-price-tracker").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 = { "targetProducts": [{
            "name": "Amul Gold Full Cream Milk",
            "brand": "Amul",
            "packSize": "1 L",
            "variant": "Gold Full Cream",
        }] }

# Run the Actor and wait for it to finish
run = client.actor("fascinating_lentil/india-ecommerce-price-tracker").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 '{
  "targetProducts": [
    {
      "name": "Amul Gold Full Cream Milk",
      "brand": "Amul",
      "packSize": "1 L",
      "variant": "Gold Full Cream"
    }
  ]
}' |
apify call fascinating_lentil/india-ecommerce-price-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=fascinating_lentil/india-ecommerce-price-tracker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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