# IndiaMART Scraper - Sellers, Prices & GST Badges, No Login (`locaihost/indiamart-scraper`) Actor

IndiaMART scraper, $2 per 1,000 rows. Indian manufacturers, wholesalers and exporters by product and city: company, city, state, products with prices, rating, GST-verified and TrustSEAL badges, website; business type, staff and legal form with details. New sellers only on schedules.

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

## Pricing

from $1.10 / 1,000 sellers

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 - Sellers, Prices & GST Badges, No Login

Find Indian manufacturers, wholesalers, traders and exporters on IndiaMART by product and city, as clean rows: seller
name, city and state, the products it lists with their prices, rating and number of ratings, GST-verified and
TrustSEAL badges, years on IndiaMART and website, plus business type, staff size and legal form when you want full
details. **$2 per 1,000 rows.** No login, no cookies, no account needed.

### Try it

Paste this into the Input tab (JSON) and press Start:

```json
{
    "categories": ["cotton fabric"],
    "maxCompaniesPerCategory": 50
}
```

You get 50 cotton fabric sellers from across India with their products and prices, in under 20 seconds.

More examples:

```json
{ "categories": ["led lights", "pvc pipes"], "cities": ["Delhi", "Mumbai", "Ahmedabad"], "maxCompaniesPerCategory": 200 }
```

```json
{ "categories": ["https://dir.indiamart.com/impcat/cotton-fabric.html"], "maxCompaniesPerCategory": 500, "includeDetails": true }
```

### What you get

**Seller rows** (`type: "company"`)

| Field | Example |
|---|---|
| name, profileUrl | Rae Exports, its IndiaMART storefront |
| websiteUrl, domain | the seller's own website, when it lists one |
| city, region, country | Tiruppur, Tamil Nadu, India |
| products | Multicolor Jersey Fabric Manufacturer (₹ 380/Kg) |
| categories | the product names the seller lists under this category |
| rating, reviewCount | 4.4, 23 |
| badges | GST verified, TrustSEAL Verified, IndiaMART member 11 yrs |
| query, rank, listUrl | the product it came from, its position, the page it was on |

With **Seller details** on, each row also has businessType (Manufacturer, Factory / Manufacturing, Export),
employees (26 to 50), foundedYear and annualRevenue where the seller states them, legalForm (Proprietorship, Private
Limited Company and so on) and, for incorporated firms only, taxId (the GST number).

Every row also has `input` (what you typed that produced it) and `scrapedAt`. Rows use the same columns as our Clutch,
Europages and ThomasNet scrapers, so you can stack them into one supplier table. Export to CSV, Excel or JSON.

### How much IndiaMART shows

A logged-out visitor sees one page of about 28 listings per product list; "show more" asks for a sign-in, and this
Actor never signs in. So it reads the all-India page of a product, then the page of each city IndiaMART lists for it
(about 50 cities), each with its own sellers. A popular product gives up to about 1,000 sellers. **Cities** limits the
run to the cities you name. Rows are per seller: a seller with several listings on a page gets one row with all of
those products.

Words become an IndiaMART category address, so they have to match IndiaMART's own name for the product ("cotton
fabric", "led lights", "pvc pipes"). When one doesn't, you get a free row saying so; open the product on
dir.indiamart.com and paste its address instead.

### Monitoring

Turn on **Only new since the last run** and schedule the Actor weekly. Each run returns only sellers that earlier runs
with the same input did not, so you pay only for new sellers. A run with nothing new charges nothing.

### Price

Pay per row: **$2 per 1,000 rows** on the Starter plan, $1.50 on Scale, $1.10 on Business. Seller details cost the
same per row. Products IndiaMART doesn't have and unusable inputs come back as free `not-found` rows that say what to
change. Nothing else is charged on top.

Apify's free plan is capped at 1,000 rows per run; any paid Apify plan removes the cap.

### Good to know

- Only what a logged-out visitor sees. No account, no login cookies, no sign-in.
- Many IndiaMART sellers are sole traders, so rows hold business facts only. The phone a listing shows is IndiaMART's
  call-routing number to the seller's own phone, and it is not collected; neither are owner or CEO names, nor the
  GST and import-export numbers of proprietorships (those carry the owner's personal tax number).
- Prices are the seller's listed price, often a starting price; ask the seller for a quote.
- Pages are fetched directly (no browser), four at a time: a product with 50 cities takes well under a minute.
- Everything about the run (pages read, city pages, free rows, timing) is in the `SUMMARY` record of the run's
  key-value store.

### Use it lawfully

You are responsible for how you use the data. Follow Indian privacy law (the DPDP Act) and marketing rules (TRAI's
rules on unsolicited calls and messages) if you contact sellers, and check IndiaMART's terms for your use.

### Questions

Open an issue on the Issues tab. Feature requests are welcome.

### Did it help?

If this saved you time, a quick rating on the Store helps other people find it. Something not working? Open an issue on the Issues tab and we usually reply within a day.

# Actor input Schema

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

IndiaMART product categories, as words (cotton fabric, led lights, pvc pipes) or as the address of a category page, like https://dir.indiamart.com/impcat/cotton-fabric.html or a city page like https://dir.indiamart.com/mumbai/cotton-fabric.html. Words must match IndiaMART's own category name; a free row says so when one doesn't.

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

Optional. Only sellers listed for these cities, like Mumbai, Surat or Ludhiana. Leave empty for all of India.

## `includeCities` (type: `boolean`):

IndiaMART shows a logged-out visitor one page of about 28 listings per list (more needs a sign-in). With this on (and no cities chosen), the all-India page is read first, then the page of each city IndiaMART links for the product (about 50), which reaches far more sellers. Off: the all-India page only.

## `maxCompaniesPerCategory` (type: `integer`):

Sellers to take from each product, across the all-India and city pages. A popular product can give about 1,000.

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

Open each seller's IndiaMART profile for its business type (manufacturer, wholesaler, exporter), staff size, year established, annual turnover and legal form, and the GST number of incorporated firms. Costs the same per row, takes longer (one more page per seller).

## `onlyNew` (type: `boolean`):

For schedules: skip sellers this same input already returned in an earlier run, so you pay only for new ones. The memory is per input: change the products or cities and it starts fresh.

## `maxResults` (type: `integer`):

Stop after this many charged rows across all products. 0 means no limit (your run's maximum charge still applies).

## Actor input object example

```json
{
  "categories": [
    "cotton fabric",
    "https://dir.indiamart.com/impcat/led-lights.html"
  ],
  "cities": [
    "Surat",
    "Ahmedabad"
  ],
  "includeCities": true,
  "maxCompaniesPerCategory": 50,
  "includeDetails": false,
  "onlyNew": false,
  "maxResults": 0
}
```

# Actor output Schema

## `sellers` (type: `string`):

One row per seller: products with prices, city, state, rating, badges, business type, rank.

## `full` (type: `string`):

Every field of every row, including free not-found rows.

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

Counts, free rows by reason, city pages read, anything that failed and cost.

# 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 = {
    "categories": [
        "cotton fabric"
    ],
    "maxCompaniesPerCategory": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("locaihost/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 = {
    "categories": ["cotton fabric"],
    "maxCompaniesPerCategory": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("locaihost/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 '{
  "categories": [
    "cotton fabric"
  ],
  "maxCompaniesPerCategory": 50
}' |
apify call locaihost/indiamart-scraper --silent --output-dataset

```

## MCP server setup

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