# IndiaMART Scraper — Supplier Leads, Prices, GST & Market Size (`yugenox/indiamart-supplier-leads-scraper`) Actor

Scrape IndiaMART suppliers and products by keyword, category, city and business type — thousands per category, well past the usual top-results limit. Prices, MOQ, GST/TrustSEAL, ratings, seller contact number, plus market-size totals per city. No login.

- **URL**: https://apify.com/yugenox/indiamart-supplier-leads-scraper.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (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

from $1.50 / 1,000 products

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 — Suppliers, Prices, GST & Market Size

Find Indian suppliers for any product and see how big the market is. Enter a keyword such as **"cotton yarn"** or paste an IndiaMART category URL. You get a clean table of products and suppliers with price, minimum order quantity, city, state, business type, GST and TrustSEAL status, rating, years on IndiaMART and a contact number. You also get one market-summary row per keyword.

Other IndiaMART scrapers stop at the first page of results, usually 10 to 30 listings. This one goes much deeper. It walks each product category **city by city** (the 50 busiest supplier cities) and **by business type** (manufacturer, wholesaler, retailer, exporter). It removes duplicates as it goes, so a single keyword can return **thousands of unique suppliers**.

No IndiaMART account is needed, and there is no browser or captcha, so runs are fast and cheap.

### What you get

**One row per product and supplier:**

| Group | Fields |
|---|---|
| Product | name, URL, price, currency, price unit, price as shown, minimum order quantity + unit, specifications (brand, grade, size…), description, image (500 px and 1000 px) |
| Category | category id, name and slug |
| Supplier | company name, IndiaMART catalog URL, own website, logo, business type, city, locality, district, state |
| Trust | GSTIN (masked for sole proprietors), GST verified, sole proprietorship flag, TrustSEAL / Verified Supplier badge, Leading/Star Supplier badge, years on IndiaMART, year established, rating and number of ratings, email/mobile verified, exporter |
| Contact | the IndiaMART phone number that connects you to the supplier, plus the extension to dial on shared lines |
| Context | which keyword/URL, city listing and business-type listing the row came from, and its rank there |
| Optional company profile | legal status, GST turnover band, GST registration year, nature of business, employees, annual turnover, certifications, CIN |

**One market-summary row per keyword or URL** (optional, on by default):

- total products listed nationwide for each category, plus exact counts per city and per business type
- supplier counts in the category's top 50 cities
- search demand for the keyword and its variants ("cotton yarn" 51,242 · "combed cotton yarn" 7,548 …)
- the price bands IndiaMART uses, plus min / median / max price per unit across the collected products
- business-type mix, share of GST-verified and TrustSEAL suppliers, and average rating
- related categories you might also want to scrape

### Use cases

- **Sourcing and procurement:** build a long list of manufacturers for a product, shortlist them by GST verification, TrustSEAL, rating and years in business, and compare prices and minimum order quantities.
- **B2B lead generation:** list every wholesaler of a product in Mumbai, or every manufacturer in Gujarat, with a working contact number.
- **Market sizing:** see how many products and suppliers a category has in each city and which cities dominate, before entering a market or opening a branch.
- **Price monitoring:** schedule a run and track median prices per unit over time.
- **Competitor research:** find who else sells your product, where they are, and how they price it.

### How to use it

1. Enter one or more **product keywords**, or paste **category URLs** from IndiaMART.
2. Optionally pick **cities** and **business types**. Leave them empty to cover the busiest cities automatically.
3. Set **Max products** and run.

#### Input example

```json
{
  "keywords": ["cotton yarn", "stainless steel pipe"],
  "maxCategoriesPerKeyword": 2,
  "maxCitiesPerCategory": 20,
  "businessTypes": [],
  "maxItems": 2000,
  "includeMarketSummary": true,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

Only manufacturers in three cities:

```json
{
  "categoryUrls": ["https://dir.indiamart.com/impcat/solar-power-systems.html"],
  "cities": ["Ahmedabad", "Jaipur", "Pune"],
  "businessTypes": ["manufacturer"],
  "maxItems": 500
}
```

#### Accepted URLs

- `https://dir.indiamart.com/impcat/cotton-yarn.html` (also the `m.indiamart.com` version, and `?biz=10` style filters)
- `https://dir.indiamart.com/tiruppur/cotton-yarn.html` or `https://m.indiamart.com/city/tiruppur/cotton-yarn.html` (one city)
- a bare category slug: `cotton-yarn`
- a search URL: `https://dir.indiamart.com/search.mp?ss=cotton+yarn` (treated as a keyword)

### Output example

```json
{
  "dataType": "product",
  "productId": "2857201447648",
  "productName": "0.75 Inch Stainless Steel Pipe, 6 meter",
  "productUrl": "https://www.indiamart.com/proddetail/0-75-inch-stainless-steel-pipe-2857201447648.html",
  "price": 302,
  "currency": "INR",
  "priceUnit": "Kg",
  "priceText": "₹ 302/Kg",
  "minOrderQuantity": 1,
  "minOrderUnit": "Kg",
  "specifications": { "Material": "Stainless Steel", "Grade": "304", "Shape": "Round" },
  "categoryName": "Stainless Steel Pipes",
  "companyName": "Example Steel Traders",
  "companyUrl": "https://www.indiamart.com/example-steel-traders/",
  "businessType": "Wholesaler / Distributor",
  "city": "Mumbai",
  "state": "Maharashtra",
  "phone": "+9180XXXXXXXX",
  "phoneExtension": null,
  "gstin": "27**********1Z5",
  "gstVerified": true,
  "isProprietorship": true,
  "trustSeal": true,
  "supplierBadge": "Star Supplier",
  "verificationBadge": "TrustSEAL",
  "memberSinceYears": 9,
  "yearEstablished": 2012,
  "rating": 4.3,
  "ratingCount": 57,
  "source": "category",
  "sourceQuery": "stainless steel pipe",
  "sliceCity": "Mumbai",
  "sliceBusinessType": null,
  "position": 7
}
```

Market summary (shortened):

```json
{
  "dataType": "marketSummary",
  "query": "cotton yarn",
  "searchDemand": [{ "term": "cotton yarn", "frequency": 51242 }, { "term": "combed cotton yarn", "frequency": 7548 }],
  "categories": [{
    "categoryName": "Cotton Yarn",
    "totalProductsAllIndia": 29731,
    "productsByBusinessType": { "Manufacturer": 10322, "Wholesaler / Distributor": 6988, "Retailer": 5697 },
    "cities": [{ "city": "Tiruppur", "state": "Tamil Nadu", "suppliers": 4620, "products": 2049 }]
  }],
  "priceStats": [{ "unit": "Kg", "currency": "INR", "count": 75, "min": 43.5, "median": 160, "max": 2999 }],
  "gstVerifiedPercent": 96,
  "trustSealPercent": 46
}
```

Download the results as JSON, CSV, Excel or HTML, or use the API. The **Overview** and **Supplier details** tabs in the dataset show the most useful columns.

### How deep does it go?

IndiaMART shows each listing's top 28 products. This actor collects the top 28 of every **city** listing and every **business-type** listing in a category, and removes duplicates. Rough numbers per category:

| Setting | Listings scraped | Unique products (typical) |
|---|---|---|
| Nationwide only (`maxCitiesPerCategory: 0`) | up to 6 | 100–160 |
| Top 20 cities (default) | up to ~120 | 1,000–2,500 |
| Top 50 cities | up to ~300 | 2,500–6,000 |

Measured examples: "cotton yarn" with 50 cities gave 5,638 unique products from 5,205 suppliers in 46 seconds, and "stainless steel pipes" with 20 cities gave 2,264. Add more keywords or raise **Categories per keyword** to go wider. If a listing holds fewer than 28 products, it already holds everything, so the actor doesn't split it further.

The top of each listing is dominated by larger, paid-member suppliers. Deeper slices reach many smaller sellers, who more often list "ask for price" and no photo, so expect price and image fields to be less complete there. Name, supplier, city and phone stay close to 100%.

### Privacy

This actor collects public business listing data only.

- The contact number is IndiaMART's own call-routing number for the supplier. Suppliers' personal mobile and WhatsApp numbers, street addresses and map coordinates are never collected.
- The GSTIN of a sole proprietor contains the owner's PAN, so it is masked.
- Company profiles never include the names of owners, directors, partners or contact persons.

### FAQ

**Do I need an IndiaMART account?** No.

**Is it legal to scrape IndiaMART?** This actor only collects publicly available business listing data: products, prices and supplier details that anyone can see on IndiaMART without an account. Collecting publicly available data is generally legal, but you're responsible for how you use it. Some rows can relate to individuals, for example a sole proprietor's business name or a supplier's contact number, so if you process personal data you must follow the privacy laws that apply to you, such as India's DPDP Act, GDPR, PIPEDA and CCPA, as well as IndiaMART's terms. If you're unsure, check with a lawyer. More on this: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. Everything comes from pages IndiaMART shows to any visitor without logging in. The actor never logs in, never uses anyone's account or cookies, and never reaches members-only areas. The contact number in each row is the call-routing number IndiaMART publishes on the listing. Suppliers' personal mobile and WhatsApp numbers, street addresses and map coordinates are left out, and a sole proprietor's GSTIN is masked.

**Which proxy should I use?** The default automatic Apify Proxy works. If a proxy IP can't reach IndiaMART, the actor switches to residential India IPs automatically. You can also select RESIDENTIAL yourself.

**Why do I get fewer products than I asked for?** Some categories are small, a keyword may match few categories, and a city or business-type filter narrows things down. The market-summary row shows how many products exist in total. Add cities, categories per keyword or more keywords to widen the run.

**Why do some rows have no price?** Many IndiaMART sellers list products as "Ask for price".

**How fast is it?** About 100 products in 15 seconds and 1,000 in a minute or two, depending on the proxy.

**What does the company profile add?** Each supplier's fact sheet from IndiaMART: legal status, GST turnover band, registration year, employee count and so on. It needs one extra page per supplier, so it is off by default and billed separately.

**Can I schedule it?** Yes. Use Apify schedules to track prices or new suppliers daily or weekly.

# Actor input Schema

## `keywords` (type: `array`):

What you are sourcing, e.g. "cotton yarn", "stainless steel pipe", "n95 mask". Each keyword is matched to its IndiaMART product categories, which are then scraped city by city and by business type.

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

IndiaMART category pages to scrape directly, e.g. https://dir.indiamart.com/impcat/cotton-yarn.html, a city page like https://dir.indiamart.com/tiruppur/cotton-yarn.html, or just the slug cotton-yarn. A ?biz=10 filter in the URL is respected.

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

Only these cities (e.g. Mumbai, Ahmedabad, Tiruppur). Leave empty to cover the busiest supplier cities of each category automatically (see the next setting).

## `maxCitiesPerCategory` (type: `integer`):

When no cities are given: how many of each category's top supplier cities to cover, ranked by number of suppliers (max 50). Each city adds up to 28 products, more with the business-type split. 0 = nationwide listings only.

## `businessTypes` (type: `array`):

Only suppliers of these types. Leave empty for all types — the scraper then also uses the type split to reach deeper into large categories.

## `maxCategoriesPerKeyword` (type: `integer`):

A keyword usually matches several IndiaMART categories ("stainless steel pipe" → Stainless Steel Pipes, 347 Stainless Steel Pipe, SS Round Pipe…). How many of the best matches to scrape.

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

Stop after this many unique products (all keywords together). 0 = no limit. Market-summary rows are extra.

## `includeMarketSummary` (type: `boolean`):

Adds one row per keyword/URL with market size: total products listed nationwide and per city, supplier counts in the top 50 cities, counts by business type, search demand for the keyword and its variants, price ranges and statistics.

## `includeKeywordResults` (type: `boolean`):

Also save the top 10 products IndiaMART shows for the keyword itself (these can come from several categories).

## `includeExportSearch` (type: `boolean`):

Also scan IndiaMART's export marketplace for the keyword (about 60–70 extra products per keyword, sellers with an import-export code flagged).

## `includeCompanyProfile` (type: `boolean`):

Adds each seller's fact sheet: legal status, GST turnover band, GST registration year, nature of business, employee count, annual turnover, CIN. One extra page per unique seller, billed as a separate event.

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

Parallel requests. The default is fast and gentle.

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

Apify Proxy is required. The automatic (datacenter) pool works; if too many of its IPs are refused, the scraper switches to residential India IPs by itself.

## Actor input object example

```json
{
  "keywords": [
    "cotton yarn"
  ],
  "maxCitiesPerCategory": 2,
  "maxCategoriesPerKeyword": 1,
  "maxItems": 100,
  "includeMarketSummary": true,
  "includeKeywordResults": true,
  "includeExportSearch": false,
  "includeCompanyProfile": false,
  "maxConcurrency": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every row this run saved, as JSON.

## `resultsCsv` (type: `string`):

The same rows as CSV, ready for a spreadsheet.

## `resultsTable` (type: `string`):

The same rows narrowed to the key columns (the "overview" view).

# 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 = {
    "keywords": [
        "cotton yarn"
    ],
    "maxCitiesPerCategory": 2,
    "maxCategoriesPerKeyword": 1,
    "maxItems": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/indiamart-supplier-leads-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 = {
    "keywords": ["cotton yarn"],
    "maxCitiesPerCategory": 2,
    "maxCategoriesPerKeyword": 1,
    "maxItems": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/indiamart-supplier-leads-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 '{
  "keywords": [
    "cotton yarn"
  ],
  "maxCitiesPerCategory": 2,
  "maxCategoriesPerKeyword": 1,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/indiamart-supplier-leads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/indiamart-supplier-leads-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/6X5nQr5zgafFvQ0bI/builds/O7goMLtyJXp0dxGYW/openapi.json
