# TradeIndia B2B Supplier & Product Scraper (`jungle_synthesizer/tradeindia-b2b-supplier-scraper`) Actor

Search TradeIndia, India's B2B marketplace, by keyword, city and seller type. Get each listing with its supplier's company name, GST number, address, owner, turnover and price.

- **URL**: https://apify.com/jungle_synthesizer/tradeindia-b2b-supplier-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 record scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## TradeIndia B2B Supplier & Product Scraper

Pull supplier and product listings from [TradeIndia](https://www.tradeindia.com/), one of India's largest B2B marketplaces. Search by product keyword, narrow by city or seller type, and get each listing together with the company behind it: GST number, address, owner, turnover and more.

### What you get

Every record is one product listing joined to its seller.

| Group   | Fields |
|---------|--------------------------------------------------------------------------------------------------------------------------------|
| Product | `product_id`, `product_title`, `product_description`, `price`, `min_order_quantity`, `specifications`, `in_stock`, `product_url`, `image_url` |
| Seller  | `company_id`, `company_name`, `company_url`, `business_type`, `city`, `state`, `country`, `member_since_years`, `trust_stamp` |
| Company | `address`, `gst_number`, `owner_name`, `owner_designation`, `year_established`, `employees_count`, `annual_turnover` |
| Search  | `search_query`, the keyword that produced the row |

Company fields are filled in when **Include company details** is on (the default). Not every seller publishes every detail: roughly a third of sellers show no GST number, and a few profiles carry no company details at all. Those rows still come back with the product and seller fields, and the missing company fields are empty.

Phone numbers are not part of the output.

### Input

| Field                   | Type    | Default      | What it does |
|-------------------------|---------|--------------|---------------------------------------------------------------------------------------------------------------|
| `searchQueries`         | list    | `steel pipe` | One or more product or service keywords. Required. |
| `cities`                | list    | all          | Only sellers in these cities, for example `Mumbai` or `Pune`. Each city is searched on its own. |
| `sellerTypes`           | select  | all          | Manufacturers, suppliers, exporters, traders, wholesalers and distributors. Pick several to combine them. |
| `verifiedOnly`          | boolean | `false`      | Only sellers with a TradeIndia trust stamp. |
| `withPriceOnly`         | boolean | `false`      | Only listings that show a price. |
| `includeCompanyDetails` | boolean | `true`       | Add GST number, address, owner, turnover, employee count and year established. |
| `maxItems`              | integer | `10`         | Maximum rows to return across all keywords, cities and seller types. |

#### Going deep on one keyword

A single keyword search is capped at about 16,000 listings by TradeIndia itself. To collect more for a broad keyword, add `cities` and `sellerTypes`: every keyword, city and seller-type combination is its own search, and a listing that shows up in more than one is returned once.

### Example

```json
{
    "searchQueries": ["cotton fabric"],
    "cities": ["Surat"],
    "sellerTypes": ["manufacturer", "exporter"],
    "maxItems": 200
}
```

```json
{
    "product_id": 455450,
    "product_title": "Niko Stainless Steel Pipes",
    "price": "160 INR (Approx.)",
    "min_order_quantity": 100,
    "product_url": "https://www.tradeindia.com/products/stainless-steel-pipes-455450.html",
    "company_id": 342191,
    "company_name": "NIKO STEEL AND ENGINEERING LLP",
    "business_type": "Manufacturer | Supplier",
    "city": "Mumbai",
    "state": "Maharashtra",
    "country": "India",
    "address": "24/26, Shop No.- 6B, Sindhi Lane, Charni Road, Near N. D. Road, Mumbai, Maharashtra, 400004, India",
    "gst_number": "27AAQFN7612K1ZQ",
    "owner_name": "Mr Shrenik P. Shah",
    "owner_designation": "Director",
    "year_established": 1981,
    "employees_count": 20,
    "annual_turnover": "Rs 15 Crores",
    "trust_stamp": true,
    "search_query": "steel pipe"
}
```

### Good to know

- Prices are shown as TradeIndia shows them, with the currency in the text (for example `160 INR (Approx.)`). Many listings have no price.
- `business_type` is TradeIndia's own label for the seller and can combine roles, such as `Manufacturer | Supplier`.
- A keyword nobody lists returns zero rows, not an error.
- Results follow TradeIndia's own ranking for the keyword.

### Use cases

- Build lead lists of Indian manufacturers, exporters and wholesalers by product and city.
- Verify a supplier's GST registration and registered address before ordering.
- Compare listed prices and minimum order quantities for a product across sellers.
- Map suppliers of a product category by state for sourcing or market research.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `searchQueries` (type: `array`):

One or more product or service keywords, the same text you would type into TradeIndia's search box, for example "steel pipe" or "cotton fabric". Every keyword is searched against every city and seller type you choose below.

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

Optional. Only return listings from sellers in these cities, for example "Mumbai" or "Pune". Each city is searched separately, which also lets you go past the roughly 16,000 listings a single keyword search can return. Leave empty to search all of India and abroad.

## `sellerTypes` (type: `array`):

Optional. Only return sellers of these kinds. Each selected type is searched separately and overlapping listings are returned once. Leave empty for all seller types.

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

Only return sellers that hold a TradeIndia trust stamp.

## `withPriceOnly` (type: `boolean`):

Only return listings that show a price.

## `includeCompanyDetails` (type: `boolean`):

Add each seller's GST number, full address, owner name, year established, employee count and annual turnover. Each seller is looked up once per run.

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

Maximum number of listings to return across all keywords, cities and seller types.

## Actor input object example

```json
{
  "sp_contact": "Share your email here...",
  "searchQueries": [
    "steel pipe"
  ],
  "sellerTypes": [],
  "verifiedOnly": false,
  "withPriceOnly": false,
  "includeCompanyDetails": true,
  "maxItems": 10
}
```

# Actor output Schema

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

No description

# 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 = {
    "sp_contact": "Share your email here...",
    "searchQueries": [
        "steel pipe"
    ],
    "sellerTypes": [],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/tradeindia-b2b-supplier-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 = {
    "sp_contact": "Share your email here...",
    "searchQueries": ["steel pipe"],
    "sellerTypes": [],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/tradeindia-b2b-supplier-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 '{
  "sp_contact": "Share your email here...",
  "searchQueries": [
    "steel pipe"
  ],
  "sellerTypes": [],
  "maxItems": 10
}' |
apify call jungle_synthesizer/tradeindia-b2b-supplier-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/tradeindia-b2b-supplier-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/kxYYYZw9m2yxwJEwt/builds/alZNqkvrswLpUrGJC/openapi.json
