# IndiaMART Scraper: Supplier Leads, Phone Numbers & GST (`datablow/indiamart-scraper`) Actor

Fast & stealth B2B lead generator for IndiaMART. Scrape verified suppliers, direct calling phone numbers (+91-XXXXX), contact persons, GST numbers, wholesale prices, MOQ, addresses, turnover, employee count, and technical specifications with Camoufox stealth browser.

- **URL**: https://apify.com/datablow/indiamart-scraper.md
- **Developed by:** [datablow](https://apify.com/datablow) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 results

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

## 🇮🇳 IndiaMART Scraper: Supplier Leads, Phone Numbers, GST & Products

[![Apify Actor](https://img.shields.io/badge/Apify-Actor-orange?style=flat-square\&logo=apify)](https://apify.com)
[![Crawlee Playwright](https://img.shields.io/badge/Crawlee-Playwright-blue?style=flat-square)](https://crawlee.dev)
[![Camoufox Stealth](https://img.shields.io/badge/Browser-Camoufox%20Stealth-purple?style=flat-square)](https://camoufox.com)
[![Output Format](https://img.shields.io/badge/Export-JSON%20%7C%20CSV%20%7C%20Excel-brightgreen?style=flat-square)](#output-dataset)

A high-performance, production-ready **IndiaMART B2B Lead Generator and Product Scraper** powered by **Crawlee**, **Playwright**, and **Camoufox Stealth Browser**. Extract complete manufacturer, wholesaler, supplier, and distributor intelligence from India's largest B2B marketplace.

***

### 🌟 Why Use This IndiaMART Scraper?

Most generic scrapers fail on IndiaMART due to client-side hydration, dynamic OTP modals, and anti-bot fingerprinting. This Actor uses **Camoufox** (an anti-detect, stealth Firefox browser engine) to bypass detection and extract deep verified factsheets.

#### 🎯 Key Extracted Data:

- **Direct Supplier Phone Numbers**: Verified calling contacts (`+91-XXXXX` and PNS numbers)
- **Authorized Contact Persons**: Managing Director, CEO, Proprietor, or Key Contact
- **Verified GSTIN Numbers**: 15-digit GST numbers with registration status and year
- **Complete Business Address**: Locality, City, State, and Pincode
- **Business Scale & Credentials**: Annual turnover, employee count, legal status, and nature of business
- **Wholesale Product Catalog**: Real-time wholesale prices, MOQs, units, descriptions, full ISQ technical specifications, and high-resolution image galleries
- **Trust & Reliability Badges**: Verified Supplier, TrustSEAL, IndiaMART member tenure, response rate, and star ratings

***

### 🔍 SEO & Use Cases

- **B2B Outbound Sales & Cold Calling**: Build hyper-targeted calling and WhatsApp lead lists of manufacturers, wholesalers, and distributors across any Indian city.
- **Competitor Price Monitoring**: Track wholesale price movements, minimum order quantities (MOQ), and packaging units across product categories.
- **Supplier Due Diligence & Vendor Verification**: Automate verification of supplier GST numbers, legal status (Proprietorship vs. Limited Company), and years in business.
- **Supply Chain & Sourcing**: Discover alternative suppliers and direct factory manufacturers for industrial components, textiles, electronics, raw materials, and machinery.

***

### ⚙️ Input Parameters & Filters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchTerms` | `Array<string>` | `["Submersible Pump"]` | Keywords or product categories to search (e.g., `["Cotton Fabric", "CNC Machine", "Solar Panels"]`). |
| `city` | `string` | `"Chennai"` | Target city or location filter (e.g., `Chennai`, `Mumbai`, `Delhi`, `Ahmedabad`, `Bengaluru`). Leave empty for **All India**. |
| `startUrls` | `Array<object>` | `[]` | Direct IndiaMART directory or search URLs (e.g., `https://dir.indiamart.com/chennai/submersible-pumps.html`). |
| `minPrice` | `integer` | `0` | Filter items with price >= this amount (in ₹ INR). Set `0` to disable. |
| `maxPrice` | `integer` | `0` | Filter items with price <= this amount (in ₹ INR). Set `0` for no upper ceiling. |
| `businessType` | `string` | `"ALL"` | Filter suppliers by business nature: `ALL`, `MANUFACTURER`, `WHOLESALER`, `TRADER`, `EXPORTER`, `RETAILER`. |
| `verifiedOnly` | `boolean` | `false` | When enabled, only extracts suppliers with verified badges or TrustSEAL. |
| `maxItems` | `integer` | `50` | Total number of supplier/product records to scrape and push to dataset. |
| `maxPagesPerQuery` | `integer` | `3` | Maximum search listing pages to traverse per query. |
| `scrapeSellerContactDetails` | `boolean` | `true` | Deep-crawls factsheets to extract direct phone numbers, GSTIN, proprietor names, turnover, and employee count. |
| `proxyConfiguration` | `object` | `{ "groups": ["RESIDENTIAL"] }` | Apify Proxy configuration. Residential proxies are recommended for large-scale runs. |

***

### 📊 Sample Output Dataset (JSON)

```json
{
  "productId": "2855784686162",
  "title": "Total TWP64001 Submersible Pump",
  "price": 5899,
  "priceRaw": "₹ 5,899",
  "priceUnit": "Piece",
  "currency": "INR",
  "minOrderQuantity": "1 Piece",
  "productUrl": "https://www.indiamart.com/proddetail/total-twp64001-submersible-pump-2855784686162.html",
  "mainImage": "https://5.imimg.com/data5/SELLER/Default/2025/2/488737865/FE/AL/MJ/65615320/total-twp64001-submersible-pump-500x500.jpg",
  "images": [
    "https://5.imimg.com/data5/SELLER/Default/2025/2/488737865/FE/AL/MJ/65615320/total-twp64001-submersible-pump-1000x1000.jpg"
  ],
  "description": "Submersible pumps are designed to operate submerged in groundwater wells or sumps...",
  "specifications": {
    "Power (HP)": "1 HP",
    "Phase": "Single Phase",
    "Maximum Head": "35 m",
    "Brand": "Total"
  },
  "availability": "In Stock",
  "seller": {
    "companyName": "Ib Monotaro Pvt Ltd",
    "contactPerson": "HAMBIE MARITIME (Managing Director)",
    "phoneNumber": "+91-7942960098",
    "sellerProfileUrl": "https://www.indiamart.com/ib-monotaro-pvt-ltd/",
    "fullAddress": "Ghitorni, New Delhi, Delhi",
    "city": "New Delhi",
    "state": "Delhi",
    "pincode": "110030",
    "country": "India",
    "gstNumber": "07AAFCI7226L1ZA",
    "gstStatus": "2020",
    "natureOfBusiness": "Trader - Retailer",
    "legalStatus": "Limited Company",
    "annualTurnover": "25 - 100 Cr",
    "totalEmployees": "11 To 25 People",
    "memberSince": "Jun 2018",
    "yearOfEstablishment": "2023",
    "iecCode": "AAFCI7226L",
    "isVerified": true,
    "trustSeal": true,
    "callResponseRate": "65%"
  },
  "rating": 5,
  "reviewCount": 14,
  "searchQuery": "Submersible Pump",
  "searchCity": "Chennai",
  "scrapedAt": "2026-09-22T22:45:00.000Z"
}
```

***

### 💾 Export Options

All scraped data can be downloaded directly from the Apify Console or API in multiple formats:

- **CSV** (Spreadsheet compatible with Excel, Google Sheets)
- **JSON** (For developer APIs and custom databases)
- **Excel (.xlsx)** (Formatted spreadsheet with headers)
- **XML / HTML Table**

***

### 🚀 How to Run & Deploy

#### Run on Apify Cloud

1. Open this Actor in the [Apify Console](https://console.apify.com).
2. Enter your desired **Keywords** (e.g. `Solar Inverter`) and **City** (e.g. `Mumbai`).
3. Click **Start** to run.
4. Download your leads from the **Dataset** tab as Excel or CSV!

#### Deploy from Local Repository

```bash
## Navigate to project folder
cd indiamart-scraper

## Build TypeScript code
npm run build

## Push to your Apify Account
apify push
```

***

### ❓ Frequently Asked Questions (FAQ)

**Q: Does this scraper extract phone numbers for every supplier?**\
A: Yes, whenever the supplier has their contact or PNS virtual calling number listed on their profile/factsheet, the deep scraper extracts the direct phone number (`+91-XXXXX`).

**Q: Can I scrape all of India without filtering by city?**\
A: Yes, simply leave the `city` parameter blank or type `All India`, and the Actor will scrape pan-India suppliers.

**Q: Do I need proxies?**\
A: For small runs (under 50 items), direct connections or datacenter proxies work. For large-scale scraping (hundreds or thousands of leads), we strongly recommend enabling **Apify Residential Proxies** (`RESIDENTIAL` group) to prevent rate limiting.

***

### ⚖️ Disclaimer & Compliance

This Actor is developed for legitimate B2B market research, procurement, and competitive analysis of publicly disclosed business listings. Please comply with local data protection laws (including the Digital Personal Data Protection Act) and do not use extracted contacts for unauthorized spamming.

# Actor input Schema

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

Keywords or product categories to search on IndiaMART (e.g., 'Submersible Pump', 'Cotton Fabric', 'Solar Inverter').

## `city` (type: `string`):

Filter suppliers by specific city (e.g. 'Chennai', 'Mumbai', 'Delhi', 'Ahmedabad', 'Coimbatore', 'Bengaluru'). Leave empty for All India.

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

Direct IndiaMART search or directory URLs (e.g. 'https://dir.indiamart.com/chennai/submersible-pumps.html' or 'https://www.indiamart.com/proddetail/...').

## `minPrice` (type: `integer`):

Filter products with price greater than or equal to this amount. Set 0 to disable.

## `maxPrice` (type: `integer`):

Filter products with price less than or equal to this amount. Set 0 for no upper limit.

## `businessType` (type: `string`):

Filter by type of supplier.

## `verifiedOnly` (type: `boolean`):

If enabled, only keeps suppliers marked with IndiaMART Verified or TrustSEAL badges.

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

Maximum number of total product/supplier records to scrape and push to dataset.

## `maxPagesPerQuery` (type: `integer`):

Maximum number of listing pages to traverse per keyword or category.

## `scrapeSellerContactDetails` (type: `boolean`):

When enabled, visits the product factsheet page to extract direct seller phone numbers (+91-XXXXX), verified GST numbers, proprietor names, employee count, and turnover.

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

Select Apify Proxy. Indian Residential Proxies (RESIDENTIAL group with countryCode: 'IN') are strongly recommended on Apify Cloud to prevent 403 Forbidden blocks from IndiaMART.

## Actor input object example

```json
{
  "searchTerms": [
    "Submersible Pump"
  ],
  "city": "Chennai",
  "startUrls": [],
  "minPrice": 0,
  "maxPrice": 0,
  "businessType": "ALL",
  "verifiedOnly": false,
  "maxItems": 50,
  "maxPagesPerQuery": 3,
  "scrapeSellerContactDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# 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 = {
    "searchTerms": [
        "Submersible Pump"
    ],
    "city": "Chennai",
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("datablow/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": ["Submersible Pump"],
    "city": "Chennai",
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("datablow/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 '{
  "searchTerms": [
    "Submersible Pump"
  ],
  "city": "Chennai",
  "startUrls": []
}' |
apify call datablow/indiamart-scraper --silent --output-dataset

```

## MCP server setup

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