IndiaMART Scraper [$1.8💰] | Suppliers | Products | Leads
Pricing
from $1.70 / 1,000 results
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
Maintained by CommunityActor 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,memberSinceandsupplierGrade. - Wholesale price data & price monitoring — collect
priceRaw,price,priceUnit,moqandspecificationsto 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,trustSealandverifiedExporter, 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=impcatpage, needs IN proxy;search= dir search, 0 rows for guests — see the access table),searchTerm(producing keyword),categorySlug,page(1-based),productId(uniqueKeyfor 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;nullwhen 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;nullon export page-1 cards),city,state,address,pincode(category;city/statealso on export API rows). - Trust & certification flags (5) —
gstVerified(category source; export API rows carry it asgstVerifiedFlag),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):
| 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
cityinput applies acq=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.htmlstyle) and export-search rows, which carrycity/statefor post-filtering; rows always carryaddressandpincodewhere 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:
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,isqspecs,pns(phone), city/state,supplier_rating,companyname,tscode. Tested against archived pages; since ~2025 it returnssearchResponse: nullfor unauthenticated visitors — 0 rows today, parser kept in case guest search reopens.https://dir.indiamart.com/impcat/<slug>.htmlandhttps://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 bydisp_id. 28 rows/page,totalResultspagination. Needs theINresidential proxy.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.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):pnsphone, city/state/zipcode,moq,isqspecs,gstVerifiedFlag,iecflag,memberSinceDisplay, plusnextPage. 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(itspageparam is a no-op) to/api/search/, bounded bynextPageplus a stop on a page with no new rows; anonymous callers only receive API pages 1–2. - MOQ comes from export
/api/search/pages, sosearchQueriesruns 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;sourcetells you which. maxRequestsPerCrawl,maxItemsandmaxPagesPerSourcecap every run;maxConcurrency3,maxRequestRetries3; free-plan runs cap at 10 items.- Cost shape: proxy off = cheap search-only runs; residential
INbills 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(orrun-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 — 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:
searchQueriesalone (or onestartUrlsentry) is valid. Defaults:maxItems50,maxPagesPerSource3,maxRequestsPerCrawl100; free-plan runs capped at 10 items. proxy.useApifyProxydefaults tofalse. Category (impcat) pages fail with403/429from datacenter IPs — enable Apify Proxy, residential group, countryIN. Export search works with no proxy.cityapplies thecq=parameter ofdir.indiamart.comsearch, which returns 0 rows for guests (searchResponse: null, parser dormant) — use city-categorystartUrls(dir.indiamart.com/{city}/{slug}.html) for geo-scoped runs.- Field availability varies by surface, tagged in
source: export page-1 cards have nophone/city/moq; category rows have nomoq; export API rows (page 2+) addphone, 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;
maxConcurrency3,maxRequestRetries3. Deduplicate onproductId.
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.