# IndiaMART Suppliers Scraper - Companies, Phones, GST & Ratings (`makework36/indiamart-suppliers-scraper`) Actor

Scrape IndiaMART suppliers across 1000+ categories. Get company name, phone, city, GST verified, ratings, prices, product specs. HTTP only, $5/1K suppliers.

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

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Suppliers Scraper — Companies, Phones, GST & Verified Ratings

Scrape **IndiaMART** — the largest B2B marketplace in India with over 8 million suppliers across 50+ industries — and extract complete company profiles, contact phone numbers, GST verification status, seller ratings, prices and structured product specifications. **HTTP-only**, no browser, no proxy needed, **$5 per 1,000 suppliers**.

> If you import from Asia, manage a procurement pipeline, sell B2B SaaS into India, or run sourcing research for textiles, electronics, chemicals, machinery, or apparel, this IndiaMART scraper turns the world's biggest Indian supplier directory into a clean structured feed you can query, filter and enrich in seconds.

### Why use this IndiaMART scraper

IndiaMART's web pages look simple but the data is locked inside a hidden React state blob (`window.__INITIAL_STATE__`) that's hydrated client-side. Most of the IndiaMART scrapers floating around the Apify Store and on GitHub still parse the rendered HTML with regex against class names like `.companyname` or `.glcompid` — selectors that **broke in the 2024 redesign**. They return mostly empty cards.

This actor reads the **canonical JSON state** that IndiaMART itself ships with every listing page. That means:

- ✅ **Resilient to UI redesigns** — when IndiaMART changes class names, this scraper keeps working because the JSON keys are stable
- ✅ **Complete fields** — phone, GST verification, email verification, mobile verification, rating breakdown — every datapoint IndiaMART internally has
- ✅ **Structured specifications** — product attributes come back as `[{name, value}]` pairs, not HTML soup
- ✅ **Fast** — typically 6–10 suppliers per second per worker, no browser overhead
- ✅ **Cheap** — $0.005 per supplier ($5 per 1,000), one of the lowest prices among B2B sourcing scrapers in the Apify Store

### What this IndiaMART scraper extracts

Every supplier record contains the following fields. Premium-listing suppliers (PLA — Premium Listing Ads) carry the most verification flags; regular listings carry the call-tracking phone number.

#### Identity & contact

| Field | Description | Example |
|---|---|---|
| `supplierId` | IndiaMART internal supplier ID (GLUSR_ID for premium, gl_id for regular) | `235910679` |
| `companyName` | Registered business name as shown on IndiaMART | `Avika Textiles` |
| `companyUrl` | Canonical IndiaMART profile URL | `https://www.indiamart.com/avika-textiles-india/` |
| `phone` | IndiaMART call-tracking phone (forwards to the real supplier) | `7942671986` |
| `city` | City where the supplier is registered | `Bhiwandi` |
| `state` | Indian state | `Maharashtra` |
| `country` | Always "India" in current dataset | `India` |

#### Verification flags

| Field | Description | When populated |
|---|---|---|
| `gstVerified` | True if the supplier's GST number is verified by IndiaMART | All listings |
| `gstNumber` | The GST registration number itself (when shared by the supplier) | Regular listings (more frequent) |
| `emailVerified` | True if IndiaMART verified the seller's email | Premium listings |
| `mobileVerified` | True if IndiaMART verified the seller's primary mobile number | Premium listings |
| `isPremium` | True if the supplier is paying for Premium Listing Ad placement | Both |

#### Reputation

| Field | Description | Example |
|---|---|---|
| `rating` | Average star rating (1.0–5.0) | `4.6` |
| `ratingCount` | Total number of reviews/transactions used to compute the rating | `31` |
| `ratingBreakdown` | Star-by-star count breakdown (premium only) | `{5: 12, 4: 5, 3: 1, 2: 0, 1: 0}` |

#### Category context

| Field | Description | Example |
|---|---|---|
| `categoryName` | Human-readable category | `Cotton Fabric` |
| `categorySlug` | URL-safe slug for the same category | `cotton-fabric` |
| `sourceUrl` | The exact URL the data was extracted from | `https://dir.indiamart.com/impcat/cotton-fabric.html?page=3` |
| `scrapedAt` | ISO 8601 UTC timestamp of extraction | `2026-05-18T20:14:33+00:00` |

#### Featured product (per supplier)

Each supplier is associated with one featured product on the listing page. Set `includeMoreProducts: true` to also extract the supplier's other 5–6 sibling products as separate records.

| Field | Description | Example |
|---|---|---|
| `product.name` | Short product name | `German Cotton Zari fabric` |
| `product.displayName` | Full display name with key spec | `German Cotton Zari fabric, 60x60, GSM (Fabric Weight): 180 GSM` |
| `product.price` | Human-readable price | `₹ 140 / Meter` |
| `product.priceNumeric` | Numeric price for sorting/filtering | `140.0` |
| `product.currency` | ISO currency code | `INR` |
| `product.unit` | Unit of measurement | `Meter`, `Piece`, `Set`, `Kg` |
| `product.minOrderQuantity` | MOQ when supplier set one | `100` |
| `product.image` | High-resolution product image (typically 500×500 or 1000×1000) | `https://5.imimg.com/data5/...` |
| `product.productUrl` | Deep link to the product detail page | `https://www.indiamart.com/proddetail/...` |
| `product.specifications` | Array of `{name, value}` pairs from the supplier's "Industry Spec Questions" | `[{name: "Width", value: "44 inches"}, {name: "Composition", value: "100% Cotton"}]` |

### Use cases for this IndiaMART data API

#### 🏭 Sourcing for importers (US, EU, LATAM)

Indian suppliers are the dominant alternative to China for **textiles, leather, hardware, chemicals, generic pharma APIs, surgical instruments, brassware, jewellery, ayurvedic herbs and engineered components**. With one run you can pull 500–1000 vetted suppliers per category, filter by GST verified, and prioritize the ones with high `ratingCount` for first contact.

Typical workflow:
1. Identify your target HS code or product category (e.g. "carved leather wallets").
2. Run this scraper with `categorySlugs: ["leather-wallets"]` and `maxSuppliersPerCategory: 200`.
3. Pipe the output to the [Email Finder Scraper](https://apify.com/makework36/email-finder-scraper) using each `companyUrl` domain to find verified buyer-facing emails.
4. Score and prioritize by `rating × ratingCount × min(mobileVerified, emailVerified, gstVerified)`.

#### 💼 B2B sales prospecting for SaaS and services

Indian factories and distributors are buying ERP, CRM, logistics software, payment rails and HRMS at unprecedented rates. Build a target list of mid-market suppliers (high rating count + verified flags = "real business") for outbound by your SDRs.

Filter recipe:
- `gstVerified: true` AND `emailVerified: true` AND `mobileVerified: true` → premium qualified.
- Sort by `ratingCount DESC` to start with the most established companies.
- Group by `state` to assign to regional reps.

#### 🛒 Procurement & RFQ teams

Build a vendor universe before issuing a Request For Quotation. Knowing 200 verified candidates beats negotiating with 5 randomly Googled ones.

For each candidate:
- `phone` gives you a call-tracking number you can dial without registering.
- `product.minOrderQuantity` and `product.priceNumeric` tell you whether the vendor will accept your order size and ballpark price.
- `product.specifications` tells you whether they make exactly the variant you need (width, composition, finish, certification).

#### 📊 Market intelligence & competitive analysis

Track price ranges, geographic concentration and dominant suppliers per category over time. Schedule this actor to run daily and store snapshots in your data warehouse.

Metrics you can derive:
- **Median price by city** — is Tiruppur cheaper than Surat for cotton fabric?
- **Supply density** — how many GST-verified suppliers exist for "industrial valves" in Pune?
- **Rating distribution** — which categories have the most 4.5★+ vendors?

#### 🔎 Due diligence & M&A

When evaluating an Indian B2B target, knowing **its entire competitive set on IndiaMART** is table stakes. Pull every supplier listed under the same category and benchmark by ratings, MOQs and price points.

#### 📰 Trade journalism & research

Inc42, YourStory, Forbes India and academic researchers regularly need raw counts of Indian suppliers per sector for articles, reports and white papers. This actor delivers a clean structured CSV/JSON in seconds.

### How to use this IndiaMART scraper

The actor supports three input modes. You can combine them in a single run.

#### Mode 1: Category mode (most accurate, recommended)

Provide one or more **IndiaMART category slugs**. Each category page renders ~34 unique suppliers; the actor paginates up to 30 pages, returning up to ~1,000 unique suppliers per category.

```json
{
  "categorySlugs": ["cotton-fabric", "leather-bags", "led-lights"],
  "maxSuppliersPerCategory": 200,
  "maxTotalSuppliers": 1000,
  "includeMoreProducts": false
}
````

**How to find a category slug**: browse `https://dir.indiamart.com/`, navigate to any category, and copy the part of the URL between `/impcat/` and `.html`. For example, `https://dir.indiamart.com/impcat/industrial-valves.html` → slug is `industrial-valves`.

#### Mode 2: Search keyword mode

Pass free-text keywords as you would type them into IndiaMART's search bar. The actor falls back to category lookup for keywords that match an IndiaMART canonical category.

```json
{
  "searchKeywords": ["cotton fabric mumbai", "industrial fans 24v", "carved leather wallet"],
  "maxSuppliersPerCategory": 50
}
```

#### Mode 3: Direct supplier URL mode (best-effort, v1)

Pass full IndiaMART supplier profile URLs to capture a single supplier record. In v1 this returns the company name, profile URL and OG image from the profile page. The profile-page rate limiter on `www.indiamart.com` can return HTTP 429 from cloud IPs, so use this mode sparingly.

```json
{
  "supplierUrls": [
    "https://www.indiamart.com/avika-textiles-india/",
    "https://www.indiamart.com/srexports-jaipur/"
  ]
}
```

#### `includeMoreProducts` flag

Each supplier listing on the category page exposes 5–6 sibling products in a `more_prod` array. Enable this flag to extract each sibling as a separate record. Expect the dataset volume to grow 5–6× per supplier. Useful when you need every SKU, not just the featured one.

### Step-by-step tutorial — your first IndiaMART run in 3 minutes

1. **Click "Try for free"** on this actor's Apify Store page. You'll get $5 of free credit on signup, enough to scrape ~1,000 suppliers for free.
2. **Paste the example input** below or edit it for your target category:
   ```json
   {
     "categorySlugs": ["cotton-fabric"],
     "maxSuppliersPerCategory": 50,
     "maxTotalSuppliers": 50
   }
   ```
3. **Click "Start"**. The actor pages through the category and pushes one record per supplier.
4. **Watch the live log** — you'll see lines like `page 1: +34 suppliers (running: 34, available: 180994)`.
5. **Download your dataset** as JSON, CSV, Excel or HTML once the run finishes (typically 30–60 seconds for 50 suppliers).

That's it. No proxy configuration, no anti-bot bypass, no manual login.

### Performance and cost

- **HTTP only** (no Playwright, no proxy required). Powered by `curl_cffi` Chrome 120 impersonate.
- **6–10 suppliers per second** sustained on a single worker.
- **No anti-bot resistance** encountered on category and search pages as of the latest tests — IndiaMART renders the supplier data in `window.__INITIAL_STATE__` and serves it identically to bots and humans on those endpoints.
- **Memory footprint**: 256 MB is sufficient.
- **Apify compute cost**: trivial (well under $0.001 per run thanks to HTTP-only).

#### Pricing model

Pay-per-event, no monthly commitment, no subscription:

| Event | Price |
|---|---|
| Actor start | $0.00005 |
| Each supplier extracted | **$0.005** |

#### Pricing scenarios

| Workload | Suppliers extracted | Cost |
|---|---|---|
| Try the actor (1 small category) | 50 | $0.25 |
| One Apify free-tier $5 credit | ~1,000 | $5.00 |
| Full vendor map of one industry vertical (10 categories × 200 each) | 2,000 | $10.00 |
| Pan-India sourcing snapshot (50 categories × 200 each) | 10,000 | $50.00 |
| Monthly refresh of the entire textile sector | 30,000 | $150.00 |

You only pay for unique suppliers added to your dataset. Failed runs and skipped duplicates are not charged.

### Output example (single supplier, JSON)

```json
{
  "supplierId": 235910679,
  "companyName": "Avika Textiles",
  "companyUrl": "https://www.indiamart.com/avika-textiles-india/",
  "phone": "7942671986",
  "city": "Bhiwandi",
  "state": "Maharashtra",
  "country": "India",
  "rating": 4.5,
  "ratingCount": 21,
  "ratingBreakdown": {"5": 12, "4": 5, "3": 3, "2": 1, "1": 0},
  "gstVerified": true,
  "gstNumber": "27AAACR1234E1Z5",
  "emailVerified": true,
  "mobileVerified": true,
  "isPremium": true,
  "categoryName": "Cotton Fabric",
  "categorySlug": "cotton-fabric",
  "product": {
    "name": "German Cotton Zari fabric",
    "displayName": "German Cotton Zari fabric, 60x60, GSM (Fabric Weight): 180 GSM",
    "price": "₹ 140 / Meter",
    "priceNumeric": 140.0,
    "currency": "INR",
    "unit": "Meter",
    "minOrderQuantity": "100",
    "image": "https://5.imimg.com/data5/SELLER/Default/2026/4/602976390/.../german-cotton-zari-fabric-500x500.jpg",
    "productUrl": "https://www.indiamart.com/proddetail/german-cotton-zari-fabric-2859158899391.html",
    "specifications": [
      {"name": "Composition", "value": "100% Cotton"},
      {"name": "Width", "value": "44 inch (112 cm)"},
      {"name": "Pattern", "value": "Printed"},
      {"name": "GSM (Fabric Weight)", "value": "180 GSM"},
      {"name": "Print Technique", "value": "Screen Print"},
      {"name": "Use / Application", "value": "Shirting"},
      {"name": "Color", "value": "White"}
    ]
  },
  "sourceUrl": "https://dir.indiamart.com/impcat/cotton-fabric.html",
  "scrapedAt": "2026-05-18T20:14:33+00:00"
}
```

### IndiaMART scraper comparison — how this compares to other options

| Approach | Pros | Cons |
|---|---|---|
| **This actor** | Full structured fields, GST + email + mobile verification flags, $5/1K, no proxy, fast | India only, no LinkedIn-style company graph |
| Other Apify IndiaMART scrapers | Existed first | Most still parse the pre-2024 HTML and return mostly empty cards |
| Manual browsing | Free | Tens of hours per category, no structured output |
| Hiring a freelancer to scrape | Custom output | Slow turnaround, brittle to redesigns, $300–$1,000 one-off |
| Alibaba / Made-in-China scrapers | Coverage of Chinese suppliers | Aggressive anti-bot, expensive, no India coverage |
| BuiltWith / ZoomInfo for India | Curated firmographics | $$$$, weak India coverage, no MOQ or price data |
| IndiaMART's own export tool | Native | Requires a paid buyer account, manual category-by-category export, capped per day |

### How to call this IndiaMART scraper from your code

#### Python (via Apify Client)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("makework36/indiamart-suppliers-scraper").call(run_input={
    "categorySlugs": ["cotton-fabric", "industrial-valves"],
    "maxSuppliersPerCategory": 100,
    "maxTotalSuppliers": 500,
})
for supplier in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(supplier["companyName"], supplier["phone"], supplier["rating"])
```

#### Node.js (via Apify Client)

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('makework36/indiamart-suppliers-scraper').call({
  categorySlugs: ['cotton-fabric'],
  maxSuppliersPerCategory: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(s => console.log(s.companyName, s.phone, s.product.price));
```

#### cURL (synchronous run)

```bash
curl -X POST "https://api.apify.com/v2/acts/makework36~indiamart-suppliers-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"categorySlugs":["cotton-fabric"],"maxSuppliersPerCategory":20}'
```

### Frequently Asked Questions about scraping IndiaMART

#### Is scraping IndiaMART legal?

This actor extracts information that IndiaMART itself renders publicly to every visitor on its category and listing pages. It does not bypass authentication, does not extract data from gated buyer-only screens, and does not extract personally identifiable information beyond what suppliers voluntarily publish on their business profile. You are still responsible for how you store, transform and redistribute the data. Respect applicable data protection regulation (DPDP Act 2023 in India, GDPR for EU subjects).

#### Why doesn't every supplier have a phone number?

IndiaMART shows a **call-tracking number** for regular listings (`c_ct` in the source JSON, mapped to `phone`). Premium listings (PLA) display contact details through a click-to-reveal flow that is not part of the rendered JSON state, so `phone` is `null` for premium suppliers. To enrich premium suppliers, use the [Email Finder Scraper](https://apify.com/makework36/email-finder-scraper) against the `companyUrl` domain.

#### How current is the data?

Live — each run pulls the JSON state IndiaMART is serving at request time. There is no internal cache.

#### How many suppliers exist per category?

It varies enormously. Cotton Fabric has 180,994 listings. A niche category like "industrial-sapphire-bearings" may have just 150. Use a small first run with `maxSuppliersPerCategory: 10` to gauge size before scaling up.

#### Can I scrape IndiaMART searches with location filters?

Yes — IndiaMART encodes location into the slug, e.g. `cotton-fabric-mumbai`, `industrial-valves-pune`. Pass these as `categorySlugs` and the actor will scrape only the suppliers in that city.

#### What's the difference between "premium" and "regular" suppliers?

Premium suppliers (PLA — Premium Listing Ads) pay IndiaMART for top-of-page placement. They typically carry the full verification stack (GST + email + mobile) and higher-resolution imagery. Regular suppliers are organic listings; they always carry a call-tracking phone number and GST status.

#### Does this scraper respect IndiaMART's `robots.txt`?

The endpoints used (`/impcat/*.html`) are not disallowed in IndiaMART's `robots.txt` as of the current release. Always re-check before large runs.

#### Will my IP get banned?

Not from category pages. The category endpoints have proven rate-limit-tolerant under sustained polite traffic (the actor inserts a 400ms delay between paginated requests). The `www.indiamart.com` profile endpoint used by `supplierUrls` mode has stricter rate limits — that's why `supplierUrls` is documented as best-effort in v1.

#### Can I run this actor on a schedule?

Yes. Use Apify's built-in scheduler to run daily, weekly or monthly snapshots. Combine with Apify integrations to push the dataset directly into Google Sheets, S3, Postgres, BigQuery, Snowflake, Webhook or Slack on every successful run.

#### How do I get verified emails for the suppliers I extract?

Pipe the `companyUrl` field into the [Email Finder Scraper](https://apify.com/makework36/email-finder-scraper). It uses the company domain plus inferred name patterns to surface verified business emails. Combo recipe in the cross-link section below.

#### What if a category page returns zero suppliers?

That usually means the slug is wrong. IndiaMART slugs are case-sensitive, kebab-case, and never include the trailing `-cat.NNN` numeric suffix. Confirm by browsing to `https://dir.indiamart.com/impcat/{your-slug}.html` in a browser.

#### Can I scrape suppliers outside India?

This scraper covers `dir.indiamart.com` which is India-focused. IndiaMART's global directories (`tradeindia`, `exportersindia`) are separate platforms and not currently supported. For other Asian B2B directories, watch this developer profile for upcoming actors.

#### Does the actor extract supplier reviews/testimonials?

The summary numbers (`rating`, `ratingCount`, `ratingBreakdown`) come from the listing page. Full review text and reviewer identities live on the supplier profile page and are not part of the v1 output.

#### How do I export the data to Google Sheets / Excel / BigQuery?

Use Apify's integrations panel after the run completes, or call the dataset items endpoint with `?format=csv`, `?format=xlsx`, `?format=html` or `?format=json`.

#### Is there a free trial?

Yes. Apify gives every new user $5 in platform credit, which is enough to extract ~1,000 IndiaMART suppliers with this actor.

#### Can I use this for academic research?

Yes. Many universities use Apify scrapers for thesis and research projects under their fair-use policy. Cite the actor URL in your bibliography.

### 🔗 Other actors by makework36

Building a B2B sourcing or lead generation pipeline? You'll also want these:

- [Shopify Products Scraper](https://apify.com/makework36/shopify-products-scraper) — full Shopify catalog: title, SKU, price, variants, inventory
- [Email Finder Scraper](https://apify.com/makework36/email-finder-scraper) — verified business emails by company domain (perfect combo with this IndiaMART scraper)
- [Reddit SaaS Leads Scraper](https://apify.com/makework36/reddit-leads-saas) — startup pain points and buying intent on Reddit
- [Lovable Sites Scraper](https://apify.com/makework36/lovable-sites-scraper) — enumerate and enrich AI-builder apps
- [Facebook Ad Library Scraper](https://apify.com/makework36/facebook-adlib-scraper) — competitor ad intelligence at scale
- [Trustpilot Reviews Scraper](https://apify.com/makework36/trustpilot-reviews-scraper) — customer reviews and ratings
- [Google Maps Scraper Full](https://apify.com/makework36/google-maps-scraper-full) — local businesses with emails and phones

See all [actors by makework36](https://apify.com/makework36) on the Apify Store.

### Roadmap

The current v1 release covers category mode at 100% reliability, search-keyword mode via category-slug fallback, and best-effort supplier-URL mode. Upcoming planned enhancements based on user feedback:

- **v1.1**: profile-page rate-limit bypass via datacenter proxy → full supplier profile extraction (description, complete product catalogue, certifications, year of incorporation, employee count).
- **v1.2**: GeoFilter input field for fast per-city slug expansion.
- **v1.3**: structured CSV export with one row per product (instead of one row per supplier).
- **v2**: review text extraction from supplier profile pages.

### Disclaimer

This actor extracts public business data that IndiaMART itself renders to every visitor of its category and listing pages. You are solely responsible for how you use the extracted data — respect copyright, trademark, supplier privacy and applicable data protection regulation (DPDP Act 2023 in India, GDPR for EU subjects, CCPA for California subjects) when storing, transforming, or redistributing. The author of this actor is not affiliated with IndiaMART Intermesh Ltd.

> 🙏 **Ran this IndiaMART scraper successfully?** [Leaving a review](https://apify.com/makework36/indiamart-suppliers-scraper/reviews) helps the Apify algorithm surface this actor to other sourcing teams and importers. Much appreciated.

# Actor input Schema

## `categorySlugs` (type: `array`):

IndiaMART category slugs (without -cat.NNN suffix). Examples: 'cotton-fabric', 'leather-bags', 'led-lights', 'industrial-valves'. Browse https://dir.indiamart.com/ to find slugs.

## `searchKeywords` (type: `array`):

Keywords to search on IndiaMART (e.g. 'cotton fabric mumbai', 'industrial fans'). Returns suppliers matching the search.

## `supplierUrls` (type: `array`):

Direct IndiaMART supplier profile URLs (e.g. 'https://www.indiamart.com/avika-textiles-india/'). One supplier extracted per URL.

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

Hard cap of suppliers to extract per category/keyword. ~34 unique suppliers per page; up to 30 pages = ~1000 suppliers max per source.

## `maxTotalSuppliers` (type: `integer`):

Hard cap across all categories, keywords and URLs combined.

## `includeMoreProducts` (type: `boolean`):

Each supplier listing has up to 5 additional products (more\_prod). Enable to extract them as separate records (5x more data per supplier).

## Actor input object example

```json
{
  "categorySlugs": [
    "cotton-fabric"
  ],
  "searchKeywords": [],
  "supplierUrls": [],
  "maxSuppliersPerCategory": 100,
  "maxTotalSuppliers": 500,
  "includeMoreProducts": false
}
```

# Actor output Schema

## `dataset` (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 = {
    "categorySlugs": [
        "cotton-fabric"
    ],
    "searchKeywords": [],
    "supplierUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("makework36/indiamart-suppliers-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 = {
    "categorySlugs": ["cotton-fabric"],
    "searchKeywords": [],
    "supplierUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("makework36/indiamart-suppliers-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "categorySlugs": [
    "cotton-fabric"
  ],
  "searchKeywords": [],
  "supplierUrls": []
}' |
apify call makework36/indiamart-suppliers-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=makework36/indiamart-suppliers-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "IndiaMART Suppliers Scraper - Companies, Phones, GST & Ratings",
        "description": "Scrape IndiaMART suppliers across 1000+ categories. Get company name, phone, city, GST verified, ratings, prices, product specs. HTTP only, $5/1K suppliers.",
        "version": "0.1",
        "x-build-id": "PlKNwNaPQfD8oToo6"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/makework36~indiamart-suppliers-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-makework36-indiamart-suppliers-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/makework36~indiamart-suppliers-scraper/runs": {
            "post": {
                "operationId": "runs-sync-makework36-indiamart-suppliers-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/makework36~indiamart-suppliers-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-makework36-indiamart-suppliers-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "categorySlugs": {
                        "title": "Category slugs",
                        "type": "array",
                        "description": "IndiaMART category slugs (without -cat.NNN suffix). Examples: 'cotton-fabric', 'leather-bags', 'led-lights', 'industrial-valves'. Browse https://dir.indiamart.com/ to find slugs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchKeywords": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Keywords to search on IndiaMART (e.g. 'cotton fabric mumbai', 'industrial fans'). Returns suppliers matching the search.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "supplierUrls": {
                        "title": "Direct supplier URLs",
                        "type": "array",
                        "description": "Direct IndiaMART supplier profile URLs (e.g. 'https://www.indiamart.com/avika-textiles-india/'). One supplier extracted per URL.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxSuppliersPerCategory": {
                        "title": "Max suppliers per category",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Hard cap of suppliers to extract per category/keyword. ~34 unique suppliers per page; up to 30 pages = ~1000 suppliers max per source.",
                        "default": 100
                    },
                    "maxTotalSuppliers": {
                        "title": "Max total suppliers (whole run)",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Hard cap across all categories, keywords and URLs combined.",
                        "default": 500
                    },
                    "includeMoreProducts": {
                        "title": "Include other products from each supplier",
                        "type": "boolean",
                        "description": "Each supplier listing has up to 5 additional products (more_prod). Enable to extract them as separate records (5x more data per supplier).",
                        "default": false
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
