# Flipkart Scraper: Products, Prices, Sellers (`automation_craft/flipkart-scraper`) Actor

Scrape Flipkart, no login: search words, categories, links or product ids, with organic or sponsored rank. Price, MRP, discount, rating, stock, F-Assured; add specs, variants, bank offers, every seller, pincode delivery, reviews, seller leads. JSON, CSV, Excel, API, schedules; billed per product.

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

## Pricing

from $0.95 / 1,000 products

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 Scraper: Products, Prices, Sellers

**Flipkart scraper** for flipkart.com: products from search words, category and brand pages, product links or product ids, with price, MRP, discount, rating, stock, F-Assured, key specs and the rank each product holds on the page, organic or sponsored. No login and no Flipkart account: nothing from you but the input. Add the product page details (every specification group, variants, the seller with its scores, bank offers), every seller of a product with delivery to your pincode, buyer reviews, seller leads, or a monitor that keeps only new products or watches price and stock.

### Quick start

1. Open the Actor's **Input** tab. The prefilled input reads the first ten products of a "smartphone" search.
2. Replace the words in **Search words**, or paste **Flipkart links** (a search, category, brand, product or reviews page), **Product ids**, or pick a **Category**.
3. Narrow it if you like: price range, **Minimum rating**, **Minimum discount**, **Brands**, **Gender**, **Colours**, **F-Assured only**, **In stock only**, words the title must or must not contain, and Flipkart's own **Sort** orders.
4. Turn on the add-ons you need: **Product details**, **Every seller of a product**, a **Delivery pincode**, **Buyer reviews**, **Seller leads**.
5. Set **Max products per search** (100 by default, up to 1,000) and click **Start**.
6. Download the dataset as JSON, CSV, Excel or HTML, or read it through the Apify API. The **Products**, **Reviews**, **Price and stock watch**, **Seller leads** and **Coverage of each search** views split the rows by kind.

### What you get

Every product row (`type: "product"`) is one Flipkart product id, charged as one Product event. Review rows (`type: "review"`) come only with **Buyer reviews** or a pasted reviews page, seller rows (`type: "seller"`) only with **Seller leads**, and watch rows (`type: "product_check"`) only under a monitor in `changes` mode. Each search, category or listing link also gets one free `coverage` row (Flipkart's total, pages read, card slots served, products delivered, repeats, filtered, sponsored seen and skipped, the words Flipkart searched for, and why the walk stopped), misses get free `status` rows, and every run ends with a free `summary` row, also stored as `RUN-SUMMARY` in the run's key-value store.

#### Main fields and measured fill rates

Measured on the platform on 2026-10-20 (19:06 to 19:41 UTC) over the 45 runs of the test matrix: 827 product rows from search and category cards, 10 rows from product links and ids, 19 rows with Product details, 78 reviews and 5 seller leads. Field names are exactly what the dataset holds.

| Field | What it holds | Filled (measured) |
|---|---|---|
| `productId`, `url`, `title`, `image` | Flipkart's product id (pid), the product link, title and image | 100 percent |
| `itemId` | Flipkart's item id (the `itm...` part of a product link) | 834 of 837 rows: a product id without variants (a book by its ISBN) has none, and its `url` opens it by its id |
| `listingId` | The listing id of the offer on the card | 99.5 percent |
| `brand` | Brand | 99.5 percent |
| `subtitle` | Flipkart's second title line (colour, size, RAM or pack) | 86.1 percent of card rows |
| `price`, `discountPercent` | Selling price in rupees and the discount off MRP in percent | 99.5 percent |
| `mrp` | MRP in rupees | 98.9 percent |
| `inStock`, `flipkartAssured`, `category` | In stock or not, the F-Assured badge, Flipkart's category | 100 percent |
| `superCategory`, `subCategory`, `vertical`, `availability`, `discountAmount` | Flipkart's three category levels of the card ("Mobile", "Handset", "Handset"), its stock state as Flipkart writes it (`IN_STOCK`, `OUT_OF_STOCK`) and the rupees off MRP | category levels 100 percent of card rows; `availability` 32.5 percent of card rows (list layouts) and every product link or id; `discountAmount` 98.9 percent (wherever price and MRP are) |
| `ratingBreakdown` | The number of ratings of 1 to 5 stars, from the card's own histogram or the product page | every rated card of the saved search and category pages (its sum is `ratingCount`); every product link and id with a rating |
| `rating`, `ratingCount`, `reviewCount` | Average stars and counts | 30.1 to 32.5 percent of card rows: list layouts (phones, laptops) and plain grids carry them, most fashion grid cards do not; 100 percent of product links and ids, which read them from the product page |
| `keySpecs` | The spec lines of the card ("7200 mAh Li-ion Battery", "17.17 cm (6.76 inch) Display") | 27.6 percent of card rows |
| `warrantySummary` | The warranty line of the card | 17.0 percent of card rows |
| `organicRank`, `sponsoredRank`, `isSponsored`, `position`, `page` | Rank among organic results, rank among sponsored slots (both counted over the pages the run read, from its start page), sponsored flag, slot on the page, page number | `organicRank` 98.8 percent of card rows (every organic row; sponsored rows carry `sponsoredRank` instead) |
| `sellerName`, `sellerId` | The seller of the offer | 100 percent of product links and ids and of rows with Product details (from the product page); empty on plain search rows |
| `badges` | The card's own callouts ("Top Discount of the Sale", "Lowest Price Live", "Only few left", exchange offers) | 56.7 percent of card rows |
| `source` | Which input found the row: kind, input position, search words or category path | every row |

Also on every row: `currency` (`INR`) and `scrapedAt`. With reviews on: `reviewsStatus` and `reviewsDelivered` (and `reviewsCutBy`, `reviewsLeftOutByChargeLimit` where a walk was cut). With details on, a row whose details could not be read or were cut carries `detailsStatus` (`not_read`, `charge_limit`, `run_stopped` when the run was stopping) and, when your charge limit left them out, `detailsLeftOut: "charge_limit"`; a row with its details carries neither.

Every text (titles, specifications, descriptions, offers, reviews, seller profiles) is delivered exactly as Flipkart serves it: nothing is trimmed, shortened, re-spaced or masked. A seller's profile text can carry Flipkart's own HTML character references (`&#x28;` for an opening bracket, `&amp;` for `&`), and some texts end in a space or hold line breaks, as Flipkart sends them.

#### Example row (real, trimmed)

The first organic product of the prefilled "smartphone" search, read on 2026-10-20 (matrix r2, build 0.1.5):

```json
{
  "type": "product",
  "productId": "MOBHQSFF6MZK4YNP",
  "listingId": "LSTMOBHQSFF6MZK4YNPMLMOKI",
  "itemId": "itm5420c578ec2df",
  "url": "https://www.flipkart.com/vivo-t5-lite-44w-5g-twilight-shadow-64-gb/p/itm5420c578ec2df?pid=MOBHQSFF6MZK4YNP",
  "title": "vivo T5 Lite 44W 5G (Twilight Shadow, 64 GB)",
  "subtitle": "4 GB RAM",
  "brand": "vivo",
  "image": "https://rukmini1.flixcart.com/image/832/832/xif0q/mobile/y/i/n/-resized-original-imahpgktvxzebfkq.jpeg?q=70",
  "price": 17499,
  "mrp": 30999,
  "discountPercent": 43,
  "currency": "INR",
  "rating": 4.3,
  "ratingCount": 4467,
  "reviewCount": 321,
  "inStock": true,
  "flipkartAssured": true,
  "keySpecs": ["4 GB RAM | 64 GB ROM", "17.12 cm (6.74 inch) HD+ Display", "50MP + 0.08MP | 5MP Front Camera", "6500 mAh Li-ion Battery", "Dimensity 6300 5G Processor"],
  "badges": ["Top Discount of the Sale", "Upto ₹13,400 Off on Exchange"],
  "warrantySummary": "1 Year Warranty on the Handset and 6 Months Warranty on Inbox Accessories",
  "category": "Handset",
  "superCategory": "Mobile",
  "subCategory": "Handset",
  "vertical": "Handset",
  "availability": "IN_STOCK",
  "discountAmount": 13500,
  "sellerName": null,
  "sellerId": null,
  "isSponsored": false,
  "position": 3,
  "organicRank": 1,
  "sponsoredRank": null,
  "page": 1,
  "source": { "kind": "search", "input": "searchTerms 1", "searchWords": "smartphone", "categoryPath": null },
  "scrapedAt": "2026-10-20T19:07:06.812Z"
}
```

#### Speed

The prefilled run took 21 seconds on the platform at 256 MB (9 to 35 seconds over five health runs). A "running shoes" search walked to Flipkart's slot limit (26 pages, 1,000 card slots, 579 organic products) in 64 seconds. Memory peaked at 58 MB of 256 over the 45 runs of the matrix. By default every call goes through Apify datacenter proxy sessions on networks Flipkart answers; a session Flipkart refuses is replaced by a fresh one.

### Product details (add-on)

Turn on **Product details** and the Actor reads each delivered product's own page and nests it as `details` (one Product detail event per row that carries it):

- `categoryPath` and `breadcrumbs`, `titleShort`, `listingState`, `buyable`.
- `priceAfterOffers` (Flipkart's "Buy at" price after the best coupon and bank offer) with `priceAfterOffersNote`, `discountAmount`, `offerCount` and `offers` (coupons, exchange and bank offers with their text and saving).
- `ratingBreakdown` (1 to 5 stars) and `aspectRatings` (Camera, Battery and the other aspects Flipkart rates).
- `seller`: name, id, rating, years on Flipkart, its scores ("Product Sold", "Quality Score", "Speed Score") and its own About text.
- `deliveryText`, `deliveryDaysMin`, `deliveryDaysMax`, `deliveryFee`, `fulfilledByFlipkart`, `cashOnDelivery`, `noCostEmi`, `returnPolicy`, `warranty`.
- `specifications` (every group with every row) and `specificationCount`, `highlights`, `productHighlights`, `description`, `countryOfOrigin`, `manufacturer`, `importer`, `packer`, `genericName`.
- `images` (all, 832 px), `imageCount`, `videoCount`, `videos`, `variantAttributes` and `variants` (each swatch: colour, size, storage, with every option's own product id, listing id and link).

Measured on 19 products (matrix of 2026-10-20): `priceAfterOffers`, `ratingBreakdown`, `deliveryText`, `returnPolicy`, `warranty`, `highlights`, `specifications`, `countryOfOrigin`, `manufacturer`, `packer`, `images`, `offers` and the seller 19 of 19; `breadcrumbs` 18; `aspectRatings` 17; `importer` 14; `variants` 12; `description` 10; `videos` 2; `productHighlights` 0 of 19. With details on, the row's price, MRP, discount, stock, rating and seller come from the product page, which is newer than the search card, and every filter is checked again on them (a product that no longer passes is free). A page that could not be read is not charged (`detailsStatus` says why).

### Every seller and delivery to a pincode (add-on)

With **Product details** on:

- **Every seller of a product** adds `sellerCount` and `sellers`: each seller's id, name, rating, whether it holds the buy box, price, MRP, F-Assured, availability, delivery text, date and time, shipping fee, return policy, offers and its `profile` (business name, description, on Flipkart since, pickup city, state and pincode, the registered name and pickup street with **Personal data** on, product quality score, quality and speed score percent, product rating, units listed, units sold in total and in the last 30 days).
- **Delivery pincode** (six digits) adds `pincodeDelivery`: the city Flipkart resolved, whether it recognised the pincode, the delivery text, date and time and whether the product is available there; with every seller on, each seller carries its own delivery for that pincode.

Both are included in the Product detail charge. In the test matrix, a phone read with every seller and pincode 560001 came back with its seller list, the seller profile and a delivery date for Bangalore.

### Buyer reviews (add-on)

Turn on **Buyer reviews**, or paste a product's reviews page as a link, and each product gets its reviews as rows of their own (one Review event each). A pasted reviews page keeps its own order unless you set **Review order**, and its certified buyer and rating aspect filters are sent and checked on Flipkart's answer (where Flipkart did not apply one, or served another order, `reviewsStatus` is `filter_not_applied` and no review of that product is charged). Each review row has `reviewId`, `productId`, `reviewedProductId` (Flipkart pools reviews over the variants of a product), `productUrl`, `rating`, `title`, `text`, `author`, `city`, `state`, `certifiedBuyer`, `date` (as Flipkart shows it, "3 months ago"), `month` (the month that date points at, `2026-07`), `upvotes`, `downvotes`, `images`, `variant` (the colour, RAM or size reviewed) and `foundBy` (the order that found it). Measured on 78 reviews (2026-10-20): `rating`, `title`, `text`, `author`, `city`, `state`, `certifiedBuyer`, `date`, `month`, `upvotes` and `variant` 78 of 78; `images` 26 of 78.

Choose most helpful (default), newest, positive first, negative first, or all four orders one after the other (each review delivered once), and up to 1,000 reviews a product (20 by default). Flipkart serves about ten full pages of ten reviews per order and then thinner pages until it ends the list, so all four orders reach more of a product's reviews than one. The product row says how many came (`reviewsDelivered`) and whether they were read (`reviewsStatus`: `read` to the end of the list or to your cap, `partial` when the walk stopped before either, `failed`, `filter_not_applied` when Flipkart served another order or filter than the one asked, `stopped` or `run_stopped` when the run stopped during or before the walk, `not_read_after_restart` when the platform restarted the run after reviews of that product were delivered, `max_reviews_per_product_reached` when earlier links of the product used its budget; on the free note row of reviews links also `known_to_monitor`); a partial walk names why in `reviewsCutBy` (`empty_pages`: three empty pages in a row while Flipkart said more follow; `page_limit`: 80 pages of one order).

### Seller leads (add-on)

With **Product details** on, **Seller leads** adds one `seller` row per seller met through the run's product pages, delivered after the last search (one Seller lead event each, once per run): `sellerId`, `name`, `rating`, `yearsWithFlipkart`, `scores`, `about`, `businessName`, `registeredName` and `pickupAddress` (both with **Personal data** on, null without), `description`, `liveSince`, `pickupCity`, `pickupState`, `pickupPincode`, `productQualityScore`, `qualityScorePercent`, `speedScore`, `speedScorePercent`, `productRating`, `unitsListed`, `unitsSoldTotal`, `unitsSold30d`, `brandsSeen`, `categoriesSeen`, `productsSeen`, up to five `sampleProductUrls` and `profileStatus` (`read`, or `not_read` when Flipkart's sellers answer failed and the row holds only what the product pages showed). Measured on 5 seller rows (2026-10-20): name, rating, business name, pickup city, state and pincode, quality and speed score, units sold in 30 days and on Flipkart since 5 of 5; the registered name and pickup street 5 of 5 with Personal data on. A seller's registered name is often its proprietor's own name and its pickup street can be a home address, so both are personal data and off by default; you are responsible for a lawful use, GDPR and India's DPDP Act included. `gstin`, `cin` and `fssai` are filled only where the seller's own texts print them (0 of 5 measured rows had a GSTIN).

### Monitor: new products only, or a price and stock watch

Set **Monitor name** and schedule the run. The Actor remembers what it delivered under that name in a key-value store it creates itself.

- **`new_only` (default)**: searches, categories, links and product ids deliver and charge only products, reviews and sellers not delivered before under this name. A known product found on a search page or named by its product id is skipped before anything more is read for it, free, and its reviews are not read again.
- **`changes`**: a price and stock watch of every product the inputs find (searches and categories up to **Max products per search**, product links and ids). Every watched product is delivered as one `product_check` row and billed as one Product check event, changed or not, the first run included: `price`, `mrp`, `inStock`, `watchedFrom` (`search_card` for products found by searches and categories, on every run and with **Product details** on too, so a page that could not be read never resets the watch; `product_page` for product links and ids), `changeType` (`baseline` the first time, then `changed` or `unchanged`) and `changes` (each with `field`, `from` and `to` for `price`, `mrp` and `inStock`; for product links and ids, whose product page is read, a `seller` entry gives the new buy box seller's id in `to`). A search or category watch row shows the card's own figures it was compared on; with **Product details** read, the product page's figures ride along in `pageFigures` (`price`, `mrp`, `discountPercent`, `inStock`). Filter on `changeType` to keep only what moved. With **Product details** on, each watch row also pays its Product detail. Reviews and seller leads need a run of their own.
- **Reset the monitor** forgets the memory and starts again.

### Search depth and limits

Flipkart serves 1,000 product slots per search or category, sponsored slots included. On pages of 40 cards (25 pages) that is about 600 organic products; on pages of 24 cards (41 pages) about 500. A search that reaches the limit gets a coverage row with `stoppedBy: "flipkart_slot_limit"` naming Flipkart's total, for example: "Flipkart shows at most 1000 product slots per search or category (sponsored included) and counts 5197; split it by price (minPrice and maxPrice) or by brand to reach the rest." To read deeper, split a big search by price range or brand, one search each. A search started past page 1 (`startPage`) that Flipkart answers with no product gets `stoppedBy: "start_page_empty"` and is not reported complete: Flipkart's answer does not tell the end of a short result from its slot limit.

Flipkart applies its own filters and sort orders; the Actor checks Flipkart's echo of every filter and order it sent on every page, and where Flipkart did not apply one, that search stops there with a free `filter_not_applied` row. Price, discount, rating, brand, F-Assured, stock and title words are also checked on every row. The rows keep Flipkart's own order, and Flipkart sorts by its own index: under the price and discount orders a few rows can sit out of the order their shown figure suggests (a discount order read on 2026-10-20 gave 86, 86, 88, 88 ... 87 percent). A filter checked on the rows that no card meets (minimum discount, title words, in stock, a price range, a minimum rating other than 3 or 4) stops a search after three pages in a row without a match, and the coverage row says it is not complete.

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

You pay per event, per 1,000 events, by your Apify plan:

| Event | What it is | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|---|
| Product (primary) | One Flipkart product row | $1.33 | $1.22 | $1.10 | $0.95 |
| Product detail | The product page details of one delivered product, every seller and pincode delivery included (add-on) | $1.50 | $1.40 | $1.30 | $1.20 |
| Review | One buyer review row (add-on) | $1.30 | $1.20 | $1.10 | $0.95 |
| Product check | One product read again by a `changes` monitor | $0.90 | $0.85 | $0.80 | $0.70 |
| Seller lead | One seller row (add-on) | $2.50 | $2.30 | $2.10 | $1.80 |

Platinum and Diamond plans pay the Gold price. The Actor start is $0.006 per run, one flat fee on every plan with no discount; it is charged per GB of run memory, and this Actor runs at 256 MB by default and at most 1 GB, so a run pays it once.

The Store pricing card shows these same prices per 1,000 events: "$0.95 / 1,000" on the Product row means one product costs $0.00095, less than a tenth of a cent.

#### Worked examples (GOLD)

- **100 products from one search**: 100 x $0.00095 = $0.095, plus the $0.006 start = **$0.101** (on the FREE plan: $0.133 + $0.006 = $0.139).
- **100 products with Product details**: $0.095, plus 100 x $0.0012 = $0.12, plus the $0.006 start = **$0.221**.
- **One product link with Product details and 20 reviews**: $0.00095 for the product, plus $0.0012 for its details, plus 20 x $0.00095 = $0.019 for the reviews, plus the $0.006 start = **$0.02715**.
- **A daily price and stock watch of 200 product ids**: 200 x $0.0007 = $0.14, plus the $0.006 start = **$0.146** a run, $4.38 for 30 daily runs.

#### What is free

Product ids Flipkart does not have, searches Flipkart did not recognise (it shows unrelated products for a made up word), searches Flipkart corrected when **Accept Flipkart's spelling corrections** is off, pages on which Flipkart did not apply a filter or order that was sent, products left out by your filters, sponsored slots skipped while **Include sponsored products** is off, products found twice in a run, products, reviews and sellers a `new_only` monitor delivered before, failed calls, product pages that could not be read, and every `status`, `coverage` and `summary` row. If you set a maximum charge for the run, add-on rows are cut first and the run stops before it passes the limit. A run whose inputs keep delivering nothing (unknown ids, pages of filtered or known products) stops itself with a free row once its allowance of unpaid work is spent: in the test matrix, two runs of 60 made up product ids stopped after 15 and after 9 of them, each with a free row.

### Input

An input that names nothing to read runs the sample: the first ten products of a "smartphone" search. A setting this Actor does not have (a misspelt name) refuses the run with a free row, so a typo never runs a wider search than you meant; each list entry is read as one value.

#### What to read

- `searchTerms`: search words, one search per entry (up to 200), each up to 100 characters.
- `startUrls`: flipkart.com links (up to 1,000): a search page (`https://www.flipkart.com/search?q=running+shoes`), a category or brand page (`https://www.flipkart.com/mobiles/pr?sid=tyy,4io`; its filters, price range, sort and page are kept unless you set your own, and its price range, brands, rating and F-Assured filters are checked on every row as yours are), a product page (`.../p/itm...?pid=...`) or a product's reviews page (the product is delivered with its reviews, charged per review; reviews pages are read first; a reviews page whose product the run delivered already, by another link, a search or an id, still gets its reviews as review rows, without the product row a second time, up to what is left of the product's **Reviews per product** (one budget per product for the whole run, whichever links ask); under a `new_only` monitor a reviews page of a product the monitor already knows reads nothing, and a free row names it; if the platform restarts the run, a product delivered before the restart reads no more reviews, and a free row says so). Product links copied from Flipkart's own search results, with their tracking parts, are read as they are. A link to a .txt or .csv file or a Google Sheet that lists such links or product ids is read too (up to 2,000 a file): a .csv file or a Google Sheet cell by cell (a cell holding a comma is quoted, as spreadsheets write it; an unquoted category link cut at the comma of its category id is left out and counted on the file's free row), any other file line by line, each link whole up to the next space or line break. Every entry is read exactly as written: a link Flipkart does not write is skipped, never shortened. A product id in a file is one of Flipkart's 16 character product ids (`TSHHFFHVCVJVZNMD`, `MOBHNJ8FRCKPXUAS`, any case) or a 13 digit book id (ISBN); header words and other columns are skipped and counted. Short links (fkrt.it) are refused: open them in a browser and paste the full flipkart.com link.
- `productIds`: Flipkart product ids, the `pid=` part of a product link (`MOBHNJ8FRCKPXUAS`; books often use their 13 digit ISBN), up to 5,000.
- `category`: one of 27 common category pages (mobiles, laptops, televisions, headphones, refrigerators, men_tshirts, sarees, mens_footwear, skin_care, books and more); any other category or brand page can be pasted as a link.

#### Filters and order

`sort` (`relevance` for searches, `popularity`, `price_low_to_high`, `price_high_to_low`, `newest`, `discount` where Flipkart offers it: electronics and appliances, not most fashion, elsewhere the search stops with a free row; Flipkart showed no sponsored products under the price and newest orders and some under popularity and discount on 2026-10-20), `minPrice` and `maxPrice` in whole rupees, `minRating` (0 to 5; 0 asks for no minimum and also clears a pasted link's own rating filter; at exactly 3 or 4 Flipkart's own rating filter is used as well, and an organic product without a rating on its card, as on most fashion grids, passes on that filter's echo; otherwise a product with no rating on its row does not pass), `minDiscount` (1 to 95 percent), `brands` and `colours` (as Flipkart writes them in its filters), `genders` (men, women, boys, girls, unisex, on fashion and footwear pages), `flipkartAssuredOnly`, `inStockOnly`, `includeWords` and `excludeWords` (whole words of the title, any case), `includeSponsored` (sponsored products flagged with their rank among the sponsored slots) and `acceptSpellingCorrections` (on by default; the coverage row names the words Flipkart searched for). Every filter holds on every row: product links, reviews links and product ids are checked on their product page (a product that fails is not delivered or charged, and one free `filtered` row names them); a product without a brand or a rating on its page does not pass a brand or rating filter. `genders` and `colours` are Flipkart search filters that no product page shows, so they cannot be combined with product links, reviews links or ids (the run is refused, free), and product links inside a file of links are not read under them (a free row names them).

#### How much to read

`maxItemsPerSearch` (1 to 1,000, default 100), `maxItems` (the whole run, up to 100,000), `startPage` (1 to 41) and `maxPagesPerSearch` (1 to 41; a page holds 24 or 40 products).

#### Add-ons

`includeDetails`, `includeAllSellers`, `pincode` (the last two need `includeDetails`), `includeReviews`, `maxReviewsPerProduct` (1 to 1,000, default 20), `reviewsSort` (`most_helpful`, `newest`, `positive_first`, `negative_first` or `all`), `includeSellerLeads` (needs `includeDetails`), `includePersonalData` (default false: a seller's registered name and pickup street).

#### Monitor

`monitorName`, `monitorMode` (`new_only` or `changes`), `resetMonitor`.

#### Run settings

`maxRequestRetries` (1 to 5, default 3), `requestTimeoutSecs` (5 to 60, default 15; a request that runs into it is asked again on a fresh proxy session), `maxConcurrency` (how many products are read at the same time, 1 to 4, default 3), `proxyConfiguration` (leave it as it is: Apify datacenter sessions on networks Flipkart answers; a Residential choice runs on them too and the run says so in a note; your own proxy links are used as given, each an http or https link with host and port and, when it has one, a password of at least 8 characters with letters and digits; a run with every proxy turned off is refused, because Flipkart refuses the platform's own addresses on product pages).

#### Examples

A search with filters, cheapest first:

```json
{ "searchTerms": ["tshirt"], "brands": ["PUMA"], "minPrice": 500, "maxPrice": 2000, "sort": "price_low_to_high", "maxItemsPerSearch": 200 }
```

Product links and ids with details, every seller and a pincode:

```json
{ "startUrls": [{ "url": "https://www.flipkart.com/samsung-a36-5g-dark-blue-128-gb/p/itm2efbf47502056?pid=MOBHNJ8FRCKPXUAS" }], "productIds": ["9781847941831"], "includeDetails": true, "includeAllSellers": true, "pincode": "560001" }
```

Reviews in all four orders:

```json
{ "productIds": ["MOBHNJ8FRCKPXUAS"], "includeReviews": true, "reviewsSort": "all", "maxReviewsPerProduct": 500 }
```

A daily price and stock watch (schedule it once a day):

```json
{ "productIds": ["MOBHNJ8FRCKPXUAS", "9781847941831", "ACCHFSVMRU4ZGNSY"], "monitorName": "my-price-watch", "monitorMode": "changes" }
```

### Use it from the API

The Actor id is `automation_craft/flipkart-scraper` (`automation_craft~flipkart-scraper` in REST paths). Each call runs the Actor and returns its dataset: product rows plus the free coverage and summary rows, so filter on `type`. Replace `<YOUR_APIFY_TOKEN>` with your Apify API token.

#### curl

The synchronous endpoint waits up to 300 seconds, so keep these runs small or start a normal run for large ones.

```bash
curl -X POST "https://api.apify.com/v2/acts/automation_craft~flipkart-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["running shoes"], "maxItemsPerSearch": 50}'
```

#### Node.js

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('automation_craft/flipkart-scraper').call({
    startUrls: [{ url: 'https://www.flipkart.com/mobiles/pr?sid=tyy,4io' }],
    maxItemsPerSearch: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const products = items.filter((row) => row.type === 'product');
console.log(products.length, products[0]?.price);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("automation_craft/flipkart-scraper").call(
    run_input={"searchTerms": ["refrigerator"], "minRating": 4, "maxItemsPerSearch": 50, "includeDetails": True}
)
rows = client.dataset(run["defaultDatasetId"]).list_items().items
products = [row for row in rows if row["type"] == "product"]
print(len(products))
```

### Use it from AI agents (MCP)

An AI agent connected to the Apify MCP server can call this Actor by its name, `automation_craft/flipkart-scraper`, with the same input JSON as above. The dataset's field descriptions and views tell the agent what each column holds, and the free coverage row tells it what was read and why each search stopped.

### FAQ

#### Is there a Flipkart API for product data?

This Actor works as one: call it through the Apify API with search words, Flipkart links or product ids and read the rows as JSON, CSV or Excel. It needs no Flipkart account, login or key; the API examples above show the calls.

#### How do I scrape Flipkart?

Put search words, Flipkart links (search, category, brand, product or reviews pages) or product ids into the input, pick filters and add-ons, and start the run. Each product comes back as one row with its price, MRP, discount, stock and rank, and a free coverage row per search says how far Flipkart let it read.

#### Is it legal to scrape Flipkart?

This Actor reads only what flipkart.com shows a logged out visitor: no login, no account, no cart or checkout. Review rows carry the reviewer's name and city, as Flipkart shows them (the content's author); a seller's registered name and pickup street can be personal data and come only with **Personal data** on (off by default). Whether your use is lawful depends on your purpose, your country and Flipkart's terms of use, so check them for your case.

#### How do I check Flipkart price history?

This Actor reads the price Flipkart shows at read time, so the history starts with your first run. Set a **Monitor name** with mode `changes` and schedule it daily: every run delivers one row per watched product with its price, MRP and stock, and `changes` gives the old and new value of what moved.

#### How do I download Flipkart reviews to Excel or CSV?

Turn on **Buyer reviews** (or paste a product's reviews page link), choose the order and how many reviews per product, and start the run. Open the **Reviews** view of the dataset and export it as CSV or Excel: one row per review with rating, title, text, reviewer name, city, certified buyer flag, votes, photos and the variant reviewed.

#### Why does this Actor run with limited permissions?

It follows least privilege: it only writes its own run's dataset and key-value store. A monitor's memory is a named key-value store the Actor creates itself under your account.

### What this Actor does not do

- **No Flipkart Grocery and no Flipkart Minutes**: it reads Flipkart's main store; a Grocery or Minutes link is refused with a free row.
- **No customer rating sort**: Flipkart's sort orders here are relevance, popularity, price low to high, price high to low, newest and, on some categories, discount. Use **Minimum rating** to filter by stars instead.
- **No stock per size or colour**: the product page does not show it. `inStock` is the stock of the product id read; each variant carries its own product id, which can be read as an input of its own.
- **No questions and answers** from product pages.
- **Nothing behind a login**: no account, order, cart, wishlist or seller dashboard data. Prices and offers are those flipkart.com shows a logged out visitor at read time.
- **No reviews beyond what Flipkart lets be read**: about ten full pages per order, then thinner pages until Flipkart ends the list.
- **No watch that bills only changed products**: every watched product is delivered and billed as a Product check, changed or not.
- **No Apify residential proxy, not even as a retry**: with the Apify proxy the Actor runs on datacenter sessions only, on networks Flipkart answers, and replaces a refused or slow session with a fresh one (on 2026-10-20 Flipkart refused no datacenter session on a search, category or reviews page in 90 runs); a product page is about 200 KB, which costs more on residential traffic than a product row is priced at. Your own proxy links are used as given.
- **No AI generated names, titles or attributes**: every field is Flipkart's own, as Flipkart serves it; no AI model is called.
- **No price history before your first run**: history comes only from the runs of a monitor.

### Changelog

See the Changelog tab. 0.1 (2026-10-20): first release.

### More data tools by Automation Craft

- [Trendyol Scraper: Products, Prices, Reviews](https://apify.com/automation_craft/trendyol-scraper)
- [AliExpress Search Scraper - Products and Prices](https://apify.com/automation_craft/aliexpress-search-scraper)
- [Amazon Product Scraper - Search, Best Sellers](https://apify.com/automation_craft/amazon-data-scraper)
- [Amazon Sponsored Products Scraper - Ads by Keyword](https://apify.com/automation_craft/amazon-sponsored-products-scraper)
- [ShopBack Scraper: Cashback, Gift Cards, Affiliates](https://apify.com/automation_craft/affiliate-network-detector)
- [Mercari US Scraper: Listings, Sold Prices](https://apify.com/automation_craft/mercari-us-scraper)
- [Facebook Marketplace Scraper with Sold Tracker](https://apify.com/automation_craft/facebook-marketplace-scraper)
- [Zalando Ads Library Scraper - Sponsored Products](https://apify.com/automation_craft/zalando-ads-library-scraper)

# Changelog

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

# Actor input Schema

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

Words to search on Flipkart, one search per entry (smartphone, running shoes, atta 5 kg). Each search delivers up to Max products per search, in Flipkart's own order. When Flipkart does not recognise the words and shows unrelated products instead (a made up word), that search delivers nothing and is not charged; a free status row says so.

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

Links copied from flipkart.com: a search page (https://www.flipkart.com/search?q=running+shoes), a category or brand page (https://www.flipkart.com/mobiles/pr?sid=tyy,4io; its filters, price range and sort are kept unless you set your own below, and its price, brand, rating and F-Assured filters are checked on every row), a product page (https://www.flipkart.com/.../p/itm...?pid=...) or a product's reviews page (the product is delivered with its reviews in that page's order and filters, charged per review). You can also link a .txt or .csv file or a Google Sheet that lists such links or product ids (a .csv file or a Sheet is read cell by cell, any other file line by line). Every filter below is checked on product pages too.

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

Flipkart product ids: the pid= part of a product link, as in MOBHNJ8FRCKPXUAS (books often use their 13 digit ISBN). Each is read from its product page. An id Flipkart does not have gets a free status row.

## `category` (type: `string`):

One common Flipkart category to read page by page (any other category or brand page can be pasted as a link above).

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

Flipkart's own order of the results: relevance (searches only), popularity, price low to high, price high to low, newest first, or discount (where Flipkart offers it: electronics and appliances, not most fashion; elsewhere the search stops with a free row). Left out, Flipkart's default order. Flipkart sorts by its own index, so a few rows can sit out of the order their shown price or discount suggests; on 2026-10-20 it showed no sponsored products under the price and newest orders and some under popularity and discount.

## `minPrice` (type: `integer`):

Only products at this selling price or above, in whole rupees.

## `maxPrice` (type: `integer`):

Only products at this selling price or below, in whole rupees.

## `minRating` (type: `number`):

Only products rated at least this many stars (0 to 5, for example 4 or 4.2). At exactly 3 or 4 Flipkart's own rating filter is used as well, and an organic product with no rating on its card (most fashion grids) passes on that filter. Otherwise a product with no rating yet does not pass.

## `minDiscount` (type: `integer`):

Only products discounted at least this much off their MRP, in whole percent.

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

Only these brands, written as Flipkart lists them in its brand filter (Samsung, Apple, PUMA). Several brands match any of them.

## `genders` (type: `array`):

Only products for these groups (Flipkart's own Gender filter, on fashion and footwear pages). Several values match any of them.

## `colours` (type: `array`):

Only these colours, written as Flipkart lists them in its Color filter (Black, Navy Blue).

## `flipkartAssuredOnly` (type: `boolean`):

Only products carrying Flipkart's F-Assured badge.

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

Only products Flipkart shows as in stock and buyable.

## `includeWords` (type: `array`):

Only products whose title holds every one of these words or phrases (whole words, any case).

## `excludeWords` (type: `array`):

Leave out products whose title holds any of these words or phrases (whole words, any case).

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

Also deliver the sponsored (ad) products Flipkart mixes into the results, flagged isSponsored with their rank among the sponsored slots. Off: only the organic results are delivered, each with its organic rank; the sponsored slots are still counted on the coverage row.

## `acceptSpellingCorrections` (type: `boolean`):

When Flipkart corrects the spelling of a search (samsng mobil to samsung mobile), deliver its results; the coverage row names the words Flipkart searched for. Off: such a search delivers nothing and is not charged.

## `maxItemsPerSearch` (type: `integer`):

The most products one search, category or listing link delivers (1 to 1,000). Flipkart shows at most 1,000 product slots per search, sponsored included; split a bigger search by price or brand.

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

The most products the whole run delivers, across every search and link. Left out: no limit beyond the per search one.

## `startPage` (type: `integer`):

The result page each search starts at (1 to 41). Pages before it are not read.

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

The most result pages each search reads (1 to 41; a page holds 24 or 40 products).

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

Read each delivered product's own page and add its details: every specification group, highlights, description, all images, each variant (colour, size, storage) with its own product id, the seller with rating, years on Flipkart and scores, bank offers and the price after offers, delivery text and days, warranty, return policy, cash on delivery, country of origin, manufacturer, importer and packer. Charged as one Product detail per product.

## `includeAllSellers` (type: `boolean`):

With Product details: also list every seller offering the product, with price, MRP, rating, F-Assured, delivery, shipping fee, return policy, offers and the seller's profile (business name, pickup city, quality and speed scores, units sold, on Flipkart since). Included in the Product detail charge.

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

With Product details: a six digit Indian pincode; each product gets its delivery date and availability for that pincode, and every seller its own delivery date when Every seller is on.

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

Add each delivered product's buyer reviews as their own rows: rating, title, text, reviewer name, city, certified buyer, votes, photos, the variant reviewed and the date Flipkart shows. Charged per review.

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

The most reviews delivered per product (1 to 1,000). Flipkart lets about ten full pages of ten reviews be read per order, then thinner pages; choose All orders to reach more (a test run read 735 reviews of three products this way).

## `reviewsSort` (type: `string`):

Which reviews come first: most helpful, newest, positive first, negative first, or all four orders one after the other (each review delivered once). Left empty: most helpful, or the order of a pasted reviews page.

## `includeSellerLeads` (type: `boolean`):

With Product details: also deliver one row per seller met through the run's products, with rating, years on Flipkart, scores, business name, description, pickup city, state and pincode, quality and speed scores, units listed and sold, the brands and categories it was seen selling and sample product links (the registered name and the pickup street with Personal data). Charged per seller row.

## `includePersonalData` (type: `boolean`):

Also deliver the fields that can name or locate a private person: a seller's registered name (often its proprietor's own name) and its pickup street address, on seller rows and in the seller profiles of Product details. Off, these fields are null; the business name, city, state and pincode always come. You are responsible for a lawful use of personal data, GDPR and India's DPDP Act included.

## `monitorName` (type: `string`):

Turns on a monitor that remembers between runs. new_only: products (and reviews and sellers) delivered by an earlier run of this monitor are skipped and not charged again. changes: each watched product is delivered as a product_check row comparing price, MRP and stock with the last run (searches and categories on the card's figures; product links and ids on the product page's, the buy box seller too). Use the same name in every scheduled run.

## `monitorMode` (type: `string`):

new_only (default with a monitor name) or changes (a price and stock watch of every product the inputs find).

## `resetMonitor` (type: `boolean`):

Start the named monitor over: everything is new again in this run.

## `maxRequestRetries` (type: `integer`):

How often a request Flipkart does not answer is asked again (1 to 5).

## `requestTimeoutSecs` (type: `integer`):

How long one request may take before it is asked again on a fresh proxy session (5 to 60).

## `maxConcurrency` (type: `integer`):

How many products (their pages, sellers and reviews) are read at the same time, 1 to 4 (default 3). Lower it to go gently; the run paces every request to Flipkart either way.

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

Leave it as it is: the Actor uses Apify datacenter proxy sessions on networks Flipkart answers and replaces a refused one by itself. Your own proxy links are used as given (http or https, host and port; a password of at least 8 characters with letters and digits).

## Actor input object example

```json
{
  "searchTerms": [
    "smartphone"
  ],
  "flipkartAssuredOnly": false,
  "inStockOnly": false,
  "includeSponsored": false,
  "acceptSpellingCorrections": true,
  "maxItemsPerSearch": 10,
  "includeDetails": false,
  "includeAllSellers": false,
  "includeReviews": false,
  "includeSellerLeads": false,
  "includePersonalData": false,
  "resetMonitor": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `items` (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": [
        "smartphone"
    ],
    "maxItemsPerSearch": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

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

```

## MCP server setup

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