# Flipkart Scraper — Products, Prices, Specs & Reviews (`zapticx/flipkart-product-scraper`) Actor

Scrape Flipkart products by keyword, category or URL: prices, MRP, ratings, specs, sellers, delivery and reviews. Each product and review is charged once.

- **URL**: https://apify.com/zapticx/flipkart-product-scraper.md
- **Developed by:** [Zapticx](https://apify.com/zapticx) (community)
- **Categories:** E-commerce, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 80.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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, Specs & Reviews

### What this Actor does

Collect Flipkart products, prices, ratings, specifications, seller details and customer reviews. Search by keyword, paste category or search URLs, or look up specific products.

### Why use it

You pay once per unique item. A product found by two keywords costs one charge, and a review shared by several colour or storage variants costs one charge. Every run explains what was collected, what was skipped and why it stopped.

### Pricing

Pay per event, with no start fee:

| Event | Price per 1,000 | Charged when |
|---|---|---|
| Product | $1.00 | A unique product is delivered |
| Product details | $2.00 | A product page was read and its details delivered |
| Review | $1.00 | A unique review is delivered |

Duplicates, failed requests and invalid records are never charged. Apify platform usage is included in these prices.

### How to use

1. Enter keywords, or paste Flipkart URLs.
2. Choose whether you want product details and reviews.
3. Set your limits, then start the run.
4. Download your results, then open the run summary to check coverage.

### Key features

- Many keywords and URLs in one run
- Automatic paging, with a check that each page is the one requested
- Products deduplicated across all sources
- Reviews deduplicated across product variants
- Sponsored placements clearly flagged
- Separate limits for products, reviews and requests
- A summary of coverage, failures and stop reasons

### Supported input methods

| Input | Example |
|---|---|
| Keywords | `wireless earbuds` |
| Search URLs | `https://www.flipkart.com/search?q=earbuds` |
| Category URLs | Any Flipkart URL ending in `/pr?sid=...`, including filters |
| Product URLs | Any URL containing `/p/itm` |
| Product IDs | The `pid` value in a product URL |

### Input fields

| Field | Default | Purpose |
|---|---|---|
| `searchQueries` | none | Keywords |
| `startUrls` | none | Search, category and product URLs |
| `productIds` | none | Product IDs |
| `maxItems` | 20 | Unique products in the run |
| `maxProductsPerQuery` | 20 | Limit per keyword or URL |
| `sort` | relevance | Result order |
| `includeDetails` | false | Reads each product page |
| `includeSpecifications` | true | Keeps specification tables |
| `includeSeller` | true | Keeps seller details |
| `includeReviews` | false | Adds review records |
| `maxReviewsPerProduct` | 10 | Limit per product |
| `maxReviews` | 200 | Limit for the run |
| `reviewSort` | MOST_HELPFUL | Review order |
| `deduplicateProducts` | true | Removes repeat rows |
| `maxPagesPerQuery` | 20 | Page limit per keyword |
| `maxPagesPerCategory` | 20 | Page limit per URL |
| `maxRequests` | 500 | Request limit, retries included |
| `requestsPerSecond` | 2 | Pace, up to 5 |
| `maxConcurrency` | 3 | Sources at once |
| `maxRetries` | 3 | Retries for temporary errors |
| `requestTimeoutSecs` | 30 | Timeout per request |
| `debugLog` | false | Extra log detail |

The optional Flipkart Affiliate API source has its own fields: `dataSource`, `categories`, `inStockOnly`, `affiliateTrackingId` and `affiliateToken`. It is experimental and has not been tested with live credentials.

### Output fields

Every record has `recordType`, which is `product` or `review`.

**Product identity:** `productId`, `listingId`, `itemId`, `title`, `subtitle`, `brand`, `category`, `categoryPath`, `productUrl`.

**Pricing:** `price`, `originalPrice`, `discountPercent`, `currency`, `bestOfferPrice`.

**Ratings:** `rating`, `ratingCount`, `reviewCount`, `ratingBreakdown`, `aspectRatings`.

**Seller and delivery:** `sellerName`, `sellerRating`, `sellerQualityScore`, `sellerSpeedScore`, `sellerTenure`, `deliveryEstimate`, `returnPolicy`, `codAvailable`.

**Availability:** `availabilityStatus`, `isAvailable`.

**Content:** `description`, `specifications`, `highlights`, `imageUrls`, `variantProductIds`, `color`, `warranty`, `manufacturerInfo`.

**Listing signals:** `isSponsored`, `isAssured`, `position`.

**Provenance:** `searchQuery`, `sourceCategory`, `sourceType`, `sourceUrl`, `detailStatus`, `scrapedAt`.

**Reviews:** `reviewId`, `productId`, `productTitle`, `rating`, `title`, `text`, `reviewDate`, `certifiedBuyer`, `helpfulCount`, `notHelpfulCount`, `imageUrls`, `variant`. Reviewer names and cities are not collected.

Missing values are null and are never estimated.

**Exporting to CSV or Excel:** choose the **Product details** view for one clean column per field. The full export adds a column for every specification across all products, which can reach hundreds of columns. The `recordType` column separates products from reviews.

### Example input

```json
{
  "searchQueries": ["wireless earbuds", "smart watch"],
  "maxItems": 50,
  "maxProductsPerQuery": 25,
  "sort": "popularity",
  "includeDetails": true,
  "includeReviews": true,
  "maxReviewsPerProduct": 10
}
```

### Example output

```json
{
  "recordType": "product",
  "productId": "MOBHQV9YZGYG64U7",
  "listingId": "LSTMOBHQV9YZGYG64U7WLKZD8",
  "title": "Apple iPhone 15 (Blue, 128 GB)",
  "brand": "APPLE",
  "price": 69999,
  "originalPrice": 74900,
  "discountPercent": 6.54,
  "bestOfferPrice": 64999,
  "currency": "INR",
  "rating": 4.6,
  "ratingCount": 250171,
  "reviewCount": 9893,
  "availabilityStatus": "in_stock",
  "sellerName": "TrueComRetail",
  "isSponsored": false,
  "searchQuery": "iphone 15",
  "detailStatus": "ok"
}
```

### Practical use cases

- Track prices and discounts over time
- Compare products, brands and sellers
- Review specifications across a category
- See which products appear as sponsored placements
- Study customer feedback on your products

### Pricing examples

| Run | Cost |
|---|---|
| 20 products | $0.02 |
| 1,000 products | $1.00 |
| 100 products with details | $0.30 |
| 50 products with details and 10 reviews each | $0.65 |

Set a maximum cost per run in Apify, and the run stops cleanly at that limit. Results delivered so far are kept.

### API integration

Start runs and fetch results through the Apify API, and pass your input as JSON. Filter results by `recordType` to separate products and reviews.

### Scheduling

Use Apify Schedules for recurring runs. Each run starts fresh, so compare runs by `productId`.

### Known limitations

- Flipkart usually serves up to 25 result pages per search or category, even when it reports more. Split large categories with filters or several keywords.
- Some category listings show no rating or brand. Turn on product details to get them.
- Prices and availability are shown with no delivery location set.
- A product marked `out_of_stock` can still show a price, for example when Flipkart lists it as coming soon.
- `bestOfferPrice` depends on bank and coupon eligibility.
- Offer text is not extracted.
- `description`, `warranty` and `aspectRatings` depend on the product category.
- The run stops if the site refuses requests. It does not work around blocks.

### Troubleshooting

| Result | Meaning |
|---|---|
| `BLOCKED` | The site refused a request, so the run stopped. Results so far are kept. Try later, at a lower pace |
| `RATE_LIMITED` | The site asked for fewer requests. Lower `requestsPerSecond` |
| `NO_RESULTS` | The search returned no products |
| `site-page-limit` | The site stopped serving pages before its reported total |
| `UNSUPPORTED_URL` | Use a search, category or product URL |
| `CHARGE_LIMIT_REACHED` | Your run's spending limit was reached |

### FAQ

**Why are some ratings empty?** Some listings don't show them. Turn on product details.

**Am I charged for repeated reviews?** No. Each review is charged once, even when variants share it.

**Do reviews count toward Maximum products?** No. They have their own limits.

**Does it use proxies or a browser?** No. It requests public pages directly at a limited pace.

### About Zapticx

Zapticx builds focused data tools with clear limits and honest output.

### Data source, terms, and privacy

Data comes from public Flipkart pages. You are responsible for how you use it, including compliance with applicable terms and laws. Reviewer names and cities are not collected. Images are returned as links and are not copied.

### Disclaimer

Zapticx is not affiliated with or endorsed by Flipkart. Data may change or be incomplete, and it is provided without warranty.

# Actor input Schema

## `searchQueries` (type: `array`):

One keyword per line. Each keyword is searched separately and paged automatically.

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

Flipkart search, category (/pr) and product (/p/) URLs. Filters in a URL are kept.

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

Flipkart product IDs, the pid value in a product URL.

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

Stop after this many unique products in the run. Reviews have their own limit.

## `maxProductsPerQuery` (type: `integer`):

Stop each keyword or listing URL at this count.

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

Applies to keywords, and to URLs with no sort of their own.

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

Opens each product page for specifications, seller, delivery, variants and manufacturer details. Adds one charge per product.

## `includeSpecifications` (type: `boolean`):

Adds specification tables when the source provides them.

## `includeSeller` (type: `boolean`):

Adds seller name and seller ratings when the source provides them.

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

Adds reviews as separate records. A review shared by product variants is delivered and charged once.

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

Reviews are read 10 per page.

## `maxReviews` (type: `integer`):

Hard limit on review records, and on what they cost.

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

Order in which reviews are read.

## `deduplicateProducts` (type: `boolean`):

A product found by several sources is delivered and charged once.

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

Safety limit on result pages. Flipkart usually serves up to 25 pages per keyword.

## `maxPagesPerCategory` (type: `integer`):

Safety limit on result pages for each URL. Flipkart usually serves up to 25 pages per URL.

## `maxRequests` (type: `integer`):

Hard limit on API calls in one run, retries included.

## `requestsPerSecond` (type: `integer`):

Pace of requests. Lower is gentler on the site.

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

How many keywords, feeds or products run at once.

## `maxRetries` (type: `integer`):

Temporary failures only.

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

How long to wait for one response.

## `debugLog` (type: `boolean`):

Adds detail to the log. Credentials are never logged.

## `dataSource` (type: `string`):

Public pages need no credentials. The Affiliate API is experimental, has not been tested with live credentials, and needs your own Flipkart Affiliate account.

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

Applies to Affiliate API feeds only.

## `categories` (type: `array`):

Affiliate API only. Feed names such as bags_wallets_belts.

## `affiliateTrackingId` (type: `string`):

Your own tracking ID from the Flipkart Affiliate dashboard.

## `affiliateToken` (type: `string`):

Your own API token. It is stored encrypted and never logged.

## Actor input object example

```json
{
  "searchQueries": [
    "wireless earbuds"
  ],
  "startUrls": [],
  "maxItems": 20,
  "maxProductsPerQuery": 20,
  "sort": "relevance",
  "includeDetails": false,
  "includeSpecifications": true,
  "includeSeller": true,
  "includeReviews": false,
  "maxReviewsPerProduct": 10,
  "maxReviews": 200,
  "reviewSort": "MOST_HELPFUL",
  "deduplicateProducts": true,
  "maxPagesPerQuery": 20,
  "maxPagesPerCategory": 20,
  "maxRequests": 500,
  "requestsPerSecond": 2,
  "maxConcurrency": 3,
  "maxRetries": 3,
  "requestTimeoutSecs": 30,
  "debugLog": false,
  "dataSource": "public-pages",
  "inStockOnly": false
}
```

# Actor output Schema

## `products` (type: `string`):

Delivered product records.

## `summary` (type: `string`):

Sources processed, failures, field coverage and why the run stopped.

## `details` (type: `string`):

One clean column per field, without nested specifications. Best for CSV and Excel.

## `reviews` (type: `string`):

Review records, when reviews are turned on.

# 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 = {
    "searchQueries": [
        "wireless earbuds"
    ],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("zapticx/flipkart-product-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchQueries": ["wireless earbuds"],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("zapticx/flipkart-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "wireless earbuds"
  ],
  "startUrls": []
}' |
apify call zapticx/flipkart-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zapticx/flipkart-product-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gREks10yavwSMZh4X/builds/VTOZM4LnX3GAf1mnk/openapi.json
