# IndiaMART Scraper \[$1.8💰] | Suppliers | Products | Leads (`ahmed_jasarevic/indiamart-scraper`) Actor

Scrape IndiaMART supplier and product search results: price, MOQ, specs, GST and TrustSEAL flags, ratings and phone numbers. Built for B2B lead generation, supplier research and wholesale price comparison across India's largest marketplace. Structured rows via API.

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

## Pricing

from $1.70 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

## Indiamart Scraper — IndiaMART Supplier & Product Data For B2B Lead Generation

The **indiamart scraper** pulls supplier and product rows out of the India B2B marketplace into clean JSON — about **100–150 products per anonymous export search query** and **28 supplier rows per category page**. Every row carries phone, city/state, price, MOQ, specs, GST/TrustSEAL flags, supplier rating and member-since.

### B2B Lead Generation, Supplier Research And Price Monitoring Use Cases

- **B2B lead generation / IndiaMART leads** — listings become supplier leads: company, phone, city/state, address, profile and website URL, one row per listing.
- **Supplier research & procurement data** — shortlist vendors before the first call using `supplierRating`, `ratingCount`, `memberSince` and `supplierGrade`.
- **Wholesale price data & price monitoring** — collect `priceRaw`, `price`, `priceUnit`, `moq` and `specifications` to compare supplier prices, then re-run on a schedule to track movement.
- **Manufacturer database building** — assemble indian manufacturers data by category, city and state from category and city-category URLs.
- **GST-verified supplier vetting** — filter on `gstVerified`, `trustSeal` and `verifiedExporter`, ranked by rating and tenure.
- **Supplier search by city** — scope research to Mumbai, Delhi, Coimbatore or any IndiaMART category URL (city rules below).

### How An IndiaMART Scraper Works: Embedded JSON And Server-Rendered Cards

IndiaMART serves listing pages as plain server-rendered HTML (a plain `curl` returns HTTP 200), so this actor uses **CheerioCrawler** and never runs a browser. Three surfaces: dir-search `__NEXT_DATA__` JSON (0 rows for guests since ~2025), category pages' `window.__INITIAL_STATE__` `data[]` (primary for phone, GST, TrustSEAL, member-since — needs an `IN` residential proxy), and export search cards plus the `/api/search/` JSON API (works from foreign egress — no proxy). Every row is tagged with `source` (`export` | `category` | `search`), `searchTerm`, `categorySlug`, `page` and `scrapedAt`.

### Input Parameters

No field is required: a run with only `searchQueries`, or only one category `startUrls` entry, is valid.

| Field | Type | Required | Default | Notes |
| --- | --- | --- | --- | --- |
| `searchQueries` | array of strings | No | — (form prefill `["stainless steel pipe"]`) | Keywords run against `export.indiamart.com` — no proxy. Page 1 = server-rendered cards (product, price, company, rating, badges); later pages add phone, city/state, MOQ, specs. |
| `startUrls` | array of `{ url }` | No | `[]` | Listing URLs: category pages (`https://dir.indiamart.com/impcat/{slug}.html`), city-category pages (`https://dir.indiamart.com/{city}/{slug}.html`), search URLs (`.../search.mp?ss=...`). Category pages carry GST / TrustSEAL / member-since; search pages carry MOQ. |
| `city` | string | No | — | Restrict queries to one Indian city (Mumbai, Delhi, Coimbatore) via the `cq=` parameter of `dir.indiamart.com` search. Guest `cq=` returns 0 rows. |
| `maxItems` | integer | No | `50` | Max records for the run (min 1, max 5000). Free-plan runs cap at **10 items**. |
| `maxPagesPerSource` | integer | No | `3` | Max pages per query / start URL (min 1, max 50). One page ≈ 10–50 products; export API pages carry ~50. |
| `maxRequestsPerCrawl` | integer | No | `100` | Hard cap on total HTTP requests (min 1, max 2000). |
| `proxy` | object | No | `{ "useApifyProxy": false }` | Standard Apify proxy input, off by default so search-only runs stay cheap. Category/phone data needs it on: residential group, country `IN` — datacenter IPs get `403`/`429`; category pages ~160 KB, residential bills per GB. |

### Output Fields

Flat JSON records — one row per listing — streamed during the run; JSON / CSV / Excel export from the Apify Console, which also ships an **overview** table view of the key columns. Required on every row: `source`, `productId`, `scrapedAt`. All 33 fields:

- **Provenance (6)** — `source` (row's surface: `export` = search pages, no proxy; `category` = `impcat` page, needs IN proxy; `search` = dir search, 0 rows for guests — see the access table), `searchTerm` (producing keyword), `categorySlug`, `page` (1-based), `productId` (`uniqueKey` for dedup), `scrapedAt` (ISO timestamp).
- **Product (4)** — `productName`, `productUrl` (canonical detail URL), `imageUrl`, `description`.
- **Price (4)** — `priceRaw` (as listed, e.g. `₹ 1,800 / Kg`), `price` (numeric), `priceUnit` (Kg, Litre, Piece…), `currency`.
- **Order quantities (2)** — `moq`, `moqUnit`: export `/api/search/` and dir-search rows only; `null` when the seller left it blank or the surface doesn't publish it.
- **Specifications (1)** — `specifications`: spec table (ISQ) as `[{ name, value }]`.
- **Supplier identity (4)** — `companyName`, `supplierId` (seller / disp ID), `profileUrl` (storefront), `websiteUrl` (own site, when listed).
- **Contact & location (5)** — `phone` (category and export API rows; `null` on export page-1 cards), `city`, `state`, `address`, `pincode` (category; `city`/`state` also on export API rows).
- **Trust & certification flags (5)** — `gstVerified` (category source; export API rows carry it as `gstVerifiedFlag`), `trustSeal` (category source — read from the rendered card DOM, not the JSON blob), `verifiedExporter` (export-surface badges), `supplierGrade` (e.g. `STAR EXPORTER`), `memberSince` (e.g. `11 yrs`, category source).
- **Reputation (2)** — `supplierRating` (out of 5), `ratingCount`.

Fields a surface doesn't show come back as `null`. Product-detail (`/proddetail/…`) and storefront pages are not crawled in this version.

### Example Input And Output

**Example input** — keyword search plus a category page, proxy enabled for category data:

```json
{
  "searchQueries": ["stainless steel pipes", "ball bearing"],
  "city": "Mumbai",
  "startUrls": [
    { "url": "https://dir.indiamart.com/impcat/industrial-valves.html" }
  ],
  "maxItems": 50,
  "maxPagesPerSource": 3,
  "maxRequestsPerCrawl": 100,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "IN"
  }
}
```

**Example output row** (category surface — phone, GST, TrustSEAL, member-since present; `moq` is `null` because category pages don't publish it):

```json
{
  "source": "category",
  "searchTerm": null,
  "categorySlug": "industrial-valves",
  "page": 1,
  "productId": "4478123456",
  "productName": "SS 304 Ball Valve, 1/2 Inch",
  "productUrl": "https://www.indiamart.com/proddetail/ss-ball-valve-4478123456.html",
  "imageUrl": "https://5.imimg.com/data5/akj/xx/img/123456/industrial-valves.jpg",
  "priceRaw": "₹ 1,800 / Piece",
  "price": 1800,
  "priceUnit": "Piece",
  "currency": "INR",
  "moq": null,
  "moqUnit": null,
  "specifications": [
    { "name": "Material", "value": "Stainless Steel 304" },
    { "name": "Size", "value": "1/2 Inch" }
  ],
  "companyName": "Shree Valve Works",
  "phone": "9876543210",
  "city": "Mumbai",
  "state": "Maharashtra",
  "address": "Plot 14, Andheri East, Mumbai",
  "pincode": "400069",
  "gstVerified": true,
  "trustSeal": true,
  "verifiedExporter": null,
  "supplierGrade": "STAR EXPORTER",
  "supplierRating": 4.5,
  "ratingCount": 128,
  "memberSince": "11 yrs",
  "supplierId": "512703",
  "profileUrl": "https://www.indiamart.com/shree-valve-works/",
  "websiteUrl": "https://www.shreevalveworks.example",
  "description": "SS 304 ball valves in standard and custom sizes.",
  "scrapedAt": "2026-10-07T08:15:04.000Z"
}
```

### Get IndiaMART Supplier Phone Numbers, Prices And GST Flags As JSON

**Access requirements (read this before your first run):**

| Surface | How it's reached | Needs proxy? |
| --- | --- | --- |
| Export search cards + `/api/search/` pages | direct, or geo-redirect from `dir.indiamart.com` | **No** — works from Apify's own egress |
| Category JSON (`impcat`) | `dir.indiamart.com` | **Yes** — datacenter IPs get `403`/`429`; use Apify Proxy, residential group, country `IN` |
| dir search JSON | `dir.indiamart.com` | Currently returns 0 rows regardless (guest search disabled) |

Proxy wiring is the standard `proxy.useApifyProxy` input, off by default; category/phone data needs the residential `IN` group.

**Field coverage by surface:**

| Field | Export cards (p1) | Export API (p2+) | Category JSON | dir search JSON |
| --- | --- | --- | --- | --- |
| product, price, company, rating, badges, profile URL | ✅ | ✅ | ✅ | ✅ |
| **phone / city / state / specs / member-since / GST** | ❌ (`null`) | ✅ | ✅ | ✅ |
| **MOQ** | ❌ (`null`) | ✅ (blank if the seller left it empty) | ❌ (`null`) | ✅ (parser ready, 0 rows today) |
| TrustSEAL / est-year / export destinations | ✅ | ❌ (`null`) | ✅ (TrustSEAL) | ❌ |

Mix `searchQueries` and category `startUrls` in one run — `source` tags every row. For phone in the first pass, seed with category URLs or push past page 1.

#### Supplier research by city — Mumbai, Delhi, Coimbatore and any category URL

- The `city` input applies a `cq=` dir-search filter that **currently returns 0 rows for guest visitors**, so city-scoped keyword searches are not dependable today.
- Dependable geo paths: **city-category start URLs** (`dir.indiamart.com/mumbai/stainless-steel-pipe.html` style) and export-search rows, which carry `city`/`state` for post-filtering; rows always carry `address` and `pincode` where published.

### Is There An IndiaMART API? Build This Data Without Official API Access

IndiaMART's published API documentation is seller-oriented — the **IndiaMART Leads API**: a seller's own leads, not marketplace searches or bulk listing export. For public search/category data there is no official endpoint — which is why four independent API vendors (Anakin, Parse.bot, Oxylabs, Bright Data) market "IndiaMART API" landing pages instead. This actor reads public listing pages, parses the embedded JSON and writes rows to a dataset: no API key, no seller account.

**Endpoints actually used:**

1. `https://dir.indiamart.com/search.mp?ss=<q>` — dir search `__NEXT_DATA__` JSON (`props.pageProps.searchResponse.results[].fields` + `.more_results[]`, ~44 products/page), the richest field set of any surface: MOQ + `moq_type`, `price_f`, `isq` specs, `pns` (phone), city/state, `supplier_rating`, `companyname`, `tscode`. Tested against archived pages; since ~2025 it returns `searchResponse: null` for unauthenticated visitors — 0 rows today, parser kept in case guest search reopens.
2. `https://dir.indiamart.com/impcat/<slug>.html` and `https://dir.indiamart.com/<city>/<slug>.html` — `window.__INITIAL_STATE__` `data[]` per product card: `CMP` (company), `c_ct` (phone), `pr`, `isq`, `gst_v`, `m_sn`, `wt_avg`/`tr_c` (rating), `ts`, `disp_id`. TrustSEAL is not in the blob — it's server-rendered only on certified cards, so the card DOM (`id="dispId<id>"`) is joined to the JSON by `disp_id`. 28 rows/page, `totalResults` pagination. Needs the `IN` residential proxy.
3. `https://export.indiamart.com/search.php?ss=<q>` — page 1 (dir.indiamart.com geo-redirects foreign IPs here): 10 React-rendered cards, related mini-cards excluded. Extracted: product, price, company + `/company/<slug>/` profile URL, rating + reviews, TrustSEAL / GST Verified / Verified Exporter / IEC Verified badges, est. year, business type, export destinations. Not published: phone, city/state, MOQ, specs.
4. `GET /api/search/?ss=<q>&page=<n>` — the "Show More Products" endpoint, the only thing that works past page 1. One API page ≈ **50 unique products** (10 primary + related): `pns` phone, city/state/zipcode, `moq`, `isq` specs, `gstVerifiedFlag`, `iecflag`, `memberSinceDisplay`, plus `nextPage`. Anonymous callers get pages 1–2 only.

**Rejected during recon:** third-party search backends (Solr-backed, server-side — no Algolia/Meilisearch), `m.` / `www.` JSON APIs (WAF-blocked or nonexistent), `?m=1` / AMP, and Playwright (data is always in the served HTML).

**Limits & known gaps:**

- Export pagination hands over from `search.php` (its `page` param is a no-op) to `/api/search/`, bounded by `nextPage` plus a stop on a page with no new rows; anonymous callers only receive API pages 1–2.
- **MOQ** comes from export `/api/search/` pages, so `searchQueries` runs carry it only from page 2 and only when the seller filled it in. Export page-1 rows have no phone/city; category rows have no MOQ; `source` tells you which.
- `maxRequestsPerCrawl`, `maxItems` and `maxPagesPerSource` cap every run; `maxConcurrency` 3, `maxRequestRetries` 3; free-plan runs cap at 10 items.
- **Cost shape:** proxy off = cheap search-only runs; residential `IN` bills per GB.

### Integrations & Automation

- **Apify API** — start a run and read the dataset from any stack:

  ```bash
  curl -X POST "https://api.apify.com/v2/acts/g7fFflJUPEpL69jWg/runs?token=YOUR_TOKEN" \
    -H "Content-Type: application/json" \
    -d '{"searchQueries": ["stainless steel pipes"], "maxItems": 50}'
  ```

  then poll `GET https://api.apify.com/v2/acts/g7fFflJUPEpL69jWg/runs/{runId}/dataset/items` (or `run-sync-get-dataset-items`). Actor ID: `g7fFflJUPEpL69jWg`.
- **Apify Console** — paste JSON, watch rows stream in, export JSON / CSV / Excel, or append each run to a sheet via the Google Sheets integration.
- **Webhooks** — Apify calls your endpoint on run success/failure with the dataset URL (ideal for CRM ingestion).
- **Zapier & Make** — trigger a Zap or scenario per run to push rows into HubSpot, Airtable, Slack or email alerts.
- **Recurring schedules** — save the input as a task and schedule it (daily for price monitoring, weekly for supplier discovery).

### Related Actors

- [indiamart-supplier-scraper](https://apify.com/thirdwatch/indiamart-supplier-scraper) — most-used independent IndiaMART supplier scraper on the Store (545 users, 4.55★)
- [indiamart-scraper](https://apify.com/haketa/indiamart-scraper) — keyword-based IndiaMART supplier & product search with GST/exporter filters
- [indiamart-suppliers](https://apify.com/themineworks/indiamart-suppliers) — supplier leads framed around phone, GST flag and city coverage
- [indiamart-scraper](https://apify.com/parseforge/indiamart-scraper) — category-based IndiaMART supplier scraper with city and verified-supplier filters
- [tradeindia-scraper](https://apify.com/haketa/tradeindia-scraper) — the sibling marketplace for the IndiaMART vs TradeIndia comparison

### FAQ

#### How do I find suppliers in India?

Feed the actor product keywords (`searchQueries`) and/or category or city-category URLs (`startUrls`). Each row carries `companyName`, `phone`, city/state/address/pincode, `supplierRating`, `memberSince` and the GST/TrustSEAL flags for shortlisting.

#### Is there an official IndiaMART API?

Partially. IndiaMART's official documentation covers the **Leads API**, which lets a *seller* retrieve their own leads — no official public endpoint for marketplace-wide search or listing data (four vendors — Anakin, Parse.bot, Oxylabs, Bright Data — sell "IndiaMART API" access instead).

#### Why use this actor instead of the official API?

The official Leads API lets a seller retrieve leads they already received. Buyers, procurement teams and researchers who want marketplace-wide rows (product, price, phone, city, GST/TrustSEAL flags, rating) have no official endpoint for that. This actor returns them as structured JSON with Apify's export, scheduling and API tooling — public pages only, no login.

#### How do I get supplier phone numbers from IndiaMART?

On **category rows** (`impcat` / city-category pages — `IN` residential proxy) and **export API rows** (page 2+ of a `searchQueries` crawl). Export page-1 rows have no phone (`null`); MOQ follows the same pattern.

#### Can I get supplier email addresses from IndiaMART?

No — the 33-field dataset has no email field, and the public listing surfaces don't expose supplier emails. Closest contact fields: `phone`, `websiteUrl`, `profileUrl`.

#### Do I need a proxy to scrape IndiaMART?

Sometimes. Export cards and `/api/search/` pages work from Apify's own egress; category pages need Apify Proxy, residential group, country `IN`. Dir search returns 0 rows with or without a proxy.

#### What are the alternatives to this actor and to IndiaMART itself?

The five Related Actors above — three more IndiaMART scrapers plus TradeIndia; **ExportersIndia** and **Udaan** are the other usual alternatives.

### SEO Keywords

indiamart scraper, indiamart api, indiamart supplier scraper, indiamart product scraper, indiamart supplier data, indiamart leads, indiamart search scraper, india b2b marketplace data, b2b lead generation, supplier research, procurement data, wholesale price data, manufacturer database, indian manufacturers data, supplier directory scraper, compare supplier prices, india b2b marketplace, indiamart alternatives, gst verified suppliers, indiamart supplier phone numbers, find suppliers in india, tradeindia scraper, indiamart price monitoring, indiamart supplier search by city

### For AI Agents & LLM Apps

**Purpose:** given keywords or IndiaMART category/city URLs, return one JSON row per product listing (supplier contact, location, price, MOQ, specs, trust flags) in an Apify dataset.

Minimal working input:

```json
{ "searchQueries": ["stainless steel pipes"] }
```

Distinct mode — full-field category crawl (proxy required for `phone` / GST / TrustSEAL):

```json
{
  "startUrls": [{ "url": "https://dir.indiamart.com/impcat/industrial-valves.html" }],
  "maxItems": 50,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "IN" }
}
```

Output fields (33): `source`, `searchTerm`, `categorySlug`, `page`, `productId`, `productName`, `productUrl`, `imageUrl`, `priceRaw`, `price`, `priceUnit`, `currency`, `moq`, `moqUnit`, `specifications`, `companyName`, `phone`, `city`, `state`, `address`, `pincode`, `gstVerified`, `trustSeal`, `verifiedExporter`, `supplierGrade`, `supplierRating`, `ratingCount`, `memberSince`, `supplierId`, `profileUrl`, `websiteUrl`, `description`, `scrapedAt`.

Behaviors an agent should know:

- Nothing is required: `searchQueries` alone (or one `startUrls` entry) is valid. Defaults: `maxItems` 50, `maxPagesPerSource` 3, `maxRequestsPerCrawl` 100; free-plan runs capped at 10 items.
- `proxy.useApifyProxy` defaults to `false`. Category (`impcat`) pages fail with `403`/`429` from datacenter IPs — enable Apify Proxy, residential group, country `IN`. Export search works with no proxy.
- `city` applies the `cq=` parameter of `dir.indiamart.com` search, which returns 0 rows for guests (`searchResponse: null`, parser dormant) — use city-category `startUrls` (`dir.indiamart.com/{city}/{slug}.html`) for geo-scoped runs.
- Field availability varies by surface, tagged in `source`: export page-1 cards have no `phone`/`city`/`moq`; category rows have no `moq`; export API rows (page 2+) add `phone`, city/state, `moq`, specs but no TrustSEAL.
- Anonymous export pagination stops after API pages 1–2 (~100–150 products per query); `search.php?...&page=` is a no-op, and a page with no results ends the crawl.
- Product-detail and storefront pages are not crawled; `maxConcurrency` 3, `maxRequestRetries` 3. Deduplicate on `productId`.

### Legal & Compliance Disclaimer

- Independent tool — not affiliated with, endorsed by or connected to IndiaMART; IndiaMART and its badges (TrustSEAL, GST Verified) are trademarks of their owner.
- It accesses only publicly available, server-rendered listing pages, with no login, OTP or authentication bypass; when IndiaMART disables a guest surface (dir search today), it returns 0 rows rather than authenticating.
- Output use is governed by IndiaMART's terms of service and applicable data-protection law (including India's DPDP Act for individuals in India). This documentation is not legal advice.
- The output includes personal contact data (`phone`); unsolicited commercial outreach must comply with applicable law — including India's TRAI Do-Not-Disturb and telemarketer-registration rules.

# Actor input Schema

## `searchQueries` (type: `array`):

Product / supplier keywords to search on IndiaMART (e.g. "stainless steel pipes"). Queries run against export.indiamart.com (no proxy needed) and return price + MOQ + specs + supplier contact data; the first screen is the server-rendered cards, later pages come from the export search JSON API.

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

Direct IndiaMART listing URLs to crawl instead of / in addition to search queries. Supported: category pages (https://dir.indiamart.com/impcat/{slug}.html), city-category pages (https://dir.indiamart.com/{city}/{slug}.html) and search URLs (https://dir.indiamart.com/search.mp?ss=...). Category pages carry GST / TrustSEAL / member-since flags; search pages carry MOQ.

## `city` (type: `string`):

Restrict search queries to one Indian city (e.g. Mumbai, Delhi, Coimbatore). Applied as the cq= parameter of dir.indiamart.com search.

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

Maximum number of records to return for the whole run.

## `maxPagesPerSource` (type: `integer`):

Maximum result pages crawled per search query / start URL (one page = up to ~10-50 products; export API pages carry ~50 unique products, so maxItems is usually reached before this cap).

## `maxRequestsPerCrawl` (type: `integer`):

Hard cap on total HTTP requests made by the crawler.

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

Select proxies to be used by your crawler.

## Actor input object example

```json
{
  "searchQueries": [
    "stainless steel pipe"
  ],
  "startUrls": [],
  "maxItems": 50,
  "maxPagesPerSource": 3,
  "maxRequestsPerCrawl": 100,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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 = {
    "searchQueries": [
        "stainless steel pipe"
    ],
    "startUrls": [],
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/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 = {
    "searchQueries": ["stainless steel pipe"],
    "startUrls": [],
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/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 '{
  "searchQueries": [
    "stainless steel pipe"
  ],
  "startUrls": [],
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/indiamart-scraper --silent --output-dataset

```

## MCP server setup

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