# IndiaMART Listings Scraper (`piotrv1001/indiamart-listings-scraper`) Actor

The IndiaMART Listings Scraper extracts product listings and enriched detail records from IndiaMART category, city, and search pages, capturing names, prices, images, full spec tables, supplier GST/IEC verification, ratings, and exports-to countries — ideal for B2B sourcing and pricing analysis.

- **URL**: https://apify.com/piotrv1001/indiamart-listings-scraper.md
- **Developed by:** [FalconScrape](https://apify.com/piotrv1001) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 product listings

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 🛒 IndiaMART Listings Scraper

Extract product listings, suppliers, and prices from **[IndiaMART](https://www.indiamart.com/)** — India's largest B2B marketplace. The **IndiaMART Listings Scraper** turns category pages, city-category pages, search queries, and individual product pages into clean, structured JSON for sourcing, pricing analysis, and supplier discovery.

### ✨ Features

- 🏷️ **Rich product data**: name, price, MOQ, image set, city/state, top specs, and direct `/proddetail/` URL.
- 🏢 **Supplier intelligence on the detail layer**: company name, GST/IEC verification flags, TrustSeal status, supplier rating, years of export experience, and exports-to countries.
- 🔍 **Flexible inputs**: mix and match `impcat` category pages, city-category pages, full search queries, and individual product URLs in a single run.
- 🎚️ **Two-tier extraction**: cheap shallow listings by default; toggle `includeDetails` to fetch full product detail pages with the complete spec table, seller `Basic_Information`, and category IDs.
- ⚡ **Fast & lightweight**: pure HTTP + Cheerio (no headless browser), so runs are cheap and fast.

### 🛠️ How It Works

1. **Provide inputs** — any combination of:
   - `startUrls`: `impcat`, city-category, search, or `proddetail` URLs.
   - `searchQueries`: free-text keywords (e.g. `"led bulb"`) — fetched via `dir.indiamart.com/search.mp` which redirects to `export.indiamart.com`.
2. **Pick your depth** — leave `includeDetails: false` for fast shallow scraping, or flip it on to enrich every listing card with its full product-detail record.
3. **Cap your run** — set `maxProducts` to limit how many records the actor pushes.
4. **Run the actor** — results stream into the dataset and can be downloaded as JSON, CSV, Excel, or HTML.

### ⚙️ Input

Configure the run via the Apify Console form or by passing JSON to the API.

| Field | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `startUrls` | `Array<{ url: string }>` | no\* | — | Any mix of IndiaMART URLs: `impcat` category pages (`https://dir.indiamart.com/impcat/led-bulb.html`), city-category pages (`https://dir.indiamart.com/delhi/led-bulb.html`), product detail pages (`https://www.indiamart.com/proddetail/...`), or search URLs (`https://dir.indiamart.com/search.mp?ss=...`). |
| `searchQueries` | `string[]` | no\* | `[]` | Free-text search keywords. Each query is fetched via `dir.indiamart.com/search.mp?ss=<query>` and yields rich export-search records (price, MOQ, GST/IEC, seller rating, exports-to). |
| `includeDetails` | `boolean` | no | `false` | When `true`, every listing card discovered on a category/search page is also fetched as a full product detail page (JSON-LD + `__NEXT_DATA__` extraction with the complete spec table, seller `Basic_Information`, and category IDs). |
| `includeRelatedCategories` | `boolean` | no | `true` | IndiaMART has no real pagination, so to fulfil `maxProducts` from a single category page the scraper follows up to 8 related-category links (one hop only — no transitive fan-out). Disable for strict single-page extraction. |
| `maxProducts` | `integer` | no | `50` | Maximum number of records pushed to the dataset. Use `0` for unlimited. |
| `proxyConfiguration` | `object` | no | `{ "useApifyProxy": false }` | Standard Apify proxy configuration. IndiaMART does not require a proxy for moderate volumes; enable it if you hit rate limits. |

\* At least one of `startUrls` or `searchQueries` must be provided.

#### Example input

```json
{
    "startUrls": [
        { "url": "https://dir.indiamart.com/impcat/led-bulb.html" },
        { "url": "https://dir.indiamart.com/delhi/led-bulb.html" }
    ],
    "searchQueries": ["brick making machine", "industrial inverter"],
    "includeDetails": true,
    "maxProducts": 200
}
```

### 📊 Sample Output Data

#### Shallow listing (from a category or search page)

```json
{
    "source": "impcat",
    "url": "https://www.indiamart.com/proddetail/white-led-bulb-8034060848.html",
    "id": "8034060848",
    "name": "Compact White LED Bulb, 6 W - 10 W, Voltage: 230 V",
    "price": { "raw": "₹ 380", "value": 380, "currency": "INR", "unit": "Piece" },
    "image": "https://5.imimg.com/data5/SELLER/Default/2023/8/.../white-led-bulb-500x500.jpg",
    "city": "Chennai",
    "seller": {
        "name": "Lakshmi Corporations",
        "catalogUrl": "https://www.lakshmicorporations.com/"
    },
    "specs": {
        "Brand": "Compact",
        "Voltage": "230 V",
        "Usage/Application": "Home",
        "Color": "White, Blue, Green, Pink, Red, Yellow"
    },
    "scrapedAt": "2026-05-19T16:33:04.161Z"
}
```

#### Enriched product detail (`/proddetail/...`)

```json
{
    "source": "proddetail",
    "url": "https://www.indiamart.com/proddetail/brick-making-machine-21492440397.html",
    "id": "21492440397",
    "name": "Brick Making Machine",
    "price": { "raw": "8500000", "value": 8500000, "currency": "INR" },
    "image": "https://5.imimg.com/data5/SELLER/Default/2026/5/.../brick-making-machine-500x500.jpg",
    "seller": { "name": "Revomac Industries", "glusrid": "33717397" },
    "specs": {
        "Automation Grade": "Semi Automatic, Automatic",
        "Method": "Autoclave Aerated",
        "Brick Type": "Hollow, Solid, Paver",
        "Brand": "Revomac",
        "Warranty": "1 Year",
        "Ships from": "Ahmedabad"
    },
    "category": {
        "mcatId": "5385",
        "mcatName": "Brick Making Machines",
        "catId": "151",
        "catName": "Building & Construction Machines"
    },
    "business": { "type": "Manufacturer" },
    "city": "Ahmedabad",
    "state": "Gujarat"
}
```

#### Export search result (rich, with GST/IEC verification)

```json
{
    "source": "search",
    "id": "25490838955",
    "name": "LED Bulb DOME 30W / 40W/ 50W",
    "price": { "raw": "₹ 145.00", "value": 145, "currency": "INR", "unit": "Piece", "moq": 5 },
    "state": "Haryana",
    "seller": {
        "name": "Aarnova Technologies Private Limited",
        "rating": 4.1,
        "ratingCount": 280,
        "isVerified": true,
        "isGSTVerified": true,
        "isIECVerified": true,
        "exportSince": "21+ yrs",
        "exportsTo": ["Nepal", "Bangladesh", "Saudi Arabia"]
    },
    "specs": { "Base Type": "B22", "Light Color": "Cool Daylight" }
}
```

### 💰 Pricing

Pay-Per-Event — you only pay for what you extract:

- **`product-listing`** — shallow card from a category/city/search page.
- **`item-detail`** — fully-enriched record from a `/proddetail/` page (spec table, seller, category IDs).

Disable `includeDetails` if you only need basic listings to keep costs minimal.

Power up your B2B sourcing, supplier discovery, and pricing intelligence with the **IndiaMART Listings Scraper** today! 🚀

# Actor input Schema

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

IndiaMART URLs to scrape. Supports impcat category pages (e.g. https://dir.indiamart.com/impcat/led-bulb.html), city-category pages (https://dir.indiamart.com/delhi/led-bulb.html), product detail pages (https://www.indiamart.com/proddetail/...) and search URLs (https://dir.indiamart.com/search.mp?ss=...).

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

Free-text search terms. Each is queried via https://dir.indiamart.com/search.mp?ss=<query> which redirects to export.indiamart.com.

## `maxProducts` (type: `integer`):

Maximum number of product/listing records to push to the dataset. 0 = unlimited.

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

When enabled, every listing card discovered on a category/search page is also fetched as a product detail page (JSON-LD + **NEXT\_DATA** extraction).

## `includeRelatedCategories` (type: `boolean`):

IndiaMART does not support pagination. When enabled, the scraper follows up to 8 related-category links from each user-supplied impcat page (one hop only — no transitive fan-out) so that maxProducts can be satisfied across multiple closely-related categories. Disable for strictly single-page extraction.

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

Proxy configuration. IndiaMART does not require proxies for moderate volumes; useApifyProxy is off by default.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://dir.indiamart.com/impcat/led-bulb.html"
    }
  ],
  "searchQueries": [],
  "maxProducts": 50,
  "includeDetails": false,
  "includeRelatedCategories": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "startUrls": [
        {
            "url": "https://dir.indiamart.com/impcat/led-bulb.html"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/indiamart-listings-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 = { "startUrls": [{ "url": "https://dir.indiamart.com/impcat/led-bulb.html" }] }

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/indiamart-listings-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 '{
  "startUrls": [
    {
      "url": "https://dir.indiamart.com/impcat/led-bulb.html"
    }
  ]
}' |
apify call piotrv1001/indiamart-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/indiamart-listings-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/y5lb51vDHkvd3x1vM/builds/B8moI6fHlKDcWVEKB/openapi.json
