Flipkart Products Scraper
Pricing
from $1.05 / 1,000 results
Flipkart Products Scraper
Product listings from Flipkart search and browse pages: title, price and MRP, rating with its full 5-star histogram, review counts, key specs and images. Cross-page de-duplication and a relevance check on every query.
Pricing
from $1.05 / 1,000 results
Rating
0.0
(0)
Developer
Ibnu Adzim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Product listings from Flipkart search and browse pages — title, price and MRP, rating with its full 5-star histogram, review counts, key specs and images.
HTTP only, no browser, no login.
Input
{"mode": "search","keywords": ["laptop", "wireless earbuds"],"sortBy": "priceDesc","maxPages": 3,"maxItems": 200}
Or point it at listing URLs you already have:
{"mode": "urls","listingUrls": ["https://www.flipkart.com/search?q=keyboard"]}
What you get
recordType | One per | Carries |
|---|---|---|
SEARCH_SUMMARY | keyword / URL | pages fetched, rows fetched vs returned, duplicates dropped, why paging stopped, and a relevance score for the query |
PRODUCT | product | id, URL, title, price, MRP, rating + histogram, review count, key specs, images — plus the full raw upstream object |
ERROR | failed input | why |
{"recordType": "PRODUCT","productId": "COMH8Z9ABCDEFGHI","productUrl": "https://www.flipkart.com/lenovo-100e-chromebook-...","title": "Lenovo 100e Chromebook Gen 4 MediaTek Kompanio 520 - (4 GB/...)","currency": "INR", "currentPrice": 16500, "strikeOffPrice": 24990,"ratingAverage": 4, "ratingCount": 3333, "reviewCount": 307,"ratingBreakup": [455, 155, 242, 561, 1920], // 1★ … 5★"imageUrls": ["...", "..."],"raw": { "...": "upstream's object, untouched" }}
ratingBreakup is the 1★-to-5★ vote distribution — unusual to get from a
listing page rather than a product page, and enough to compute your own
weighted scores or spot review-bombing.
Known limits — read these before you rely on the output
Flipkart has no "no results" page, and this is the big one. An unmatched
query returns HTTP 200 with ~40 unrelated products —
q=zzzqqqnotarealproduct12345 returned wooden toddler puzzles, magic
copybooks and rose face wipes. It is not even a fixed fallback list: two
different nonsense queries returned two completely different junk sets with
zero overlap. Nothing in the response marks them as junk.
So every query's relevance is measured and reported. titleMatchRate is
the fraction of returned products matching a query token across title,
subtitle, Flipkart's own category (vertical) and key specs, and
lowRelevanceWarning flags a run below 20%. Measured separation:
| query | rate |
|---|---|
headphones, mobile, watches | 1.00 |
running shoes | 0.98 |
laptop | 0.92 |
shoes | 0.70 |
| three different nonsense strings | 0.00 |
These rows are never silently dropped — a low score is a fact about your query that you should see, not a licence for this actor to decide which products count.
Pages overlap, so products are de-duplicated. Page 2 shares ~9 of 24
products with page 1. That is genuine repetition in Flipkart's own paging,
not randomness: page 1 fetched twice returned an identical 24/24 set.
duplicatesDropped tells you how many were removed.
Page size is not fixed. 24 products on a grid-layout query, 40 on a
carousel-layout query. Flipkart picks the layout per query; it carries no
meaning. Set maxItems rather than reasoning from page counts.
India only, INR only. flipkart.com serves one market and there is no
locale switch, so currency is always INR.
Single product pages are not supported. /p/… is a different layout;
those URLs are refused with an explanation rather than half-parsed.
MRP is often absent. strikeOffPrice was present on 27 of 30 in
testing — products with no discount simply have no strike-off price. It is
left null, never copied from the sale price.
Technical
Server-rendered React; the payload is a JSON object on
window.__INITIAL_STATE__ (~354 KB). Products are located structurally
rather than by a fixed path, because slot-group keys are numeric and change
per query.
No WAF observed: 3/3 TLS profiles returned 200. Past the end, paging is
honest — page=9999 returns 200 with zero products.
robots.txt checked: no ClaudeBot/anthropic-ai group, no blanket
disallow; /search verdict ALLOWED.
Full recon trail is in CRAWLING_METHOD.md.