# Flipkart Bulk Product Enrichment & Search (`ikmal_suzali_atr/flipkart-product-data`) Actor

Bulk Flipkart product enrichment by FSN (name, brand, MRP, selling price, discount, rating, image, availability) and search/category listings: optionally pincode-scoped for Flipkart Grocery and Minutes.

- **URL**: https://apify.com/ikmal\_suzali\_atr/flipkart-product-data.md
- **Developed by:** [AtTheRate AI](https://apify.com/ikmal_suzali_atr) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

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

## Flipkart Bulk Product Enrichment & Search

Turns Flipkart product IDs, search terms or category URLs into clean price and availability rows for India's largest marketplace. Enrich a catalogue of FSNs in bulk, or pull whole search and category listings with MRP, selling price, discount and stock state. Flipkart Grocery (Supermart) and Flipkart Minutes are covered too, priced for the pincode you give.

### What you get

- Price economics on every row: `mrp`, `selling_price`, `discount_percent`, `discount_amount`.
- Availability you can act on: `in_stock` plus the raw `availability_state` (`IN_STOCK`, `OUT_OF_STOCK`, `NOT_SERVICEABLE`).
- Identity and merchandising: `product_id` (FSN), `listing_id`, `title`, `brand`, `subtitle` (pack or colour), `vertical`, `image_url` and `images`.
- Ratings where Flipkart exposes them: `rating`, `rating_count`, `review_count`.
- Location scoping: set a `pincode` and every row carries it, with Grocery and Minutes prices resolved for that area.
- Nothing is silently dropped: switch on `includeUnresolved` and delisted or invalid IDs come back as `found: false` rows.

### Input

Give at least one of `productIds`, `searchQueries` or `listingUrls`. This is the exact input from a verified run.

```json
{
  "productIds": ["PSLGFSY3FKSMGZVZ"],
  "searchQueries": ["oats"],
  "maxPages": 1,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IN"
  },
  "sort": "",
  "marketplace": "FLIPKART",
  "includeUnresolved": false,
  "concurrency": 3
}
```

- `productIds`: FSNs such as `PSLGFSY3FKSMGZVZ`. Product URLs work as well, and books can be given as a bare ISBN-13.
- `searchQueries` / `listingUrls`: search terms, or listing URLs with filters already applied.
- `maxPages`: pages per query or URL.
- `marketplace`: `FLIPKART`, `GROCERY` or `HYPERLOCAL`. The last two require `pincode`.
- `proxyConfiguration`: off by default, because these endpoints answer without one.

### Output

One row per product. That run produced 38 rows, one enriched FSN plus 37 products from the search listing.

```json
{
  "product_id": "PSLGFSY3FKSMGZVZ",
  "listing_id": "LSTPSLGFSY3FKSMGZVZKWXELC",
  "title": "MUSCLEBLAZE Biozyme Performance Whey Protein",
  "brand": "MUSCLEBLAZE",
  "subtitle": "1 kg, Rich Chocolate",
  "mrp": 4999,
  "selling_price": 3999,
  "discount_percent": 20,
  "discount_amount": 1000,
  "rating": null,
  "in_stock": true,
  "availability_state": "IN_STOCK",
  "vertical": "protein_supplement",
  "marketplace": "FLIPKART",
  "pincode": null,
  "product_url": "https://www.flipkart.com/muscleblaze-biozyme-performance-whey-protein/p/itm4d58",
  "requested_id": "PSLGFSY3FKSMGZVZ",
  "found": true
}
```

`rating`, `rating_count` and `review_count` are null when Flipkart does not publish them. `pincode` is null unless you set one.

### Use cases

- Daily price and MRP tracking across a competitor catalogue, using `selling_price`, `mrp` and `discount_percent`.
- Stock-out alerting from `in_stock` and `availability_state`.
- Share of search: run `searchQueries` and count how many of the 40 results per page carry your `brand`.
- Assortment gaps: feed a list of FSNs and see which return `found: false`.

### Notes and limits

- Around 120 IDs are resolved per request, so large ID lists finish in minutes.
- `maxPages` accepts 1 to 200. Search pages hold 40 products, category pages 24.
- Flipkart's default popularity sort reshuffles between requests, so deep pagination repeats and misses products. Pick `price_asc`, `price_desc` or `recency_desc` for complete coverage.
- `marketplace: GROCERY` or `HYPERLOCAL` without a `pincode` stops the run with a plain message instead of returning national prices.
- These rows carry no sponsored or ad flag. Flipkart's listing payload does not mark paid placements here.

### FAQ

**Do I need a proxy?** Usually not. It is off by default because the endpoints serve these requests directly. If you see 403 or 529 responses at high volume, switch on a residential proxy with country IN.

**How many results can I get?** Up to 200 pages per query or URL, at 40 products per search page and 24 per category page, and there is no cap on the ID list.

**Does it need login or an API key?** No Flipkart account, cookie or key is required.

**What does the pincode change?** It scopes prices and availability to that delivery area. It is mandatory for Grocery and Minutes, which only exist for a resolved location.

# Actor input Schema

## `productIds` (type: `array`):

Flipkart product IDs to enrich, e.g. `PSLGFSY3FKSMGZVZ`. Product URLs are accepted too (the `pid=` or `/p/itm…` part is extracted). Books may be given as `BOK<ISBN13>` or the bare ISBN-13. Up to ~120 are resolved per request, so 100k IDs take minutes.

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

Flipkart search terms, e.g. `whey protein`. Each query is paginated up to Max pages.

## `listingUrls` (type: `array`):

Flipkart search or category page URLs, e.g. `https://www.flipkart.com/mobiles/pr?sid=tyy,4io` or a search URL with filters applied.

## `maxPages` (type: `integer`):

Search pages return 40 products, category pages 24.

## `sort` (type: `string`):

Flipkart's default popularity sort reshuffles between requests, so paginating it repeats/misses products. Use a deterministic sort when you need complete pagination.

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

FLIPKART (national), GROCERY (Flipkart Supermart) or HYPERLOCAL (Flipkart Minutes). Grocery and Minutes are location-gated — set a pincode.

## `pincode` (type: `string`):

Indian pincode for location-scoped prices/availability. Required for GROCERY and HYPERLOCAL; optional for FLIPKART.

## `includeUnresolved` (type: `boolean`):

Emit a `{ product_id, found: false }` row for IDs Flipkart does not return (delisted or invalid).

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

Not needed for most runs — Flipkart's public endpoints serve these requests without a proxy. Enable Apify residential proxy (country IN) only if you see 529/403 responses at high volume.

## `concurrency` (type: `integer`):

Parallel requests. 3 is plenty without a proxy (~8 req/s ≈ 800 products/s); raise to 8–12 through a residential proxy.

## Actor input object example

```json
{
  "productIds": [
    "PSLGFSY3FKSMGZVZ",
    "MOBHQFDZTHKKVGKG"
  ],
  "maxPages": 5,
  "sort": "",
  "marketplace": "FLIPKART",
  "includeUnresolved": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "concurrency": 3
}
```

# Actor output Schema

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

One row per product.

## `summary` (type: `string`):

Counts for the run: what was requested, captured, skipped and failed.

# 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 = {
    "productIds": [
        "PSLGFSY3FKSMGZVZ",
        "MOBHQFDZTHKKVGKG"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ikmal_suzali_atr/flipkart-product-data").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 = { "productIds": [
        "PSLGFSY3FKSMGZVZ",
        "MOBHQFDZTHKKVGKG",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ikmal_suzali_atr/flipkart-product-data").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 '{
  "productIds": [
    "PSLGFSY3FKSMGZVZ",
    "MOBHQFDZTHKKVGKG"
  ]
}' |
apify call ikmal_suzali_atr/flipkart-product-data --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ikmal_suzali_atr/flipkart-product-data"
        }
    }
}
```

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/nHPudZkrynV10BBhd/builds/fX8XGAciXrt1NRVTY/openapi.json
