# IndiaMART Supplier Counts by Business Type & City (`jpmarketdata/indiamart-supplier-market-checker`) Actor

Type an IndiaMART category and get how many suppliers it has and what kind they are. Returns exact counts by business type (manufacturer, exporter, wholesaler…), a count for each city you name, and asking prices from the 28 listings shown. $0.02 per category, no results = no charge. Unofficial.

- **URL**: https://apify.com/jpmarketdata/indiamart-supplier-market-checker.md
- **Developed by:** [h ichi](https://apify.com/jpmarketdata) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 90.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 category market summaries

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## IndiaMART Supplier Counts by Business Type & City

**What it does:** Reads IndiaMART, India's largest B2B directory, and returns one summary per product category: how many suppliers there are and what kind they are.

**You enter:** Category slugs from a directory URL, e.g. `submersible-pumps`. Optional cities like `mumbai`.

**You get:** One row per category: total suppliers; exact counts of manufacturers, exporters, wholesalers, retailers, service providers; a count per city you name; and from the 28 listings shown, asking prices per unit and years in business. Optional: one row per supplier.

**Price:** $0.02 per category — every category you enter is charged. +$0.002 per supplier if you also want each supplier (off by default). No results = no charge.

**Example:** enter `submersible-pumps` with city `mumbai` → 27,245 suppliers · 4,237 manufacturers · 29 exporters · 8,311 retailers · 7,477 with no business type listed · Mumbai 610 · asking price median ₹10,200 per piece (range ₹3,800–125,000), from the 25 listings on that page that quote a price

> Unofficial — not affiliated with IndiaMART. Reads public pages only.

### Pricing — $0.02 per category

| Event | Price | When |
|---|---|---|
| Category market summary | **$0.02** | Per category analyzed |
| Individual supplier | **$0.002** | Only if you enable **Include individual suppliers** |

A default run (1 category, summary only) costs **$0.02**. You pay per category you enter; there is no monthly fee. **A category that returns nothing is never charged.**

### Input

| Field | Example | Notes |
|---|---|---|
| `mcats` | `["submersible-pumps"]` | Category slugs — the last path segment of a directory URL. Each costs $0.02 |
| `bizTypes` | `["manufacturer","exporter"]` | Which business types to count. One request each. Empty = all five |
| `cities` | `["mumbai","delhi"]` | City slugs to break the category down by. One request each |
| `maxCities` | `5` | Safety cap so a long city list cannot blow the time budget |
| `cityBizBreakdown` | `false` | Cross-tabulate every city by business type (cities × types requests) |
| `maxSuppliersPerCategory` | `100` | Cap on how many listings are returned when **Include individual suppliers** is on. It does **not** affect the counts, and it does **not** affect the asking-price / years-in-business numbers — those always come from the 28 listings on the all-India category page |
| `includeIndividualItems` | `false` | Also emit each sampled supplier listing |
| `convertToUsd` | `true` | Adds USD stats at the current exchange rate |

### The one thing to understand: counts are exact, prices are a sample

This Actor deliberately reports two kinds of number and never lets them blur together. Every record carries `basisNote` saying so, and each block carries its own `basis` field:

| Block | `basis` | Why |
|---|---|---|
| `supplierCounts` (total, by business type, by city) | **`population`** | Each is a *filter* on the directory, and IndiaMART prints the exact hit count for whatever filter you send. `?biz=20` returning 29 means there are 29 exporters, full stop |
| `priceStats`, `supplierQuality`, `sampleTopCities` | **`sample`** | A directory page renders 28 listings and **IndiaMART exposes no pagination** — so these describe those 28, with `sampleSize` and `count` stated |

That asymmetry is honest, not a limitation to hide: the counts are the product, the prices are context. `bizBreakdownComplete` tells you whether all five business-type requests succeeded, and `unclassified` (7,477 in the measurement above) is the remainder that carries no business-type tag — reported rather than silently folded into a bucket.

### Output example (`type: "market_summary"`)

*Measured on 2026-08-01 (real run).*

```json
{
  "type": "market_summary",
  "mcat": "submersible-pumps",
  "mcatName": "Submersible Pump",
  "mcatId": "2085",
  "sourceUrl": "https://dir.indiamart.com/impcat/submersible-pumps.html",
  "supplierCounts": {
    "basis": "population",
    "total": 27245,
    "byBizType": [
      { "code": 10, "label": "Manufacturer",           "count": 4237, "share": 0.1555 },
      { "code": 20, "label": "Exporter",               "count": 29,   "share": 0.0011 },
      { "code": 30, "label": "Wholesaler/Distributor", "count": 4461, "share": 0.1637 },
      { "code": 40, "label": "Retailer",               "count": 8311, "share": 0.3050 },
      { "code": 50, "label": "Service Provider",       "count": 2730, "share": 0.1002 }
    ],
    "bizTypedTotal": 19768,
    "unclassified": 7477,
    "bizBreakdownComplete": true,
    "byCity": [
      { "city": "mumbai", "cityName": "Mumbai", "stateName": "Maharashtra", "total": 610,  "shareOfIndia": 0.0224 },
      { "city": "delhi",  "cityName": "Delhi",  "stateName": "Delhi",       "total": 1132, "shareOfIndia": 0.0415 }
    ]
  },
  "priceStats": {
    "basis": "sample",
    "sampleSize": 28,
    "unit": "Piece",
    "count": 25,
    "inr": { "min": 3800, "p25": 6000, "median": 10200, "p75": 25000, "max": 125000, "average": 21363 },
    "usd": { "min": 39.78, "p25": 62.81, "median": 106.78, "p75": 261.72, "max": 1308.62, "average": 223.65 },
    "byUnit": [
      { "unit": "Piece", "count": 25, "inr": { "median": 10200 } },
      { "unit": "Unit",  "count": 3,  "inr": { "median": 14500 } }
    ],
    "exchangeRateInrUsd": 0.010469
  },
  "supplierQuality": {
    "yearsInBusiness": { "min": 4, "p25": 11, "median": 13, "p75": 15, "max": 21 },
    "rating": { "count": 28, "median": 4.2 },
    "transactions": { "min": 2, "p25": 18, "median": 37, "p75": 78, "max": 291 }
  },
  "sampleTopCities": [["Ahmedabad", 4], ["Rajkot", 4], ["Coimbatore", 3]],
  "requestsMade": 8,
  "checkedAt": "2026-08-01T14:26:47.287438+00:00"
}
```

### What this Actor does not do

- **No contact details, ever.** Phone numbers, click-to-call tokens and street addresses are stripped at the parser, not filtered at the end — the fields that carry them are excluded by name and a guard asserts no record contains them. This Actor is a market-structure tool, not a lead scraper
- **No `/search.mp`.** IndiaMART's robots.txt disallows the free-text search path, so the Actor only ever requests the category and city directory pages that robots permits
- **No listing dumps by default.** The product is the statistic; individual listings are opt-in and separately priced
- **Nothing is stored.** Every run reads the site live; nothing is kept between runs
- **No pagination beyond one page.** IndiaMART exposes none, and inventing one by hammering unlisted URLs would be both fragile and rude. The sample is honestly capped at what one page renders

### Notes on the data

- **Run it without a proxy.** Measured 2026-08-01 with the internal `dc-ip-probe`: a plain datacenter IP gets **200** (259 KB), while the Apify datacenter **proxy gets 403**. This is the opposite of most Actors in this family — if you ever see a 403 here, *disabling* proxy is the fix, not enabling it
- **Business-type labels come from the page's own filter table**, so a re-numbering on IndiaMART's side is picked up automatically; the input enum (`manufacturer`, `exporter`, …) stays stable regardless
- `map_ctotal` looks like a fourth count field but is **not** used: measured 2026-08-01 it stays at the unfiltered category total on every filtered request, so cross-checking against it would fail every time
- Prices are **quoted asking prices** in a B2B directory — they are negotiation starting points, not transaction prices, and the unit of sale matters more than in a retail marketplace
- A run costs 1 + one request per business type + one per city (× business types if the cross-tab is on). The default input is 8 requests and finishes in about 15 seconds

### If something goes wrong

- **Wrong number or a failed run?** Open a ticket on the **Issues** tab. I read every one and reply within 2 business days (Japan time).
- **You never get a fake "empty" result.** If the site can't be read, the run fails and says so.
- **No results = no charge.** You only pay for results you actually get.
- **Checked every week.** An automatic test runs this tool weekly; if the site changes, I fix it.
- **Public pages only.** No login, no personal data, and it goes easy on the site.

### More tools by the same author

- [Mercari Japan Sold Prices — What Items Really Sell For](https://apify.com/jpmarketdata/mercari-japan-price-checker)
- [Yahoo! Auctions Japan Sold Prices — Median, Range, Bids](https://apify.com/jpmarketdata/yahoo-auction-sold-comps)

All tools (Japan marketplaces, real estate, jobs, racing, prediction markets): <https://apify.com/jpmarketdata>

### Disclaimer

Unofficial, independent tool — **not affiliated with, endorsed by, or sponsored by IndiaMART**. Product names and logos belong to their owners and only say where the data comes from. Data is read from public pages, for market research; check before you act on it.

# Actor input Schema

## `mcats` (type: `array`):

One or more IndiaMART category slugs — the last path segment of a directory URL, e.g. 'submersible-pumps' from https://dir.indiamart.com/impcat/submersible-pumps.html. Each category costs $0.02.

## `bizTypes` (type: `array`):

Which business types to get exact supplier counts for: manufacturer, exporter, wholesaler, retailer, service\_provider. Each one costs a request. Leave empty for all five — that is the breakdown the product is about.

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

City slugs to break the category down by, e.g. 'mumbai', 'delhi', 'ahmedabad'. Each city costs one request (or one per business type if 'City x business type breakdown' is on). Leave empty for the all-India figures only.

## `maxCities` (type: `integer`):

Safety cap on how many of the listed cities are actually queried, so a long city list cannot blow the run's time budget.

## `cityBizBreakdown` (type: `boolean`):

Off by default. When on, every city is also split by business type — an exact cross-tabulation, but it costs cities x business types requests, so keep the city list short.

## `maxSuppliersPerCategory` (type: `integer`):

How many listings to keep per category for the quoted-price sample and the city/product mix. The supplier counts are exact population figures and are not affected by this. Listings arrive 28 per page; this only caps how many are returned (and billed) when 'Include individual suppliers' is on (+$0.002 each).

## `includeIndividualItems` (type: `boolean`):

Off by default: a run costs a flat $0.02 per category summary. Enable to also get every sampled supplier listing (company, city, product, quoted price and unit, membership) at +$0.002 per listing. Contact details are never collected.

## `convertToUsd` (type: `boolean`):

Adds USD statistics next to INR using the current exchange rate (open.er-api.com).

## Actor input object example

```json
{
  "mcats": [
    "submersible-pumps"
  ],
  "bizTypes": [],
  "cities": [],
  "maxCities": 5,
  "cityBizBreakdown": false,
  "maxSuppliersPerCategory": 100,
  "includeIndividualItems": false,
  "convertToUsd": true
}
```

# 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 = {
    "mcats": [
        "submersible-pumps"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpmarketdata/indiamart-supplier-market-checker").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 = { "mcats": ["submersible-pumps"] }

# Run the Actor and wait for it to finish
run = client.actor("jpmarketdata/indiamart-supplier-market-checker").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 '{
  "mcats": [
    "submersible-pumps"
  ]
}' |
apify call jpmarketdata/indiamart-supplier-market-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jpmarketdata/indiamart-supplier-market-checker"
        }
    }
}

```

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/xUQY7NFj3kAO72DVi/builds/BejbtGqJoisQPHYdS/openapi.json
