# ExportersIndia Scraper — B2B Products, Prices & Suppliers (`yugenox/exportersindia-scraper`) Actor

Scrape ExportersIndia.com by keyword, category, city or URL: product name, price per unit in INR, MOQ, specifications, brand, category, and the supplier's company, city, state, GST, trust badges, membership and rating. Optional details and company facts (year, employees, turnover). No login.

- **URL**: https://apify.com/yugenox/exportersindia-scraper.md
- **Developed by:** [Yugenox Corp](https://apify.com/yugenox) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## ExportersIndia Scraper — B2B products, prices and suppliers from ExportersIndia.com

Scrape **ExportersIndia.com**, one of India's largest B2B marketplaces, by **keyword, category, city or link**. Every row is a product with its **price per unit in INR**, **minimum order quantity**, specifications, brand and category, plus the **supplier**: company name, city, state, PIN code, business type, **GST badge**, **Trusted (V-Trust)** and **Verified** badges, membership tier, years on ExportersIndia and rating.

Turn on two options for more:

- **Product details**: full description, all photos, every specification, preferred buyer countries, the supplier's nature of business, GST number, full business address and company overview.
- **Company facts**: ownership type, **year established**, **number of employees**, **annual turnover band** and map location, read once per supplier.

No ExportersIndia account, cookies or login needed.

**Never fails on you.** Whatever happens (refused proxy IPs, a page ExportersIndia changed, a category that doesn't exist, a typo in a link), the run finishes successfully with everything it collected. The status message tells you what happened. You pay only for rows actually saved to your dataset.

### What you get

| Group | Fields |
|---|---|
| Product | product ID, name, short name, link, image, brand, specifications (name / value), description\*, all images\*, availability\*, preferred buyer countries\* |
| Price | price text (`Rs 120 - Rs 150 Per Kilogram`), price, price range high end, currency (INR), price unit, **minimum order quantity + unit** |
| Category | product category, parent category, category link, breadcrumb |
| Supplier | company name, ExportersIndia company page or own website, logo, address, locality, **city, state, PIN code**, country |
| Supplier facts | business type(s) (manufacturer, exporter, supplier, trader…), nature of business\*, GSTIN\* (masked for sole proprietors), company overview\*, ownership type\*\*, **year established\*\***, employees\*\*, **annual turnover\*\***, latitude / longitude\*\* |
| Trust | **GST verified**, **Trusted (V-Trust)**, Verified, membership (Platinum, Global Seller, Star Seller…), years on ExportersIndia, rating, number of ratings |
| Provenance | how the row was found: search term, category or city page, page number, position |

\* with **Include product details** · \*\* with **Include company facts**

### How to use it

#### 1. Search by keyword

```json
{
  "searchTerms": ["basmati rice", "industrial valves"],
  "maxItemsPerQuery": 200,
  "maxItems": 400
}
```

#### 2. Suppliers of a category in specific cities

Category names work (`"detergent"`, `"liquid detergent"`), and so do category links. With **Cities**, each category is scraped from its city pages, e.g. `/surat/detergent.htm`.

```json
{
  "categories": ["detergent", "https://www.exportersindia.com/indian-suppliers/laundry-detergent-bar.htm"],
  "cities": ["Surat", "Ahmedabad", "Mumbai"],
  "gstVerifiedOnly": true
}
```

#### 3. Lead lists with company facts

```json
{
  "categories": ["cotton yarn"],
  "maxItems": 100,
  "includeCompanyProfile": true,
  "businessTypes": ["Manufacturer", "Exporter"]
}
```

#### 4. Specific products

```json
{
  "startUrls": [
    { "url": "https://www.exportersindia.com/product-detail/dr-home-liquid-laundry-detergent-6465705.htm" }
  ]
}
```

### Input

| Field | What it does |
|---|---|
| **Search terms** | Keywords to search (at least 3 characters). Also accepted as `keywords` / `queries`. |
| **Categories** | Category names or links (`/indian-suppliers/<name>.htm`, `/indian-manufacturers/<name>.htm`). |
| **Cities** | Indian cities. Categories are read from their city pages; search results are filtered by the supplier's city. Common alternate names work (Bengaluru/Bangalore, Gurugram, Bombay…). |
| **ExportersIndia URLs** | Category, city, search (`/search.php?term=…`) or product pages. |
| **Max products** | Total cap (default 100, 0 = no limit). Also accepted as `maxResults` / `limit`. |
| **Max products per search term / category / city** | Default 100, 0 = everything ExportersIndia lists. |
| **Include product details** | One extra page per product. |
| **Include company facts** | One extra page per supplier. |
| **Min / Max price (INR)**, **GST-verified only**, **Trusted only**, **Verified only**, **Business types** | Filters. Skipped products are never charged. |
| **Parallel queries** | Default 3. |
| **Proxy configuration** | Apify automatic datacenter proxies by default. If ExportersIndia refuses them, the run switches to Apify residential (India) on its own, if your plan includes it. |

### Output example

```json
{
  "productId": "8000099",
  "url": "https://www.exportersindia.com/product-detail/laundry-detergent-bar-9996116278.htm",
  "name": "Glowmate Laundry Detergent Bar, Color : Blue for Washing Cloth",
  "description": "The GlowMate Detergent Bar is a sleek, rectangular cleaning bar …",
  "price": null,
  "minOrderQuantity": 500,
  "minOrderUnit": "piece",
  "brand": "Glowmate",
  "specifications": [
    { "name": "Shape", "value": "Rectangle" },
    { "name": "Application", "value": "Washing Cloth" },
    { "name": "Supply Type", "value": "Manufacturer, Exporter" }
  ],
  "preferredBuyers": "India, South Africa, United States, Nepal",
  "productCategory": "Laundry Detergent Bar",
  "parentCategory": "Detergent Cake",
  "breadcrumb": ["Soaps & Detergents", "Detergent Cake", "Laundry Detergent Bar"],
  "seller": {
    "companyName": "Siyon Consumer Care",
    "storefrontUrl": "https://www.exportersindia.com/zion-industries/",
    "city": "Vapi",
    "state": "Gujarat",
    "pincode": "401207",
    "businessType": "Manufacturer",
    "gstVerified": true,
    "trustSeal": true,
    "membershipType": "Star Seller",
    "memberFor": "4 Years",
    "rating": 4.5,
    "ratingCount": 22,
    "legalStatus": "Partnership",
    "yearEstablished": 2004,
    "employees": "50 - 100",
    "annualTurnover": "Rs. 25 to 50 Crore Approx.",
    "gstin": "27AAAFZ3195P1ZE"
  },
  "source": { "type": "category", "query": "laundry detergent bar", "page": 1, "position": 1 },
  "scrapedAt": "2026-10-01T20:02:26.434Z"
}
```

A product with a price looks like `"priceText": "Rs 120 - Rs 150 Per Kilogram", "price": 120, "priceMax": 150, "currency": "INR", "priceUnit": "Kilogram"`. "Get Price Quote" listings have `price: null`.

### Pricing

Pay per result: you pay for each product saved, plus a small fee per run. Product details and company facts are separate, optional charges (per product and per supplier). Rows skipped by your filters, duplicates and failed pages are never charged. Set a maximum cost per run in Apify and the actor stops exactly there.

### FAQ

**Do I need an ExportersIndia account or cookies?** No. There is no login, account, cookie or token. The actor reads the same public pages any visitor sees.

**How many products can I get per keyword?** ExportersIndia lists up to several thousand products per keyword or category, and the actor follows its "View more results" pages. Use **Max products per search term / category / city** to choose how deep to go. City pages are a good way to get more suppliers from one category.

**Why does my category show "Not on ExportersIndia"?** The name didn't match a category page. Use the exact name shown on the site, paste the category link, or use the same words as a search term.

**Why are some prices empty?** Many suppliers show "Get Price Quote" instead of a price. Those rows have `price: null` and keep everything else.

**Does it respect robots.txt?** Yes. It reads ExportersIndia's robots.txt at the start of every run and never requests a disallowed address. It only uses public category, city, search, product and company pages.

**Is it legal to scrape ExportersIndia?** This actor collects only information ExportersIndia shows publicly to any visitor without logging in: product listings and the business profile each supplier chose to publish. Most rows describe businesses, but some can still contain personal data — for example the business name or address of a sole proprietor. If you store or use that data, follow the data-protection laws that apply to you (GDPR, PIPEDA, CCPA, India's DPDP Act) and ExportersIndia's terms of use, and use it for a legitimate purpose. If you are unsure, check with a lawyer. Background reading: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

**Does it access any private data?** No. It never logs in and uses no ExportersIndia account, cookies or tokens. It also leaves out personal details even where ExportersIndia shows them: contact-person and CEO names are never collected, no phone numbers or e-mail addresses are collected, and GST numbers that contain a sole proprietor's personal PAN are masked.

**What happens if ExportersIndia blocks the run?** The actor first retries on fresh IPs, then moves to residential proxies if your plan has them. If the site still refuses, the run stops cleanly with the products it already saved and says so in the status message. It never tries to get around a captcha or a login page.

# Actor input Schema

## `searchTerms` (type: `array`):

Products to search on ExportersIndia, e.g. "basmati rice", "industrial valves", "cotton yarn". Each term is scraped separately (at least 3 characters).

## `categories` (type: `array`):

ExportersIndia category names or links, e.g. "detergent", "liquid detergent" or https://www.exportersindia.com/indian-suppliers/detergent.htm. A name is turned into its category page; if there is none you'll see it in the status message.

## `cities` (type: `array`):

Only suppliers in these cities, e.g. "Mumbai", "Surat", "Bengaluru". Categories are scraped from their city pages (e.g. /mumbai/detergent.htm); search results are filtered by the supplier's city.

## `startUrls` (type: `array`):

Any ExportersIndia category page (/indian-suppliers/…), city page (/mumbai/…), search page (/search.php?term=…) or product page (/product-detail/…).

## `maxItems` (type: `integer`):

Stop after this many products in total (0 = no limit).

## `maxItemsPerQuery` (type: `integer`):

Cap for each search term, category or city page (0 = everything ExportersIndia lists, up to about 4,000 per query).

## `includeDetails` (type: `boolean`):

Open each product page for the full description, all photos, every specification, preferred buyer countries, the supplier's nature of business, GST number (masked for sole proprietors), full address and company overview. One extra page per product (charged per product).

## `includeCompanyProfile` (type: `boolean`):

Open each supplier's ExportersIndia company page once for its ownership type, year established, number of employees, annual turnover band and map location. One extra page per supplier (charged once per supplier). Suppliers that use their own website instead of an ExportersIndia page are left as they are.

## `minPrice` (type: `integer`):

Skip products priced below this (products without a price are skipped too when set).

## `maxPrice` (type: `integer`):

Skip products priced above this (products without a price are skipped too when set).

## `gstVerifiedOnly` (type: `boolean`):

Only products whose supplier shows the GST badge.

## `trustedOnly` (type: `boolean`):

Only products whose supplier shows the "Trusted" (V-Trust) badge.

## `verifiedOnly` (type: `boolean`):

Only products whose supplier shows the "Verified" badge.

## `businessTypes` (type: `array`):

Only suppliers of these types (from the listing's "Supply Type"; listings that don't show it are skipped when this is set — turn on product details or company facts to fill it in).

## `maxConcurrency` (type: `integer`):

How many search terms / categories / cities are scraped at the same time.

## `proxyConfiguration` (type: `object`):

Apify automatic datacenter proxies work and are the default. If ExportersIndia refuses them, the run switches to Apify residential proxies (India) by itself when your account has them.

## Actor input object example

```json
{
  "searchTerms": [
    "basmati rice"
  ],
  "maxItems": 20,
  "maxItemsPerQuery": 100,
  "includeDetails": false,
  "includeCompanyProfile": false,
  "gstVerifiedOnly": false,
  "trustedOnly": false,
  "verifiedOnly": false,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped products with their suppliers.

## `report` (type: `string`):

What the run did: queries, pages, filters, proxy and timing (RUN_REPORT).

## `run` (type: `string`):

Status and statistics for this run.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "basmati rice"
    ],
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("yugenox/exportersindia-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["basmati rice"],
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("yugenox/exportersindia-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "basmati rice"
  ],
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call yugenox/exportersindia-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yugenox/exportersindia-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/lqoSpLA8b2abDoxPE/builds/n42rYaIukg2sQlCS2/openapi.json
