# Flipkart Scraper — Products, Prices & Reviews (India) (`tortuga/flipkart-scraper`) Actor

Scrape Flipkart.com search results, category pages, product pages and reviews: price, MRP, discount, rating, seller, stock, Assured flag, specs. Any keyword or URL.

- **URL**: https://apify.com/tortuga/flipkart-scraper.md
- **Developed by:** [Trevor Ortega](https://apify.com/tortuga) (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.10 / 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 Scraper — Products, Prices & Reviews (India)

Scrape **Flipkart.com**, India's largest online marketplace: search results, category pages, product pages and customer reviews. For every product you get the selling price, MRP, discount %, star rating with rating and review counts, stock status, the **Flipkart Assured** flag, sponsored flag, key specs, images and search rank. Turn on product details for full specifications, description, seller name and rating, delivery estimate and return policy, and turn on reviews for reviewer name, city, certified-buyer flag and helpful votes.

Export to JSON, CSV or Excel, or pull the data through the API into Google Sheets, your BI tool or an LLM pipeline. No login, no cookies, no browser: one request returns 40 products (24 on list-style categories such as phones and laptops), so runs are fast and cheap.

### What data does Flipkart Scraper extract?

**Products** (`type: "product"`, from any search or category page):

| Field | Example | Notes |
|---|---|---|
| `productId` | `ACCHZEFEYXZ3PWGV` | Flipkart product id (pid) |
| `listingId` | `LSTACCHZEFEYXZ3PWGVZWSM9M` | seller listing id (lid) |
| `itemId` | `ITMFA298C6C10DF4` | item id from the URL |
| `title`, `brand`, `subtitle` | `boAt Rockerz Plus 440…`, `boAt`, `Metal Grey, On the Ear` | subtitle = variant shown on the card |
| `price`, `mrp`, `discountPercent`, `currency` | `1799`, `4999`, `64`, `INR` | `mrp` is null when Flipkart shows no struck-through price |
| `rating`, `ratingCount`, `reviewCount` | `4.1`, `2508`, `304` | |
| `ratingBreakdown` | `{"1": 252, …, "5": 1398}` | number of 1-5 star ratings |
| `availability`, `availabilityMessage` | `IN_STOCK` / `OUT_OF_STOCK` / `COMING_SOON`, `Currently unavailable` | |
| `isAssured` | `true` | Flipkart Assured badge |
| `isSponsored` | `false` | sponsored (ad) card |
| `highlights` | `["8 GB RAM \| 128 GB ROM", …]` | key specs shown on list-style cards (phones, laptops, TVs …) |
| `warranty` | `1 Year Manufacturer Warranty…` | |
| `badges` | `["Bestseller", "Lowest Price Live"]` | deal / bestseller tags on the card |
| `imageUrl`, `images` | `https://rukmini1.flixcart.com/image/832/832/…` | |
| `category`, `vertical` | `PersonalAudio`, `BluetoothHeadset` | |
| `position`, `page`, `searchTerm`, `sourceUrl` | `3`, `1`, `headphones` | rank in the listing (sponsored cards included) |
| `url`, `scrapedAt` | product URL, ISO time | |

**With "Include product details" on (or for product URLs)** each product also gets: `specifications` (grouped, e.g. `{"General": {"Model ID": "Rockerz 430 Gen 2", …}}`), `description`, product `highlights`, `sellerName`, `sellerRating`, `seller` (`onFlipkartSince`, `productsSold`, `qualityScore`, `speedScore`), `deliveryEstimate` ("Delivery by Tuesday, 13 Oct", for Flipkart's default location), `policies` (\["7 Days Replacement", "Cash on Delivery", "Flipkart Assured"]), `returnPolicy`, `aspectRatings` ({"Sound Quality": 4.0, "Battery Backup": 4.2, …}), `categoryPath`, `manufacturerInfo` (country of origin, manufacturer / importer / packer), `color`.

**Reviews** (`type: "review"`, with "Include reviews" on or for review URLs):

| Field | Example |
|---|---|
| `rating`, `title`, `text` | `5`, `Super!`, `Sound quality -4/5 …` |
| `date` | `3 months ago` / `Jun, 2025` (as Flipkart shows it) |
| `reviewDate` | `2026-07` / `2025-06` / `2026-10-06` (YYYY-MM-DD for day-level dates, YYYY-MM for month-level ones) |
| `reviewerName`, `reviewerCity` | `Flipkart Customer`, `New Delhi` (as shown on the review) |
| `certifiedBuyer` | `true` |
| `helpfulCount`, `notHelpfulCount` | `54`, `21` |
| `images` | review photo URLs |
| `productAttributes` | `{"Color": "Pebble Black"}` (variant the reviewer bought) |
| `reviewId`, `productId`, `productTitle`, `productUrl` | |

### How to scrape Flipkart products

1. Enter keywords in **Search terms** (for example `headphones`, `iphone 15`, `running shoes`) or paste Flipkart URLs into **Start URLs**: search pages, category pages (`…/pr?sid=…`), product pages (`…/p/itm…?pid=…`) or review pages (`…/product-reviews/itm…`). Filters you set on Flipkart (brand, price, rating, discount) are kept: copy the URL from your browser.
2. Set **Max items** and **Max pages per search**, optionally **Sort by** (relevance, popularity, price, newest).
3. Turn on **Include product details** and/or **Include reviews** if you need them.
4. Click **Start** and download the results from the **Dataset** tab.

#### Input example

```json
{
  "searchTerms": ["headphones"],
  "startUrls": [{ "url": "https://www.flipkart.com/boat-rockerz-430-gen-2-bluetooth/p/itmb6c37946c71c2?pid=ACCHQ5UFRJH3JZFU" }],
  "maxItems": 100,
  "maxPagesPerSearch": 3,
  "sortBy": "popularity",
  "includeDetails": false,
  "includeReviews": false
}
```

#### Output example (product with details)

```json
{
  "type": "product",
  "productId": "ACCHZEFEYXZ3PWGV",
  "listingId": "LSTACCHZEFEYXZ3PWGVZWSM9M",
  "title": "boAt Rockerz Plus 440,Dual Driver,80H Battery,BEAST Mode,ENx,BT v6.0,IPX4,ASAP Charge Bluetooth",
  "brand": "boAt",
  "subtitle": "Metal Grey, On the Ear",
  "price": 1799,
  "mrp": 4999,
  "discountPercent": 64,
  "currency": "INR",
  "rating": 4.1,
  "ratingCount": 2508,
  "reviewCount": 304,
  "availability": "IN_STOCK",
  "isAssured": true,
  "isSponsored": false,
  "badges": ["Value 365"],
  "sellerName": "BUZZINDIA",
  "sellerRating": 4.4,
  "seller": { "name": "BUZZINDIA", "rating": 4.4, "onFlipkartSince": "4 years with Flipkart", "productsSold": "24.1L+", "qualityScore": "90%", "speedScore": "80%" },
  "deliveryEstimate": "Delivery by Tuesday, 13 Oct",
  "policies": ["7 Days Replacement", "Cash on Delivery", "Flipkart Assured"],
  "aspectRatings": { "Sound Quality": 4.1, "Bass": 4.0, "Battery Backup": 4.4 },
  "specifications": { "General": { "Brand": "boAt", "Headphone Type": "On the Ear", "Connectivity": "Bluetooth" } },
  "categoryPath": ["Audio & Video", "Headset", "Headphones", "Wireless Headphones", "boAt Wireless Headphones"],
  "imageUrl": "https://rukmini1.flixcart.com/image/832/832/xif0q/headphone/m/x/e/-original-imahzv2es2exbgvd.jpeg?q=70",
  "position": 3,
  "page": 1,
  "searchTerm": "headphones",
  "url": "https://www.flipkart.com/boat-rockerz-plus-440-dual-driver-80h-battery-beast-mode-enx-bt-v6-0-ipx4-asap-charge-bluetooth/p/itmfa298c6c10df4?pid=ACCHZEFEYXZ3PWGV",
  "scrapedAt": "2026-10-10T02:41:48+00:00"
}
```

#### Output example (review)

```json
{
  "type": "review",
  "reviewId": "26a9e69c-f9d0-4629-acbc-ca4943538f8f",
  "rating": 5,
  "title": "Super!",
  "text": "Sound quality -4/5\nBass quality -4.2/5\nBattery backup -5/5",
  "date": "3 months ago",
  "reviewDate": "2026-07",
  "reviewerName": "Flipkart Customer",
  "reviewerCity": "New Delhi",
  "certifiedBuyer": true,
  "helpfulCount": 54,
  "notHelpfulCount": 21,
  "images": ["https://rukminim1.flixcart.com/blobio/1100/1100/imr/blobio-imr_0b56fc4c5c674699bc59a84fe7bd7117.jpg?q=70"],
  "productAttributes": { "Color": "Pebble Black", "Microphone": "Yes" },
  "productId": "ACCHZEFEYXZ3PWGV",
  "productTitle": "boAt Rockerz Plus 440,Dual Driver,80H Battery,BEAST Mode,ENx,BT v6.0,IPX4,ASAP Charge Bluetooth",
  "productUrl": "https://www.flipkart.com/boat-rockerz-plus-440-dual-driver-80h-battery-beast-mode-enx-bt-v6-0-ipx4-asap-charge-bluetooth/p/itmfa298c6c10df4?pid=ACCHZEFEYXZ3PWGV"
}
```

### How to scrape Flipkart reviews

Turn on **Include reviews** to collect reviews for every product of a search, or paste product / review URLs into **Start URLs** to get reviews of specific products. **Max reviews per product** caps the count; **Sort reviews** picks Flipkart's order (Most helpful, Latest, Positive first, Negative first). Set **Only reviews newer than** to `7 days` or a date such as `2026-09-01` to get only recent reviews: they are then read latest first and reading stops at the first page that is entirely older. Flipkart dates reviews as "3 days ago" for recent ones and "Jun, 2025" for older ones, so the cut is day- or month-accurate.

### Monitor changes on a schedule

Turn on **Only new or changed items** and save the input as a task with a daily [Schedule](https://docs.apify.com/platform/schedules). Each run remembers what earlier runs of the same search returned and outputs only products that are new or whose price, MRP or stock status changed; unchanged products are not output and not charged (with reviews on, only reviews not seen before are output). Changed items carry `changeType: "changed"` and `previousValues` with the old values (for example `{"price": 1999}`); new ones carry `changeType: "new"`. Use **Monitoring key** to keep several watches of the same search apart, and turn off sponsored products for a stable watch, because ads rotate between visits.

### How much does it cost to scrape Flipkart?

Pay per result, no subscription:

- **$0.0011 per product** from search and category pages ($1.10 per 1,000 products),
- **+$0.005 per product** whose product page is opened (details on, or product URLs),
- **$0.0014 per review**.

Platform usage is billed to your Apify account at cost and is small: one request returns 24-40 products, and the actor runs in 512 MB.

**Proxy note:** Flipkart serves its pages to Apify's datacenter proxy, so the default proxy (no group) is enough; no residential or Unblocker traffic is used. Failed requests are retried on a new IP.

### Does it work without a Flipkart login?

Yes. Everything comes from public pages that anyone can open without an account. Delivery dates are the ones Flipkart shows before you enter a pincode; seller and price are the default (buy-box) offer.

### Can I scrape Flipkart categories and filtered results?

Yes. Open a category or a search on Flipkart, apply filters (brand, price range, rating, discount, Assured) and paste the URL into **Start URLs**; the actor follows its pages up to **Max pages per search**. Flipkart stops serving results after a few dozen pages per query (page 40 of a broad search came back empty in tests).

### Integrations and API

Use the run in Zapier, Make, n8n, Google Sheets, or call it from Python / Node.js with the Apify client. See the **API** tab for ready-made snippets. Each run also writes a `SUMMARY` record (requests, pages, totals per search) to its key-value store.

### Is it legal to scrape Flipkart?

This actor collects only data that Flipkart shows publicly to every visitor: product listings, prices, ratings and published reviews, including the reviewer display name and city exactly as they appear on the review. It does not log in and does not collect anything behind a login, contact details or private data. You are responsible for how you use the data and for complying with Flipkart's terms and applicable law (for example India's DPDP Act and the GDPR when you process reviewer names).

### Support

Found a bug or need a field added? Open an issue in the **Issues** tab; it is usually answered within a day.

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search on Flipkart.com, one per line (e.g. "headphones", "iphone 15"). Each term is searched separately and paginated automatically: one request returns 40 products (24 for phones, laptops and other list-style categories).

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

Flipkart URLs instead of (or besides) search terms: search pages (https://www.flipkart.com/search?q=boat), category pages (https://www.flipkart.com/audio-video/headphones-earphones/pr?sid=0pm,fcn), product pages (…/p/itm…?pid=…, saved with full details) or review pages (…/product-reviews/itm…?pid=…, reviews only). Filters set on the site are kept: copy the URL from your browser.

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

Stop after this many dataset items in total. Products and reviews both count, so with reviews on raise it accordingly (50 products with 20 reviews each = 1,050 items). Keeps cost predictable.

## `maxPagesPerSearch` (type: `integer`):

How many result pages to open per search term or category URL (40 or 24 products each, one request per page). Flipkart stops serving results after a few dozen pages per query.

## `sortBy` (type: `string`):

Result order, as in Flipkart's own "Sort By" menu. Applies to search terms and to URLs that have no sort of their own.

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

Flipkart mixes sponsored cards into the results (about a third of each page). They are saved with isSponsored = true. Turn this off to keep organic results only (recommended for monitoring: ads rotate between visits).

## `includeDetails` (type: `boolean`):

Also open every product page for full specifications, description, product highlights, seller name / rating / scores, delivery estimate, return policy, warranty, manufacturer info, category path, aspect ratings and rating breakdown. One extra request and one extra `detail` charge per product.

## `includeReviews` (type: `boolean`):

Also collect customer reviews for every product, as separate items with type = "review" (rating, title, text, date, reviewer display name and city as shown, certified buyer flag, helpful votes, photos). Flipkart serves 10 reviews per request.

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

Cap on reviews per product (also applies to review-page start URLs).

## `reviewSort` (type: `string`):

Order in which reviews are collected (matters when a cap is set), as on Flipkart's review page. "Latest" is best for monitoring; "Negative first" surfaces complaints.

## `reviewsNewerThan` (type: `string`):

Only reviews newer than: a date (YYYY-MM-DD) or a period such as '7 days' or '24 hours'. Reviews are then read latest first and reading stops at the first review page that is entirely older. Flipkart dates reviews as '3 days ago' / 'Jun, 2025', so the cut is day- or month-accurate. Applies when reviews are collected.

## `onlyNewOrChanged` (type: `boolean`):

Remember what earlier runs of this search returned and output only new items or items whose price/status changed. Use with a Schedule; unchanged items are not charged. Price, MRP and stock status are compared (with reviews on, the review count too, and only unseen reviews are output). Max items is then the watched window: the first products of the listing.

## `monitoringKey` (type: `string`):

Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input.

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

Flipkart serves its pages to Apify's datacenter proxy (the default), so no residential or Unblocker traffic is needed. Each request loads one search page (24-40 products), one product page or 10 reviews; failed requests are retried on a new IP.

## Actor input object example

```json
{
  "searchTerms": [
    "headphones"
  ],
  "startUrls": [],
  "maxItems": 100,
  "maxPagesPerSearch": 5,
  "sortBy": "relevance",
  "includeSponsored": true,
  "includeDetails": false,
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "reviewSort": "helpful",
  "onlyNewOrChanged": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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 = {
    "searchTerms": [
        "headphones"
    ],
    "startUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tortuga/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 = {
    "searchTerms": ["headphones"],
    "startUrls": [],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("tortuga/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 '{
  "searchTerms": [
    "headphones"
  ],
  "startUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call tortuga/flipkart-scraper --silent --output-dataset

```

## MCP server setup

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