The Mine Works
← All posts
tutorial June 22, 2026 · 3 min read Updated June 22, 2026

How to Scrape IndiaMART B2B Suppliers in Python (Phone, Price, Leads)

IndiaMART is India's largest B2B marketplace with no public API. Learn how to extract supplier names, phone numbers, cities, product categories, and price indications as structured JSON for sales prospecting and market research.

Try the scraper

The actor referenced in this article. Pay only for results delivered.

View the scraper →

IndiaMART connects over 7 million suppliers with buyers across India and internationally. It is the primary B2B discovery platform for manufacturing, trading, and wholesale. With no accessible public API for supplier search, scraping is the standard approach for extracting structured data at scale.

What IndiaMART supplier data contains

Each listing returns:

  • Company name and primary phone number
  • City and state of the supplier
  • Product title and category
  • Price indication (per unit, per kg, per piece, etc. where listed)
  • IndiaMART verified flag
  • Direct URL to the supplier listing

Common use cases

Sales prospecting. Build lists of manufacturers or traders in a specific product category to cold-call or email for distribution or procurement partnerships.

Supply chain research. Find alternative suppliers for a raw material by product keyword and compare pricing and locations before sending RFQs.

Market mapping. Count suppliers by city to understand where manufacturing capacity for a product is concentrated in India.

Directory enrichment. Augment an internal supplier database with phone numbers and verification status from IndiaMART listings.

Using the Apify actor

import apify_client

client = apify_client.ApifyClient('YOUR_APIFY_TOKEN')

run_input = {
    "searchQuery": "industrial pumps",
    "maxResults": 100,
}

run = client.actor('themineworks/indiamart-suppliers').call(run_input=run_input)

for supplier in client.dataset(run['defaultDatasetId']).iterate_items():
    print(f"{supplier['company_name']}{supplier.get('city', 'N/A')}")
    print(f"  Product: {supplier.get('product_title', 'N/A')}")
    print(f"  Phone: {supplier.get('phone', 'N/A')}")
    print(f"  Price: {supplier.get('price', 'N/A')}")
    print(f"  Verified: {supplier.get('is_verified', False)}")

Building a procurement shortlist

Extract and filter suppliers by geography and verification status:

run_input = {
    "searchQuery": "stainless steel flanges",
    "city": "Mumbai",
    "maxResults": 200,
}

run = client.actor('themineworks/indiamart-suppliers').call(run_input=run_input)
results = list(client.dataset(run['defaultDatasetId']).iterate_items())

# Keep only verified suppliers with a phone number
qualified = [
    s for s in results
    if s.get('is_verified') and s.get('phone')
]

print(f"Total listings: {len(results)}")
print(f"Verified with phone: {len(qualified)}")

for s in qualified[:20]:
    print(f"  {s['company_name']} | {s.get('phone')} | {s.get('price', 'Price on request')}")

Supplier distribution by city

Find where a product category is most concentrated:

from collections import Counter

run_input = {
    "searchQuery": "polypropylene granules",
    "maxResults": 500,
}

run = client.actor('themineworks/indiamart-suppliers').call(run_input=run_input)
results = list(client.dataset(run['defaultDatasetId']).iterate_items())

city_counts = Counter(s.get('city', 'Unknown') for s in results)
print("Top supplier cities for polypropylene granules:")
for city, count in city_counts.most_common(15):
    print(f"  {city}: {count} suppliers")

Exporting for CRM import

import csv

with open('indiamart_leads.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.DictWriter(f, fieldnames=[
        'company_name', 'phone', 'city', 'state',
        'product_title', 'price', 'is_verified', 'url'
    ])
    writer.writeheader()
    for s in results:
        writer.writerow({
            'company_name': s.get('company_name', ''),
            'phone': s.get('phone', ''),
            'city': s.get('city', ''),
            'state': s.get('state', ''),
            'product_title': s.get('product_title', ''),
            'price': s.get('price', ''),
            'is_verified': s.get('is_verified', False),
            'url': s.get('company_url', ''),
        })

print(f"Exported {len(results)} suppliers to indiamart_leads.csv")

Scheduling for supplier monitoring

Run weekly to catch new entrants in a product category or track when a known supplier updates their listing or pricing.

import schedule, time

def scrape_and_alert():
    run_input = {
        "searchQuery": "your product keyword",
        "maxResults": 200,
    }
    run = client.actor('themineworks/indiamart-suppliers').call(run_input=run_input)
    results = list(client.dataset(run['defaultDatasetId']).iterate_items())
    new_suppliers = [s for s in results if s.get('is_verified') and s.get('phone')]
    print(f"Found {len(new_suppliers)} qualified suppliers this week")

schedule.every().monday.at("09:00").do(scrape_and_alert)
while True:
    schedule.run_pending()
    time.sleep(60)

Pricing

Pay per supplier returned. No charge on empty searches or failed runs.

Related Actor

Explore the scraper referenced in this article — see inputs, outputs, and pricing, then run it on Apify.

Frequently asked questions

Does IndiaMART have a public API? +

IndiaMART has a limited lead-management API for registered sellers, but no public API for supplier discovery or browsing product listings. Scraping is required for bulk data extraction.

What data does the IndiaMART scraper return? +

Company name, phone number, city, state, product category, price indication, and whether the supplier is verified by IndiaMART.

Can I search by product and geography? +

Yes. You provide a product keyword (e.g. stainless steel pipes) and optionally filter by city. The scraper returns all matching supplier listings.