# IndiaMART Scraper - Suppliers, Products & B2B Leads (`scrapesage/indiamart-scraper`) Actor

Scrape IndiaMART, India's #1 B2B marketplace: supplier company name, phone, city/state, GST & verification status, ratings, membership tier, product names, prices, MOQ & specs. Richest no-browser supplier & product leads with lead scoring and monitoring.

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

## Pricing

from $6.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/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, Products & B2B Leads (Phones, GST & Prices)

Extract **complete supplier and product data from IndiaMART**, India's #1 B2B marketplace (10M+ suppliers) — the fields other scrapers leave empty: **supplier company name, a contact phone, full city/state, GST & verification status, membership tier, ratings, product prices, MOQ/unit and spec attributes**. Turn every category into a deduplicated **B2B supplier-lead list** with a 0–100 lead score, and optionally enrich each supplier from its storefront (**nature of business, year of establishment, employees, annual turnover, GST number, full postal address**).

No login, no cookies, no browser, no API key — fast JSON extraction from IndiaMART's own server-rendered category pages.

### Why this IndiaMART scraper?

Most IndiaMART scrapers return just product names and a price. This actor reads IndiaMART's embedded category state and ships the **richest dataset in the category** — product *and* supplier in one record, plus a deduplicated supplier-lead view:

| Data | Typical scrapers | This actor |
|---|---|---|
| Supplier company name + contact phone | partial | ✅ |
| City / state / address | partial | ✅ |
| GST-verified / mobile-verified / email-verified flags | ❌ | ✅ |
| Membership tier (Leader/Star…) + years on IndiaMART | ❌ | ✅ |
| Supplier rating + review count | ❌ | ✅ |
| Product price, unit/MOQ, spec attributes | partial | ✅ |
| Deduplicated supplier leads + 0–100 lead score | ❌ | ✅ |
| Storefront firmographics (nature of business, year, employees, turnover, GST no.) | ❌ | ✅ opt-in |
| Full product description, all images, spec table | ❌ | ✅ opt-in |
| City-level filtering & only-new monitoring | ❌ | ✅ |

### Use cases

- **B2B lead generation** — build targeted supplier/manufacturer lists for any product category and Indian city, complete with company name, phone, location, GST and verification signals. Score by `leadScore` and contact directly.
- **Sourcing & procurement** — compare suppliers by price, MOQ, ratings, tenure and verification before reaching out; export to your sourcing sheet.
- **Market & price intelligence** — track price ranges, supplier density and category trends across cities (Mumbai, Delhi, Ahmedabad, Rajkot, Chennai…).
- **Competitor & catalog monitoring** — schedule recurring runs with monitor mode to capture only newly listed suppliers or products in a category.
- **CRM & sales enrichment** — feed verified Indian supplier firmographics into your CRM or data warehouse.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **IndiaMART Scraper**, enter search terms (and optionally cities), and click **Start**.
3. Watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "mode": "supplierLeads",
    "searchTerms": ["industrial valves", "submersible pump"],
    "cities": ["Mumbai", "Ahmedabad"],
    "maxItems": 100,
    "includeSupplierDetails": true,
    "withPhoneOnly": true,
    "minLeadScore": 40
}
```

- **mode** — `products` (one record per product listing, with the inline supplier) or `supplierLeads` (one deduplicated record per supplier/manufacturer).
- **searchTerms** — product/category keywords. Each maps to an IndiaMART category page (e.g. `industrial valves` → `dir.indiamart.com/impcat/industrial-valves.html`).
- **cities** — optional Indian cities; each term is crawled per city for location-targeted leads.
- **categoryUrls / startUrls** — paste IndiaMART category, supplier-storefront, or product URLs; each is auto-routed.
- **supplierUrls** — storefront URLs or bare slugs (`risansi`) → full supplier-lead records.
- **productUrls** — `/proddetail/…` URLs → full product detail records.
- **includeProductDetails** *(default false)* — open each product page for full description, all images, and the spec table.
- **includeSupplierDetails** *(default false)* — open each supplier storefront for nature of business, legal status, year of establishment, employees, annual turnover, GST number and full postal address.
- **withPhoneOnly / gstVerifiedOnly / minLeadScore / membershipTiers** — output filters.
- **monitorMode** — emit only suppliers/products not seen in previous runs (pairs with Schedules).

### Output

One record per product (`type: "product"`) and/or one per supplier (`type: "supplierLead"`):

```json
{
    "type": "supplierLead",
    "supplierId": "20902177",
    "supplierName": "Risansi Industries Limited",
    "supplierSlug": "risansi",
    "storefrontUrl": "https://www.indiamart.com/risansi/",
    "phone": "08047547416",
    "city": "Kanpur",
    "state": "Uttar Pradesh",
    "country": "India",
    "address": "Kanpur, Dist. Kanpur Nagar",
    "membershipTier": "LEADER",
    "rating": 2.9,
    "reviewCount": 8,
    "gstVerified": true,
    "mobileVerified": true,
    "emailVerified": true,
    "memberSince": "10 yrs",
    "yearsOnIndiaMART": 10,
    "natureOfBusiness": "Manufacturer",
    "legalStatus": "Public Limited Company",
    "yearEstablished": "1996",
    "employees": "51 to 100 People",
    "annualTurnover": "₹10 - 25 Crore",
    "gstNumber": "09AABCR1234A1Z5",
    "fullAddress": "Kanpur - 208012, Uttar Pradesh, India",
    "postalCode": "208012",
    "sampleProducts": [{ "name": "Online Blind Valve (Actuator)", "priceText": "₹ 65,000/Piece" }],
    "leadScore": 88,
    "category": "Industrial Valves",
    "searchKeyword": "industrial valves",
    "searchCity": "Kanpur",
    "scrapedAt": "2026-06-24T15:00:00.000Z"
}
```

A `product` record additionally carries `productName`, `productUrl`, `image`, `priceText`/`priceValue`/`currency`/`unit`, and `attributes` (Valve Type, Material, Brand, Country of Origin…), plus the same inline supplier fields.

### Automate & schedule

Run this actor on autopilot and pull results into your stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run hourly/daily/weekly with `monitorMode` to capture only newly listed suppliers/products in a category or city.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/indiamart-scraper').call({
    mode: 'supplierLeads',
    searchTerms: ['cnc machine'],
    cities: ['Rajkot'],
    maxItems: 100,
    includeSupplierDetails: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} IndiaMART supplier leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new supplier leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored category finds new suppliers.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find GST-verified industrial-valve manufacturers in Mumbai with phone numbers" and let it run this scraper.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **B2B sourcing & lead-gen stack**:

- **[Made-in-China Scraper](https://apify.com/scrapesage/made-in-china-scraper)** — Chinese suppliers, products, certifications & B2B leads.
- **[Alibaba Scraper](https://apify.com/scrapesage/alibaba-scraper)** — global B2B wholesale: tiered prices, MOQ, certs & supplier leads.
- **[TradeIndia Scraper](https://apify.com/scrapesage/tradeindia-scraper)** — Indian B2B suppliers & manufacturers with contacts.
- **[AliExpress Scraper](https://apify.com/scrapesage/aliexpress-scraper)** — consumer dropshipping products, prices & suppliers.
- **[Banggood Scraper](https://apify.com/scrapesage/banggood-scraper)** — cross-border e-commerce products, prices & reviews.
- **[Flipkart Scraper](https://apify.com/scrapesage/flipkart-scraper)** — India's #1 consumer marketplace: products, prices & sellers.
- **[Website Contact Scraper](https://apify.com/scrapesage/website-contact-scraper)** — emails, phones & socials from any supplier website.
- **[LinkedIn Company Scraper](https://apify.com/scrapesage/linkedin-company-scraper)** — firmographics & B2B company leads.

### Tips

- **Search terms are categories.** `industrial valves`, `submersible pump`, `leather gloves`, `cnc machine` map to IndiaMART category pages. For exact targeting, paste a category URL into `categoryUrls`.
- **City breadth.** Add `cities` to crawl each category per city — a clean way to scale beyond one category page and target a region.
- **Cost control.** Product/supplier detail fetches are opt-in and deduplicated per supplier; leave them off for fast, cheap listing leads.
- **Proxies.** Keep the default Apify Residential proxy in India — IndiaMART geo-restricts foreign and datacenter IPs.

### FAQ

**Do I need an IndiaMART login or API key?** No. This actor reads IndiaMART's public, server-rendered category pages — no login, cookies, browser, or key.

**Where does the phone number come from?** It's the supplier contact number IndiaMART publishes on its category listing (the same number a buyer sees). Suppliers who don't publish one are `null`.

**Can I get supplier emails?** IndiaMART routes buyer contact through the platform and rarely exposes a raw email. For emails, run supplier websites through the **[Website Contact Scraper](https://apify.com/scrapesage/website-contact-scraper)**.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor new suppliers automatically?** Enable `monitorMode` and create a [Schedule](https://docs.apify.com/platform/schedules); only suppliers/products not seen before are emitted.

**A field is null — why?** Some suppliers genuinely don't publish a rating, review count, or product brochure; storefront firmographics and product details only fill in when their opt-in toggles are on. Fields are `null` only when the data isn't shown, never because the scraper skipped them.

**Is scraping IndiaMART legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (e.g. GDPR/CCPA for personal data) and IndiaMART's terms.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

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

products = one record per product listing (with the inline supplier: company, phone, city, price, specs). supplierLeads = one deduplicated record per supplier/manufacturer (B2B lead, optionally enriched from the storefront). Start/category URLs and supplier/product URLs are auto-routed regardless of this setting.

## `searchTerms` (type: `array`):

Product/category keywords. Each maps to an IndiaMART category page, e.g. <code>industrial valves</code> → <code>dir.indiamart.com/impcat/industrial-valves.html</code>. Examples: <code>submersible pump</code>, <code>leather gloves</code>, <code>cnc machine</code>, <code>cotton fabric</code>, <code>led light</code>. Each term runs separately.

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

Optional Indian cities to filter suppliers by, e.g. <code>Mumbai</code>, <code>Delhi</code>, <code>Ahmedabad</code>, <code>Rajkot</code>. Each search term is crawled per city (<code>dir.indiamart.com/\<city>/\<category>.html</code>). Leave empty for all-India results.

## `categoryUrls` (type: `array`):

Paste IndiaMART category page URLs directly — national (<code>https://dir.indiamart.com/impcat/\<slug>.html</code>) or city (<code>https://dir.indiamart.com/mumbai/\<slug>.html</code>).

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

Paste any IndiaMART URLs — category pages, supplier storefronts (<code>https://www.indiamart.com/\<slug>/</code>), or product pages (<code>/proddetail/…</code>). Each is auto-detected and routed.

## `supplierUrls` (type: `array`):

IndiaMART supplier storefront URLs or bare slugs (<code>https://www.indiamart.com/risansi/</code> or just <code>risansi</code>). Each is fetched as a full supplier-lead record (nature of business, year, employees, turnover, GST, address).

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

IndiaMART product page URLs (<code>https://www.indiamart.com/proddetail/…</code>). Each is fetched for full description, specs and images.

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

Total cap on records emitted in this run (products or supplier leads).

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

How many listing pages to crawl per category/city (each page lists ~28 products). Breadth also comes from multiple terms × cities.

## `includeProductDetails` (type: `boolean`):

In products mode, open each product page for full description, all images and the spec table (JSON-LD). Adds one request per product and a productDetail charge.

## `includeSupplierDetails` (type: `boolean`):

In supplierLeads mode, open each supplier's storefront for nature of business, legal status, year of establishment, employees, annual turnover, GST number and full postal address. Adds one request per supplier and a supplierDetail charge.

## `withPhoneOnly` (type: `boolean`):

Emit only records that include a supplier contact phone number.

## `gstVerifiedOnly` (type: `boolean`):

Emit only suppliers flagged GST-verified on IndiaMART.

## `minLeadScore` (type: `integer`):

Emit only records with at least this 0–100 lead score (phone, GST/mobile/email verification, membership tier, ratings, tenure, firmographics).

## `membershipTiers` (type: `array`):

Keep only suppliers whose membership tier matches one of these (case-insensitive substring), e.g. <code>Leader</code>, <code>Star</code>. Leave empty for all tiers.

## `monitorMode` (type: `boolean`):

Remember products/suppliers seen in previous runs (named key-value store) and emit only NEW ones. Pair with Apify Schedules to watch a category or city for newly listed suppliers/products. Does not conflict with scheduling.

## `monitorStoreName` (type: `string`):

Named key-value store holding the 'already seen' keys for monitor mode. Use a distinct name per saved task so their histories stay separate.

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

Maximum parallel requests.

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

Proxy settings. IndiaMART geo-restricts foreign & datacenter IPs, so the default is Apify Residential proxy in India — keep it for reliable results.

## Actor input object example

```json
{
  "mode": "products",
  "searchTerms": [
    "industrial valves"
  ],
  "maxItems": 100,
  "maxPages": 5,
  "includeProductDetails": false,
  "includeSupplierDetails": false,
  "withPhoneOnly": false,
  "gstVerifiedOnly": false,
  "minLeadScore": 0,
  "monitorMode": false,
  "monitorStoreName": "indiamart-monitor",
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

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

All scraped product and supplier-lead records as JSON items in the default dataset.

# 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 = {
    "searchTerms": [
        "industrial valves"
    ],
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

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

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

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

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

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "industrial valves"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call scrapesage/indiamart-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapesage/indiamart-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/xaVrUuGMRDbZpP0W5/builds/bSLOeMLqspuRbFYua/openapi.json
