# Flipkart Product Scraper — Prices, Specs, Ratings & Reviews (`memo23/flipkart-scraper`) Actor

Scrape Flipkart product listings by keyword, category URL, or direct product URL. Get titles, prices, MRP, discounts, ratings, key specs, images, availability, warranty, and full product details with specifications, seller info, offers, and variants. JSON or CSV out.

- **URL**: https://apify.com/memo23/flipkart-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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/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 & Review Scraper — Prices, Specs, Ratings & Reviews

Extract product data and customer reviews from Flipkart.com by keyword, category URL, or direct product URL. Get titles, brands, selling prices, MRP, discounts, ratings, key specs, images, availability, and full product details with grouped specifications, highlights, and descriptions. Optionally scrape reviews with author, rating, text, location, and helpful votes.

![How it works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-flipkart.png)

### Why Use This Scraper?

- **All product fields in one row** — title, brand, price, MRP, discount %, rating, rating count, review count, rating histogram, key specs, images, availability, warranty, and category.
- **Customer reviews** — optional per-product review scraping with author, rating, title, text, date, location, helpful votes, and review images.
- **Full detail enrichment** — optional per-product detail fetch adds description, highlights, full specifications grouped by category, and variants.
- **Three input modes** — keyword search, category/search URL pagination, or direct product URLs. All work in a single run.
- **Residential proxy built in** — Flipkart rate-limits datacenter IPs, so the actor routes through Apify Residential by default.
- **Fast and lightweight** — reads Flipkart's server-rendered embedded JSON directly via `impit`, no browser automation needed.
- **Deduplication and pagination** — repeats are skipped across pages, and the actor walks as many pages as you need.

### Overview

The actor scrapes Flipkart product listings and (optionally) enriches each product with its full detail page. It reads the `window.__INITIAL_STATE__` JSON embedded in Flipkart's server-rendered HTML, so no JavaScript rendering is required. Output is one row per product, ready for price monitoring, catalog research, or e-commerce analytics.

### Supported Inputs

- **Keyword search** — `keyword: "wireless earbuds"` searches Flipkart and paginates results.
- **Category or search URL** — any Flipkart URL containing `/search` or a `/pr?` category page, passed via `startUrls`. The actor paginates it.
- **Direct product URL** — any Flipkart product page URL (contains `/p/`), passed via `startUrls`. The actor fetches full details for each.

Example URLs:

```
https://www.flipkart.com/search?q=mobile&marketplace=FLIPKART
https://www.flipkart.com/computers/computer-components/monitors-accessories/monitors/pr?sid=6bo,g0i,unb,pp8&marketplace=FLIPKART
https://www.flipkart.com/apple-iphone-17-black-256-gb/p/itm01d3476376a82?pid=MOBHQV9YCUG4ZQZK
```

**Unsupported:** Flipkart seller dashboard pages, Flipkart Plus member-only deals behind login, and Flipkart Grocery API-only pages.

### Use Cases

| Audience | Use case |
|---|---|
| E-commerce teams | Price monitoring and competitive pricing analysis across product categories |
| Market researchers | Catalog extraction and assortment analysis for Indian retail |
| Dropshippers | Product discovery and margin calculation from discount data |
| Data analysts | Rating and review aggregation for sentiment and trend analysis |
| SEO teams | Product title and specification data for content generation |

### How It Works

1. **Provide a keyword or URLs** — enter a search term, paste category/search URLs, or paste direct product URLs.
2. **Residential proxy fetch** — the actor requests each page through Apify Residential proxy with a Chrome TLS fingerprint via `impit`.
3. **Parse embedded JSON** — Flipkart's `__INITIAL_STATE__` blob is extracted and walked for product slots (24 per search page).
4. **Optional detail enrichment** — when enabled, each product's detail page is fetched for description, highlights, and full specifications.
5. **Clean JSON output** — deduplicated rows are pushed to the dataset, ready to export as JSON or CSV.

### Input Configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `keyword` | string | `""` | Search keyword, e.g. `wireless earbuds`. Used when `startUrls` is empty. |
| `startUrls` | array | `[]` | Flipkart product, search, or category URLs. Product URLs are scraped directly; listing URLs are paginated. |
| `sort` | enum | `relevance` | Sort order for keyword search: `relevance`, `popularity`, `price_asc`, `price_desc`, `newest`. |
| `maxItems` | integer | `100` | Maximum products to return. `0` = unlimited. Free plan: 5 per run. |
| `maxPages` | integer | `0` | Maximum listing pages to fetch (24 products per page). `0` = no limit. |
| `fetchDetails` | boolean | `false` | Visit each product's detail page for description, highlights, full specs, and variants. Charged as an extra event per product. |
| `fetchReviews` | boolean | `false` | Scrape customer reviews for each product. Reviews are pushed to the same dataset with `type: "review"`. Charged per review as a dataset item. |
| `maxReviewsPerProduct` | integer | `50` | Maximum reviews to collect per product. 0 = no limit. |
| `maxReviewPages` | integer | `20` | Safety cap for review pagination (10 reviews per page). |
| `proxy` | object | residential | Proxy configuration. Apify Residential is the default because Flipkart rate-limits datacenter IPs. |

#### Example: keyword search with details

```json
{
  "keyword": "wireless earbuds",
  "maxItems": 50,
  "fetchDetails": true,
  "sort": "popularity"
}
```

#### Example: direct product URLs

```json
{
  "startUrls": [
    "https://www.flipkart.com/apple-iphone-17-black-256-gb/p/itm01d3476376a82?pid=MOBHQV9YCUG4ZQZK",
    "https://www.flipkart.com/samsung-galaxy-s25-5g-snapstorm-navy-128-gb/p/itm01d3476376a82?pid=MOBHQDMKCCDK2VT7"
  ],
  "fetchDetails": true
}
```

#### Example: category URL pagination

```json
{
  "startUrls": [
    "https://www.flipkart.com/computers/computer-components/monitors-accessories/monitors/pr?sid=6bo,g0i,unb,pp8&marketplace=FLIPKART"
  ],
  "maxItems": 100,
  "maxPages": 5
}
```

### Output Overview

Each row is one Flipkart product. Search/category mode returns listing-level fields (title, price, rating, key specs, images). Detail mode enriches each row with description, highlights, and full specifications grouped by category.

### Output Samples

#### Search result row (without details)

```json
{
  "title": "Apple iPhone 17 (Black, 256 GB)",
  "rating": 4.6,
  "ratingCount": 43723,
  "reviewCount": 1205,
  "ratingBreakup": [12, 8, 45, 892, 42366],
  "price": 88999,
  "discountPercent": 10,
  "discountAmount": 10901,
  "mrp": 99900,
  "currency": "INR",
  "availability": "IN_STOCK",
  "inStock": true,
  "category": "Mobile",
  "vertical": "mobile",
  "brand": "Apple",
  "keySpecs": ["256 GB ROM", "A19 Chip, 6 Core Processor", "48MP + 48MP Rear Camera", "6.3 inch All Screen OLED Display"],
  "warranty": "1 Year Manufacturer Warranty",
  "images": ["https://rukminim2.flixcart.com/image/400/400/..."],
  "subtitle": "256 GB ROM",
  "superTitle": "Apple",
  "url": "https://www.flipkart.com/apple-iphone-17-black-256-gb/p/itm01d3476376a82?pid=MOBHQV9YCUG4ZQZK",
  "productId": "MOBHQV9YCUG4ZQZK",
  "scrapedAt": "2026-10-23T05:51:51.543Z"
}
```

#### Detail-enriched row (with `fetchDetails: true`)

Adds `description`, `highlights`, and `specifications`:

```json
{
  "title": "Aroma NB121 Pro Pods ... Bluetooth Headset (Crystal Black, True Wireless)",
  "rating": 3.5,
  "ratingCount": 140517,
  "price": 280,
  "discountPercent": 78,
  "mrp": 1299,
  "productId": "ACCHKNVUHRHDDZZ5",
  "highlights": ["Up to 45 hr of Battery Life", "Fast Charging Support", "With Deep Bass"],
  "description": "This product features black true wireless in-ear headphones with a stem design...",
  "specifications": {
    "General": { "Brand": "Aroma", "Headphone Type": "True Wireless", "Connectivity": "Bluetooth" },
    "Connectivity Features": { "Bluetooth Version": "v5.4", "Battery Life": "45 hr", "Wireless Range": "10 m" },
    "Product Details": { "Deep Bass": "Yes", "With Microphone": "Yes", "Water Resistant": "Yes" }
  }
}
```

#### Review row (with `fetchReviews: true`)

Reviews are pushed to the same dataset with `type: "review"`:

```json
{
  "type": "review",
  "reviewId": "1c6151de-8944-4f7b-bd75-45bb4b697a2e",
  "productId": "ACCHKNVUHRHDDZZ5",
  "author": "Flipkart Customer",
  "rating": 3,
  "title": "Not recommended at all",
  "text": "Battery backup is very low",
  "certifiedBuyer": true,
  "created": "Aug, 2023",
  "location": "Bengaluru, Karnataka",
  "helpfulCount": 410,
  "upvoteCount": 410,
  "downvoteCount": 151,
  "images": null
}
```

### Key Output Fields

**Identity**: `productId`, `listingId`, `url`

**Product info**: `title`, `subtitle`, `superTitle`, `brand`, `vertical`, `category`, `subCategory`, `superCategory`

**Pricing**: `price` (selling price in INR), `mrp` (original price), `discountAmount`, `discountPercent`, `currency`

**Ratings**: `rating` (average), `ratingCount`, `reviewCount`, `ratingBreakup` (5-element histogram)

**Specs**: `keySpecs` (listing page), `highlights` (detail page), `specifications` (full grouped specs, detail page), `warranty`

**Media**: `images` (array of resolved image URLs)

**Availability**: `availability`, `inStock`, `buyable`, `fAssured`

**Detail-only**: `description`, `variants`

### FAQ

**Does the actor scrape reviews?**
Yes. Enable `fetchReviews` and the actor scrapes customer reviews for each product after collecting the listings. Reviews go into the same dataset with `type: "review"`. Each review has author, rating, title, text, date, location, helpful votes, and images. Control volume with `maxReviewsPerProduct` and `maxReviewPages`.

**Why are prices in INR?**
Flipkart is an Indian marketplace; all prices are in Indian Rupees.

**What happens if Flipkart blocks the request?**
The actor retries with a fresh residential proxy session. If all retries fail, it stops early and reports how many products were saved.

**Can I scrape a specific category?**
Yes. Paste the category URL (containing `/pr?`) into `startUrls`. The actor paginates it.

**Does `fetchDetails` slow down the run?**
Yes. Each product needs one extra request to its detail page. For large runs, consider leaving it off and running a second pass on specific product IDs.

### Support

- Issues: [Apify Console Issues tab](https://console.apify.com/actors/s4dvRiNrCQ6QSxhsC/issues)
- For custom scraping needs or tailored exports, contact the actor developer.

### Additional Services

Need a custom Flipkart dataset, scheduled price monitoring, or a different output format? The actor developer offers custom scraping projects, scheduled runs, and data pipeline setup. Reach out via the Apify Store actor page.

### Explore More Scrapers

Check out other e-commerce and product scrapers on the [memo23 Apify Store](https://apify.com/memo23).

### For AI Agents & LLM Apps

**Purpose:** Scrape Flipkart product listings by keyword, category URL, or direct product URL. Returns structured product data with prices, ratings, specs, and images. Optional detail enrichment adds description, highlights, and full specifications.

**Minimal tested input:**

```json
{"keyword": "wireless earbuds", "maxItems": 5, "fetchDetails": true}
```

**Output fields (flat):** Products: `productId`, `listingId`, `title`, `subtitle`, `superTitle`, `brand`, `url`, `price`, `mrp`, `discountAmount`, `discountPercent`, `currency`, `rating`, `ratingCount`, `reviewCount`, `ratingBreakup`, `keySpecs`, `images`, `availability`, `inStock`, `buyable`, `warranty`, `fAssured`, `category`, `subCategory`, `superCategory`, `vertical`, `scrapedAt`, `description` (detail), `highlights` (detail), `specifications` (detail), `variants` (detail). Reviews (with `type: "review"`): `reviewId`, `productId`, `author`, `rating`, `title`, `text`, `certifiedBuyer`, `created`, `location`, `helpfulCount`, `upvoteCount`, `downvoteCount`, `images`, `variant`, `reviewType`, `url`, `scrapedAt`.

**Billing:** PPE. Actor start event per run. One `apify-default-dataset-item` event per product (primary). One `product-details` event per product when `fetchDetails` is on. Reviews are charged as `apify-default-dataset-item` (same as products).

**Behavior:** Residential proxy is the default (Flipkart blocks datacenter IPs). Free plan capped at 5 products. Deduplicates by `productId` across pages. Pagination via `?page=N` on search/category URLs.

### Disclaimer

This actor is an independent scraping tool and is not affiliated with, endorsed by, or sponsored by Flipkart or its parent company. "Flipkart" is a trademark of its respective owner. This actor scrapes publicly available product listing data from Flipkart's public website. Users are responsible for complying with Flipkart's Terms of Service and applicable data protection laws (including GDPR and CCPA) when using the scraped data. The actor does not bypass authentication, paywalls, or login-protected content.

### SEO Keywords

flipkart scraper, flipkart product scraper, flipkart price scraper, flipkart data extraction, flipkart product data, flipkart api alternative, india ecommerce scraper, flipkart ratings scraper, flipkart specifications scraper, flipkart product listings, flipkart price monitoring, flipkart catalog scraper, flipkart product details, scrape flipkart products, flipkart dataset, flipkart csv export, flipkart json export, product price tracking india, flipkart market research, flipkart competitor analysis, flipkart discount data, flipkart in stock checker, flipkart reviews scraper, flipkart customer reviews, flipkart review data

# Actor input Schema

## `keyword` (type: `string`):

Keyword to search Flipkart for, e.g. 'mobile' or 'wireless earbuds'. Used when startUrls is empty. Keyword takes priority over startUrls for listing pages.

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

One or more Flipkart URLs: product detail pages (e.g. https://www.flipkart.com/poco-x8-5g-frost-white-128-gb/p/itm...), search result pages, or category pages. Product URLs are scraped directly; listing URLs are paginated.

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

How Flipkart orders the products of a keyword search, the same choices as its sort menu. relevance (default) is Flipkart's own order. Product and category links keep the order they already have.

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

Maximum number of products to return. Set to 0 for unlimited. Free plan: 5 per run.

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

Maximum listing pages to fetch (24 products per page). 0 = no page limit; maxItems still applies.

## `fetchDetails` (type: `boolean`):

Visit each product's detail page to fill description, highlights, full specifications, seller name and rating, offers, and variants. One extra request per product, so runs are slower. Charged as an extra event per product that gets details.

## `fetchReviews` (type: `boolean`):

After collecting products, scrape customer reviews for each one. Reviews are pushed to the same dataset with a 'type' field set to 'review'. Each review includes author, rating, title, text, date, location, helpful votes, and images. Charged per review as a dataset item.

## `maxReviewsPerProduct` (type: `integer`):

Maximum number of reviews to collect per product. Reviews are paginated (10 per page). 0 = no limit.

## `maxReviewPages` (type: `integer`):

Safety cap for review pagination per product. 10 reviews per page. Increase for products with many reviews.

## `proxy` (type: `object`):

Default: Apify Residential. Flipkart throttles requests from datacenter addresses, so runs without a residential proxy tend to come back short or empty. Swap in your own proxy URLs if you have residential ones.

## Actor input object example

```json
{
  "keyword": "wireless earbuds",
  "startUrls": [],
  "sort": "relevance",
  "maxItems": 100,
  "maxPages": 0,
  "fetchDetails": false,
  "fetchReviews": false,
  "maxReviewsPerProduct": 50,
  "maxReviewPages": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

The scraped Flipkart product records in the default dataset.

# 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 = {
    "keyword": "wireless earbuds",
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/flipkart-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 = {
    "keyword": "wireless earbuds",
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/flipkart-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 '{
  "keyword": "wireless earbuds",
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/flipkart-scraper --silent --output-dataset

```

## MCP server setup

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