# IndiaMART Supplier Scraper (`memo23/indiamart-scraper`) Actor

Build Indian supplier shortlists from IndiaMART.com in minutes — full GST numbers, phone, address, prices, MOQ, ratings, TrustSeal and exporter flags in every row. Works with keyword searches (city/state filter) or any IndiaMART URL. New-listings monitoring mode. JSON or CSV out.

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

## Pricing

from $2.00 / 1,000 results

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

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Scraper

**Turn IndiaMART.com into structured Indian B2B supplier data.** Search by keyword or paste any IndiaMART URL and get one clean row per product/supplier — company name, full GST number, phone, address, price, MOQ, specifications, TrustSeal and exporter flags, rating, member-since, and the supplier's own website. JSON or CSV out, pay per result only.

### Why Use This Scraper?

- ✅ **Full GST numbers, not masked ones.** Search-driven rows carry the supplier's complete GST identifier (e.g. `27BAZPB7846K1ZV`) plus a `gstVerified` flag — most scrapers only get the masked `24**********1ZY` version shown on product pages.
- ✅ **Phone + address on every path.** Search rows include phone and full street address; product-page rows capture the seller's IndiaMART contact number and locality directly from the page.
- ✅ **Four entry points, auto-classified.** Keyword searches, category listing URLs, product detail URLs, and supplier storefront URLs — mix them freely in one run.
- ✅ **Trust signals for qualification.** `trustSeal`, `verifiedExporter`, `iecVerified`, `memberSince`, `supplierRating` + `ratingCount`, `annualTurnover`, `employeeCount`, and `exportsTo` country lists.
- ✅ **Extra products per supplier.** IndiaMART bundles up to 4 adjacent products with every search result — emit them as extra rows that inherit the supplier's contact and verification fields.
- ✅ **Monitoring mode.** Run on a schedule and only get products you haven't seen before — ideal for tracking new suppliers in a category.
- ✅ **Optional email enrichment.** Best-effort discovery of a contact email from the supplier's own website, with an optional payment-capability qualifier.

### Overview

The IndiaMART Supplier Scraper is built for procurement teams, B2B lead-generation agencies, and India-market researchers who need structured supplier data from IndiaMART — India's largest B2B marketplace.

The output is primarily **supplier-product rows**: one row per product listing, with the supplier's company, contact, and verification fields merged in. Supplier storefront URLs produce one **supplier row** (company-level fields only, no product). Whichever URL type you start from, you get a flat dataset ready for CSV export, CRM import, or enrichment.

Search queries are the richest source — they resolve through IndiaMART's public search API and return the full GST number, phone, address, rating, and member-since data in one shot. Category pages and product URLs are scraped from the server-rendered HTML and enriched from the supplier's storefront when needed.

### Supported Inputs

#### Search queries (recommended)

Free-text product or supplier searches, optionally filtered by city or state:

```json
{
  "queries": ["stainless steel pipes", "pharma packaging"],
  "location": "Mumbai"
}
```

#### URL types

| URL type | Pattern | Example |
|---|---|---|
| Category listing | `dir.indiamart.com/impcat/{category}.html` | `https://dir.indiamart.com/impcat/industrial-valves.html` |
| City-category listing | `dir.indiamart.com/{city}/{category}.html` | `https://dir.indiamart.com/mumbai/industrial-valves.html` |
| Search URL | `dir.indiamart.com/search.mp?ss=...` | `https://dir.indiamart.com/search.mp?ss=steel+pipes` |
| Product detail | `www.indiamart.com/proddetail/{slug}-{id}.html` | `https://www.indiamart.com/proddetail/316l-stainless-steel-pipe-2856608307573.html` |
| Supplier storefront | `www.indiamart.com/{company-slug}/` | `https://www.indiamart.com/skylandmetal/` |

#### Copy-pasteable startUrls

```json
{
  "startUrls": [
    "https://dir.indiamart.com/impcat/industrial-valves.html",
    "https://www.indiamart.com/proddetail/316l-stainless-steel-pipe-2856608307573.html",
    "https://www.indiamart.com/skylandmetal/"
  ]
}
```

#### Unsupported inputs

- ❌ Content behind an IndiaMART login (buy-lead inboxes, quotation flows, deeper search pages)
- ❌ `m.indiamart.com` mobile URLs (paste the `www.` / `dir.` equivalent instead)
- ❌ Non-IndiaMART hosts

### Use Cases

| Audience | Use case |
|---|---|
| **Procurement teams** | Qualify Indian suppliers by GST, TrustSeal, rating, turnover, and employee count before the first call |
| **B2B sales / lead-gen agencies** | Build India SME prospect lists by product category and region, with phone numbers included |
| **Exporters / importers** | Find verified exporters by category, see which countries they already ship to |
| **Marketplace analysts** | Track wholesale price bands, MOQs, and supplier density across cities |
| **Compliance teams** | Collect full GST numbers and verification flags for KYC pre-checks |
| **Dropshippers** | Compare product price, MOQ, and supplier trust signals across sellers |

### How It Works

![How IndiaMART Supplier Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-indiamart.png)

1. **Input** — provide search queries (with optional city/state filter) and/or any mix of IndiaMART URLs.
2. **Classify** — each URL is auto-routed: search API, category listing, product detail, or supplier storefront.
3. **Collect** — queries hit IndiaMART's public search API (richest data); listings are fanned out to product pages in parallel.
4. **Enrich** — each unique supplier storefront is fetched once to add phone, address, rating, and company description to product-page rows.
5. **Output** — one row per product (or per supplier for storefront URLs), exported as JSON or CSV.

### Input Configuration

#### Input fields

| Field | Type | Required | Notes |
|---|---|---|---|
| `queries` | `array<string>` | yes (or `startUrls`) | Product/supplier search terms, resolved through IndiaMART's search API |
| `location` | `string` | optional | City or state filter applied to every query (e.g. `Mumbai`, `Maharashtra`) |
| `startUrls` | `array<string>` | yes (or `queries`) | Any mix of category, search, product, and storefront URLs |
| `includeExtraProducts` | `boolean` | optional | Emit the up-to-4 adjacent products bundled with each search result (default `true`) |
| `enrichSupplier` | `boolean` | optional | Fetch each unique supplier storefront once to enrich product-page rows (default `true`) |
| `enrichEmails` | `boolean` | optional | Best-effort contact-email discovery from the supplier's own website (default `false`) |
| `qualifyByPayment` | `boolean` | optional | Flag suppliers whose website takes online payments; requires `enrichEmails` (default `false`) |
| `monitoringMode` | `boolean` | optional | Only return products not delivered on previous runs (default `false`) |
| `resetMonitoringState` | `boolean` | optional | One-shot: clear the "already seen" record at run start (default `false`) |
| `maxItems` | `integer` | optional | Hard cap on dataset rows (default `1000`) |
| `maxConcurrency` | `integer` | optional | Parallel page fetches (default `10`) |
| `proxy` | `object` | optional | Residential proxy recommended (default: Apify RESIDENTIAL) |

#### Common scenarios

**1. Supplier shortlist for one product in one city**

```json
{
  "queries": ["stainless steel pipes"],
  "location": "Mumbai",
  "maxItems": 50
}
```

**2. Whole category with supplier enrichment**

```json
{
  "startUrls": ["https://dir.indiamart.com/impcat/industrial-valves.html"],
  "enrichSupplier": true,
  "maxItems": 200
}
```

**3. Scheduled new-supplier feed**

```json
{
  "queries": ["packaging machines"],
  "monitoringMode": true,
  "maxItems": 500
}
```

### Output Overview

Each dataset item is a **supplier-product row** containing:

- **Product** — `productName`, `productUrl`, `productId`, `description`, `specifications` (key-value spec table), `imageUrl`, `price`, `priceRaw`, `currency`, `unit`, `moq`
- **Supplier identity** — `companyName`, `companyAlias`, `supplierUrl` (IndiaMART storefront), `supplierWebsite` (their own site), `businessTypes`
- **Contact** — `phone`, `address`, `city`, `district`, `state`, `postcode`, `contactPerson` (product-page rows)
- **Verification** — `gstNumber`, `gstVerified`, `iecNumber`, `iecVerified`, `trustSeal`, `verifiedExporter`
- **Trust signals** — `supplierRating`, `ratingCount`, `memberSince`, `exporterSince`, `exportsTo`, `annualTurnover`, `employeeCount`, `legalStatus`

The `source` field tells you which path produced the row: `search`, `category-listing`, `product-detail`, or `supplier-storefront`. Search rows are the most complete (full GST + phone + address). Product-detail rows carry specs, company facts, and the seller's contact box; supplier storefront enrichment fills in rating and description.

### Output Samples

#### Search query start (richest — full GST, phone, address)

```jsonc
{
  "type": "supplier-product",
  "source": "search",
  "searchQuery": "stainless steel pipes",
  "productId": "2856608307573",
  "productName": "316l Stainless Steel Pipe",
  "productUrl": "https://www.indiamart.com/proddetail/316l-stainless-steel-pipe-2856608307573.html",
  "specifications": { "Material Grade": "SS316", "Shape": "Round", "Unit Pipe Length": "3 meter" },
  "price": 350,
  "priceRaw": "₹ 350/Kg",
  "currency": "INR",
  "companyName": "Skyland Metal And Alloys Inc",
  "supplierUrl": "https://www.indiamart.com/skylandmetal/",
  "supplierWebsite": "https://www.skylandmetal.co.in/",
  "businessTypes": ["Wholesaler"],
  "address": "2nd Floor, Office No.212, Chandan Signature, Girgaon",
  "city": "Mumbai",
  "state": "Maharashtra",
  "postcode": "400004",
  "phone": "7949351706",
  "gstNumber": "27BAZPB7846K1ZV",
  "gstVerified": true,
  "trustSeal": true,
  "verifiedExporter": true,
  "memberSinceDisplay": "10 yrs",
  "exportsTo": ["Saudi Arabia", "Bangladesh", "Chile", "United States Of America"],
  "supplierRating": 4.4,
  "ratingCount": 159
  /* ... isAdditionalProduct, imageUrl, moq, iecNumber, scrapedAt ... */
}
```

#### Product detail start (specs + company facts + seller contact box)

```jsonc
{
  "type": "supplier-product",
  "source": "product-detail",
  "productName": "Industrial Valves",
  "price": 27000,
  "currency": "INR",
  "companyName": "Accurate Flow Control Valves",
  "phone": "+91-7942815737",
  "contactPerson": "Ishar",
  "sellerLocation": "Ahmedabad, Gujarat",
  "legalStatus": "Proprietorship",
  "annualTurnover": "1.5 - 5 Cr",
  "employeeCount": "Upto 10 People",
  "supplierRating": 4.4,
  "categories": ["Industrial Valves & Valve Fittings", "Industrial Valves"]
  /* GST is masked on product pages — use search queries for full GST numbers */
}
```

#### Supplier storefront start (one company-level row)

```jsonc
{
  "type": "supplier",
  "source": "supplier-storefront",
  "companyName": "Skyland Metal And Alloys Inc",
  "companyDescription": "Trader - Wholesaler / Distributor of Inconel alloy, Stainless Steel Pipe...",
  "phone": "+91-7949351706",
  "city": "Mumbai",
  "supplierRating": 4.4,
  "ratingCount": 159,
  "annualTurnover": "5 - 25 Cr",
  "employeeCount": "26 to 50 People"
}
```

### Key Output Fields

#### Product Core

- `productId`, `productName`, `productUrl`, `description`, `specifications`, `imageUrl`, `largeImageUrl`

#### Pricing

- `price`, `priceRaw`, `currency`, `unit`, `moq`

#### Supplier Identity

- `companyName`, `companyAlias`, `supplierId`, `supplierUrl`, `supplierWebsite`, `businessTypes`, `logoUrl`

#### Contact

- `phone`, `address`, `city`, `district`, `state`, `postcode`, `country`, `contactPerson`

#### Verification & Compliance

- `gstNumber`, `gstVerified`, `iecNumber`, `iecVerified`, `trustSeal`, `verifiedExporter`

#### Trust & Scale Signals

- `supplierRating`, `ratingCount`, `memberSince`, `memberSinceDisplay`, `exporterSince`, `exportsTo[]`, `annualTurnover`, `employeeCount`, `legalStatus`

#### Row Metadata

- `type`, `source`, `searchQuery`, `isAdditionalProduct`, `scrapedAt`

### FAQ

#### Which IndiaMART URLs are supported?

Category listings (`dir.indiamart.com/impcat/...`), city-category pages, search URLs (`search.mp?ss=...`), product detail pages (`/proddetail/...`), and supplier storefronts (`www.indiamart.com/{company}/`). Login-gated pages and mobile (`m.indiamart.com`) URLs are not supported.

#### Where does the full GST number come from?

From IndiaMART's search API — every search-driven row carries it in full. Product detail pages mask GST numbers (e.g. `24**********1ZY`), so the scraper deliberately doesn't emit the masked version; if you need GST, start from `queries` rather than product URLs.

#### Why do I get ~20–100 rows per search query and not thousands?

IndiaMART's anonymous search serves the first two result pages per query (~20 supplier groups, plus up to 4 extra products each with `includeExtraProducts`). Deeper pages require an IndiaMART login, which the actor doesn't do. Use more specific queries or a `location` filter to widen coverage across runs.

#### What does `includeExtraProducts` do?

Each search result bundles up to 4 adjacent products from the same supplier. When enabled (default), these become extra dataset rows flagged `isAdditionalProduct: true` that inherit the supplier's contact and verification fields — roughly 3–5× more rows per query.

#### Is the phone number always present?

Search rows almost always include it. Product-page rows carry the seller's IndiaMART contact number from the page's Seller Contact Details box. Storefront rows include the storefront's listed phone. It can be null for unclaimed or minimal listings.

#### How does monitoring mode work?

The actor keeps a private per-user record of every product ID it has delivered to you. With `monitoringMode: true`, previously-seen products are silently skipped (and not charged). The first monitored run builds your baseline; schedule subsequent runs for a "new listings only" feed. `resetMonitoringState: true` clears the record.

#### Can I scrape buy leads, quotations, or anything behind login?

No. The actor only accesses publicly available pages — no authentication, no login-gated content.

#### What about anti-bot / rate limits?

IndiaMART serves residential IPs reliably; the default residential proxy configuration works out of the box. Category listing pages rotate their card set between fetches, so the actor re-fetches each listing a few times to harvest more unique products.

### Support

Found a bug or have a feature request? Open an issue on the actor's [Issues tab](https://apify.com/memo23/indiamart-scraper/issues) or email me at <muhamed.didovic@gmail.com>.

### Additional Services

Need a custom export shape, deeper category coverage, scheduled delivery to Google Sheets / your CRM, or a private variant with different enrichment? I do tailored work — drop me a line at <muhamed.didovic@gmail.com>.

### Explore More Scrapers

If you found this useful, you might also like:

- [**JustDial Business Scraper**](https://apify.com/memo23/justdial-business-scraper) — Indian local-business listings with contact details
- [**D\&B Scraper**](https://apify.com/memo23/dnb-scraper) — Dun & Bradstreet company profiles
- [**Naukri Scraper**](https://apify.com/memo23/naukri-scraper) — India's largest job portal
- [**Europages Scraper**](https://apify.com/memo23/europages-scraper) — European B2B supplier directory
- [**MagicBricks Property Scraper**](https://apify.com/memo23/magicbricks-property-scraper) — Indian real-estate listings

Full list at [apify.com/memo23](https://apify.com/memo23).

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/indiamart-scraper`).

**Purpose:** Scrape Indian B2B supplier/product data from IndiaMART.com — the differentiator is full (unmasked) GST numbers plus phone and address on search-driven rows.

**Minimal input:**

```json
{ "queries": ["stainless steel pipes"], "maxItems": 25 }
```

**Output:** one dataset row per product — `productName`, `productUrl`, `productId`, `price`, `currency`, `moq`, `specifications {key: value}`, `companyName`, `supplierUrl`, `supplierWebsite`, `phone`, `address`, `city`, `state`, `gstNumber`, `gstVerified`, `trustSeal`, `verifiedExporter`, `supplierRating`, `ratingCount`, `memberSince`, `exportsTo[]`, `source`, `isAdditionalProduct`.

**Behaviors an agent should know:**

- Always set `maxItems` — with `includeExtraProducts` (default true) one query can yield 100+ rows.
- `queries` and `startUrls` both run if both are given; if neither is given, a default category listing is used.
- Anonymous search covers ~2 pages per query (~20 supplier groups); deeper coverage needs more/narrower queries, not pagination.
- Full `gstNumber` only appears on `source: "search"` rows; product-detail rows omit it (masked on page).
- Billing is pay-per-event: one small actor-start fee + one fee per dataset row. Skipped (monitored/deduped) rows are not charged.
- `monitoringMode: true` keeps per-user state and only returns products not delivered before.

***

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by IndiaMART InterMESH Ltd. or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

The scraper accesses only publicly available supplier and product pages — no authenticated endpoints, buy-lead inboxes, or content behind the indiamart.com login wall. Users are responsible for ensuring their use complies with indiamart.com's Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of their own organization.

***

### SEO Keywords

indiamart scraper, scrape indiamart, indiamart supplier scraper, indiamart API, indiamart.com scraper, Apify indiamart, B2B supplier scraper, indian suppliers database, supplier directory scraper, GST number extraction, indian manufacturers data, wholesale price data, B2B lead generation india, procurement data scraper, supplier verification data, india SME leads, exporter directory india, MOQ price scraper, indiamart product data, indian wholesale market data

# Actor input Schema

## `queries` (type: `array`):

Product or supplier search terms, e.g. `stainless steel pipes`, `pharma packaging`, `industrial valves`. Each query is resolved through IndiaMART's search API.

## `location` (type: `string`):

Optional city or state applied to every search query (e.g. `Mumbai`, `Maharashtra`). Leave empty for all-India results.

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

Full IndiaMART URLs to crawl. All URL shapes are auto-classified; mix them freely in one run.

## `includeExtraProducts` (type: `boolean`):

IndiaMART bundles up to 4 adjacent products from the same supplier with every search result. When enabled these are emitted as extra rows (flagged `isAdditionalProduct: true`) that inherit the supplier's contact and verification fields — roughly 3-5× more rows per query.

## `enrichSupplier` (type: `boolean`):

For rows coming from category pages or direct product URLs, fetch each unique supplier storefront once to add `phone`, `address`, `supplierRating`, `ratingCount` and `companyDescription`. Search-API rows already include these, so no extra fetch happens for them.

## `enrichEmails` (type: `boolean`):

If enabled, tries to find a contact email for each supplier by visiting its own website (when listed) or discovering it, then reading contact/about pages. Adds `contactEmail` + `contactWebsite` columns plus a detailed `emailEnrichment` object. Best-effort.

## `qualifyByPayment` (type: `boolean`):

Requires "Enrich with contact emails". Scans each supplier's website — reusing the pages already fetched for email discovery, so no extra cost or time — for payment processors and e-commerce platforms (Stripe, Shopify, PayPal, Razorpay, WooCommerce, Square and more). Adds `takesPayments`, `paymentProcessors`, `stripeLiveKey` and `paymentConfidence`.

## `monitoringMode` (type: `boolean`):

When enabled, products whose IndiaMART display ID has already been delivered to you are silently skipped (no charge applies for them). The first run after enabling monitoring returns every match — that builds your baseline. Every subsequent run returns only new listings. Combine with Apify's scheduler for a 'new suppliers since last run' feed.

## `resetMonitoringState` (type: `boolean`):

One-shot toggle: clear the saved 'products already seen' record at the start of this run. Use this when you change queries, want to rebuild the baseline, or recover from a missed delivery. Has no effect when monitoring mode is off.

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

Hard cap on the number of supplier/product rows collected across all queries and start URLs. Use this to limit billing.

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

Maximum number of pages processed in parallel.

## `minConcurrency` (type: `integer`):

Minimum number of pages processed in parallel.

## `maxRequestRetries` (type: `integer`):

Number of retries before a failed request is given up.

## `proxy` (type: `object`):

Apify proxy settings. IndiaMART serves residential IPs fine; datacenter ranges are riskier. Residential proxy recommended.

## Actor input object example

```json
{
  "queries": [
    "stainless steel pipes"
  ],
  "startUrls": [
    "https://dir.indiamart.com/impcat/industrial-valves.html"
  ],
  "includeExtraProducts": true,
  "enrichSupplier": true,
  "enrichEmails": false,
  "qualifyByPayment": false,
  "monitoringMode": false,
  "resetMonitoringState": false,
  "maxItems": 1000,
  "maxConcurrency": 10,
  "minConcurrency": 1,
  "maxRequestRetries": 5,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "queries": [
        "stainless steel pipes"
    ],
    "location": "",
    "startUrls": [
        "https://dir.indiamart.com/impcat/industrial-valves.html"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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 = {
    "queries": ["stainless steel pipes"],
    "location": "",
    "startUrls": ["https://dir.indiamart.com/impcat/industrial-valves.html"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/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 '{
  "queries": [
    "stainless steel pipes"
  ],
  "location": "",
  "startUrls": [
    "https://dir.indiamart.com/impcat/industrial-valves.html"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/indiamart-scraper --silent --output-dataset

```

## MCP server setup

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