# Scraper for Flipkart — Products, Prices & Ratings (India) (`logiover/flipkart-product-scraper`) Actor

Scrape Flipkart.com search results by keyword. Extract product names, prices in INR, MRP, discounts, ratings, reviews, specs and availability in bulk. No API key, no login.

- **URL**: https://apify.com/logiover/flipkart-product-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** E-commerce
- **Stats:** 6 total users, 0 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.
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

## Flipkart Product Scraper — Products, Prices & Ratings (India)

Scrape Flipkart.com search results in bulk: product names, prices in INR, MRP, discount percentages, ratings, review counts, specs, stock status and images — by keyword or search URL, with no API key and no login.

### What does the Flipkart Product Scraper do?

The Flipkart Product Scraper fetches Flipkart's public search result pages (`/search?q=...`) and parses the server-rendered product cards directly from the HTML — roughly 24 products per page. Instead of relying on the client-side `__INITIAL_STATE__` payload (which Flipkart deliberately ships empty for search pages), the Actor reads the actual card markup anchored on stable `data-id` product identifiers, so it survives class-name reshuffles. It paginates automatically through search results, deduplicates products by their Flipkart product ID, rotates Apify proxy sessions on blocks, and stops early when a query is exhausted or your results cap is hit. No Flipkart account, no API key, no cookies.

### Who is it for?

- **E-commerce analysts** tracking prices, discounts, and assortment on India's largest marketplace
- **Amazon + Flipkart sellers** benchmarking pricing against competing listings
- **Dropshippers and resellers** sourcing trending products from Indian suppliers
- **Price comparison and affiliate sites** that need fresh Flipkart product feeds
- **Data teams and researchers** building datasets of the Indian e-commerce market

### Use cases

- Monitor daily prices for a category (e.g. "laptop", "running shoes", "smartphone") and detect discounts
- Build a product catalog with MRP, selling price, and computed discount depth
- Track ratings and review growth as a proxy for sales velocity
- Detect stock pressure via "Only 1 left" notes and "Currently unavailable" states
- Compare Flipkart Assured vs. non-Assured listings for a keyword
- Feed a price-alert or repricing pipeline with structured search data

### Why use the Flipkart Product Scraper?

- **Keyless** — no Flipkart account, API key, or login cookies; public pages only
- **19 data fields per product** — price, MRP, discount, ratings, specs, stock, exchange offers
- **Bulk by design** — multiple keywords per run, thousands of unique products per job
- **Robust parsing** — anchored on `data-id` product markers, immune to CSS class churn
- **Smart pagination** — stops at the last real page, dedupes repeated products across pages
- **Pay-per-result pricing** — you only pay for the rows actually delivered to your dataset

### What data can you extract?

Every run returns one dataset row per unique Flipkart product card, with the following fields:

| Field | Type | Description |
|---|---|---|
| productId | string | Flipkart product ID (the `data-id` shown on the card) |
| name | string | Product title as shown in search results |
| price | number | Current selling price in INR |
| currency | string | Currency code (INR) |
| mrp | number | Original MRP (strikethrough price), when shown |
| discountPercent | number | Discount percentage shown on the card |
| rating | number | Average product rating out of 5 |
| ratingCount | number | Number of customer ratings |
| reviewCount | number | Number of customer reviews |
| specs | string | Key specs listed on the card, joined with " | " |
| availability | string | "in_stock" or "out_of_stock" based on the card state |
| stockNote | string | Stock hint text, e.g. "Only 1 left" or "Only few left" |
| flipkartAssured | boolean | True when the listing carries the Flipkart Assured badge |
| exchangeDiscount | number | Maximum exchange offer value in INR, when shown |
| url | string | Product page URL on Flipkart.com |
| imageUrl | string | Main product image URL (rukminim2.flixcart.com) |
| query | string | The search keyword that produced this row |
| searchUrl | string | The search page URL the row was scraped from |
| scrapedAt | string | ISO timestamp of when the row was collected |

Example JSON output:

```json
{
  "productId": "COMHDWZ6CMGSZFHJ",
  "name": "DELL 15 (2026) AMD Ryzen 5 Hexa Core 7530U - (16 GB/512 GB SSD/Windows 11 Home) DC15255 Thin and Light...",
  "price": 68990,
  "currency": "INR",
  "mrp": 76478,
  "discountPercent": 9,
  "rating": 4.3,
  "ratingCount": 3784,
  "reviewCount": 339,
  "specs": "AMD Ryzen 5 Hexa Core Processor | 16 GB DDR4 RAM | Windows 11 Operating System | 512 GB SSD | 39.62 cm (15.6 inch) Display | 1 Year Onsite Warranty",
  "availability": "in_stock",
  "stockNote": null,
  "flipkartAssured": true,
  "exchangeDiscount": 48250,
  "url": "https://www.flipkart.com/dell-15-2026-amd-ryzen-5-hexa-core-7530u-16-gb-512-gb-ssd-windows-11-home-dc15255-thin-light-laptop/p/itmd20ac87f34826",
  "imageUrl": "https://rukminim2.flixcart.com/image/312/312/xif0q/computer/y/l/w/-original-imahrux9gb8kngjt.jpeg?q=70",
  "query": "laptop",
  "searchUrl": "https://www.flipkart.com/search?q=laptop",
  "scrapedAt": "2026-10-06T12:00:00.000Z"
}
```

### How to use

#### Option A — scrape Flipkart by keyword

1. Open the Actor's Input tab
2. Add one or more search keywords, e.g. `laptop`, `running shoes`, `smartphone under 15000`
3. Set a results cap (default prefill: 100 rows)
4. Click **Start** and wait for the run to finish
5. Export the dataset from the **Data** tab

Input example:

```json
{
  "queries": ["laptop", "smartphone under 15000"],
  "maxResults": 500,
  "maxPagesPerQuery": 25
}
```

#### Option B — scrape Flipkart by search URL

If you want Flipkart's own filters (brand, price range, rating, sort order), copy a search URL from your browser and paste it into `startUrls`. The Actor paginates it automatically.

1. On Flipkart.com, search and apply the filters you need
2. Copy the browser URL (e.g. `https://www.flipkart.com/search?q=laptop&sort=price_asc`)
3. Paste it into the **Start URLs** input
4. Click **Start**

Input example:

```json
{
  "queries": [],
  "startUrls": ["https://www.flipkart.com/search?q=laptop&sort=price_asc"],
  "maxResults": 1000
}
```

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| queries | string\[] | `["laptop"]` | Flipkart search keywords; each is paginated independently |
| startUrls | string\[] | — | Optional Flipkart search URLs with your filters baked in |
| maxResults | integer | 10000 (prefill 100) | Total cap on unique products across the whole run |
| maxPagesPerQuery | integer | 50 | Hard cap on search pages per query (~24 products/page) |
| proxyConfiguration | proxy | Apify proxy | Proxy settings; Apify datacenter proxies work well for Flipkart |

Full input JSON:

```json
{
  "queries": ["laptop"],
  "startUrls": [],
  "maxResults": 10000,
  "maxPagesPerQuery": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

### Output example

One fully-populated dataset row:

```json
{
  "productId": "COMHZFBNGMGZGY3A",
  "name": "Lenovo IdeaPad Slim 5 OLED Display Intel Core Ultra 9 185H - (16 GB/512 GB SSD/Windows 11 Home)",
  "price": 139000,
  "currency": "INR",
  "mrp": 179990,
  "discountPercent": 22,
  "rating": 4.2,
  "ratingCount": 15,
  "reviewCount": 1,
  "specs": "Intel Core Ultra 9 Processor | 16 GB DDR5 RAM | Windows 11 Home Operating System | 512 GB SSD | 35.56 cm (14 inch) Display | 1 Year Onsite Service",
  "availability": "in_stock",
  "stockNote": "Only 1 left",
  "flipkartAssured": true,
  "exchangeDiscount": null,
  "url": "https://www.flipkart.com/lenovo-ideapad-slim-5-oled-display-intel-core-ultra-9-185h-16-gb-512-gb-ssd-windows-11-home/p/itm2f9c8a7e1b4d0",
  "imageUrl": "https://rukminim2.flixcart.com/image/312/312/xif0q/computer/a/k/1/-original-imahy2v4gf8kngjt.jpeg?q=70",
  "query": "laptop",
  "searchUrl": "https://www.flipkart.com/search?q=laptop&page=1",
  "scrapedAt": "2026-10-06T12:05:14.321Z"
}
```

### Tips for best results

- Use **specific keywords** — "laptop" works, but "laptop i7 16gb" gives sharper, more relevant rows
- Filter queries work naturally: `smartphone under 15000`, `shoes above 2000`
- Use `startUrls` when you need Flipkart's sort order or brand filters
- A single keyword often has 20+ pages; set `maxPagesPerQuery` to control depth
- The `mrp` and `discountPercent` fields let you compute true discount depth for deal-hunting
- `stockNote` ("Only 1 left") and `availability` are early signals for demand and stock-outs
- Compare `price` vs. `exchangeDiscount` for electronics trade-in arbitrage analysis
- Schedule the Actor daily or hourly for time-series price and rating data
- Exclude `flipkartAssured: false` rows if you only want Assured-quality listings
- If a query returns nothing, check the spelling — Flipkart matching is strict for typos

### Integrations

The Actor works with the full Apify ecosystem:

- **Google Sheets** — stream new rows into a spreadsheet for live price dashboards
- **Slack** — post alerts when a monitored keyword's prices drop
- **Zapier / Make** — trigger workflows (email, CRM, databases) on every successful run
- **Webhooks** — get a callback when a run finishes and pull the dataset via API
- **Schedules** — run every hour or day for continuous Flipkart price monitoring
- **API / MCP** — call the Actor from your own code or AI agent

### API usage

Run the Actor programmatically with the Apify client. Get your API token from your Apify account console.

**cURL:**

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~flipkart-product-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"queries":["laptop"],"maxResults":200}'
```

**Node.js:**

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('logiover~flipkart-product-scraper').call({
  queries: ['laptop', 'running shoes'],
  maxResults: 500,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} Flipkart products`);
```

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')

run = client.actor('logiover~flipkart-product-scraper').call(run_input={
    'queries': ['laptop'],
    'maxResults': 200,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(f"Got {len(items)} Flipkart products")
```

### Use with AI agents (MCP)

Connect the Actor to an AI agent via Apify's MCP server and ask natural-language questions about the Indian marketplace, e.g. *"Scrape Flipkart for 'laptop', then list the 10 best deals with at least 20% discount and a rating above 4.2."* The agent runs the scraper, reads the dataset, and answers with structured product data.

### FAQ

#### Do I need a Flipkart account or API key to use this scraper?

No. The Actor reads public search pages only — no login, no cookies, no API keys.

#### How many products can I scrape in one run?

Each search page holds roughly 24 products. With the default 50 pages per query you can collect ~1,200 products per keyword, and multiple keywords run in sequence. Raise `maxPagesPerQuery` up to 200 for deeper collection.

#### Can I scrape a specific Flipkart category or filter?

Yes — open the category or filtered search on Flipkart.com, copy the URL, and paste it into `startUrls`. The Actor paginates that URL exactly as it does keyword searches.

#### What happens when a keyword has no results?

The Actor logs it and moves to the next query. If the entire run produces zero rows, the run fails loudly instead of pretending success — check your spelling or filters.

#### Why are some fields null in my dataset?

Flipkart doesn't show every field on every card: new listings have no ratings yet, some products show no MRP or discount, and exchange offers appear only for electronics. Null simply means "not shown on the card".

#### Why is price sometimes null with availability "out_of_stock"?

Cards marked "Currently unavailable" don't display a price. The Actor keeps the row (so you can track listings going in and out of stock) and sets availability to "out_of_stock".

#### How does the scraper handle pagination?

It fetches page 1, 2, 3… and stops when a page brings zero new unique product IDs — that means the source is exhausted. It also stops at `maxPagesPerQuery` or `maxResults`, whichever comes first.

#### Can I export the data to CSV or Excel?

Yes — from the run's Data tab, export to JSON, CSV, Excel, XML, or RSS. Via API, use the dataset's `items` endpoint with `format=csv`.

#### How fast is the scraper?

Expect roughly one page per second (~24 products/page). A 500-product run typically finishes in under a minute.

#### Is it legal to scrape Flipkart?

Scraping publicly available data is generally considered legal, but you should respect Flipkart's Terms of Service, robots.txt, and Indian data-protection rules (DPDP Act), and use the data responsibly. This Actor is a tool — how you use the output is your responsibility.

#### How often is the data updated?

Every run fetches live data from Flipkart.com — what you get is what's on the site at that moment. Schedule runs for continuous freshness.

#### Does the scraper support other Indian marketplaces?

This Actor targets Flipkart.com specifically. For other marketplaces, browse the [logiover portfolio](https://apify.com/logiover) or the Apify Store.

### Is it legal?

The Flipkart Product Scraper accesses only publicly visible search pages, without logging in or bypassing any paywall. Scraping public data is generally legal, but you must comply with Flipkart's Terms of Service, respect intellectual property rights (product names and images belong to their sellers), and follow applicable data-protection law. Use the extracted data lawfully and at your own responsibility.

### Related scrapers

- [Walmart Product Scraper](https://apify.com/logiover/walmart-product-scraper) — US marketplace search results
- [Allegro Product Scraper](https://apify.com/logiover/allegro-pl-product-scraper) — Poland's largest marketplace
- [Zappos Product Scraper](https://apify.com/logiover/zappos-product-scraper) — footwear & fashion pricing
- Browse the full [logiover actor portfolio](https://apify.com/logiover) for more e-commerce data sources

***

*Disclaimer: This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Flipkart Internet Pvt. Ltd. "Flipkart" is a trademark of its respective owner and is used here descriptively to identify the marketplace whose public pages this tool reads.*

### How much for Flipkart data can you extract in one run?

A single run returned **528 products** in 144 seconds on the example input. That is roughly **220 products a minute**. Widen the search — more queries, more pages, a broader location — and the same run goes deeper.

There is no hard ceiling built into this Actor. What bounds a run is the result limit you set, the breadth of the input you give it, and how much for Flipkart itself publishes. Because billing is per result, a wider run costs proportionally more and a narrow one costs almost nothing — so it is worth starting small and scaling once the output looks right.

# Changelog

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

# Actor input Schema

## `queries` (type: `array`):

List of Flipkart search keywords (e.g. 'laptop', 'running shoes', 'smartphone under 15000'). Each query is paginated independently.

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

Optional list of Flipkart search URLs (e.g. 'https://www.flipkart.com/search?q=laptop'). Pagination continues from these URLs automatically.

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

Total maximum number of unique products to collect across all queries. The run stops early once this cap is reached.

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

Hard cap on search pages fetched per query. Each Flipkart search page holds roughly 24 products.

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

Proxy settings. The default uses Apify datacenter proxies, which work well for Flipkart. Only change this if you know what you are doing.

## Actor input object example

```json
{
  "queries": [
    "laptop"
  ],
  "maxResults": 100,
  "maxPagesPerQuery": 60,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `productId` (type: `string`):

No description

## `name` (type: `string`):

No description

## `price` (type: `string`):

No description

## `currency` (type: `string`):

No description

## `mrp` (type: `string`):

No description

## `discountPercent` (type: `string`):

No description

## `rating` (type: `string`):

No description

## `ratingCount` (type: `string`):

No description

## `reviewCount` (type: `string`):

No description

## `specs` (type: `string`):

No description

## `availability` (type: `string`):

No description

## `stockNote` (type: `string`):

No description

## `flipkartAssured` (type: `string`):

No description

## `exchangeDiscount` (type: `string`):

No description

## `url` (type: `string`):

No description

## `imageUrl` (type: `string`):

No description

## `query` (type: `string`):

No description

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

No description

## `scrapedAt` (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 = {
    "queries": [
        "laptop"
    ],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/flipkart-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 = {
    "queries": ["laptop"],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/flipkart-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 '{
  "queries": [
    "laptop"
  ],
  "maxResults": 100
}' |
apify call logiover/flipkart-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/flipkart-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/ed8fkGRPAs9R2JE5j/builds/YgmiKc5FedOSr9BSy/openapi.json
