IndiaMART Scraper - B2B Products & Suppliers avatar

IndiaMART Scraper - B2B Products & Suppliers

Pricing

from $2.20 / 1,000 results

Go to Apify Store
IndiaMART Scraper - B2B Products & Suppliers

IndiaMART Scraper - B2B Products & Suppliers

Extract IndiaMART products, Indian supplier profiles, public phones, prices and categories. Export structured rows to JSON, CSV or Excel; pay per delivered row plus a start fee.

Pricing

from $2.20 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

3

Monthly active users

2 days ago

Last modified

Security

Limited permissions

Share

IndiaMART Scraper

Extract IndiaMART product listings, supplier profiles and category data for India as rows you can export.

  • Product names, prices, supplier identifiers and public contact details.
  • Category, city, keyword, product and company inputs.
  • Category discovery and keyword suggestions.
  • Free plan pricing: $3 per 1,000 delivered rows, plus the start fee.

What does IndiaMART Scraper do?

IndiaMART Scraper collects public catalog and supplier information from IndiaMART. Use it for sourcing, price research and supplier lists. It is an unofficial tool, not an IndiaMART API or an affiliated product.

  • Catalog modes: category listings, city listings, keyword search and product details.
  • Supplier modes: company profiles or company products. includeProducts is off by default; enabling it adds separate product rows billed at the same rate.
  • Discovery modes: categories, available cities and keyword suggestions.
  • Export search: a separate catalog search, not a source of Indian supplier contact details.

Each row represents one entity. Detail enrichment adds fields to an existing row rather than creating a second billed copy.

What data can you extract from IndiaMART?

All rows contain id and recordType. Other fields depend on the mode and what the source publishes. The examples below illustrate the format, not a current offer.

Product details: product

FieldDescriptionExample
idRow identifier8008419312
dispIdProduct display ID8008419312
titleProduct nameSolar Panel
pricePublished price12000
currencyCurrency codeINR
productUrlProduct linkhttps://www.indiamart.com/proddetail/solar-panel-8008419312.html
companyNameSupplier nameExample Solar Supplies
tscodeCompany slugexample-solar
citySupplier cityMumbai
stateSupplier stateMaharashtra
phonesPublic numbers with type and optional normalized value[{"value":"+1 555 0100","type":"mobile"}]
emailsEmpty when no supplier email is provided[]
addressPublished address parts; street may be empty{"locality":"Mumbai","country":"IN"}
personPublished contact name and role{"name":"Jane Doe","role":"CEO"}
companyProfileSeller details such as employees and establishment year{"yearEstablished":"2010"}
leadAbsencesReasons for missing contact fields{"emails":"本站无"}

The emitted reason 本站无 means not available on the public page. Product rows can also contain imageUrl, gstNumber, gstVerified, web, basicInfo and isq. GST values are source claims, not an independent verification by this Actor.

Product listings: product_card

These use the same product and supplier fields where available. Successful enrichment can turn a listing row into product.

FieldDescriptionExample
recordTypeListing row without full detail enrichmentproduct_card
titleListed productSolar Panel
mcatflnameCategory slug, when presentsolar-panels
priceTextPublished price wordingRs 12,000 / Piece

Companies: company

FieldDescriptionExample
recordTypeSupplier profile rowcompany
tscodeCompany slugexample-solar
companyNameSupplier nameExample Solar Supplies
phonesPublished supplier contacts[]
companyProfileAvailable seller profile details{"employees":"11 to 25"}
addressAvailable location or registered address{"locality":"Mumbai"}

Categories: category

FieldDescriptionExample
recordTypeCategory rowcategory
mcatflnameCategory slugsolar-panels
nameCategory nameSolar Panels
urlCategory linkhttps://dir.indiamart.com/impcat/solar-panels.html

Category cities: city_category

FieldDescriptionExample
recordTypeCity associated with a categorycity_category
cityFlNameCity slug to reuse as inputdelhi
cityNameDisplay nameDelhi
mcatflnameAssociated categorysolar-panels

Cities without category context: city

FieldDescriptionExample
recordTypeCity row without a category associationcity
cityFlNameCity slugdelhi
cityNameDisplay nameDelhi

Keyword suggestions: keyword_suggestion

FieldDescriptionExample
recordTypeSuggestion rowkeyword_suggestion
keywordSuggested search phrasesolar panel
frequencySource-provided frequency value100
catIdsAssociated category IDs[]
searchUrlLink for the suggested searchhttps://m.indiamart.com/isearch.php?s=solar+panel

How to scrape IndiaMART

  1. Open IndiaMART Scraper in Apify Console.
  2. Leave mode on auto and fill one target field.
  3. Set maxResults to 3 for a small first run.
  4. Click Start and wait for completion.
  5. Open the dataset and download the rows.

Empty input starts the solar-panels example from the form, limited to 3 rows. Normal pricing applies. A target alone selects its mode automatically. With several target fields, URLs take priority over product IDs, then company slugs, category slugs and keywords. With startUrls, the first URL selects the mode; keep URLs of the same page type together.

Category listings: mcat

Use mcatflname, the slug after /impcat/ in a category URL.

City listings: city_mcat

Add cityFlName to the category. Discover supported cities with cities first.

Keyword search: isearch

Use query, optionally with cityName. fanOut searches variants when more rows are needed; it shares the input's row limit.

Directory search: dir_search

Select this mode explicitly with query. It uses the same keyword search, with an alternative directory search when needed.

Product details: product

Supply dispId, several dispIds, or productUrl.

Company profile: company

Use tscode, the company slug in its storefront URL. Products are excluded unless includeProducts is enabled.

Company products: company_products

Use tscode to return product rows, without a separate company row.

Export search: export_search

Use query for the export catalog. Do not use this mode to obtain supplier phones.

Categories: categories

Select this mode explicitly, optionally with mcatflname. It returns categories and associated cities; taxonomyDepth controls discovery depth. No target is required.

Available cities: cities

Use mcatflname to list the cities offered for that category.

Keyword ideas: suggest

Use query as a seed. These rows contain suggestions, not suppliers.

What to fill in

FieldWhat to enterDefault
modeCollection modeauto
startUrlsIndiaMART HTTPS links of one page typeEmpty
productUrlProduct detail linkEmpty
dispIdOne numeric product display IDEmpty
dispIdsList of product display IDsEmpty
tscodeCompany slugEmpty
mcatflnameCategory slugEmpty; form prefill solar-panels
querySearch wordsEmpty
cityFlNameCity slug for a categoryEmpty
cityNameCity name for keyword searchEmpty
cityIdOptional IndiaMART city IDEmpty
maxResultsRows per input, from 1 to 500070; form prefill 3
enrichDetailsAdd available product and supplier detailstrue
taxonomyDepthCategory discovery depth, 1–32
quesIdCategory filter question IDEmpty
optIdCorresponding filter option IDEmpty
bizFilterBusiness-type filter; keyword search: 10 manufacturer, 20 exporter, 30 wholesaler, 40 retailerEmpty
isqFiltersAdditional category filter values as an objectEmpty
includeDealsInAllow service-area sellers; disable strictCityMatch for other citiesfalse
strictCityMatchFilter by seller city or district when availabletrue
fanOutExpand keyword searches with variantstrue
expandRelatedInclude related category search termsfalse
includeProductsAdd separately billed products in company modefalse
cursorReuse RUN_SUMMARY.nextCursor unchanged, when returnedEmpty
proxyCountryKeep IN; it does not select another marketplaceIN

Auto

{"query":"solar panel","maxResults":3}

Category

{"mode":"mcat","mcatflname":"solar-panels","maxResults":3}

City category

{"mode":"city_mcat","mcatflname":"tmt-bars","cityFlName":"delhi","maxResults":3}
{"mode":"isearch","query":"solar panel","cityName":"Mumbai","maxResults":3}
{"mode":"dir_search","query":"steel pipes","maxResults":3}

Product

{"mode":"product","dispId":"8008419312","maxResults":1}

Company

Replace the example slug with your supplier's actual slug.

{"mode":"company","tscode":"example-supplier","maxResults":1}

Company products

{"mode":"company_products","tscode":"example-supplier","maxResults":3}
{"mode":"export_search","query":"cotton yarn","maxResults":3}

Categories

{"mode":"categories","taxonomyDepth":1,"maxResults":3}

Cities

{"mode":"cities","mcatflname":"solar-panels","maxResults":3}

Suggestions

{"mode":"suggest","query":"solar","maxResults":3}

maxItems and limit are accepted aliases for maxResults. Close misspellings of field names are corrected; other unknown fields are ignored with a note. INPUT_REPORT in the default key-value store records normalization, inferred mode, ignored fields and warnings.

Invalid targets stop before collection with a message such as INVALID_INPUT: productUrl — use an https URL on indiamart.com, e.g. https://www.indiamart.com/proddetail/solar-panel-8008419312.html, before any row charge. Some invalid settings are corrected instead: numeric row limits outside the allowed range are clamped. Check INPUT_REPORT rather than assuming every supplied value was used unchanged. The start fee is separate.

Output example

Illustrative product row; the phone and person are placeholders.

{
"id": "8008419312",
"recordType": "product",
"dispId": "8008419312",
"title": "Solar Panel",
"price": 12000,
"currency": "INR",
"companyName": "Example Solar Supplies",
"tscode": "example-solar",
"city": "Mumbai",
"state": "Maharashtra",
"productUrl": "https://www.indiamart.com/proddetail/solar-panel-8008419312.html",
"phones": [{"value": "+1 555 0100", "type": "mobile"}],
"emails": [],
"person": {"name": "Jane Doe", "role": "CEO"},
"leadAbsences": {"emails": "本站无"}
}

Export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table.

Why use this IndiaMART scraper?

  • Pay per delivered row. Unreturned rows incur no row charge; the start fee still applies.
  • Partial delivery. When an early stop returns available rows, the Actor saves and bills those rows and records the reason in RUN_SUMMARY. A hard abort can prevent pending rows from reaching the dataset.
  • Useful error records. ERROR_SUMMARY records collection or input failures; INPUT_ECHO shows accepted settings.
  • No invented contacts. Missing contact values stay empty, with reasons in leadAbsences.
  • Multiple inputs. Supply several URLs or product IDs in a run.
  • No proxy setup. You do not need to set up proxies.

How much does it cost to scrape IndiaMART?

The Actor uses pay-per-event pricing. Each start event costs $0.005: one event per GB of Actor memory, with a minimum of one. The default 512 MB therefore costs $0.005 to start. Platform usage is included in these prices.

Apify planStart at 512 MBPrice per rowPrice per 1,000 rows
Free$0.005$0.003$3.00
Starter$0.005$0.003$3.00
Scale$0.005$0.0026$2.60
Business$0.005$0.0022$2.20
  • maxResults applies to each URL, display ID or single category, query or company input. It defaults to 70; larger requests are collected in parts of 70.
  • All row types, including company products, share that input's allowance. Fan-out does not multiply it.
  • Free Apify plan runs are capped at 200 rows in total. This Actor also limits free-plan users to 10 runs.
  • The whole run stops at the Maximum cost per run you set (maxTotalChargeUsd in the API).

Example: 3 delivered rows on the Free plan at 512 MB cost 3 × $0.003 + $0.005 = $0.014. Requesting 3 rows does not guarantee that 3 are available.

Use with AI agents and the API

Apify MCP server

Connect Claude, ChatGPT, Cursor, VS Code or another remote MCP client to:

https://mcp.apify.com?tools=lentic_clockss/indiamart-scraper

Sign in with Apify through OAuth, or send Authorization: Bearer <YOUR_APIFY_TOKEN>. The tool starts a run and returns run and dataset IDs; read rows with get-dataset-items. Clients without remote MCP support can use npx @apify/actors-mcp-server --tools lentic_clockss/indiamart-scraper with APIFY_TOKEN set.

Example prompt: “Find three IndiaMART solar panel listings in Mumbai using query, cityName and maxResults: 3. Show available prices and supplier names.”

Apify API

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/indiamart-scraper").call(
run_input={"query": "solar panel", "maxResults": 3}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row)
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/indiamart-scraper').call({
query: 'solar panel', maxResults: 3
});
const { items: rows } = await client.dataset(run.defaultDatasetId).listItems();
console.log(rows);

For HTTP, send the JSON input to POST https://api.apify.com/v2/acts/lentic_clockss~indiamart-scraper/runs with an Authorization: Bearer <YOUR_APIFY_TOKEN> header. After completion, read GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json.

Integrations

Use the Integrations tab to connect Google Sheets, Make, Zapier, n8n, Slack, Airtable or webhooks. Use Apify Schedules for repeat runs.

FAQ

The Actor collects public data. You are responsible for complying with the site's terms and applicable data protection law. Processing personal data requires a lawful basis; public availability alone is not permission for every use.

Why did my run end as ABORTED?

Check the run log and status message for the cancellation reason. This Actor does not automatically restart an aborted run. Inspect the dataset before retrying; a hard abort may leave it empty or incomplete.

How many results can I get?

Set maxResults from 1 to 5000 per input. Source availability, the maximum run cost and free-plan caps can reduce delivery. Keyword expansion is not a guarantee of exhaustive coverage.

Why are some fields empty?

Sellers do not publish every field. Street addresses require available registered-address information. enrichDetails adds available details but cannot fill fields the source omits.

Does it return supplier phones and emails?

Public supplier phones are included when present. Supplier emails are not returned by the current scraper. Export search does not provide supplier phone coverage.

Does it submit inquiries or log in?

No. It does not submit Contact Supplier, Get Best Price or Send Inquiry forms, and does not use an IndiaMART login.

How do I restrict results to local sellers?

Keep strictCityMatch: true and includeDealsIn: false. Keyword searches match the seller's city or district but retain rows with no location. To allow sellers elsewhere who serve the requested city, set includeDealsIn: true and strictCityMatch: false.

Why did a company run return only one row?

company returns the supplier profile by default. Enable includeProducts to add separately billed products within the same allowance, or choose company_products for products only.

Limitations

  • Coverage is public IndiaMART data, not private supplier accounts or inquiry responses.
  • A category may not offer every city; use cities before a city-specific run.
  • Keyword variants may broaden the original search. Turn fanOut off for a narrower search.
  • categories may include associated city rows and categories beyond the supplied starting slug.
  • Detail enrichment is bounded; not every listing receives every detail field.
  • Attribute lists such as phones and product specifications are capped at 50 entries.
  • Prices are published values, not confirmed quotations or stock guarantees.

More B2B supplier and wholesale marketplace scrapers from the same publisher:

Browse all of our scrapers at apify.com/lentic_clockss.

Support

Report a problem or request a field through the Issues tab of this Actor's page. Include the run ID and the input you used.