# IndiaMART Scraper & API - Indian Suppliers, Phones, GST, Prices (`rel8ble/indiamart-scraper`) Actor

IndiaMART scraper and API: Indian B2B supplier leads by product keyword. One result = one product + supplier: company, phone, city, address, GSTIN, TrustSEAL, rating, years in business, employees, turnover, price, specs. No login, no start fee. $0.60 per 1,000, profile included.

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

## Pricing

$0.60 / 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 & API - Indian Suppliers, Phones, GST, Prices

**IndiaMART scraper** for B2B lead generation and sourcing from India: enter a product keyword such as `led lights` and get IndiaMART's suppliers as clean JSON, CSV or Excel. Each row is one product with its supplier: **company name, public business phone, IndiaMART storefront and website, city, state and address, GSTIN, TrustSEAL / Star / Leading Supplier badge, rating, response rate, year established and years in business, employees, annual turnover**, plus the product's **price**, unit, specifications and images. Use it as an **IndiaMART supplier scraper**, an **Indian manufacturer lead list builder**, or an unofficial **IndiaMART API** from your own code, Make, Zapier or n8n.

It reads the data IndiaMART's own pages carry, over plain HTTP, with **no browser and no login**.

### What you get

- **Supplier**: company name, supplier ID, IndiaMART storefront URL, company website (when it has one), logo, company introduction.
- **Contact**: the **business phone number IndiaMART publishes** for the supplier (its call-forwarding number; shown for most listings), whether IndiaMART verified the mobile and e-mail, city, locality, state and address.
- **Company profile**: nature of business and all business types (Manufacturer, Exporter, Wholesaler, ...), **year of establishment and years in business**, employee band, **annual turnover band**, legal status, **GSTIN** and GST registration year, Import Export Code and CIN when published, certifications, top export countries.
- **Trust signals**: **TrustSEAL verified**, Verified Exporter, **Leading Supplier / Star Supplier** badge, GST verified, rating out of 5 with rating count, response rate, quality / delivery / response satisfaction percentages, years on IndiaMART and member-since date.
- **Product**: name, product URL, all images, brochure PDF, description, category, full specifications as `{ label: value }`, brand, **price** as a number with unit (Piece, Kg, Meter ...) and the price text, MOQ when the supplier set one.
- **More from the supplier**: other products shown with the listing, with price and URL.
- **More suppliers per keyword**: IndiaMART shows 28 products per category page without a login; the actor then reads the same category for up to 50 cities (Delhi, Mumbai, Bengaluru, Pune, Ahmedabad, ...), so one keyword gives up to about 1,400 listings.

### Sample output

Real rows from a cloud run for "led lights" with default settings (from `sample-output.json`):

| productName | priceText | supplierName | city | yearsInBusiness | trustSealVerified | rating |
|---|---|---|---|---|---|---|
| LED SAPPHIRE BOLLARD Light, 25W | ₹ 3,000/Piece | Haryana General Industries | New Delhi | 53 | true | 4.2 |
| 30W LED Surface Mounted Light | ₹ 1,800/Piece | Sunway Green Lighting | Noida | 14 | true | 4.5 |
| Pure White MF CL LED 206 A Indoor Lights, 230 V | ₹ 3,600/Piece | Mayfair Lighting LLP | Noida | 62 | true | 3.9 |

In that 100-row run: rating 100%, phone 82%, price 71%, GSTIN, address and state 75%, year established 67%, turnover 65%. Basic (free) IndiaMART listings have no product page, so they come without the company-profile fields.

### Why this one

- **$0.60 per 1,000 results, no start fee**, with the product-page company profile (GSTIN, address, turnover, employees, years in business) included. The most-used IndiaMART scrapers charge $1.50 to $5.00 per 1,000, some plus a start fee; the cheapest others charge $0.99 to $1.00 (nimbryxo-studio, jungle_synthesizer, omkar-cloud, one_dollar_store, scrapewise), most of them plus a start fee. Only scrapix lists a lower price ($0.01 per 1,000 plus a start fee, 1 user).
- **The supplier's public business phone** on most rows, ready for a dialer or CRM.
- **Up to about 1,400 listings per keyword** without a login, by reading the category for all of India and up to 50 cities.
- **Lead-list filters** before you pay: TrustSEAL, GST verified, years in business, rating, price, one row per supplier.

### Use cases

- **B2B lead generation in India**: build lists of manufacturers, exporters and wholesalers per product and city, with phone, GSTIN, turnover and employee band. Turn on **One row per supplier** for a clean lead list.
- **Sourcing**: compare prices, ratings and response rates of Indian suppliers before you send enquiries.
- **Supplier vetting**: keep only TrustSEAL-verified, GST-verified suppliers with 10+ years in business and a 4+ rating.
- **Market sizing**: count suppliers per city, state, business type or turnover band.
- **CRM enrichment**: match `gstNumber` or company names against your own customer list.
- **Compare marketplaces**: run the same keyword on our TradeIndia, Alibaba, Global Sources and DHgate scrapers (same account) and compare suppliers and prices.
- **AI sourcing agents**: let an agent build a supplier shortlist through the Apify MCP server.

### Example inputs for common jobs

Copy one into the JSON tab of the input form.

**Lead list: verified suppliers, one row each**

```json
{
    "searchTerms": ["led lights", "solar panel"],
    "maxResultsPerSearch": 300,
    "uniqueSuppliers": true,
    "verifiedOnly": true,
    "gstVerifiedOnly": true
}
```

**Suppliers in specific cities**

```json
{
    "searchTerms": ["cotton bedsheet"],
    "cities": ["Panipat", "Jaipur", "Erode"],
    "maxResultsPerSearch": 0
}
```

**Established, well-rated companies only**

```json
{
    "searchTerms": ["yoga mat"],
    "maxResultsPerSearch": 200,
    "minYearsInBusiness": 10,
    "minRating": 4
}
```

**Fast listing-only run (no product pages)**

```json
{
    "searchTerms": ["led lights", "led bulb", "led panel light"],
    "maxResultsPerSearch": 500,
    "scrapeDetails": false
}
```

### How to use

1. Enter one or more product keywords in **Products / categories**, worded like IndiaMART's categories (`led lights`, `yoga mat`, `solar panel`, `cotton bedsheet`). Plural and singular are tried automatically. You can also paste an IndiaMART category URL (`https://dir.indiamart.com/impcat/led-lights.html`) or a city version (`https://dir.indiamart.com/delhi/led-lights.html`).
2. Set **Max results per search** (start with 20) and any filters. Keep **Open each product page** on for years in business, address, GSTIN, employees and turnover.
3. Click **Start**, then download the results as JSON, CSV or Excel from the **Output** tab, or fetch them through the Apify API.

If a keyword has no IndiaMART category page, the log says so and nothing is charged. Open dir.indiamart.com, find the category you want and paste its URL.

### Input

| Field | Default | Description |
|---|---|---|
| `searchTerms` | `led lights` | Keywords or IndiaMART category URLs, one per line |
| `maxResultsPerSearch` | 20 | Rows per keyword (the default run takes about 40 s). 0 = everything reachable (all-India page + up to 50 city pages) |
| `scrapeDetails` | true | Open each product page for company profile, address, GSTIN, MOQ and ratings breakdown |
| `includeCityPages` | true | Read the category for up to 50 cities to get more suppliers |
| `cities` | - | Only these cities, e.g. `["Delhi", "Ahmedabad"]` |
| `uniqueSuppliers` | false | One row per supplier instead of one per product |
| `verifiedOnly` | false | Only TrustSEAL-verified suppliers and Verified Exporters |
| `gstVerifiedOnly` | false | Only GST-verified suppliers |
| `minYearsInBusiness` | 0 | Only companies established at least this many years ago (needs scrapeDetails) |
| `minYearsOnIndiaMart` | 0 | Only suppliers who have been IndiaMART members at least this long |
| `minRating` | - | Only suppliers rated at least this (0-5) |
| `minPrice` / `maxPrice` | - | Unit price filter in rupees |
| `proxyConfiguration` | Residential, India | Leave as is: IndiaMART rate-limits datacenter IPs |

### Output example

One dataset item per product. This one is from a real run for "cotton bedsheet" (description, images and other products shortened):

```json
{
    "searchTerm": "cotton bedsheet",
    "position": 2,
    "productId": "2856938380488",
    "productName": "Indian Cotton Bed Sheet, Size: Double",
    "productUrl": "https://www.indiamart.com/proddetail/cotton-bed-sheet-2856938380488.html",
    "image": "https://5.imimg.com/data5/SELLER/Default/2025/7/528786034/UX/WP/FH/394432/img-20250605-wa0052-1000x1000.jpg",
    "imageCount": 12,
    "brochureUrl": "https://5.imimg.com/data5/SELLER/Doc/2025/7/528786396/CQ/BY/DF/394432/cotton-bed-sheet.pdf",
    "category": "Cotton Bed Sheet",
    "priceText": "₹ 799/Piece",
    "price": 799,
    "currency": "INR",
    "priceUnit": "Piece",
    "moq": null,
    "specifications": { "Size": "Double", "Material": "Pure Cotton", "Pattern": "Printed", "Country of Origin": "Made in India" },
    "supplierName": "Conifer Handmades",
    "supplierId": "394432",
    "supplierIndiaMartUrl": "https://www.indiamart.com/coniferhandmadepaperexporter/",
    "supplierWebsite": "https://www.coniferhandmadepaperexporter.com/",
    "city": "Mumbai",
    "state": "Maharashtra",
    "country": "India",
    "address": "Mumbai, Maharashtra",
    "phone": "+917949349827",
    "phoneVerified": true,
    "emailVerified": true,
    "natureOfBusiness": "Exporter",
    "businessTypes": ["Exporter", "Manufacturer", "Wholesaler", "Trader"],
    "yearEstablished": 1995,
    "yearsInBusiness": 31,
    "yearsOnIndiaMart": 22,
    "memberSince": "2004-06-21",
    "employees": "Upto 10 People",
    "annualTurnover": "Rs. 50 Lakh - 1 Crore",
    "legalStatus": "Individual - Proprietor",
    "gstNumber": "27BESPS5695L1Z8",
    "gstRegistrationYear": 2020,
    "importExportCode": "0389056235",
    "trustSealVerified": true,
    "verifiedExporter": true,
    "supplierTier": null,
    "gstVerified": true,
    "rating": 4.1,
    "ratingCount": 366,
    "responseRate": 53,
    "ratingQualityPercent": 86,
    "ratingDeliveryPercent": 82,
    "ratingResponsePercent": 74,
    "topExportCountries": ["United States Of America", "Australia", "Canada", "United Kingdom", "Saudi Arabia"],
    "sourcePage": "category",
    "sourceUrl": "https://dir.indiamart.com/impcat/cotton-bedsheet.html",
    "scrapedAt": "2026-10-28T04:18:38.682Z"
}
```

A per-search summary (category found, city pages read, rows filtered out, stop reason) is saved as `RUN_SUMMARY` in the key-value store.

### Pricing

**$0.60 per 1,000 results** (pay per result), with the product-page company profile (GSTIN, address, turnover, employees, years in business) included at no extra charge. Apify platform usage and the residential proxy are included in that price. Filtered rows, duplicates and failed requests are never charged, and there is no start fee.

| Run | Results | Cost |
|---|---|---|
| Default input (`led lights`, 20 rows) | 20 | $0.012 |
| One keyword, 100 rows | 100 | $0.06 |
| One keyword, everything reachable | about 1,400 | about $0.84 |
| 10 keywords x 300 suppliers | 3,000 | $1.80 |

Apify's free plan ($5 of monthly credit) covers about 8,300 results. Other IndiaMART scrapers on the free tier, per 1,000 (checked 1 November 2026):

| Actor | 30-day users | Price per 1,000 |
|---|---|---|
| thirdwatch | 70 | $2.00 + start fee |
| sourabhbgp | 34 | $1.50 |
| haketa | 30 | $5.00 + start fee |
| themineworks | 14 | $2.00 + $0.005 start fee |
| natanielsantos | 13 | $2.00 + start fee |
| memo23 | 10 | $2.00 + start fee, $15 per 1,000 e-mails |
| ahmed_jasarevic | 1 | $1.80 + start fee |
| jungle_synthesizer | 1 | $1.00 + $0.10 start fee |
| omkar-cloud | 1 | $1.00 + start fee, $2.00 more with details |
| nimbryxo-studio | 1 | $0.99 + $0.10 start fee |
| one_dollar_store | 0 | $1.00 + $0.001 start fee |
| scrapewise | 0 | $1.00 |
| scrapix | 1 | $0.01 + start fee |
| **this actor** | | **$0.60, no start fee, profile included** |

### FAQ

**Which phone number is it?**
The business number IndiaMART publishes on the listing for buyers to call. For most suppliers it is IndiaMART's call-forwarding number that rings the supplier. Owner names are never collected.

**How many results can I get per keyword?**
Without a login IndiaMART shows 28 products per page and asks visitors to sign in for more. The actor never logs in; instead it reads the category for all of India and then for up to 50 cities (28 each), so a broad keyword gives up to about 1,400 listings. Add related keywords for more.

**Is MOQ always filled?**
Only when the supplier entered a minimum order quantity on IndiaMART, which many Indian suppliers do not. Price per unit is filled for almost every listing.

**Why is it slower with product pages on?**
Each row then needs one extra page (about 70 KB). Turn **Open each product page** off for a listing-only run that is about 25 times faster; you still get name, phone, city, price, badges, rating and years on IndiaMART.

**Is it legal to scrape IndiaMART?**
It collects only public business and product data shown to every visitor, from category and product pages IndiaMART's robots.txt allows for all crawlers (it never requests the search pages robots.txt excludes), with no login. You are responsible for using the data in line with IndiaMART's terms and laws such as India's DPDP Act and GDPR. This is not legal advice.

**Is there an official IndiaMART API?**
IndiaMART's official APIs are for its own paid sellers (the Lead Manager / CRM "pull API" returns the enquiries a seller received). There is no public API to search suppliers or products, so this actor reads the public category and product pages instead.

**How much does a typical job cost?**
A 300-supplier lead list for one product is $0.18. A monthly price check of 10 product keywords at 100 rows each is $0.60. Every listing reachable for one broad keyword (about 1,400) is about $0.84.

**Which proxy should I use?**
Keep the default (Apify residential proxy, India). IndiaMART answers HTTP 429 to datacenter IPs; rate-limited requests are retried on a new IP automatically.

Need a custom scraper or a ready dataset? Hire me on Fiverr: https://www.fiverr.com/rel8ble

# Actor input Schema

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

Provide at least one. Product keywords as IndiaMART names its categories, e.g. "led lights", "yoga mat", "solar panel" (plural / singular is tried automatically), or IndiaMART category URLs: https://dir.indiamart.com/impcat/led-lights.html or a city version such as https://dir.indiamart.com/delhi/led-lights.html. Default \["led lights"] (demo).

## `maxResultsPerSearch` (type: `integer`):

Optional. Rows saved per keyword / URL, integer >= 0. Default 20 (about 40 s); 0 = everything reachable (all-India page plus up to 50 city pages, 28 listings each, about 1,000+ unique products). You pay per row, so start with 20.

## `scrapeDetails` (type: `boolean`):

Default true. Reads every product page to add year of establishment / years in business, state and address, GSTIN, employees, annual turnover, legal status, business types, certifications, full specifications, all images, MOQ when set, and quality / delivery / response ratings. Same price per row; turn off for a faster listing-only run.

## `includeCityPages` (type: `boolean`):

Default true. IndiaMART shows 28 products per category page without a login, so after the all-India page the actor reads the same category for up to 50 cities (Delhi, Mumbai, Bengaluru, ...) until Max results is reached.

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

Optional. City names, e.g. \["Delhi", "Ahmedabad", "Coimbatore"]. When set, only those city pages are saved (one page = up to 28 suppliers per city).

## `uniqueSuppliers` (type: `boolean`):

Optional. true = keep only the first product of each supplier (a lead list). Default false = one row per product listing.

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

Optional. Keep only TrustSEAL-verified suppliers (incl. Star / Leading Suppliers) and Verified Exporters. Default false.

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

Optional. Keep only suppliers whose GST number IndiaMART verified. Default false.

## `minYearsInBusiness` (type: `integer`):

Optional. Keep only companies established at least this many years ago (needs scrapeDetails). Default 0.

## `minYearsOnIndiaMart` (type: `integer`):

Optional. Keep only suppliers who have been IndiaMART members at least this long. Default 0.

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

Optional. Keep only suppliers rated at least this; unrated suppliers are skipped when set.

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

Optional. Minimum unit price in rupees.

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

Optional. Maximum unit price in rupees.

## `onlyWithPrice` (type: `boolean`):

Optional. Skip listings without a price. Default false.

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

Optional, advanced. Parallel requests, 1-30. Default 10 (residential IPs answer slowly, so more run in parallel).

## `maxRequestRetries` (type: `integer`):

Optional, advanced. Retries per failed or rate-limited request (each on a new IP), 0-20. Default 8.

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

Optional, advanced. Leave as is. Default Apify RESIDENTIAL proxy in India: IndiaMART rate-limits datacenter IPs (HTTP 429).

## Actor input object example

```json
{
  "searchTerms": [
    "led lights"
  ],
  "maxResultsPerSearch": 20,
  "scrapeDetails": true,
  "includeCityPages": true,
  "uniqueSuppliers": false,
  "verifiedOnly": false,
  "gstVerifiedOnly": false,
  "minYearsInBusiness": 0,
  "minYearsOnIndiaMart": 0,
  "onlyWithPrice": false,
  "maxConcurrency": 10,
  "maxRequestRetries": 8,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}
```

# Actor output Schema

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

One row per product listing with the supplier: phone, address, GST, TrustSEAL, rating, years in business, employees and turnover.

## `summary` (type: `string`):

Per-search counts, category found, city pages read and stop reasons.

# 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": [
        "led lights"
    ],
    "maxResultsPerSearch": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "IN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/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": ["led lights"],
    "maxResultsPerSearch": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "IN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/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": [
    "led lights"
  ],
  "maxResultsPerSearch": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "IN"
  }
}' |
apify call rel8ble/indiamart-scraper --silent --output-dataset

```

## MCP server setup

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