IndiaMART Scraper - B2B Products & Suppliers
Pricing
from $2.20 / 1,000 results
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
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
3
Monthly active users
2 days ago
Last modified
Categories
Security
Limited permissionsShare
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.
includeProductsis 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
| Field | Description | Example |
|---|---|---|
id | Row identifier | 8008419312 |
dispId | Product display ID | 8008419312 |
title | Product name | Solar Panel |
price | Published price | 12000 |
currency | Currency code | INR |
productUrl | Product link | https://www.indiamart.com/proddetail/solar-panel-8008419312.html |
companyName | Supplier name | Example Solar Supplies |
tscode | Company slug | example-solar |
city | Supplier city | Mumbai |
state | Supplier state | Maharashtra |
phones | Public numbers with type and optional normalized value | [{"value":"+1 555 0100","type":"mobile"}] |
emails | Empty when no supplier email is provided | [] |
address | Published address parts; street may be empty | {"locality":"Mumbai","country":"IN"} |
person | Published contact name and role | {"name":"Jane Doe","role":"CEO"} |
companyProfile | Seller details such as employees and establishment year | {"yearEstablished":"2010"} |
leadAbsences | Reasons 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.
| Field | Description | Example |
|---|---|---|
recordType | Listing row without full detail enrichment | product_card |
title | Listed product | Solar Panel |
mcatflname | Category slug, when present | solar-panels |
priceText | Published price wording | Rs 12,000 / Piece |
Companies: company
| Field | Description | Example |
|---|---|---|
recordType | Supplier profile row | company |
tscode | Company slug | example-solar |
companyName | Supplier name | Example Solar Supplies |
phones | Published supplier contacts | [] |
companyProfile | Available seller profile details | {"employees":"11 to 25"} |
address | Available location or registered address | {"locality":"Mumbai"} |
Categories: category
| Field | Description | Example |
|---|---|---|
recordType | Category row | category |
mcatflname | Category slug | solar-panels |
name | Category name | Solar Panels |
url | Category link | https://dir.indiamart.com/impcat/solar-panels.html |
Category cities: city_category
| Field | Description | Example |
|---|---|---|
recordType | City associated with a category | city_category |
cityFlName | City slug to reuse as input | delhi |
cityName | Display name | Delhi |
mcatflname | Associated category | solar-panels |
Cities without category context: city
| Field | Description | Example |
|---|---|---|
recordType | City row without a category association | city |
cityFlName | City slug | delhi |
cityName | Display name | Delhi |
Keyword suggestions: keyword_suggestion
| Field | Description | Example |
|---|---|---|
recordType | Suggestion row | keyword_suggestion |
keyword | Suggested search phrase | solar panel |
frequency | Source-provided frequency value | 100 |
catIds | Associated category IDs | [] |
searchUrl | Link for the suggested search | https://m.indiamart.com/isearch.php?s=solar+panel |
How to scrape IndiaMART
- Open IndiaMART Scraper in Apify Console.
- Leave
modeonautoand fill one target field. - Set
maxResultsto3for a small first run. - Click Start and wait for completion.
- 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
| Field | What to enter | Default |
|---|---|---|
mode | Collection mode | auto |
startUrls | IndiaMART HTTPS links of one page type | Empty |
productUrl | Product detail link | Empty |
dispId | One numeric product display ID | Empty |
dispIds | List of product display IDs | Empty |
tscode | Company slug | Empty |
mcatflname | Category slug | Empty; form prefill solar-panels |
query | Search words | Empty |
cityFlName | City slug for a category | Empty |
cityName | City name for keyword search | Empty |
cityId | Optional IndiaMART city ID | Empty |
maxResults | Rows per input, from 1 to 5000 | 70; form prefill 3 |
enrichDetails | Add available product and supplier details | true |
taxonomyDepth | Category discovery depth, 1–3 | 2 |
quesId | Category filter question ID | Empty |
optId | Corresponding filter option ID | Empty |
bizFilter | Business-type filter; keyword search: 10 manufacturer, 20 exporter, 30 wholesaler, 40 retailer | Empty |
isqFilters | Additional category filter values as an object | Empty |
includeDealsIn | Allow service-area sellers; disable strictCityMatch for other cities | false |
strictCityMatch | Filter by seller city or district when available | true |
fanOut | Expand keyword searches with variants | true |
expandRelated | Include related category search terms | false |
includeProducts | Add separately billed products in company mode | false |
cursor | Reuse RUN_SUMMARY.nextCursor unchanged, when returned | Empty |
proxyCountry | Keep IN; it does not select another marketplace | IN |
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}
Keyword search
{"mode":"isearch","query":"solar panel","cityName":"Mumbai","maxResults":3}
Directory search
{"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}
Export search
{"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_SUMMARYrecords collection or input failures;INPUT_ECHOshows 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 plan | Start at 512 MB | Price per row | Price 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 |
maxResultsapplies 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 (
maxTotalChargeUsdin 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 ApifyClientclient = 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
Is it legal to scrape IndiaMART?
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
citiesbefore a city-specific run. - Keyword variants may broaden the original search. Turn
fanOutoff for a narrower search. categoriesmay 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.
Related scrapers
More B2B supplier and wholesale marketplace scrapers from the same publisher:
- GlobalSources Scraper
- Kompass Scraper
- Thomasnet Scraper
- iPROS Scraper
- Xometry Scraper
- Europages Scraper
- MonotaRO Scraper
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.