# IndiaMART Scraper — B2B Suppliers, Products, Phone & GST (`logiover/indiamart-scraper`) Actor

Scrape IndiaMART products and suppliers by keyword, category or city: price, MOQ, specifications, company, phone, GSTIN, city, state, rating, response rate, member since; optional contact person, address and company profile. No login, no API key.

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

## Pricing

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

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 — B2B Suppliers, Products, Phone Numbers & GST Data

**Turn any IndiaMART search, category or city page into a clean supplier list: product, price, MOQ, specifications, company, IndiaMART phone number, city, state, GSTIN, rating, response rate, membership and years on IndiaMART — with contact person, address and company profile on request.**

> **Disclaimer:** This Actor is an independent tool. It is not affiliated with, endorsed by, or sponsored by IndiaMART InterMESH Ltd. "IndiaMART" is a trademark of its owner. The Actor reads only pages and data that IndiaMART shows publicly to every visitor, without logging in.

**IndiaMART Scraper** is an IndiaMART data extractor for B2B lead generation and sourcing: type a product the way buyers type it on IndiaMART — `led lights`, `cotton fabric`, `tmt bars`, `surgical gloves`, `pvc pipes`, `packaging machine` — and the Actor returns every matching product offer with its supplier: the product name and IndiaMART product id, the price exactly as shown (₹ amount, currency and unit such as Piece, Kg or Meter), minimum order quantity, the full specification table, product photo and brochure PDF, and the seller's company name, IndiaMART call number, city, district and state, GST number (GSTIN) and GST-verified flag, business type (manufacturer, exporter, wholesaler / distributor, retailer, service provider), IndiaMART membership and badges (Star Supplier, Leading Supplier, TrustSEAL, Verified Exporter), supplier rating and number of ratings, call response rate and years on IndiaMART. It works as an **IndiaMART API alternative with no API key, no login, no seller account and no proxy setup**, and you can **export IndiaMART suppliers to Excel, CSV or JSON**, or send them straight to a CRM, Google Sheets or a warehouse. Common uses: an IndiaMART supplier list download for one product, a manufacturer list with phone numbers for one city, a GST-number-wise vendor list, or a price survey across thousands of listings.

For Indian B2B buyers, exporters, distributors and sales teams this is the quick way to **scrape indiamart.com** at scale: IndiaMART se supplier ka number aur GST nikalna, "manufacturers in Delhi with contact number", "wholesale suppliers in Surat list", "LED light manufacturers in Mumbai Excel", थोक विक्रेता (wholesalers), निर्माता (manufacturers), निर्यातक (exporters) और आपूर्तिकर्ता (suppliers) की सूची — मोबाइल नंबर, जीएसटी नंबर, शहर और राज्य के साथ। The Actor follows IndiaMART's own structure: its keyword search (the top 30 suppliers of a query), then its category pages ("impcat" pages, about 500 suppliers each) for every category that matches your keyword, then — when you want more — the same categories city by city. One keyword measured **12,000 unique products from 5,954 suppliers in 234 seconds**; every product is de-duplicated by its IndiaMART product id. Optional product pages add the contact person, address, IEC, CIN, year of establishment, number of employees, annual turnover, legal status, the seller's full description, the Hindi product name (हिंदी नाम) and all photos.

All numbers on this page were measured on the Apify platform on **25 October 2026** (see [Scale and speed](#scale-and-speed-measured-on-the-apify-platform)).

***

### Table of contents

- [At a glance](#at-a-glance)
- [What you get: the IndiaMART data fields](#what-you-get-the-indiamart-data-fields)
- [Who uses this IndiaMART scraper](#who-uses-this-indiamart-scraper)
- [Cookbook: 16 ready-to-run inputs](#cookbook-16-ready-to-run-inputs)
- [How the Actor reads IndiaMART](#how-the-actor-reads-indiamart)
- [Tutorial: scrape IndiaMART in the Apify Console](#tutorial-scrape-indiamart-in-the-apify-console)
- [Tutorial: scrape IndiaMART with the API](#tutorial-scrape-indiamart-with-the-api)
- [Input reference](#input-reference)
- [Output data dictionary with measured fill rates](#output-data-dictionary-with-measured-fill-rates)
- [Real output sample](#real-output-sample)
- [Scale and speed (measured on the Apify platform)](#scale-and-speed-measured-on-the-apify-platform)
- [What you pay](#what-you-pay)
- [Integrations](#integrations)
- [Performance tips](#performance-tips)
- [Troubleshooting: every status message explained](#troubleshooting-every-status-message-explained)
- [Honest limits](#honest-limits)
- [Comparison: IndiaMART website, manual copying and this Actor](#comparison-indiamart-website-manual-copying-and-this-actor)
- [FAQ](#faq)
- [Glossary](#glossary)
- [Is it legal to scrape IndiaMART?](#is-it-legal-to-scrape-indiamart)
- [Changelog](#changelog)
- [Support](#support)

***

### At a glance

| | |
|---|---|
| **What you type** | Keywords (`led lights`, `cotton fabric`, `tmt bars`), IndiaMART category names (`TMT Bars`), or pasted IndiaMART URLs — category pages, city category pages, search pages, product pages |
| **Filters** | City (Delhi, Mumbai, Ahmedabad, Surat, Ludhiana… any city IndiaMART lists) and business type (manufacturer, exporter, wholesaler / distributor, retailer, service provider) — IndiaMART's own filters |
| **What you get** | One row per product offer: `productId`, `productName`, `productUrl`, `category`, `price` + `currency` + `priceUnit` + `priceText`, `minOrderQuantity`, `specifications`, `imageUrl`, `brochureUrl`, `companyName`, `supplierId`, `supplierUrl`, `phone`, `city`, `district`, `state`, `gstNumber`, `gstVerified`, `businessType`, `membershipType`, `supplierBadge`, `trustSeal`, `verifiedExporter`, `rating`, `ratingCount`, `responseRate`, `memberSinceYears` |
| **Product pages (optional)** | `contactPerson`, `address`, `yearEstablished`, `employees`, `annualTurnover`, `legalStatus`, `natureOfBusiness`, `ieCode` (IEC), `cinNumber`, `companyDescription`, `productNameHindi`, all `images`, delivery / quality / response ratings, `companyLogo` — and GSTIN for every row |
| **Lead-list mode** | `uniqueSuppliers: true` keeps one row per supplier — a list of distinct companies instead of a product catalogue |
| **Scale** | 12,000 unique products (0 duplicates) from one keyword in 234 s; IndiaMART lists about 500 suppliers per category page, and big categories are read city by city |
| **Speed** | First row after 0.3 s; 50 products in 2.2 s; 1,000 products in 35 s; product-page mode 3–5 products per second |
| **Formats** | JSON, CSV, Excel, XML, HTML table, RSS; API, webhooks, schedules, Make, Zapier, n8n, Google Sheets, Airtable |
| **Price** | Pay per product row: $3.00 per 1,000 on the Free plan, down to $2.00 per 1,000 on higher Store tiers — product pages included |
| **Needs** | Nothing: no IndiaMART account, no API key, no proxy configuration |

***

### What you get: the IndiaMART data fields

Every row is one product offer as IndiaMART lists it, with the supplier that sells it. Field names are stable across runs, so you can upsert on `productId` (product) or `supplierId` / `supplierUrl` (company).

#### Product and price

- `productId` — IndiaMART's product display id (the number at the end of every product URL, e.g. `2852101828612`).
- `productName` — the product title as the seller wrote it, e.g. "LED Magnetic Light", "Plain/Solids Plain Cotton Fabric".
- `productUrl` — the product page on www.indiamart.com (tracking parameters removed). Free listings often have no public product page; then this is `null`.
- `category`, `categoryId` — IndiaMART's category (its "MCAT") of the product, e.g. "LED Floodlight" / `95554`.
- `price`, `currency`, `priceUnit`, `priceText` — the price IndiaMART shows: `500`, `INR`, `Piece`, "₹ 500/Piece". Lakh and crore amounts are converted ("₹ 1.2 Lakh/Unit" → `120000`); the text is always kept as shown.
- `minOrderQuantity`, `minOrderUnit` — minimum order (MOQ), e.g. `100` `Meter`, when IndiaMART shows one.
- `specifications` — the product's attribute table as an object: `{"Wattage": "15W", "Lighting Color": "Cool White", "Brand": "Syska", "IP Rating": "IP65"}`.
- `description` — the seller's product text (descriptions that only repeat the product name are left out).
- `imageUrl` — the main product photo (1000 × 1000 where IndiaMART has it); `brochureUrl` — the product PDF the seller uploaded.

#### Supplier and contact

- `companyName` — the seller's company, e.g. "Atlas Electricals", "Pooja Industries Private Limited".
- `supplierId` — IndiaMART's id of the seller account; `supplierUrl` — the seller's IndiaMART storefront (`www.indiamart.com/<name>/` or the company's own catalogue domain hosted by IndiaMART).
- `phone` — the number IndiaMART shows for calling the supplier, in IndiaMART's own format `+91-7942869898`. Some carry an extension after a comma, `+91-8047846335,4036` (a comma is a dialling pause — phones dial the extension automatically).
- `city`, `district`, `state` — where the supplier is. `dealsIn` is set instead of `city` when IndiaMART lists a supplier from elsewhere as "Deals in Mumbai".
- `gstNumber` (GSTIN, 15 characters) and `gstVerified` — IndiaMART's GST check.
- `businessType` — Manufacturer, Exporter, Wholesaler / Distributor, Retailer, Service Provider (IndiaMART's own business-type names).

#### Trust and reputation

- `membershipType` — IndiaMART's membership code of the seller (`STAR`, `LEADER`, `TSCATALOG`, `CATALOG`, …), `supplierBadge` — the badge IndiaMART prints for it ("Star Supplier", "Leading Supplier", "Industry Leader").
- `trustSeal` — the seller shows IndiaMART's TrustSEAL; `verifiedExporter` — IndiaMART's "Verified Exporter" mark; `mobileVerified`, `emailVerified`.
- `rating` (of 5) and `ratingCount` — the supplier's IndiaMART rating; `responseRate` — the call response rate IndiaMART prints ("88% Response Rate").
- `memberSinceYears` — years on IndiaMART ("10 yrs" → `10`); `memberSince` — the exact date (search rows and product pages).

#### From the product page (`includeDetails: true` or pasted product URLs)

- `contactPerson` — the contact name IndiaMART shows on the product page (usually the first name, e.g. "Neeraj").
- `address` — the supplier's location line ("Ludhiana, Punjab"; full street address where the seller published it).
- `yearEstablished`, `employees` ("101 to 500 People"), `annualTurnover` ("Rs. 100 - 500 Crore"), `legalStatus` ("Limited Company (Ltd./Pvt.Ltd.)"), `natureOfBusiness`, `additionalBusiness`.
- `ieCode` (Import Export Code), `cinNumber` (company identification number), `companyDescription` (the seller's "about us").
- `productNameHindi` — IndiaMART's Hindi product name, e.g. "प्लेन/सॉलिड्स प्लेन सूती कपड़ा".
- `images` (all product photos), `ratingDelivery`, `ratingQuality`, `ratingResponse` (IndiaMART's percentage scores), `companyLogo`.

#### Where each row came from

- `searchQuery` (your keyword), `sourceType` (`search`, `category` or `product page`), `sourceCategory`, `sourceCity`, `sourceUrl` (the IndiaMART page that lists it), `rank` (the supplier card's place in that list), `scrapedAt`.

***

### Who uses this IndiaMART scraper

#### 1. B2B sales teams building lead lists — "every LED manufacturer in Gujarat with a phone number"

Search `led lights`, set `businessType: "manufacturer"` and `uniqueSuppliers: true`, then filter `state = Gujarat` in the export. You get one row per company with its IndiaMART number, city, GST-verified flag, rating and years on IndiaMART — a call list ranked the way IndiaMART ranks suppliers. Add `includeDetails: true` for contact person, GSTIN and turnover band before the sales team starts dialling.

#### 2. Procurement and sourcing managers — "who can supply 10,000 metres of cotton fabric?"

Search the material, read prices (`price`, `priceUnit`), MOQs and specifications across hundreds of suppliers, then shortlist by `rating`, `ratingCount`, `trustSeal` and `memberSinceYears`. The specification object lets you filter by GSM, width, composition or wattage in a spreadsheet instead of opening 300 tabs.

#### 3. Distributors and dealers expanding into a new city — "all TMT bar suppliers in Mumbai"

Paste `dir.indiamart.com/mumbai/tmt-bars.html` or type the category with `city: "Mumbai"`. The Actor reads IndiaMART's city listing (with the city's own id) and returns suppliers located in — or delivering to — that city (`dealsIn`).

#### 4. Exporters and import agents — "verified Indian exporters of surgical gloves"

Use `businessType: "exporter"` and keep rows with `verifiedExporter: true`; product pages add the IEC (`ieCode`) and the CIN, which customs agents and banks ask for.

#### 5. Market and pricing analysts — "what does a 9 W LED bulb sell for across India?"

Run a category like `led bulb` deep, then group `price` by `specifications.Wattage`, `state` or `supplierBadge`. 8,568 priced products came back from one 12,000-row run — enough for a real price distribution by city and by seller type.

#### 6. Brand owners and channel managers — "who lists our brand, and at what price?"

IndiaMART has brand categories (Philips LED Bulb, Havells LED Bulb, Syska LED Bulb…). Read the brand category all-India and city by city to see which sellers list the brand, their prices and whether they are verified — the starting point for distributor audits and grey-market checks.

#### 7. Fintech, NBFC and credit teams — "GST-registered MSMEs in a sector"

Product pages give GSTIN, legal status, turnover band, employee band, year of establishment and CIN for each seller: the basic KYB fields for a lending or insurance pipeline, joined on `gstNumber`.

#### 8. Logistics, packaging and service companies — "who ships these goods?"

Freight forwarders, packaging suppliers and machinery dealers search the goods their customers make (`pvc pipes`, `corrugated boxes`, `cnc machine`) and get the manufacturers' cities and numbers — a ready prospect list for their own services.

#### 9. Startups validating a market — "how many suppliers, in which states?"

`sourceCategory`, `state` and `city` turn a keyword into a supplier map: how many companies, where they cluster (Surat for textiles, Ludhiana for hosiery, Rajkot for engineering), how many are paid members — before you commit to a market.

#### 10. CRM and data-enrichment teams — "refresh the supplier master every month"

Schedule the same input monthly and upsert on `productId` / `supplierId`. New suppliers, changed prices, new ratings and changed membership show up as diffs.

#### 11. Government-tender and EPC bidders — "find local vendors fast"

Search the item, filter by `city` / `state`, and call suppliers who are GST-verified with a high `responseRate` — a quick L1 vendor list for a tender quote.

#### 12. AI agents and RAG systems — "ground an assistant in Indian B2B supply"

Rows are flat JSON with clean numbers, names and the IndiaMART URL as provenance. Feed them to a retrieval index or call the Actor from an AI agent via the Apify MCP server to answer "who sells 5 kVA solar inverters in Pune and at what price?".

#### 13. Researchers and journalists — "how digital are India's MSMEs?"

Membership types, years on IndiaMART, GST verification and response rates across thousands of suppliers give a measurable view of small-business digitisation by sector and state.

#### 14. E-commerce sellers — "find a manufacturer for private label"

Search the product, keep `businessType: Manufacturer`, sort by `ratingCount`, and contact the top suppliers for white-label pricing; brochures (`brochureUrl`) often include catalogue and price sheets.

***

### Cookbook: 16 ready-to-run inputs

Paste any of these into the JSON tab of the input.

#### 1. One keyword, quick sample (the default prefill)

```json
{ "searchQueries": ["led lights"], "maxItems": 50, "maxCategoriesPerQuery": 3 }
```

#### 2. One keyword, 1,000 products

```json
{ "searchQueries": ["cotton fabric"], "maxItems": 1000 }
```

#### 3. A deep pull for one keyword (the 12,000-row proof)

```json
{ "searchQueries": ["led lights"], "maxItems": 12000 }
```

#### 4. Suppliers in one city

```json
{ "searchQueries": ["tmt bars"], "city": "Mumbai", "maxItems": 500 }
```

#### 5. Manufacturers only

```json
{ "searchQueries": ["pvc pipes"], "businessType": "manufacturer", "maxItems": 1000 }
```

#### 6. Exporters in one city

```json
{ "searchQueries": ["basmati rice"], "city": "Karnal", "businessType": "exporter", "maxItems": 300 }
```

#### 7. A lead list: one row per supplier

```json
{ "searchQueries": ["corrugated boxes"], "uniqueSuppliers": true, "maxItems": 2000 }
```

#### 8. Lead list with contact person, GSTIN and company profile

```json
{ "searchQueries": ["surgical gloves"], "uniqueSuppliers": true, "includeDetails": true, "maxItems": 300 }
```

#### 9. A pasted IndiaMART category page

```json
{ "startUrls": [{ "url": "https://dir.indiamart.com/impcat/tmt-bars.html" }], "maxItems": 2000 }
```

#### 10. A pasted city category page (city taken from the URL)

```json
{ "startUrls": [{ "url": "https://dir.indiamart.com/gurgaon/tmt-bars.html" }], "maxItems": 500 }
```

#### 11. A category page with IndiaMART's business-type filter (`?biz=10` = manufacturers)

```json
{ "startUrls": [{ "url": "https://dir.indiamart.com/impcat/led-lights.html?biz=10" }], "maxItems": 500 }
```

#### 12. Categories by name

```json
{ "categories": ["TMT Bars", "Cotton Fabric", "Surgical Gloves"], "maxItems": 3000 }
```

#### 13. Several keywords in one run (each gets a fair share first)

```json
{ "searchQueries": ["solar panel", "solar inverter", "lithium battery"], "maxItems": 6000 }
```

#### 14. Only IndiaMART's search results (top 30 suppliers per keyword, richest fields)

```json
{ "searchQueries": ["packaging machine", "filling machine"], "includeCategoryListings": false }
```

#### 15. Search results in the keyword's top cities too (more GSTIN-carrying rows)

```json
{ "searchQueries": ["cotton fabric"], "searchTopCities": true, "includeCategoryListings": false }
```

#### 16. Refresh known products from their product pages

```json
{ "startUrls": [
    { "url": "https://www.indiamart.com/proddetail/plain-cotton-fabric-23205079862.html" },
    { "url": "https://www.indiamart.com/proddetail/led-flood-light-100w-2853233047930.html" }
] }
```

***

### How the Actor reads IndiaMART

IndiaMART's own pages get their data from a few JSON calls; the Actor makes the same calls a browser makes, without a browser:

1. **Keyword search** — IndiaMART's search call returns 10 suppliers per call, each with up to four of its products, and the richest supplier record IndiaMART has: GSTIN, district and state, business type, exact member-since date, call response rate. Without a login IndiaMART serves the first three windows of a query (30 suppliers, ~120 products). The same answer lists the IndiaMART categories that match the query, most relevant first.
2. **Category listings** — for each matching category (up to `maxCategoriesPerQuery`), the Actor reads IndiaMART's category listing, 28 supplier cards per page with each card's other products. IndiaMART serves about 500 suppliers per listing, so all matching categories are read all-India first (these are mostly paid members with prices, specifications and product pages), and only then — when the run still needs more and `splitByCity` is on — the large categories city by city, using the category's own top-50 city list.
3. **Product pages** (optional) — the product page's embedded data gives the contact person, GSTIN, IEC, CIN, legal status, employees, turnover, year of establishment, description, Hindi name and photos.

IndiaMART limits how often one address may search (about 15 searches per minute, measured) and holds busy addresses on product pages for minutes. The Actor paces itself under those limits and moves between three routes — the platform's direct connection, Apify datacenter IPs and, as a capped last resort, Indian residential IPs — so you never configure a proxy. Duplicates (the same product in two categories or cities) are dropped by `productId`.

***

### Tutorial: scrape IndiaMART in the Apify Console

1. Open the Actor and click **Try for free** (or **Start**).
2. Under **Search keywords**, type one product per line, e.g. `led lights`.
3. Optional: type a **City** (`Delhi`), pick a **Business type**, set **Max products** (default 1,000).
4. Optional: switch on **Read product pages** for contact person, GSTIN and company profile, or **One row per supplier** for a lead list.
5. Click **Start**. Rows appear in the **Output** tab within a second; the status line shows products, searches, category pages and seconds.
6. When the run finishes, click **Export** and choose **Excel**, **CSV** or **JSON**. The "Suppliers & contacts" and "Company profile" views give narrower tables.

***

### Tutorial: scrape IndiaMART with the API

Start a run and wait for it (replace `<TOKEN>`):

```bash
curl -X POST "https://api.apify.com/v2/acts/logiover~indiamart-scraper/run-sync-get-dataset-items?token=<TOKEN>&format=csv" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["led lights"],"city":"Ahmedabad","maxItems":500}' > indiamart_led_ahmedabad.csv
```

Node.js (`npm i apify-client`):

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('logiover/indiamart-scraper').call({
    searchQueries: ['cotton fabric'],
    businessType: 'manufacturer',
    uniqueSuppliers: true,
    maxItems: 1000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0].companyName, items[0].phone, items[0].city, items[0].state);
```

Python (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<TOKEN>")
run = client.actor("logiover/indiamart-scraper").call(run_input={
    "searchQueries": ["tmt bars"],
    "city": "Mumbai",
    "includeDetails": True,
    "maxItems": 200,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["companyName"], row["phone"], row.get("gstNumber"), row.get("contactPerson"))
```

Dataset exports: `https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=xlsx` (also `csv`, `json`, `xml`, `html`, `rss`; add `&fields=companyName,phone,city,state,gstNumber` for a narrow file).

***

### Input reference

| Field | Type | Default | What it does |
|---|---|---|---|
| `searchQueries` | array of strings | – (prefill `["led lights"]`) | Keywords as typed on IndiaMART. Each is searched (top 30 suppliers), then continued through the matching IndiaMART categories. |
| `startUrls` | array of URLs | – | IndiaMART category pages (`dir.indiamart.com/impcat/<category>.html`), city category pages (`dir.indiamart.com/<city>/<category>.html`, also `m.indiamart.com` forms), search pages (`dir.indiamart.com/search.mp?ss=…`, `export.indiamart.com/search.php?ss=…`) and product pages (`www.indiamart.com/proddetail/…html`). A `?biz=` filter in a category URL is kept. Other URLs are skipped with a note. |
| `categories` | array of strings | – | Category names or URL names (`TMT Bars`, `tmt-bars`). A name IndiaMART does not have is looked up through its search and the closest category is used (the status message says which). |
| `city` | string | empty (all India) | A city IndiaMART lists (Delhi, Mumbai, Surat, Ludhiana…). Applies to keywords, category names and category URLs without a city. Old names work (Bombay, Bangalore, Gurugram → IndiaMART's own names). |
| `businessType` | `all`, `manufacturer`, `exporter`, `wholesaler`, `retailer`, `service` | `all` | IndiaMART's business-type filter. |
| `maxItems` | integer | 1000 (prefill 50) | Total products to save across all inputs; `0` = no limit. |
| `includeCategoryListings` | boolean | `true` | Continue through the matching categories after the search results. Off = search results only (≤ ~120 products per keyword). |
| `maxCategoriesPerQuery` | integer 1–300 | 25 (prefill 3) | How many matching categories to read per keyword, most relevant first. |
| `searchTopCities` | boolean | `false` | Repeat each keyword search in IndiaMART's top cities for it (up to 9 × 30 suppliers) before the categories — more rows with GSTIN, district and business type, but slower (IndiaMART allows about 15 searches per minute per address) and many repeats. |
| `splitByCity` | boolean | `true` | Read big categories city by city once the all-India listings are used up. |
| `includeDetails` | boolean | `false` | Read each product's page: contact person, address, GSTIN, IEC, CIN, year of establishment, employees, turnover, legal status, description, Hindi name, all images. Slower (3–5 products per second measured). |
| `uniqueSuppliers` | boolean | `false` | Keep only the first product of every supplier. |
| `proxyConfiguration` | proxy object | no proxy | Not needed. If you set one, every request goes through it first. |

***

### Output data dictionary with measured fill rates

Fill = share of rows where the field has a value. **Default run** = `{"searchQueries":["led lights"],"maxItems":12000}` (12,000 rows: 119 from search, 11,881 from 16 categories). **Product pages** = `{"searchQueries":["cotton fabric"],"maxItems":120,"includeDetails":true}` (120 rows). Both runs: Apify platform, 25 October 2026.

| Field | Type | Meaning | Fill: default run | Fill: product pages | Example |
|---|---|---|---|---|---|
| `productId` | string | IndiaMART product display id | 100 % | 100 % | `2852101828612` |
| `productName` | string | Product title | 100 % | 100 % | `LED Magnetic Light` |
| `productUrl` | string | Product page | 71.8 % | 100 % | `https://www.indiamart.com/proddetail/led-magnetic-light-2852101828612.html` |
| `category` | string | IndiaMART category | 100 % | 100 % | `LED Lights` |
| `categoryId` | string | Category id | 100 % | 100 % | `32318` |
| `price` | number | Price amount | 71.4 % | 96.7 % | `500` |
| `currency` | string | Currency | 71.4 % | 96.7 % | `INR` |
| `priceUnit` | string | Unit of the price | 71.3 % | 96.7 % | `Piece` |
| `priceText` | string | Price as shown | 71.4 % | 96.7 % | `₹ 500/Piece` |
| `minOrderQuantity` | number | Minimum order | 0.5 % | 70.8 % | `100` |
| `minOrderUnit` | string | MOQ unit | 0.5 % | 70.8 % | `Meter` |
| `specifications` | object | Attribute table | 70.5 % | 98.3 % | `{"Lighting Color":"Cool White","Shape":"Round"}` |
| `description` | string | Seller's product text | 11.1 % | 100 % | `This Product available in Attractive colors…` |
| `imageUrl` | string | Main photo | 93.3 % | 100 % | `https://5.imimg.com/data5/…-1000x1000.jpeg` |
| `brochureUrl` | string | Product PDF | 7.6 % | 45.8 % | `https://5.imimg.com/data5/SELLER/Doc/…pdf` |
| `companyName` | string | Supplier | 100 % | 100 % | `Global Lighting Solutions` |
| `supplierId` | string | Supplier account id | 99.0 % | 100 % | `28548112` |
| `supplierUrl` | string | Supplier storefront | 99.4 % | 100 % | `https://www.indiamart.com/global-lighting-solutions-delhi/` |
| `phone` | string | IndiaMART number (extension after a comma) | 99.9 % | 100 % | `+91-7942869898`, `+91-8047846335,4036` |
| `city` | string | Supplier city | 100 % | 100 % | `New Delhi` |
| `district` | string | District | 1.0 % | 100 % | `Ludhiana` |
| `state` | string | State | 77.5 % | 100 % | `Delhi` |
| `dealsIn` | string | City a supplier from elsewhere serves | 0 % (all-India run; set on city pages) | 0 % | `Gurugram` |
| `gstNumber` | string | GSTIN | 1.0 % | 100 % | `03AAACP9845P1ZV` |
| `gstVerified` | boolean | IndiaMART's GST check | 100 % | 100 % | `true` |
| `businessType` | string | Business type | 1.0 % | 100 % | `Manufacturer` |
| `membershipType` | string | IndiaMART membership code | 100 % | 100 % | `LEADER` |
| `supplierBadge` | string | Badge on the card | 8.4 % | 100 % | `Leading Supplier` |
| `trustSeal` | boolean | TrustSEAL shown | 99.9 % | 100 % | `true` |
| `verifiedExporter` | boolean | Verified Exporter mark | 100 % | 100 % | `false` |
| `mobileVerified` | boolean | Mobile verified | 100 % | 100 % | `true` |
| `emailVerified` | boolean | Email verified | 100 % | 100 % | `true` |
| `rating` | number | Supplier rating (of 5) | 66.8 % | 96.7 % | `4.1` |
| `ratingCount` | number | Number of ratings | 99.9 % | 96.7 % | `18` |
| `responseRate` | number | Call response rate % | 40.9 % | 100 % | `91` |
| `memberSinceYears` | number | Years on IndiaMART | 98.8 % | 96.7 % | `10` |
| `memberSince` | string | Member since (date) | 1.0 % | 100 % | `2016-09-06` |
| `contactPerson` | string | Contact name | – | 100 % | `Neeraj` |
| `address` | string | Address line | – | 100 % | `Ludhiana, Punjab` |
| `yearEstablished` | number | Year of establishment | – | 100 % | `1997` |
| `employees` | string | Employee band | – | 100 % | `101 to 500 People` |
| `annualTurnover` | string | Turnover band | – | 93.3 % | `Rs. 100 - 500 Crore` |
| `legalStatus` | string | Legal status | – | 100 % | `Limited Company (Ltd./Pvt.Ltd.)` |
| `natureOfBusiness` | string | Nature of business | – | 93.3 % | `Manufacturer` |
| `additionalBusiness` | string | Other business types | – | 80.0 % | `Manufacturer,Exporter,Importer` |
| `ieCode` | string | Import Export Code | – | 76.7 % | `3006010302` |
| `cinNumber` | string | CIN | – | 16.7 % | `U51109PB1997PTC020360` |
| `companyDescription` | string | About the company | – | 96.7 % | `In the year 1997, Pooja Industries…` |
| `productNameHindi` | string | Hindi product name | – | 59.2 % | `प्लेन/सॉलिड्स प्लेन सूती कपड़ा` |
| `images` | array | All product photos | – | 100 % | `["https://5.imimg.com/…-1000x1000.jpg"]` |
| `ratingDelivery` | number | Delivery score % | – | 92.5 % | `77` |
| `ratingQuality` | number | Quality score % | – | 92.5 % | `80` |
| `ratingResponse` | number | Response score % | – | 95.8 % | `74` |
| `companyLogo` | string | Logo | – | 86.7 % | `https://4.imimg.com/data4/…-90x90.jpg` |
| `searchQuery` | string | Your keyword | 100 % | 100 % | `led lights` |
| `sourceType` | string | `search`, `category`, `product page` | 100 % | 100 % | `category` |
| `sourceCategory` | string | Category read | 99.0 % | (search rows) | `LED Lights` |
| `sourceCity` | string | City listing read | 0 % (all-India) | 0 % | `Mumbai` |
| `sourceUrl` | string | IndiaMART page that lists the row | 100 % | 100 % | `https://dir.indiamart.com/impcat/led-lights.html` |
| `rank` | number | Supplier card's place in that list | 100 % | 100 % | `36` |
| `scrapedAt` | string | ISO time of the run | 100 % | 100 % | `2026-10-24T22:56:08.834Z` |

Why some fields are lower in category rows: IndiaMART's category listings carry the supplier's city, phone, rating and membership but not its GSTIN, district, business type or exact member-since date — those come with search rows (the first ~120 rows of a keyword) and with product pages. Free listings often have no price, no product page and few specifications; IndiaMART shows them that way too. Rows of a run with product pages contain all detail fields (`null` where the page has nothing).

***

### Real output sample

Three unmodified rows from the runs above (`specifications` and long texts shortened only where marked `…`).

A **search** row (IndiaMART's search record — GSTIN, district, business type and member-since date included):

```json
{
  "productId": "2854917169433",
  "productName": "150 Watt A Model LED Flood Light",
  "productUrl": "https://www.indiamart.com/proddetail/150-watt-a-model-led-flood-light-2854917169433.html",
  "category": "LED Floodlight",
  "categoryId": "95554",
  "price": null,
  "currency": null,
  "priceUnit": null,
  "priceText": null,
  "minOrderQuantity": 100,
  "minOrderUnit": "Piece",
  "specifications": { "IP Rating": "IP66", "Warranty": "1", "Lighting Type": "LED" },
  "description": "Incepted in the year 1993, in Ahmedabad (Gujarat, India), we Atlas Electricals are engaged in Manufacturing and Supplying a qualitative assortment of LED Street Light, LED Floodlight, Tube Light Fittings, …",
  "imageUrl": "https://5.imimg.com/data5/SELLER/Default/2024/9/452246043/AS/RB/KO/1999873/150-watt-a-model-led-flood-light-1000x1000.jpeg",
  "brochureUrl": "https://5.imimg.com/data5/SELLER/Doc/2024/9/452246553/GH/KD/EE/1999873/150-watt-a-model-led-flood-light.pdf",
  "companyName": "Atlas Electricals",
  "supplierId": null,
  "supplierUrl": "https://www.atlaselectricals.com/",
  "phone": "+91-7949340878",
  "city": "Ahmedabad",
  "district": "Ahmedabad",
  "state": "Gujarat",
  "dealsIn": null,
  "gstNumber": "24AKAPP0324J1ZJ",
  "gstVerified": true,
  "businessType": "Retailer",
  "membershipType": "STAR",
  "supplierBadge": "Star Supplier",
  "trustSeal": true,
  "verifiedExporter": false,
  "mobileVerified": true,
  "emailVerified": true,
  "rating": 4.2,
  "ratingCount": 45,
  "responseRate": 92,
  "memberSinceYears": 16,
  "memberSince": "2010-01-13",
  "searchQuery": "led lights",
  "sourceType": "search",
  "sourceCategory": null,
  "sourceCity": null,
  "sourceUrl": "https://dir.indiamart.com/search.mp?ss=led+lights",
  "rank": 1,
  "scrapedAt": "2026-10-24T22:56:08.834Z"
}
```

A **category** row (IndiaMART's category listing):

```json
{
  "productId": "2852101828612",
  "productName": "LED Magnetic Light",
  "productUrl": "https://www.indiamart.com/proddetail/led-magnetic-light-2852101828612.html",
  "category": "LED Lights",
  "categoryId": "32318",
  "price": 500,
  "currency": "INR",
  "priceUnit": "Piece",
  "priceText": "₹ 500/Piece",
  "minOrderQuantity": null,
  "minOrderUnit": null,
  "specifications": { "Brand Name": "SIAM", "Power Source": "Electric", "Phase": "Single Phase", "Packing Type": "Box", "Frame Material": "Mild Steel", "Type of Light": "magnetic lights", "Lighting Color": "Cool White", "Shape": "Round", "Lighting Type": "LED" },
  "description": null,
  "imageUrl": "https://5.imimg.com/data5/SELLER/Default/2023/8/336533067/GS/CJ/HW/28548112/led-magnetic-light-1000x1000.jpeg",
  "brochureUrl": "https://5.imimg.com/data5/SELLER/Doc/2026/6/613644646/LS/AA/RF/28548112/adobe-scan-4-jun-2026.pdf",
  "companyName": "Global Lighting Solutions",
  "supplierId": "28548112",
  "supplierUrl": "https://www.indiamart.com/global-lighting-solutions-delhi/",
  "phone": "+91-7942869898",
  "city": "New Delhi",
  "district": null,
  "state": "Delhi",
  "dealsIn": null,
  "gstNumber": null,
  "gstVerified": true,
  "businessType": null,
  "membershipType": "LEADER",
  "supplierBadge": "Leading Supplier",
  "trustSeal": true,
  "verifiedExporter": false,
  "mobileVerified": true,
  "emailVerified": true,
  "rating": 4.1,
  "ratingCount": 18,
  "responseRate": 91,
  "memberSinceYears": 10,
  "memberSince": null,
  "searchQuery": "led lights",
  "sourceType": "category",
  "sourceCategory": "LED Lights",
  "sourceCity": null,
  "sourceUrl": "https://dir.indiamart.com/impcat/led-lights.html",
  "rank": 36,
  "scrapedAt": "2026-10-24T22:56:08.834Z"
}
```

A row **with the product page** (`includeDetails: true`), detail fields only:

```json
{
  "productId": "23205079862",
  "productName": "Plain/Solids Plain Cotton Fabric",
  "priceText": "₹ 130/Meter",
  "minOrderQuantity": 100,
  "minOrderUnit": "Meter",
  "companyName": "Pooja Industries Private Limited",
  "supplierId": "33610340",
  "phone": "+91-7942799340",
  "city": "Ludhiana",
  "state": "Punjab",
  "gstNumber": "03AAACP9845P1ZV",
  "contactPerson": "Neeraj",
  "address": "Ludhiana, Punjab",
  "yearEstablished": 1997,
  "employees": "101 to 500 People",
  "annualTurnover": "Rs. 100 - 500 Crore",
  "legalStatus": "Limited Company (Ltd./Pvt.Ltd.)",
  "natureOfBusiness": "Manufacturer",
  "additionalBusiness": "Manufacturer,Exporter,Importer",
  "ieCode": "3006010302",
  "cinNumber": "U51109PB1997PTC020360",
  "companyDescription": "In the year 1997 , Pooja Industries Private Limited took up its first step in the fashion industry as manufacturer and exporter of Acrylic Fabric, Army Uniform Fabric, Cashmilon Fabric and much more …",
  "productNameHindi": "प्लेन/सॉलिड्स प्लेन सूती कपड़ा",
  "images": ["https://5.imimg.com/data5/SELLER/Default/2021/3/WX/VP/QS/33610340/arvnd-1000x1000.jpg"],
  "ratingDelivery": 77,
  "ratingQuality": 80,
  "ratingResponse": 74,
  "companyLogo": "https://4.imimg.com/data4/WN/BP/MY-33610340/pooja-industries-private-limited-90x90.jpg"
}
```

**CSV / Excel columns** (in this order): `productId, productName, productUrl, category, categoryId, price, currency, priceUnit, priceText, minOrderQuantity, minOrderUnit, specifications/<attribute>…, description, imageUrl, brochureUrl, companyName, supplierId, supplierUrl, phone, city, district, state, dealsIn, gstNumber, gstVerified, businessType, membershipType, supplierBadge, trustSeal, verifiedExporter, mobileVerified, emailVerified, rating, ratingCount, responseRate, memberSinceYears, memberSince, [product-page fields], searchQuery, sourceType, sourceCategory, sourceCity, sourceUrl, rank, scrapedAt`. `specifications` becomes one column per attribute (`specifications/Wattage`, `specifications/Brand`…).

#### Hand check against IndiaMART

On 25 October 2026, 14 rows spread over the 12,000-row run were re-read from IndiaMART's live product pages: 13 matched on every compared field (product name, price as shown, company, phone with extension, city, rating, number of ratings, years on IndiaMART); in one row the listing data carried a rating of 2 from 3 ratings that the product page does not display (IndiaMART hides low ratings with few votes on that page).

***

### Scale and speed (measured on the Apify platform)

All runs on 25 October 2026, default memory (1,024 MB), no proxy configured:

| Run | Input | Rows | Time | Notes |
|---|---|---|---|---|
| Prefill | `led lights`, 50 | 50 | 2.2 s | first row after 0.3 s |
| Default | `led lights`, 1,000 | 1,000 | 34.9 s | 3 searches + category pages |
| Deep, one keyword | `led lights`, 12,000 | **12,000 unique, 0 duplicates** | 234 s | 3 searches, 272 category pages, 16 categories, 5,954 suppliers, 775 cities, 22 states |
| City + business type | `tmt-bars` URL, Mumbai, manufacturers, 200 | 200 | 7.7 s | IndiaMART's Mumbai TMT Bars listing |
| Lead list | category "Cotton Fabric", unique suppliers, 150 | 150 distinct suppliers | 24 s | |
| Product pages | `cotton fabric`, 120, details | 120 (120 with product pages) | 26.7 s | GSTIN, contact person, profile on every row |

How much is there? IndiaMART's search counted 11,948 matching products for "led lights", and its LED Lights category page alone counted 112,103 listings; a keyword matched between 17 and 225 IndiaMART categories in our tests (surgical gloves 17, tmt bars 75, led lights 187, cotton fabric 225). IndiaMART serves about 500 suppliers per category listing (per city for city listings), so the reachable depth for a keyword is roughly *matching categories × 500 suppliers × products per supplier*, plus up to 50 cities per big category with `splitByCity`.

***

### What you pay

Pay per result: one product row in the dataset = one result. Store tiers lower the price automatically:

| Plan tier | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|---|---|---|---|---|---|---|
| Per 1,000 products | $3.00 | $2.67 | $2.33 | $2.00 | $2.00 | $2.00 |

| Pull | Rows | Free plan | Gold and above |
|---|---|---|---|
| Quick sample | 50 | $0.15 | $0.10 |
| One keyword, default | 1,000 | $3.00 | $2.00 |
| Deep keyword | 10,000 | $30.00 | $20.00 |
| Large sourcing database | 100,000 | $300.00 | $200.00 |

Product pages, city splitting and the automatic fallback routes are included — the price is per saved row. `uniqueSuppliers` saves fewer rows for the same work, so it also costs less.

#### Maximum cost per run

Every run can carry a **maximum cost per run** (set it in the run options, or the platform sets one). The Actor converts it into a row budget at the current price, saves exactly that many rows and stops cleanly with the status message *"Saved N products — this run's maximum cost ($X) covers N results at the current price. Raise "Maximum cost per run" to get more."* It never writes a row it cannot charge for, and the run finishes as SUCCEEDED with everything collected so far. Measured on 25 October 2026: a run with a $0.05 maximum saved exactly 18 rows at the Bronze-tier price ($2.67 per 1,000) and was charged for exactly those 18 — on the Free tier ($3.00 per 1,000) the same cap covers 16 rows.

***

### Integrations

- **Google Sheets** — use the Apify Google Sheets integration on the dataset, or `=IMPORTDATA("https://api.apify.com/v2/datasets/<ID>/items?format=csv&clean=1")`.
- **Airtable** — Apify's Airtable integration or Make/Zapier: map `productId` as the primary field to upsert.
- **Make, Zapier, n8n** — the Apify app/node: *Run Actor* with any [Cookbook](#cookbook-16-ready-to-run-inputs) JSON, then *Get dataset items* and push rows to your CRM (HubSpot, Zoho, Salesforce, Pipedrive).
- **Webhooks** — add a webhook on *Run succeeded* that posts the dataset id to your endpoint.
- **Schedules** — run the same input daily, weekly or monthly from the Console (Schedules) and diff on `productId` and `price`.
- **AI agents and MCP** — the Actor is callable from the Apify MCP server, so assistants can fetch suppliers on demand ("find GST-verified PVC pipe manufacturers in Ahmedabad").
- **Warehouses** — load the JSON/CSV export into BigQuery, Snowflake, Postgres or ClickHouse; `specifications` is a JSON object (store as JSON / VARIANT).
- **Python / pandas** — `pd.read_csv("https://api.apify.com/v2/datasets/<ID>/items?format=csv&clean=1")`.

***

### Performance tips

- Start with `maxItems: 50–200` to see what IndiaMART has for your keyword, then scale up.
- Use IndiaMART's own words: `tmt bars` beats `steel rods for construction`; the status message names the categories it matched.
- Add `city` when you need local suppliers: city listings are separate windows of ~500 suppliers each, so a city run reaches different companies than an all-India run.
- `businessType` filters at IndiaMART's side — fewer pages for the same useful rows.
- `uniqueSuppliers: true` + `includeDetails: true` is the efficient lead-list combination: one product page per company.
- Product pages are the slow part (IndiaMART holds busy addresses on them); run broad lists without them, then refresh the shortlisted products by pasting their URLs.
- One run with several keywords is faster than many small runs.

***

### Troubleshooting: every status message explained

| Status message | Meaning | What to do |
|---|---|---|
| `COMPLETED: saved N IndiaMART products in S s (the "Max products" limit).` | Done; the row limit was reached. | Raise **Max products** for more. |
| `COMPLETED: saved N IndiaMART products, M with product-page details in S s …` | Done with product pages; M rows have the detail fields. | – |
| `COMPLETED: saved N IndiaMART products in S s.` | IndiaMART had no more rows for these inputs within the limits (30 search suppliers per keyword, ~500 per listing, the chosen number of categories). | Raise `maxCategoriesPerQuery`, keep `splitByCity` on, add keywords or cities. |
| `… — the run reached its timeout; give it more time to collect more.` | The run's time limit came first; rows so far are saved. | Increase the run timeout. |
| `… — this run's maximum cost ($X) is reached; raise it to get more` / `Saved N products — this run's maximum cost ($X) covers N results …` | The cost cap you (or the platform) set was reached. | Raise **Maximum cost per run**. |
| `PARTIAL: saved N IndiaMART products … K page(s) could not be read (reason).` | Rows are saved, but some pages were refused on every route. | Run again later; the missing pages are usually back within minutes. |
| `EMPTY_RESULT: IndiaMART answered but nothing matched. …` | IndiaMART answered and has no listing for this input (e.g. a category URL that does not exist). | Check the URL or keyword; the note says which input. |
| `BLOCKED: IndiaMART did not answer (HTTP 429) after N attempt(s) on 3 routes …` | Every route was refused — an access failure, not an empty result. The run fails so it is not mistaken for "no data". | Try again in a few minutes. |
| `FETCH_FAILED: …` | Pages could not be read (network errors), or no rows and unread pages — an empty result cannot be confirmed. | Try again. |
| `Nothing to scrape: add at least one keyword …` | No keyword, category or IndiaMART URL in the input (INVALID_INPUT; the run fails). | Add input. |
| Note `Skipped <url> (not an IndiaMART URL).` | That URL is not on indiamart.com. | Fix or remove it. |
| Note `IndiaMART has no category page … (the category may not be listed for <city>)` | The category or the category in that city does not exist on IndiaMART. | Try the all-India category or another city. |
| Note `N of the matching categories have no IndiaMART page for <city>.` | Some related categories are not listed for that city; the others were read. | – |
| Note `Category "X" read as IndiaMART's category "Y".` | A typed category name was mapped to IndiaMART's closest category. | Use the URL name if you meant another one. |
| Note `Product page not found: <url>` | The product was removed from IndiaMART. | – |
| Note `IndiaMART found nothing for "<keyword>" …` | IndiaMART's search has no products for that keyword (and city). | Try another spelling or a broader word. |
| Note `A city on its own does not select anything — add a keyword or a category.` | A city was set without keywords, categories or URLs. | Add what to look for. |
| Log `IndiaMART refused the direct connection for search requests (HTTP 429) — other routes take over for 30 s.` | IndiaMART's per-address limit; the Actor switched routes by itself. | Nothing — informational. |

The run's default key-value store holds a `SUMMARY` record with the outcome, rows saved, duplicates skipped, searches, category pages, product pages, requests per route and the notes.

***

### Honest limits

- **Search depth.** Without a login IndiaMART serves the first 30 suppliers of a keyword search; the Actor continues through categories, which is where the volume is. `searchTopCities` adds up to 9 × 30 more search suppliers.
- **Category depth.** IndiaMART lists about 500 suppliers per category listing (all-India or per city). Big categories are read city by city (the category's top 50 cities); suppliers that appear in none of those windows cannot be reached.
- **Fields by source.** GSTIN, district, business type and the exact member-since date come with search rows and product pages, not with category rows. State on category rows is IndiaMART's state for the supplier's city where IndiaMART names it.
- **Phone numbers are IndiaMART's call numbers** (the number IndiaMART publishes for the supplier, often with an extension), not private mobile numbers. IndiaMART does not publish suppliers' e-mail addresses.
- **Contact person** is the name on the product page — usually the first name only.
- **Free listings** often have no price, no product page and few specifications; the rows keep what IndiaMART shows.
- **Ratings**: the listing data includes ratings that some IndiaMART pages hide (low ratings with few votes).
- **Order** follows IndiaMART at the moment of the run and differs between visitors' locations; `rank` is the place in the list that was read.
- **Product pages** are rate-limited by IndiaMART; with `includeDetails` large runs take longer (3–5 products per second measured).
- **No buyer data.** BuyLeads, buyer requirements and anything behind an IndiaMART login are not read.

***

### Comparison: IndiaMART website, manual copying and this Actor

| | IndiaMART website | Manual copying | This Actor |
|---|---|---|---|
| Find suppliers by product, city, type | Yes, page by page | Yes | Yes, in one run |
| Export to Excel / CSV | No | By hand | Yes (JSON, CSV, Excel, XML) |
| Phone number per supplier | One click per supplier | Copy each | Every row |
| GSTIN, IEC, CIN, turnover, employees | On each product page | Copy each | Every row with product pages |
| Thousands of suppliers | Endless scrolling | Days | Minutes (12,000 rows in 234 s) |
| De-duplication | – | By hand | By IndiaMART product id |
| Repeatable / scheduled | – | – | Schedules, API, webhooks |
| Login needed | For contacting suppliers | – | No |

IndiaMART's own integrations are built for sellers who want their own buyer enquiries in a CRM; for searching suppliers and products across the marketplace there was no public IndiaMART API we know of as of October 2026 — this Actor fills that gap with the data IndiaMART publishes to every visitor.

***

### FAQ

#### What is an IndiaMART scraper?

A tool that reads IndiaMART's public listings — products, prices and the suppliers behind them — and saves them as structured rows you can open in Excel or send to other software.

#### How do I download an IndiaMART supplier list in Excel?

Run the Actor with your keyword, then **Export → Excel**. Use `uniqueSuppliers: true` for one row per company.

#### Is there an IndiaMART API for supplier data?

IndiaMART's integrations focus on sellers' own enquiries. This Actor works as an IndiaMART API alternative for marketplace data: one API call returns suppliers and products as JSON.

#### Do I need an IndiaMART account or login?

No. Only public data is read, without logging in.

#### Can I get supplier phone numbers from IndiaMART?

Yes — every row has `phone`, the number IndiaMART shows for calling the supplier (`+91-…`, sometimes with an extension after a comma).

#### Can I get the GST number of IndiaMART suppliers?

Yes: search rows carry `gstNumber`, and with `includeDetails: true` every row gets it from the product page, together with IEC and CIN where the seller published them.

#### How do I get only manufacturers?

Set `businessType: "manufacturer"` (or paste a category URL with `?biz=10`).

#### How do I get suppliers in one city like Delhi, Mumbai or Surat?

Set `city`, or paste the city category URL (`dir.indiamart.com/surat/cotton-fabric.html`).

#### How many results can I get for one keyword?

Measured: 12,000 unique products for "led lights" in one run. The ceiling depends on how many categories match and how big they are (about 500 suppliers per listing, per city when split).

#### Why does IndiaMART search show thousands of products but only 30 suppliers come from search?

IndiaMART serves only the first three search windows without a login. The Actor then reads the matching categories, which hold the bulk of the listings.

#### Does it get the contact person's name?

Yes, with `includeDetails: true`: `contactPerson` as shown on the product page (usually the first name).

#### Does it get e-mail addresses?

No — IndiaMART does not publish suppliers' e-mail addresses.

#### Can I scrape IndiaMART categories (impcat pages)?

Yes — paste `dir.indiamart.com/impcat/<category>.html` or type the category name under **Category names**.

#### What is an IndiaMART "impcat" URL?

IndiaMART's all-India category page path, e.g. `dir.indiamart.com/impcat/tmt-bars.html`. City pages use the city instead: `dir.indiamart.com/mumbai/tmt-bars.html`.

#### Can I scrape a single IndiaMART product page?

Yes — paste product URLs (`www.indiamart.com/proddetail/…html`) under **IndiaMART URLs**; each becomes a full row with product-page details.

#### How fresh is the data?

Live: every run reads IndiaMART at that moment. Schedule runs to keep a list current.

#### Does it scrape IndiaMART export (export.indiamart.com) search?

Paste an `export.indiamart.com/search.php?ss=…` URL — the keyword is read from it and searched on IndiaMART's main directory.

#### Can I search in Hindi?

IndiaMART's search works best with English product names; Hindi product names are returned in `productNameHindi` when product pages are read.

#### Why is `productUrl` empty for some rows?

Many free listings have no public product page on IndiaMART; the row still has the product, price (if shown), supplier, phone and city.

#### What do STAR, LEADER and TSCATALOG mean?

IndiaMART membership codes. STAR is the "Star Supplier" tier, LEADER the "Leading Supplier" tier, TSCATALOG a TrustSEAL catalogue; other codes are IndiaMART's names for its other catalogue plans.

#### What is TrustSEAL?

IndiaMART's verification badge for sellers whose business details IndiaMART has checked; `trustSeal` is `true` when the listing shows it.

#### What does the response rate mean?

The share of buyer calls the supplier answers, as IndiaMART prints it ("88% Response Rate"); IndiaMART shows it from 60 % up, so lower rates are `null`.

#### Can I filter by price?

Prices come as numbers (`price`, `priceUnit`), so filter after the run; IndiaMART's listings themselves are not filtered by price here.

#### Can I get the minimum order quantity (MOQ)?

Yes when IndiaMART shows one: search rows and product pages carry `minOrderQuantity` and `minOrderUnit`.

#### Will I get duplicates?

No. Every product is saved once per run (de-duplicated by `productId`), even when it appears in several categories or cities.

#### How do I get one row per company?

`uniqueSuppliers: true`.

#### Can I run it every week?

Yes — create a Schedule in the Apify Console with the same input, and use `productId` / `supplierId` to merge.

#### Does it work with Make, Zapier or n8n?

Yes, through the Apify integrations (see [Integrations](#integrations)).

#### How much does it cost to scrape 10,000 IndiaMART products?

$30 on the Free plan, $20 on Gold and higher tiers (see [What you pay](#what-you-pay)).

#### Why do I see "IndiaMART refused the direct connection" in the log?

IndiaMART limits requests per address; the Actor pauses that route and continues on another. It is informational.

#### Can I use my own proxy?

Yes, under **Proxy configuration** — but none is needed.

#### Is the data accurate?

Every value is IndiaMART's own data, copied as shown; a hand check of 14 rows against live product pages matched on all compared fields in 13 rows (the 14th: a hidden low rating, see [Real output sample](#real-output-sample)).

#### Can I get Indian B2B leads for my CRM?

Yes — run with your product keywords, `uniqueSuppliers: true`, export CSV and import into your CRM, or connect via Make/Zapier.

#### IndiaMART se supplier ka mobile number kaise nikale?

Keyword aur city daal kar run karein — har row mein `phone` (IndiaMART ka call number) aur shehar milega; Export → Excel.

***

### Glossary

- **IndiaMART (इंडियामार्ट)** — India's online B2B marketplace where manufacturers, wholesalers, exporters, retailers and service providers list products and services.
- **MCAT / category** — IndiaMART's product category (e.g. "LED Lights", id 32318); every product belongs to one.
- **impcat** — the path of IndiaMART's all-India category pages (`/impcat/<category>.html`).
- **City category page** — the same category for one city (`/mumbai/<category>.html`).
- **Display id** — IndiaMART's product number in product URLs; here `productId`.
- **Supplier (आपूर्तिकर्ता)**, **manufacturer (निर्माता)**, **exporter (निर्यातक)**, **wholesaler / distributor (थोक विक्रेता / वितरक)**, **retailer (खुदरा विक्रेता)**, **service provider (सेवा प्रदाता)** — IndiaMART's business types.
- **GSTIN (जीएसटी नंबर)** — the 15-character Goods and Services Tax identification number of an Indian business; the first two digits are the state code.
- **IEC** — Import Export Code, required for Indian exporters and importers.
- **CIN** — Corporate Identification Number of a registered company.
- **MOQ (न्यूनतम ऑर्डर)** — minimum order quantity.
- **TrustSEAL** — IndiaMART's seller verification badge.
- **Star Supplier, Leading Supplier, Industry Leader** — IndiaMART's paid membership badges.
- **Verified Exporter** — IndiaMART's mark for checked exporters.
- **Response rate** — the share of calls a supplier answers, measured by IndiaMART.
- **"Deals in <city>"** — IndiaMART's label for a supplier located elsewhere that serves that city.
- **Lakh (लाख) / Crore (करोड़)** — 1,00,000 and 1,00,00,000; prices like "₹ 1.2 Lakh" are converted to numbers.
- **Specifications** — IndiaMART's product attribute table (wattage, material, brand, size…).
- **BuyLead** — a buyer requirement on IndiaMART (behind a seller login; not read by this Actor).

***

### Is it legal to scrape IndiaMART?

The Actor reads only information IndiaMART publishes to every visitor without logging in — product listings and the business contact details suppliers publish to be contacted by buyers. Web scraping of public data is generally lawful, but how you use the data is your responsibility. Under India's **Digital Personal Data Protection Act, 2023 (DPDP Act)**, contact names and phone numbers can be personal data: process them for a legitimate purpose, keep them secure, honour opt-out requests and do not use them for spam. If you are in the EU/UK, the **GDPR** applies to personal data of individuals you process; for Indian sole proprietors, a company name can be a person's name. Respect IndiaMART's terms of use, do not overload the site, and do not resell personal data without a lawful basis. This is not legal advice — consult a lawyer for your use case.

***

### Changelog

- **1.0 (25 October 2026)** — First release: IndiaMART keyword search (top 30 suppliers per query, optionally in the query's top cities), all matching category listings (all India, then city by city), pasted category / city / search / product URLs, category names, city and business-type filters, product pages (contact person, address, GSTIN, IEC, CIN, company profile, Hindi name, photos), one-row-per-supplier mode, automatic route switching under IndiaMART's rate limits, outcome semantics and SUMMARY record.

***

### Support

Questions, a missing field, or a page type you need? Open an issue on the Actor's **Issues** tab in the Apify Console — we reply within 24 hours. Please include the run id and your input (JSON) so we can reproduce it.

# Changelog

This Actor's version history is a separate document: https://apify.com/logiover/indiamart-scraper/changelog.md

# Actor input Schema

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

Products or services to look for, as you would type them on IndiaMART (for example "led lights", "cotton fabric", "tmt bars", "surgical gloves"). Every keyword is searched the way IndiaMART's own search does it, then continued through the IndiaMART categories that match it.

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

Pasted IndiaMART pages: category pages (dir.indiamart.com/impcat/<category>.html), city category pages (dir.indiamart.com/<city>/<category>.html), search pages (dir.indiamart.com/search.mp?ss=…) or product pages (www.indiamart.com/proddetail/…html). A ?biz= filter in a category URL is kept.

## `categories` (type: `array`):

IndiaMART category names or their URL names ("TMT Bars", "tmt-bars", "Cotton Fabric"). Read from the category listing like a pasted category page. A name IndiaMART does not know is looked up through its search.

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

Only suppliers in this Indian city (for example Delhi, Mumbai, Ahmedabad, Surat, Ludhiana). Leave empty for all of India.

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

Only suppliers of this type, using IndiaMART's own business-type filter.

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

How many products (rows) to save in total, across all keywords and URLs. 0 = no limit. Every row is one product offer with its supplier.

## `includeCategoryListings` (type: `boolean`):

After IndiaMART's search results for a keyword (its top 30 suppliers, also in its top cities), continue through the IndiaMART categories that match the keyword — this is what makes thousands of products per keyword possible.

## `maxCategoriesPerQuery` (type: `integer`):

How many of the matching IndiaMART categories to read per keyword, most relevant first.

## `searchTopCities` (type: `boolean`):

When no city is set, repeat each keyword search in the cities where IndiaMART has the most suppliers for it (up to 9 cities, 30 suppliers each) before the category listings. Search rows carry the most supplier fields (GSTIN, district, state, business type, member-since date); IndiaMART answers about 14 searches per minute per address, so this is slower and repeats many suppliers.

## `splitByCity` (type: `boolean`):

IndiaMART lists about 500 suppliers per category page. When a category has more and you need more, its top 50 cities are read one by one.

## `includeDetails` (type: `boolean`):

Open every product's page to add the contact person, address, GSTIN, IEC, CIN, year of establishment, employees, annual turnover, legal status, full description, Hindi product name and all images. One extra request per product — slower.

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

Keep only the first product of every supplier — a lead list of distinct companies instead of a product catalogue.

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

Not needed: IndiaMART is read directly, with Apify datacenter and Indian residential IPs as automatic fallbacks. Set a proxy here only if you want every request to go through it.

## Actor input object example

```json
{
  "searchQueries": [
    "led lights"
  ],
  "businessType": "all",
  "maxItems": 50,
  "includeCategoryListings": true,
  "maxCategoriesPerQuery": 3,
  "searchTopCities": false,
  "splitByCity": true,
  "includeDetails": false,
  "uniqueSuppliers": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `products` (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 = {
    "searchQueries": [
        "led lights"
    ],
    "maxItems": 50,
    "maxCategoriesPerQuery": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/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": ["led lights"],
    "maxItems": 50,
    "maxCategoriesPerQuery": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/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": [
    "led lights"
  ],
  "maxItems": 50,
  "maxCategoriesPerQuery": 3
}' |
apify call logiover/indiamart-scraper --silent --output-dataset

```

## MCP server setup

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