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.
The actor referenced in this article. Pay only for results delivered.
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.
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.
Airbnb Scraper: Listing Prices, Ratings, and Availability Without the API
Airbnb has no public listings API. Here's how to pull nightly price, rating, superhost status and coordinates from Airbnb search results using Python.
Maps Leads: Verified Email Extraction from Google Maps Business Listings
How to pull B2B leads from Google Maps with MX-verified emails, past the official API's 120-result cap, and pay only for contactable businesses.
Realtor.com Scraper: Property and Agent Data Without the MLS Paywall
Scrape Realtor.com listings in Python — price, beds, baths, county, and the listing agent + brokerage office on every record. No login, no API key.