IndiaMART Scraper [$1.8💰] | Suppliers | Products | Leads avatar

IndiaMART Scraper [$1.8💰] | Suppliers | Products | Leads

Pricing

from $1.70 / 1,000 results

Go to Apify Store
IndiaMART Scraper [$1.8💰] | Suppliers | Products | Leads

IndiaMART Scraper [$1.8💰] | Suppliers | Products | Leads

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.

Pricing

from $1.70 / 1,000 results

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 days ago

Last modified

Categories

Share

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.

FieldTypeRequiredDefaultNotes
searchQueriesarray of stringsNo— (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.
startUrlsarray 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.
citystringNo—Restrict queries to one Indian city (Mumbai, Delhi, Coimbatore) via the cq= parameter of dir.indiamart.com search. Guest cq= returns 0 rows.
maxItemsintegerNo50Max records for the run (min 1, max 5000). Free-plan runs cap at 10 items.
maxPagesPerSourceintegerNo3Max pages per query / start URL (min 1, max 50). One page ≈ 10–50 products; export API pages carry ~50.
maxRequestsPerCrawlintegerNo100Hard cap on total HTTP requests (min 1, max 2000).
proxyobjectNo{ "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:

{
"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):

{
"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):

SurfaceHow it's reachedNeeds proxy?
Export search cards + /api/search/ pagesdirect, or geo-redirect from dir.indiamart.comNo — works from Apify's own egress
Category JSON (impcat)dir.indiamart.comYes — datacenter IPs get 403/429; use Apify Proxy, residential group, country IN
dir search JSONdir.indiamart.comCurrently 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:

FieldExport cards (p1)Export API (p2+)Category JSONdir 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:

    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).

  • indiamart-supplier-scraper — most-used independent IndiaMART supplier scraper on the Store (545 users, 4.55★)
  • indiamart-scraper — keyword-based IndiaMART supplier & product search with GST/exporter filters
  • indiamart-suppliers — supplier leads framed around phone, GST flag and city coverage
  • indiamart-scraper — category-based IndiaMART supplier scraper with city and verified-supplier filters
  • 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:

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

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

{
"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.
  • 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.