# IndiaMART Supplier Data — GST, Legal Status, IEC & CIN (`foxlabs/indiamart-supplier-data`) Actor

IndiaMART suppliers by category and city: legal status, GSTIN (check-digit validated), IEC, CIN, turnover and employee bands, rating and IndiaMART's PNS phone line. Proprietorships excluded by default (DPDP). Reads only robots-allowed pages.

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

## Pricing

$5.00 / 1,000 supplier records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## IndiaMART Supplier Data — GST, Legal Status, IEC & CIN 🏭

🎉 Turn IndiaMART category and city listings into clean supplier firmographics — no login, no API key, one row per supplier, with legal status, GST number (check-digit validated), IEC, CIN, turnover and employee bands, rating and IndiaMART's PNS phone line.
Built for B2B sourcing teams, supplier due diligence (KYB) and India market research.

**foXLabs India data series:** [Indian Company Data — CIN, Directors & Financials](https://apify.com/foxlabs/indian-company-data)
**foXLabs India series:** [Company registry](https://apify.com/foxlabs/indian-company-data) · [Government tenders](https://apify.com/foxlabs/india-government-tenders) · [NSE filings](https://apify.com/foxlabs/india-listed-company-filings) · [Tech hiring signals](https://apify.com/foxlabs/india-tech-hiring-signals)

### 🔍 What is IndiaMART Supplier Data — and when should you use it?

Give this actor IndiaMART category slugs — and, if you like, cities — and it returns the suppliers IndiaMART lists there: one deduplicated row per supplier, with the statutory and size facts IndiaMART publishes on each supplier's factsheet. Every run reads IndiaMART live.

**Use it when you need:** a shortlist of Indian manufacturers or traders for a category and city, qualified by GSTIN, legal status, IEC/CIN and size bands; or a quick screen of suppliers before a first order.

**Use something else when:** you need email addresses or a supplier's direct phone number. IndiaMART does not publish them on public pages. The phone it shows is a PNS virtual number that IndiaMART forwards to the supplier, and in our test runs all 89 supplier websites listed on six listing pages were catalog sites hosted by IndiaMART itself, with no email of their own. For the MCA registry record behind a CIN, use [Indian Company Data](https://apify.com/foxlabs/indian-company-data).

### 🤖 Use with AI agents

**Already on the Apify MCP server?** Ask for this Actor by name: `foxlabs/indiamart-supplier-data`.

**Your agent can pay for its own runs.** This Actor bills per event, so with Apify's agentic payments an agent can discover it, run it and settle the bill over **x402 (USDC on Base)** or **Skyfire** — no Apify account or API token of its own. Billing is the same either way: per delivered supplier row; the summary row that explains an empty or degraded run is never charged.

Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```
I want IndiaMART supplier records using the Apify Actor `foxlabs/indiamart-supplier-data`.
Input: `categories` is a list of IndiaMART category slugs such as industrial-valves; `cities` narrows each category to city listings; `maxResults` caps the rows.
Start with: {"categories":["industrial-valves"],"cities":["Ahmedabad","Coimbatore"],"maxResults":20}
Ask me which categories and cities I need, run the Actor, then summarise the rows as a table.
```

The machine-readable API, MCP config and OpenAPI definition live at `apify.com/foxlabs/indiamart-supplier-data.md`.

### 📋 Overview

Everything you need to turn IndiaMART listings into clean supplier data — in one actor, with no login, cookies or API key.

**Why teams pick this actor:**

- ✅ **The factsheet, not just the listing card** — legal status, GSTIN, IEC, CIN and turnover/employee bands, read from the supplier's IndiaMART factsheet (the catalog site IndiaMART hosts for it, its storefront or a product page).
- 🧾 **GSTINs you can rely on** — only GSTINs with a valid check character are delivered, and the PAN type inside them (company, firm, individual) backs up the legal status.
- 🛡️ **DPDP-aware by default** — sole proprietorships, whose GSTIN embeds the owner's personal PAN, are left out unless you switch them on.
- ☎️ **Honest phone labelling** — IndiaMART's PNS virtual number is delivered as `indiamartPhone` with `indiamartPhoneType: "pns-virtual"`, never passed off as a direct line.
- 🧹 **No silent failures** — a `SOURCE_REPORT` record and, when a run is empty or degraded, a summary row say what happened.
- 🤖 **Agent-ready** — MCP + x402 agentic payments.

### ✨ Features

- 🔍 **Category + city listings** — one IndiaMART listing page per category and city (up to 28 suppliers each); cities are read in turn, so a row cap still covers every city.
- 🏢 **Supplier factsheet** — legal status, nature of business, GSTIN, IEC, CIN, employee band, turnover band, GST registration year, year of establishment, years on IndiaMART, rating, response rate and top products.
- 🌐 **Website** — the website listed for a supplier and whether it is an IndiaMART-hosted catalogue or an independent site. IndiaMART-hosted catalogues carry no email or phone of their own, so this Actor does not collect contacts from websites.
- 🐢 **Polite by design** — robots.txt is checked on every host, everything IndiaMART serves shares one pace (1 request per second by default), HTTP 429 answers trigger a bounded back-off, and a proxy session IndiaMART refuses (HTTP 403, or 429 after the back-off) is replaced by a fresh one — at most 3 sessions per page and 10 new sessions per run.

### 🎬 Quick Start

```bash
curl -X POST "https://api.apify.com/v2/acts/foxlabs~indiamart-supplier-data/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"categories":["industrial-valves"],"cities":["Ahmedabad","Coimbatore"],"maxResults":20}'
```

### 🚀 Getting Started (3 steps)

1. **Pick categories** — the slug is the last part of a `dir.indiamart.com/impcat/<slug>.html` URL, e.g. `industrial-valves`, `industrial-chemicals`, `cotton-yarn`.
2. **Add cities (optional) and a cap** — each city adds one listing page of up to 28 suppliers; `maxResults` limits the rows.
3. **Run and export** — get a clean dataset as JSON, CSV or Excel.

### 📥 Input

```json
{"categories":["industrial-valves"],"cities":["Ahmedabad","Coimbatore"],"maxResults":20}
```

| Field | Type | Description |
|---|---|---|
| `categories` | array | IndiaMART category slugs, names or listing URLs (`https://dir.indiamart.com/impcat/<slug>.html`, `https://dir.indiamart.com/<city>/<slug>.html`). Required. |
| `cities` | array | City names (`Ahmedabad`, `Navi Mumbai`); each category is then read from its city listing instead of the all-India one. |
| `includeProprietorships` | boolean | Default `false` — sole proprietorships are skipped (DPDP Act 2023). |
| `maxResults` | integer | Stop after this many supplier rows (default 500, `0` = unlimited). |
| `requestDelayMs` | integer | Pause between IndiaMART requests, shared by all workers (default and minimum 1000 ms). |
| `maxConcurrency` | integer | Parallel workers, 1–2 (default 2). |
| `proxyConfiguration` | object | Default: Apify Proxy, **Residential** group — IndiaMART refuses most datacenter IPs. See **Pricing → Proxy**. |

### 📤 Output

One row per supplier (IndiaMART account), saved to the dataset. Every supplier row has the same 36 keys; missing values are `null` or `[]`.

| Field | Description |
|---|---|
| `rowType` | `supplier` (or `summary` for the explanation row, see below) |
| `companyName` | Supplier name as IndiaMART shows it |
| `indiamartId` | IndiaMART account id — the join key, unique within a run |
| `indiamartUrl` | The supplier's IndiaMART storefront, else the product page it was listed with |
| `storefrontUrl` | IndiaMART storefront URL, when IndiaMART publishes one for the supplier |
| `listingUrl` | The listing page the supplier came from |
| `category` | IndiaMART category name |
| `city` / `state` | Location as IndiaMART shows it |
| `natureOfBusiness` | Manufacturer, trader, service provider… |
| `legalStatus` | Legal status of the firm (Limited Company, Partnership, Proprietorship…) |
| `isProprietorship` | `true` for sole proprietorships — from the legal status, else from the PAN type in the GSTIN |
| `gstNo` | GSTIN, delivered only with a valid check character |
| `gstVerified` | IndiaMART's GST-verified badge |
| `iec` | Import Export Code |
| `cin` | Corporate Identification Number (companies) |
| `yearEstablished` | Year of establishment, when shown |
| `employeeBand` / `turnoverBand` | Size bands as IndiaMART shows them |
| `gstRegistrationYear` | Year of GST registration |
| `memberSinceYears` | Years on IndiaMART |
| `rating` / `ratingCount` / `responseRate` | Buyer rating, number of ratings, response rate (%) |
| `products` / `productsText` | Up to 10 product names |
| `indiamartPhone` | IndiaMART PNS virtual number (`+91…`) |
| `indiamartPhoneExtension` | Extension to dial after the PNS number, when IndiaMART gives one |
| `indiamartPhoneType` | Always `pns-virtual` |
| `indiamartPhoneNote` | One-line explanation of the PNS number |
| `website` / `websiteType` / `websiteStatus` | Website listed for the supplier; `indiamart-hosted`, `independent` or `none` |
| `factsheetSource` | Where the legal status came from: `indiamart-hosted-site`, `indiamart-hosted-profile`, `storefront`, `product-page` |
| `factsheetStatus` | `ok`, `partial`, `rate-limited` or `unavailable` |
| `scrapedAt` | ISO timestamp |

**Sample row** — a real row from a test run on 2026-09-10 (industrial-valves, Ahmedabad):

```json
{
  "rowType": "supplier",
  "companyName": "Cair Euromatic Automation Private Limited",
  "indiamartId": 1561343,
  "indiamartUrl": "https://www.indiamart.com/proddetail/industrial-valves-services-2853610253097.html",
  "storefrontUrl": null,
  "listingUrl": "https://dir.indiamart.com/ahmedabad/industrial-valves.html",
  "category": "Industrial Valves",
  "city": "Ahmedabad",
  "state": "Gujarat",
  "natureOfBusiness": "Manufacturer",
  "legalStatus": "Limited Company",
  "isProprietorship": false,
  "gstNo": "24AAECC7293G1ZL",
  "gstVerified": true,
  "iec": "0811031691",
  "cin": "U29100GJ2012PTC069127",
  "yearEstablished": null,
  "employeeBand": "101 to 500 People",
  "turnoverBand": "100 - 500 Cr",
  "gstRegistrationYear": 2017,
  "memberSinceYears": 17,
  "rating": 4.2,
  "ratingCount": 67,
  "responseRate": 87,
  "products": ["Industrial Valves Services", "Irrigation Piping Packages Valves", "Cair MS Valve for SWSM", "Motorised Extended Stem Butterfly Valve With Electrical Actuator"],
  "productsText": "Industrial Valves Services, Irrigation Piping Packages Valves, Cair MS Valve for SWSM, Motorised Extended Stem Butterfly Valve With Electrical Actuator",
  "indiamartPhone": "+917949350591",
  "indiamartPhoneExtension": null,
  "indiamartPhoneType": "pns-virtual",
  "indiamartPhoneNote": "IndiaMART PNS virtual number: IndiaMART forwards the call to the supplier through its own exchange; it is not the supplier's direct line.",
  "website": "https://www.valves-actuators.com/",
  "websiteType": "indiamart-hosted",
  "websiteStatus": "ok",
  "factsheetSource": "indiamart-hosted-site",
  "factsheetStatus": "ok",
  "scrapedAt": "2026-09-10T14:52:38.603Z"
}
```

**Summary row and SOURCE\_REPORT.** When a run delivers nothing, or when a failed listing, refused proxy sessions or IndiaMART's rate limit left rows incomplete, the dataset gets one extra row with `rowType: "summary"` and a plain-language `message` — for example *"IndiaMART has no listing page at … Check the category slug …"* or *"IndiaMART refused 3 Apify Proxy RESIDENTIAL sessions for … (HTTP 403) …"*. It is never charged. Every run also writes `SOURCE_REPORT` to the key-value store: per-listing status, where each legal status came from, website types, HTTP 429 pauses, the proxy sessions used and why each new one was opened, and requests and compressed bytes per page type.

### 📏 What the data contains (measured)

From our test runs on 2026-09-10 across three categories and six city listings (industrial valves, industrial chemicals, cotton yarn):

- **Firmographics, 30 supplier rows:** legal status 97%, GSTIN 97% (29 of 29 with a valid check character), employee band 97%, GST registration year 97%, turnover band 80%, IEC 77%, state 57%, CIN 37% (companies only), year of establishment 27%, `indiamartPhone` 100%.
- **On the Apify platform** (the prefill input — CNC machines, all India — with the Residential proxy): 10 supplier rows in 57 s with build 0.1.1 and in 106 s with build 0.1.2, which first replaced a proxy session IndiaMART refused; both times legal status, GSTIN, IEC and `indiamartPhone` on 10 of 10, CIN on 6 of 10. Two more platform runs gave 8 rows each: industrial valves in Ahmedabad in 86 s (IEC 7 of 8, CIN 5 of 8) and industrial chemicals in Vadodara in 79 s (IEC 4 of 8, CIN 0 of 8), with legal status, GSTIN and `indiamartPhone` on 8 of 8 in both.
- **Supplier websites:** the six listing pages held 168 supplier entries; 89 of them listed a website, and all 89 were catalogue sites hosted by IndiaMART, with no email or phone of their own. That is why this Actor does not collect website contacts; the only phone line is IndiaMART's PNS number (`indiamartPhone`).
- **Proprietorships:** 31 of the 52 industrial-valves suppliers in Ahmedabad and Coimbatore were sole proprietorships, which are skipped by default.

### 💼 Use cases

**1. Supplier shortlists for sourcing** — industrial valve makers in Ahmedabad and Coimbatore.
*Input:* a category and two cities. *Output:* companies and firms with legal status, GSTIN, size bands and the PNS phone line. *Use:* a qualified RFQ list.

**2. Supplier due diligence (KYB)** — check that a supplier is a registered company or firm before the first order.
*Input:* the category and city listing it appears in. *Output:* legal status, check-digit-valid GSTIN, CIN and IEC. *Use:* confirm the GSTIN on the GST portal and the CIN in the MCA registry (for example with Indian Company Data).

**3. Market mapping** — who sells a category in which city, and at what size.
*Input:* one category, several cities. *Output:* suppliers per city with turnover and employee bands. *Use:* size the supplier base before entering a market.

### 🔗 Integration

**JavaScript / Node.js**

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('foxlabs/indiamart-supplier-data').call({"categories":["industrial-valves"],"cities":["Ahmedabad","Coimbatore"],"maxResults":20});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((row) => row.rowType === 'supplier'));
```

**Python**

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('foxlabs/indiamart-supplier-data').call(run_input={"categories":["industrial-valves"],"cities":["Ahmedabad","Coimbatore"],"maxResults":20})
for item in client.dataset(run['defaultDatasetId']).iterate_items():
    if item.get('rowType') == 'supplier':
        print(item)
```

**Automation (n8n / Zapier / Make):** schedule or webhook → HTTP request to the actor API with your `categories` and `cities` → keep the rows with `rowType` = `supplier` → push them to a sheet, CRM or supplier database.

### 📊 Pricing

Pay-per-event:

- `supplier-record` — once for every supplier row delivered; compute and proxy traffic are included in this price.

The summary row is never charged. [View current pricing.](https://apify.com/foxlabs/indiamart-supplier-data)

**Proxy.** The default is Apify Proxy's **Residential** group. In our tests on 2026-09-10 IndiaMART accepted **10 of 12 residential sessions** and refused **9 of 13 datacenter sessions** (HTTP 403). When a session is refused — HTTP 403, or HTTP 429 after the back-off — the actor retires it and retries the same page from a fresh session, at most 3 sessions per page and 10 new sessions per run; only when every one of them is refused does the run end with a summary row. Compute and proxy traffic — the Residential proxy included — are part of the per-record price; you are not billed for them separately. For reference, a delivered supplier used about 105–125 KB of residential proxy traffic in our four platform runs. With a datacenter group, expect runs that end with a summary row and no data.

### ❓ FAQ

**Do I need an account, login or API key?** No. The actor reads public IndiaMART pages only; you need no IndiaMART account.

**Why is there no email or direct phone number?** IndiaMART does not show them on public pages. The phone it shows is a PNS virtual number: IndiaMART forwards the call to the supplier through its own exchange. We deliver it as `indiamartPhone` with `indiamartPhoneType: "pns-virtual"`. The websites listed for suppliers were, in our tests, catalog sites that IndiaMART hosts (89 of 89), and those carry no email either.

**Why at most 28 suppliers per listing page?** IndiaMART's listing page shows 28 suppliers; further results load through a search endpoint (`/search.mp`) that IndiaMART's robots.txt disallows, and this actor uses no hidden endpoints. Add cities for more: each city is another listing page of up to 28 suppliers.

**Why are proprietorships excluded by default?** A sole proprietorship's GSTIN contains the owner's personal PAN, so under India's DPDP Act 2023 its record is personal data. Switch `includeProprietorships` on only if you have your own lawful basis. Suppliers whose legal status cannot be confirmed are skipped as well, unless their name ends in Limited, Pvt Ltd or LLP.

**How current is the data?** Every run reads IndiaMART live.

**Can I export to CSV / Excel / JSON?** Yes — directly from the Apify dataset.

### 🐛 Troubleshooting

- **Summary row "IndiaMART refused 3 … sessions for … (HTTP 403)"** — IndiaMART refused every proxy session the page was tried from. With the default Residential group, run again later (every run starts from new sessions); with a datacenter group or no proxy, switch to Residential.
- **Summary row "IndiaMART has no listing page at …"** — check the category slug (`dir.indiamart.com/impcat/<slug>.html`) and the city spelling (IndiaMART uses `bengaluru`, `gurgaon`, `navi-mumbai`).
- **Rows with `factsheetStatus: "rate-limited"`, or a summary row about rate limiting** — IndiaMART answered HTTP 429. The actor pauses (at most 90 s per run), then stops using that page type and finishes. Run again later; do not raise the concurrency.
- **Fewer rows than suppliers on the page** — proprietorships (skipped by default), suppliers with an unconfirmed legal status and second IndiaMART accounts of the same business (same GSTIN) are not delivered; `SOURCE_REPORT` counts each group.

### ⚖️ Is it legal to scrape this data?

This actor reads public IndiaMART listing, storefront and catalog pages — only paths IndiaMART's robots.txt allows, with no login, captcha solving or hidden API. IndiaMART is a trademark of its owner, IndiaMART InterMESH Ltd.; this actor is not affiliated with or endorsed by IndiaMART. IndiaMART's Terms of Use restrict systematic copying of its content, so check that your use is permitted. Results are business data, and — if you switch proprietorships on — personal data of individuals, protected by India's DPDP Act 2023, the GDPR and similar laws: only process it with a legitimate basis. See Apify's blog post on the legality of web scraping.

### 🤝 Support & contact

- 🌐 **Website:** [data.foxlabs.com.tr](https://data.foxlabs.com.tr)
- 📧 **Email:** info@foxlabs.com.tr
- 🐛 **Issues:** open a ticket in the Actor’s **Issues** tab
- 🧰 **More clean B2B data actors:** [Fox Labs on Apify](https://apify.com/foxlabs)

### Changelog

#### 0.1 — 2026-09-10 — initial release

- Supplier rows from IndiaMART category and city listing pages, one per IndiaMART account, deduplicated across listings; cities are read in turn, so a `maxResults` cap covers every city.
- Factsheet from the cheapest reliable page first — the catalog site IndiaMART hosts for the supplier (homepage, else its `profile.html` table), then the storefront, then the product page. GSTINs are delivered only with a valid check character; "-", "NA" and masked values count as empty.
- Proprietorships are skipped by default (DPDP); IndiaMART's PNS number is labelled `pns-virtual`.
- Website contact enrichment was removed before release: all 89 supplier websites in our tests were IndiaMART-hosted catalogues without contacts of their own.
- Residential proxy by default. A proxy session IndiaMART refuses (HTTP 403, or 429 after the back-off) is replaced by a fresh one — at most 3 per page and 10 per run; when every session is refused, the summary row names the proxy group and how many sessions were tried.
- Robots.txt on every host, one shared pace for IndiaMART, bounded back-off on HTTP 429, `SOURCE_REPORT`, and a summary row for empty or degraded runs that is never charged.

# Changelog

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

# Actor input Schema

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

One or more IndiaMART product categories. Paste the category slug (`cnc-machines`, `industrial-valves`, `industrial-chemicals`, `cotton-yarn`), the category name (`CNC Machines`) or a full listing URL such as `https://dir.indiamart.com/impcat/cnc-machines.html` or `https://dir.indiamart.com/delhi/cnc-machines.html`. Each listing page gives up to 28 suppliers; add cities below to widen coverage.

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

City names such as `Ahmedabad`, `Coimbatore`, `Navi Mumbai`. When filled, the city-specific listing of each category is read instead of the all-India one (up to 28 suppliers per category and city). Leave empty for the all-India listing of each category.

## `includeProprietorships` (type: `boolean`):

Off by default. A sole proprietorship's GST number embeds the owner's personal PAN, so under India's DPDP Act 2023 such records are personal data of an individual. Turn this on only if you have your own lawful basis for processing them. Companies, LLPs and partnership firms are always included; suppliers whose legal status cannot be confirmed are skipped unless their name ends in Limited / Pvt Ltd / LLP.

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

Stop after this many supplier rows. With several cities, suppliers are taken from the listings in turn, so a cap still covers every city. Set to 0 for unlimited.

## `requestDelayMs` (type: `integer`):

Politeness pace for everything IndiaMART serves (listing, storefront and product pages and the catalog sites it hosts for suppliers), shared by all workers; never below 1000 ms.

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

How many suppliers are processed at the same time. Capped at 2; IndiaMART requests still share one pace.

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

Default: Apify Proxy, Residential group. When IndiaMART refuses a proxy IP (HTTP 403, or HTTP 429 after the back-off), the actor retries the same page from a fresh session — at most 3 sessions per page and 10 new sessions per run. In our tests IndiaMART accepted 10 of 12 residential sessions and refused 9 of 13 datacenter sessions. Compute and proxy traffic are included in the per-record price (a delivered supplier used about 99 KB of residential traffic in our platform run).

## Actor input object example

```json
{
  "categories": [
    "cnc-machines"
  ],
  "cities": [],
  "includeProprietorships": false,
  "maxResults": 10,
  "requestDelayMs": 1000,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "categories": [
        "cnc-machines"
    ],
    "cities": [],
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("foxlabs/indiamart-supplier-data").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": ["cnc-machines"],
    "cities": [],
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("foxlabs/indiamart-supplier-data").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": [
    "cnc-machines"
  ],
  "cities": [],
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call foxlabs/indiamart-supplier-data --silent --output-dataset

```

## MCP server setup

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

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/rk8oOGfvkj5E1T2ZE/builds/nEyc4xamNI6BgjCIl/openapi.json
