# India Electronics Components Price & Stock Scraper (`prompt_leucite/india-electronics-price-scraper`) Actor

Search Indian maker stores (Robocraze, Evelta, ElectronicsComp, Quartz, ThinkRobotics, Probots and more) for components like ESP32, Arduino, sensors and modules. Get price, stock, SKU and link — or paste a BOM and find the cheapest store split.

- **URL**: https://apify.com/prompt_leucite/india-electronics-price-scraper.md
- **Developed by:** [Vansh Rupesh](https://apify.com/prompt_leucite) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$3.00 / 1,000 product offers

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

## India Electronics Components Price & Stock Scraper

Search **Indian maker and electronics stores** for components like ESP32, Arduino, Raspberry Pi, sensors, displays and power modules. You get the **price (₹), MRP, stock status, SKU and product link** from each store in one table.

You can also paste a **BOM (bill of materials)**. The Actor then finds the **cheapest store for each part**, the **cheapest total if you split the order**, and the **best single store** if you want everything in one order.

### Supported stores

Robocraze · Evelta · ElectronicsComp · Quartz Components · ThinkRobotics · Probots

You can add **any other store** under *Extra store URLs*. The Actor detects Shopify, WooCommerce, BigCommerce and OpenCart stores automatically, and reads standard product data from most other shops. Stores that block automated access aren't supported.

### Who it's for

- **Makers and students** pricing a project before ordering
- **College labs and robotics clubs** comparing quotes for bulk orders
- **Hardware startups** tracking component prices and stock over time
- **Resellers** monitoring competitor pricing

### Input examples

**Search mode**

```json
{ "mode": "search", "queries": ["ESP32 DevKit", "DHT22 sensor"], "inStockOnly": true }
```

**BOM mode**

```json
{
  "mode": "bom",
  "bomText": "ESP32 DevKit V1, 2\nDHT22 sensor x3\n1 x 0.96 inch OLED"
}
```

BOM lines can be written as `part, qty`, `part x qty`, `qty x part` or `2xESP32`. Sizes such as `128 x 64` are not read as quantities.

### Output

One row per offer:

| field | example |
|---|---|
| query | DHT22 sensor |
| store | Quartz Components |
| title | DHT22 Temperature and Humidity Sensor Module |
| price | 92 (₹, including GST) |
| mrp | 101 |
| listedPrice | 92 (the price as shown on the store) |
| gstAdded | false (true when the store lists prices ex-GST and 18% was added) |
| inStock | true (null when the store doesn't say) |
| sku | the store's SKU, when it shows one |
| url | https://quartzcomponents.com/products/dht22-temprature-and-humidity-sensor-module |
| relevance | 1.0 (how well the title matches the query, 0–1) |

In BOM mode a `bom-summary` row is added. It is also saved to the key-value store as `BOM_SUMMARY` and contains:
`cheapestSplitTotal`, `bestSingleStore`, `singleStoreTotals`, a per-line `cheapest` offer, `notFound` and `outOfStockEverywhere`.

### Pricing

Pay per result: you are charged only for product rows returned. The BOM summary row is free.

### Use with AI agents (MCP)

This Actor works as a tool through the Apify MCP server, so Claude and other AI assistants can call it. For example: *"Find the cheapest place in India to buy 2 ESP32s and 3 DHT22s."*

### Notes

- `price` includes GST so stores compare fairly. Where a store lists prices ex-GST (e.g. Evelta), 18% is added and `gstAdded` is `true`. Shipping is not included.
- Matching is by title keywords and part numbers. Accessories (cases, backboards) and other chip variants (e.g. ESP32-S3 when you searched ESP32) are filtered out by default. Check the link before you order, especially for generic parts.
- Only public product listing data is collected. No personal data is collected.

# Actor input Schema

## `mode` (type: `string`):

Search: list offers for each query. BOM: also compute the cheapest store split for a parts list.

## `queries` (type: `array`):

Used in Search mode. One component per entry.

## `bomText` (type: `string`):

Used in BOM mode. Formats: 'ESP32 DevKit, 2' or 'DHT22 x3' or '5 x 10k resistor'.

## `bomItems` (type: `array`):

Alternative to BOM text for API users: \[{"query": "ESP32", "qty": 2}].

## `stores` (type: `array`):

Leave empty to search all supported stores.

## `customStoreUrls` (type: `array`):

Any other Shopify/WooCommerce/standard store, e.g. https://example.in

## `maxResultsPerStore` (type: `integer`):

Shopify stores return at most 10 results per query.

## `minRelevance` (type: `number`):

How closely a product title must match the query. 0.6 is a good default; raise it if you get accessories or wrong models.

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

Only return offers that aren't marked out of stock. Offers whose stock is unknown are kept. In BOM mode, out-of-stock parts are still reported in the summary.

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

Searches run in parallel across all stores. Each store also gets at most 3 requests at a time.

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

Datacenter proxy is usually enough. Use RESIDENTIAL with country IN if a store blocks you.

## Actor input object example

```json
{
  "mode": "search",
  "queries": [
    "ESP32 DevKit",
    "DHT22 sensor",
    "LM2596 buck converter"
  ],
  "bomText": "ESP32 DevKit V1, 1\nDHT22 sensor, 2\n0.96 inch OLED, 1",
  "maxResultsPerStore": 5,
  "minRelevance": 0.6,
  "inStockOnly": false,
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `offers` (type: `string`):

One row per product offer (price incl. GST, stock, SKU, link). In BOM mode the last row is the BOM summary.

## `bomSummary` (type: `string`):

BOM mode only: cheapest split, best single store and per-line picks.

## `storeStatus` (type: `string`):

Platform detected, offers found and errors for each store.

# 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 = {
    "queries": [
        "ESP32 DevKit",
        "DHT22 sensor",
        "LM2596 buck converter"
    ],
    "bomText": `ESP32 DevKit V1, 1
DHT22 sensor, 2
0.96 inch OLED, 1`,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("prompt_leucite/india-electronics-price-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 = {
    "queries": [
        "ESP32 DevKit",
        "DHT22 sensor",
        "LM2596 buck converter",
    ],
    "bomText": """ESP32 DevKit V1, 1
DHT22 sensor, 2
0.96 inch OLED, 1""",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("prompt_leucite/india-electronics-price-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 '{
  "queries": [
    "ESP32 DevKit",
    "DHT22 sensor",
    "LM2596 buck converter"
  ],
  "bomText": "ESP32 DevKit V1, 1\\nDHT22 sensor, 2\\n0.96 inch OLED, 1",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call prompt_leucite/india-electronics-price-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,prompt_leucite/india-electronics-price-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/INviYRfbmHdplhHXi/builds/2AtDVf5W41DXWg3MB/openapi.json
