# IndiaMART Scraper - Suppliers, Phone, GST & Prices (`crawloop/indiamart-scraper`) Actor

Scrape IndiaMART B2B suppliers and products for India sourcing and lead generation. Export company name, phone, GST verified, price, MOQ, specs and ratings from keywords, categories or URLs — IndiaMART API alternative.

- **URL**: https://apify.com/crawloop/indiamart-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** E-commerce, Lead generation, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.35 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Scraper — Suppliers, Phone, GST & Prices

> **Disclaimer:** Unofficial integration for publicly accessible sources. Trademarks belong to their respective owners. Provided for informational use only; users must comply with applicable platform terms and laws.

> **Crawloop Global Sourcing Suite** — B2B supplier directories for Europe and India.

| Europages (Europe) | WLW (DACH) | IndiaMART (India) |
| :--- | :--- | :--- |
| [Europages Scraper](https://apify.com/crawloop/europages-scraper) | [WLW Scraper](https://apify.com/crawloop/wlw-scraper) | **IndiaMART Scraper** ◄── you are here |

**IndiaMART Scraper** for Apify — scrape **IndiaMART suppliers and products** into clean JSON without a public IndiaMART API. Extract **company name, phone, GST verified, price, MOQ, product specs, ratings, response rate, verified-exporter flags, and profile URLs** from keywords, category pages, product detail pages, and supplier storefronts.

Built for **India B2B lead generation**, **manufacturer / exporter discovery**, **procurement shortlists**, **wholesale price monitoring**, and **CRM enrichment**. Run from the Console or with **Python**, **Node.js**, **cURL**, or **MCP** / AI assistants. Fast HTTP crawl via `curl_cffi` (directory `__INITIAL_STATE__`) — no headless browser and no login for public fields.

### When to use this Actor

- You need **IndiaMART supplier or product data** as structured dataset rows
- You want **keyword search**, **category / city-category URLs**, **product PDPs**, or **supplier profiles**
- You prefer a **fast, browser-free** IndiaMART crawl on Apify
- You need **phone + GST verified + rating** signals from public directory cards
- You want an **India ↔ Europe sourcing chain** with Europages / WLW siblings

### When not to use this Actor

- **Guaranteed personal mobile or email on every row** — IndiaMART often shows call-tracking numbers; “View Mobile Number” reveal flows are not automated
- **Sending RFQs / inquiries** through IndiaMART forms — read-only extraction only
- **Transactional MRO catalog prices with HSN / stock** — use a catalog-focused industrial Actor instead
- **Non-IndiaMART directories** — use a source-specific Actor (e.g. Europages, WLW)

### Key features

- **IndiaMART API alternative** — structured dataset instead of manual browsing
- **Keyword → directory** — auto-resolves queries to `impcat` / city-category pages (~28 organic cards/page)
- **Category & start URLs** — `impcat`, city-category, product detail, supplier storefront
- **Lead-ready listing fields** — phone, GST verified, price, ISQ specs, rating, response rate, exporter years, tier
- **Optional PDP enrichment** — Next.js product payloads
- **Optional supplier enrichment** — storefront factsheet (GSTIN when shown, TrustSEAL, turnover, business type)
- **Filters** — GST verified, verified exporters, min rating, cities
- **PLA toggle** — include or skip Premium Listing Ads
- **Deduped push** — unique by product / profile id within a run
- **Streaming results** — dataset rows appear while the run is in progress
- **Lightweight & resilient** — `curl_cffi` Chrome TLS fingerprinting, optional proxy rotation

### Use cases

| Use case | What you get |
| :--- | :--- |
| **Find Indian manufacturers** | Keyword / category listings with exporter & GST signals |
| **Qualify suppliers** | Phone, GST verified, rating, response rate, member tenure |
| **Price & MOQ research** | Listed price text, numeric price, specs / MOQ when published |
| **Territory mapping** | City-scoped directory URLs across India |
| **Export partner discovery** | Verified-exporter filter and years |
| **CRM enrichment** | Profile URL + website for follow-up |

### Input parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchQueries` | Array | `["stainless steel pipes"]` | Keywords → IndiaMART directory pages. |
| `categorySlugs` | Array | `[]` | Slugs like `ss-pipes`, `industrial-valves`. |
| `startUrls` | Array | `[]` | Category / city-category / product / supplier URLs. |
| `cities` | Array | `[]` | Optional city filter (server-side for searches). |
| `maxItems` | Integer | `50` | Max dataset rows. |
| `maxPages` | Integer | `3` | Max directory pages per keyword / URL. |
| `enrichProducts` | Boolean | `false` | Fetch product detail pages. |
| `enrichSuppliers` | Boolean | `false` | Fetch supplier storefront pages. |
| `includePla` | Boolean | `true` | Include PLA / sponsored cards. |
| `onlyGstVerified` | Boolean | `false` | Keep GST-verified only. |
| `onlyVerifiedExporters` | Boolean | `false` | Keep verified exporters only. |
| `minRating` | Number | — | Minimum rating 0–5. |
| `requestDelaySecs` | Number | `0.4` | Delay between HTTP requests. |
| `proxyConfiguration` | Object | off | Optional Apify Proxy. |

#### Example — keyword supplier list

```json
{
  "searchQueries": ["stainless steel pipes"],
  "maxItems": 100,
  "maxPages": 5,
  "onlyGstVerified": true,
  "includePla": true
}
```

#### Example — Mumbai category + enrichment

```json
{
  "startUrls": [
    "https://dir.indiamart.com/mumbai/ss-pipes.html"
  ],
  "maxItems": 40,
  "maxPages": 2,
  "enrichProducts": true,
  "enrichSuppliers": true
}
```

#### Example — multi-city keyword run

```json
{
  "searchQueries": ["industrial valves"],
  "cities": ["mumbai", "pune", "ahmedabad"],
  "maxItems": 90,
  "maxPages": 2,
  "minRating": 4
}
```

### Output

One dataset row per listing, enriched product, or supplier. `recordType` is `listing`, `product`, `supplier`, or `error`.

#### Output fields

| Field | Description |
| :--- | :--- |
| `recordType` | `listing` | `product` | `supplier` | `error` |
| `productName` / `productUrl` / `productId` | Product identity |
| `companyName` / `profileUrl` / `supplierId` | Supplier identity |
| `phone` | Public call-tracking phone when shown |
| `priceText` / `priceValue` / `currency` | Listed price |
| `minOrderQuantity` / `specifications` | MOQ and ISQ specs |
| `gstVerified` / `gstNumber` | GST signals (full GSTIN often needs enrichment) |
| `rating` / `ratingCount` / `responseRate` | Trust / responsiveness |
| `isVerifiedExporter` / `verifiedExporterYears` | Export verification |
| `city` / `state` / `country` | Location |
| `memberSince` / `supplierTier` | Tenure and tier badge |
| `searchQuery` / `page` / `scrapedAt` | Provenance |

#### Sample listing row

```json
{
  "source": "indiamart",
  "recordType": "listing",
  "listingType": "organic",
  "productId": "24198698788",
  "productName": "Navneet 3 Inch Stainless Steel Pipes, Thickness: 4 mm",
  "productUrl": "https://www.indiamart.com/proddetail/stainless-steel-pipes-24198698788.html",
  "companyName": "Navneet Metal Corporation",
  "profileUrl": "https://www.indiamart.com/navneetmetalcorporation/",
  "phone": "8047522773",
  "priceText": "₹ 1,000/Kg",
  "priceValue": 1000,
  "currency": "INR",
  "city": "Mumbai",
  "gstVerified": true,
  "rating": 4.6,
  "ratingCount": 28,
  "responseRate": 88,
  "memberSince": "20 yrs",
  "isVerifiedExporter": true,
  "verifiedExporterYears": 22,
  "searchQuery": "stainless steel pipes"
}
```

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/indiamart-scraper').call({
  searchQueries: ['stainless steel pipes'],
  maxItems: 50,
  maxPages: 2,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 3));
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("crawloop/indiamart-scraper").call(
    run_input={
        "searchQueries": ["stainless steel pipes"],
        "maxItems": 50,
        "maxPages": 2,
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item.get("companyName"), item.get("phone"), item.get("priceText"))
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/crawloop~indiamart-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["stainless steel pipes"],"maxItems":50,"maxPages":2}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store ID / name.

Example prompts:

- "Run IndiaMART Scraper for stainless steel pipes in Mumbai and return the top 20 rows as JSON"
- "Scrape GST-verified IndiaMART suppliers for industrial valves with rating ≥ 4"
- "Chain IndiaMART Scraper then Europages Scraper to compare Indian and EU valve manufacturers"

### Suite next step

After you shortlist Indian suppliers here, map EU / DACH counterparts with [Europages Scraper](https://apify.com/crawloop/europages-scraper) or [WLW Scraper](https://apify.com/crawloop/wlw-scraper).

### FAQ

**Do I need an IndiaMART account?**\
No. The Actor reads publicly visible directory and page data.

**Why is `gstNumber` often empty on listings?**\
Directory cards usually expose a GST *verified* flag. Full GSTIN is more often available after supplier / product enrichment when IndiaMART publishes it.

**Can I get every supplier’s personal mobile?**\
No. Public cards may include a call-tracking number; login / “View Mobile Number” flows are not automated.

**How do keywords map to results?**\
Queries are resolved to IndiaMART category directory slugs (e.g. `stainless steel pipes` → `ss-pipes`) via abbreviation rules and IndiaMART suggest. Prefer exact `categorySlugs` / `impcat` URLs when you know them.

**How is this different from a generic web scraper?**\
This Actor returns normalized IndiaMART supplier/product rows (phone, GST verified, price, city, profile URL) ready for sourcing and CRM workflows — not raw HTML.

**Can I scrape IndiaMART with Python or Node.js?**\
Yes. Use the Apify API clients (examples above) or call the Actor from MCP-compatible AI tools.

# Actor input Schema

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

Product / supplier keywords (e.g. stainless steel pipes, industrial valves, LED lights). Each query is slugified to an IndiaMART category directory and paginated (~28 listings/page).

## `categorySlugs` (type: `array`):

IndiaMART directory slugs from /impcat/{slug}.html (e.g. ss-pipes, industrial-valves, led-lights).

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

IndiaMART URLs: category (dir.indiamart.com/impcat/…), city-category (dir.indiamart.com/mumbai/…), product (/proddetail/…), or supplier storefront (/company-slug/).

## `cities` (type: `array`):

Optional city filter. With searchQueries, uses city-scoped directory URLs (e.g. /mumbai/ss-pipes.html). Also applied client-side on city field.

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

Stop after this many dataset items (listings, products, suppliers).

## `maxPages` (type: `integer`):

Maximum pages per keyword / category (~28 organic listings per page).

## `enrichProducts` (type: `boolean`):

Fetch each product detail page for richer company / product fields from Next.js payloads.

## `enrichSuppliers` (type: `boolean`):

Fetch supplier storefront pages for factsheet fields (GSTIN when shown, TrustSEAL, turnover, business type).

## `includePla` (type: `boolean`):

Include Premium Listing Ads from the directory widget.

## `onlyGstVerified` (type: `boolean`):

Keep only suppliers with GST verified flag.

## `onlyVerifiedExporters` (type: `boolean`):

Keep only suppliers marked as verified exporters.

## `minRating` (type: `number`):

Drop rows below this supplier rating (0–5). Leave empty for no filter.

## `requestDelaySecs` (type: `number`):

Pause between HTTP requests on the same session.

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

Optional Apify Proxy. Directory pages usually work without proxy; enable if you see blocks.

## Actor input object example

```json
{
  "searchQueries": [
    "stainless steel pipes"
  ],
  "startUrls": [
    "https://dir.indiamart.com/impcat/ss-pipes.html"
  ],
  "cities": [],
  "maxItems": 50,
  "maxPages": 3,
  "enrichProducts": false,
  "enrichSuppliers": false,
  "includePla": true,
  "onlyGstVerified": false,
  "onlyVerifiedExporters": false,
  "requestDelaySecs": 0.4,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Default dataset items.

# 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": [
        "stainless steel pipes"
    ],
    "startUrls": [
        "https://dir.indiamart.com/impcat/ss-pipes.html"
    ],
    "cities": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/indiamart-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": ["stainless steel pipes"],
    "startUrls": ["https://dir.indiamart.com/impcat/ss-pipes.html"],
    "cities": [],
}

# Run the Actor and wait for it to finish
run = client.actor("crawloop/indiamart-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": [
    "stainless steel pipes"
  ],
  "startUrls": [
    "https://dir.indiamart.com/impcat/ss-pipes.html"
  ],
  "cities": []
}' |
apify call crawloop/indiamart-scraper --silent --output-dataset

```

## MCP server setup

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