IndiaMART Supplier & Product Scraper avatar

IndiaMART Supplier & Product Scraper

Pricing

from $2.00 / 1,000 product scrapeds

Go to Apify Store
IndiaMART Supplier & Product Scraper

IndiaMART Supplier & Product Scraper

AI-ready IndiaMART B2B leads - one rich row per product: company, price (INR + USD), E.164 phone, GST factsheet, numeric turnover, export countries, images. Built for lead-gen, sourcing, KYC & AI/agent pipelines. Fast HTTP, residential proxy, charged per product.

Pricing

from $2.00 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

William

William

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Share

AI-ready B2B leads from India's largest marketplace. Structured, agent-friendly rows you can drop straight into CRM, sourcing, KYC and AI/agent pipelines — with normalised INR + USD prices, E.164 phones, numeric GST turnover, export-destination signals, images and full business factsheets. Ideal for procurement, exporter discovery, market mapping and lead generation.

Surfaces B2B supplier and product catalogue data from IndiaMART (India's largest B2B marketplace) for supplier discovery, catalogue building and due diligence. Returns one dataset row per product detail page, enriched with company name, product title, price, images, category breadcrumb, location, IndiaMART member-since year, a GST/business factsheet, call response rate and supplier contact details.

You are charged per successfully parsed product (pay-per-event). Failed or blocked parses are pushed as free status rows.

Why this actor

  • Schema richness. Beyond the basics, every row carries a structured businessFactsheet (year established, nature of business, GST turnover range, legal status, additional NOB), performance.callResponseRate, a category breadcrumb, and a full image list, drawn from the page's embedded data and JSON-LD.
  • Reliability without a browser. IndiaMART is fully server-rendered with no anti-bot wall, so the actor uses a fast HTTP CheerioCrawler (no Playwright). That means lower memory and fewer moving parts. Note: IndiaMART blocks Apify datacenter IPs with HTTP 403, so the actor runs on the Apify residential proxy by default (the main running cost).
  • Clean output shape. Catalogue fields are top-level; contact is nested under supplier.contact so it is easy to include or exclude downstream.
  • Built for non-India buyers too. Indian-market conventions are normalised so international sourcing/procurement teams can use the data directly: prices carry a numeric priceAmount (INR) and an approximate priceUsd (the fxRate + fxRateAsOf used are exposed so you can recompute with a live rate); GST turnover ("1.5 - 5 Cr") is parsed into absolute gstTurnoverInr/gstTurnoverUsd ranges; phone numbers are normalised to E.164 (+918043862189, ready for Twilio/WhatsApp); location.countryCode is IN; and supplier.exportCountries flags registered export destinations. supplier.businessFactsheet.gstNumber and iecCode (exporter code) are included where the page exposes them.

Input

FieldTypeDefaultDescription
startUrlsstring[](required)IndiaMART category URLs (https://dir.indiamart.com/impcat/<slug>.html) and/or product detail URLs (https://www.indiamart.com/proddetail/<slug>-<id>.html). Both may be mixed.
maxProductsinteger200Maximum product detail pages to parse. This is the charged unit and is enforced at the crawler level (1–5000).
maxCategoryPagesinteger10Maximum category pages to paginate per category URL (1–100).
proxyConfigurationproxy{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }Apify Proxy. Residential required (IndiaMART returns 403 to datacenter IPs).
{
"startUrls": ["https://dir.indiamart.com/impcat/cctv-camera.html"],
"maxProducts": 200,
"maxCategoryPages": 10,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Output (one row per product)

{
"type": "product",
"query": "https://dir.indiamart.com/impcat/cctv-camera.html",
"product": {
"productId": "26236720097",
"productCode": "191475680",
"title": "90d Canon Camera",
"slug": "90d-canon-camera-26236720097",
"productUrl": "https://www.indiamart.com/proddetail/90d-canon-camera-26236720097.html",
"price": "₹125500",
"priceCurrency": "INR",
"priceAmount": 125500,
"priceUsd": 1493,
"fxRate": 0.0119,
"fxRateAsOf": "2026-08",
"minOrderQuantity": null,
"minOrderUnit": null,
"images": ["https://5.imimg.com/data5/SELLER/Default/2022/7/SH/EU/HQ/4877750/01-1000x1000.jpg"],
"category": { "primary": "Camera", "breadcrumb": ["IndiaMART", "Camera & Photography Equipments", "Camera"] }
},
"supplier": {
"companyName": "Ajay Enterprises",
"companyUrl": "https://www.indiamart.com/ajayenterprises-newdelhi-ind/",
"memberSince": "Mar 2012",
"location": { "city": "New Delhi", "state": "Delhi", "country": "India", "countryCode": "IN", "address": "New Delhi, Delhi" },
"contact": { "phone": "+918043862189", "phoneRaw": "+91-8043862189", "phoneVerified": true },
"businessFactsheet": {
"yearEstablished": 2005,
"natureOfBusiness": "Trader - Retailer",
"legalStatus": "Proprietorship",
"gstNumber": "07**********1Z9",
"gstTurnover": "1.5 - 5 Cr",
"gstTurnoverInr": { "min": 15000000, "max": 50000000 },
"gstTurnoverUsd": { "min": 178500, "max": 595000 },
"iecCode": null,
"additionalNob": ["Retail Business", "Warehouse / Depot"]
},
"exportCountries": [],
"performance": { "callResponseRate": 0.84 }
},
"scrapedAt": "2026-08-02T12:00:00.000Z"
}

Any field absent on the source page is null. Rows that fail to parse (or are blocked) are pushed as free { "type": "status", "status": "failed", ... } rows.

How it works

  1. The actor seeds the request queue with startUrls (mixing category and product URLs is fine).
  2. On a category page it discovers product-detail links (a[href*="/proddetail/"]) and enqueues them. It also looks for a static next-page link and follows it up to maxCategoryPages (see limitations below).
  3. On a product detail page it extracts embedded JSON fields, the g39-factsheet DT/DD rows, JSON-LD (BreadcrumbList + ImageGallery), the title, the price and the company URL, then pushes one charged row.
  4. Politeness: maxConcurrency 3, maxRequestsPerMinute 60 (≈1 request/second), 3 retries. IndiaMART returns HTTP 403 to Apify datacenter IPs, so residential proxy is mandatory.

Pricing

Charged per product (pay-per-event). Set your USD price per result and optional total spend cap in the actor Console before running. A target of ~$0.002/result is competitive with the incumbent.

Responsible use

Contact data is public business listing information intended for supplier discovery and due diligence; comply with applicable laws (including India's DPDP Act 2023) and IndiaMART's Terms. Do not use the data for unsolicited spam. You are responsible for how you use the output.

Known limitations

  • Category pagination is JavaScript-driven. Live IndiaMART category pages load additional products via a React "Show More Results" control (an internal XHR) rather than static ?page=N links (verified: ?page=N returns an identical product set on both desktop and mobile). This HTTP-only actor therefore parses the first page of products for each category URL (a desktop impcat page yields ~110–120 products, verified at 118 for a typical category). To reach maxProducts, supply multiple category URLs (e.g. related subcategories) and/or direct product-detail URLs. Deeper pagination, and the full-GST-factsheet enrichment that lives on company pages, are reserved for a future hop.
  • priceCurrency is INR (IndiaMART is an India-only marketplace).
  • Selectors target the current server-rendered markup (g39-factsheet-row, .priceff, embedded JSON fields MOBILE_PNS/PC_ITEM_CODE/MOBILE_VERIFIED, JSON-LD blocks). IndiaMART markup changes will require selector updates; the parser is unit-tested against a real fixture to catch regressions.