# Blinkit Product Scraper: Ingredients, Nutrition & Barcodes (`sharath1036/blinkit-product-scraper`) Actor

Scrape Blinkit products with price, MRP, discount, stock, EAN barcodes, full ingredients, parsed nutrition facts, category path, manufacturer, FSSAI license and all images. Search by keyword or paste product URLs.

- **URL**: https://apify.com/sharath1036/blinkit-product-scraper.md
- **Developed by:** [Sharath Pai](https://apify.com/sharath1036) (community)
- **Categories:** E-commerce, AI
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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.

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

## Blinkit Product Scraper: Ingredients, Nutrition & Barcodes

Scrape products from **Blinkit** (India's quick-commerce grocery app) with the data other Blinkit scrapers leave out: **full ingredient lists, nutrition facts parsed into numbers, EAN/UPC barcodes, the full category path, manufacturer, FSSAI license, shelf life and every product image**, alongside the usual price, MRP, discount and stock.

Search by keyword, or paste product URLs. Results download as JSON, CSV, Excel or via API.

### What you get

| Field | Example |
|---|---|
| `name`, `brand`, `quantity` | Pintola All Natural Crunchy Peanut Butter · Pintola · 1 kg |
| `price`, `mrp`, `discount_percent` | 376 · 430 · 12.6 |
| `in_stock`, `inventory` | true · 8 |
| `barcode`, `barcodes` | 8908010900056 |
| `category` › `sub_category` › `sub_sub_category` | Sauces & Spreads › Peanut Butter › Crunchy Peanut Butter |
| `ingredients` | Roasted Peanuts (100%) |
| `nutrition` | `{ "energy_kcal": 628, "protein_g": 28, "total_fat_g": 49.6, "sodium_mg": 143.1, ... }` |
| `nutrition_info` | The original nutrition text, as shown on Blinkit |
| `serving_size`, `allergen_information` | 32 g · Contains Nut. |
| `description`, `key_features` | Product copy |
| `shelf_life`, `country_of_origin` | 12 months · India |
| `manufacturer`, `marketed_by`, `fssai_license`, `customer_care` | Name, address and license number |
| `other_attributes` | Everything else Blinkit lists (flavour, diet preference, dimensions, ...) |
| `images` | All gallery image URLs |
| `rating` | Average rating |
| `search_query`, `search_rank` | The keyword and the product's position in Blinkit's results |
| `store_id`, `location` | The dark store and coordinates used for price and stock |
| `url`, `product_id`, `scraped_at` | |

#### Sample output

```json
{
  "product_id": "179771",
  "name": "Maggi Nutrilicious Veg Atta Noodles Made with Only Atta Flour",
  "brand": "Maggi Nutrilicious",
  "quantity": "290 g",
  "price": 100,
  "mrp": 116,
  "discount_percent": 13.8,
  "in_stock": true,
  "barcode": "8901058022223",
  "category": "Instant & Frozen Food",
  "sub_category": "Noodles",
  "sub_sub_category": "Instant Noodles",
  "ingredients": "Wheat flour (Atta) (86.2%), Palm oil, Iodized salt, ...",
  "nutrition": {
    "energy_kcal": 325, "protein_g": 7.7, "carbohydrates_g": 57.2, "total_sugars_g": 2.5,
    "added_sugars_g": 1.4, "dietary_fiber_g": 4.4, "total_fat_g": 9.2, "saturated_fat_g": 8.5,
    "trans_fat_g": 0.15, "sodium_mg": 1141.8, "iron_mg": 6.62
  },
  "shelf_life": "8 months",
  "manufacturer": "Nestle India Ltd. ...",
  "fssai_license": "10012011000168",
  "images": ["https://cdn.grofers.com/...jpg", "..."],
  "url": "https://blinkit.com/prn/maggi-nutrilicious-veg-atta-noodles-made-with-only-atta-flour/prid/179771"
}
```

### Use cases

- **Nutrition and health apps**: build a food database of Indian packaged products with ingredients, allergens and per-100 g nutrition.
- **Barcode lookup**: map EAN codes to Indian product names, brands, images and ingredients.
- **Price and discount monitoring**: track price, MRP and discount across brands and categories.
- **Brand and shelf analytics**: see where your products rank for a keyword versus competitors.
- **Catalog enrichment**: fill product listings with images, descriptions and regulatory details (FSSAI, manufacturer, country of origin).

### How to use

1. Enter one or more **search keywords** (e.g. `peanut butter`, `atta`, `protein bar`) and/or **product URLs**.
2. Set **max products per keyword**.
3. Optionally set the **delivery location** (latitude/longitude). Blinkit prices and stock vary by dark store; ingredients, nutrition and barcodes don't.
4. Run, then export the dataset.

#### Input example

```json
{
  "searchQueries": ["peanut butter", "dark chocolate"],
  "productUrls": [{ "url": "https://blinkit.com/prn/maggi-noodles/prid/179771" }],
  "maxProductsPerQuery": 200,
  "extractBarcodes": true,
  "lat": 19.076,
  "lon": 72.8777
}
```

### Barcodes

Blinkit doesn't publish barcodes, so this Actor reads them from the product photos. Every code is check-digit validated. A barcode is found when the gallery includes a back-of-pack photo, which is about half of packaged foods and fewer in some categories. When no barcode photo exists, `barcode` is `null`.

### Speed and cost

- With full details and barcodes on: roughly 100 products per minute.
- With details off: price, stock and rank only, much faster.
- You're charged per product saved. Set **Maximum cost per run** in the run options to cap spending; the Actor stops cleanly when it's reached.

### Tips

- Use broad keywords like `snacks`, `beverages` or `personal care` with a high limit to cover a whole category.
- If you only need prices, turn off **Fetch full product details** and **Extract barcodes**.
- The same product may appear under several keywords; deduplicate on `product_id`.

### FAQ

**Is scraping Blinkit legal?** This Actor collects publicly visible product information. You are responsible for how you use the data and for complying with Blinkit's terms and applicable law. Don't use it for personal data.

**Why is a product missing price or stock?** It isn't sold at the dark store for the chosen location. Try a different latitude/longitude.

**Found a bug or need a field?** Open an issue on the Actor's Issues tab.

# Actor input Schema

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

Keywords to search on Blinkit, e.g. 'peanut butter', 'atta', 'shampoo'. Each keyword returns products in Blinkit's search order. Use broad keywords like 'snacks' or 'beverages' with a high limit to collect a whole category.

## `productUrls` (type: `array`):

Blinkit product pages to scrape directly, e.g. https://blinkit.com/prn/maggi-noodles/prid/179771. Bare product IDs also work.

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

Maximum products to collect for each keyword.

## `extractBarcodes` (type: `boolean`):

Scan the product's photos for an EAN-13 / EAN-8 / UPC barcode. Found for products whose gallery includes a back-of-pack photo (typically about half of packaged goods). Adds roughly 0.5 s per product.

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

Fetch ingredients, nutrition, description, category path, manufacturer, FSSAI license, shelf life and the full image gallery. Turn off for a fast price-only run (barcodes need this on).

## `lat` (type: `number`):

Delivery location. Blinkit prices and stock are per dark store, so set this to the area you care about. Defaults to New Delhi. Ingredients, nutrition and barcodes are the same everywhere.

## `lon` (type: `number`):

Delivery location longitude. Defaults to New Delhi.

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

Parallel search pages. Lower it if you see many errors.

## `requestDelayMs` (type: `integer`):

Pause before requesting the next page of a keyword.

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

Blinkit only serves Indian traffic reliably. Apify residential proxy is recommended.

## Actor input object example

```json
{
  "searchQueries": [
    "peanut butter"
  ],
  "maxProductsPerQuery": 100,
  "extractBarcodes": true,
  "fetchDetails": true,
  "lat": 28.6139,
  "lon": 77.209,
  "maxConcurrency": 5,
  "requestDelayMs": 300,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "searchQueries": [
        "peanut butter"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("sharath1036/blinkit-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": ["peanut butter"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("sharath1036/blinkit-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": [
    "peanut butter"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call sharath1036/blinkit-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sharath1036/blinkit-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/3tEXcvrT4noFByjac/builds/JcsIZSO6nJmEKCGW8/openapi.json
