# Made-in-China Scraper - Suppliers, Products & B2B Leads (`scrapesage/made-in-china-scraper`) Actor

Scrape Made-in-China.com B2B suppliers & products: company profiles (business type, certifications, year, employees, markets, location), product specs, FOB prices & MOQ. The clean, no-browser Alibaba alternative for sourcing & lead gen, with monitoring.

- **URL**: https://apify.com/scrapesage/made-in-china-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 product scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Made-in-China Scraper — Suppliers, Products & B2B Leads (Sourcing, Prices & MOQ)

Extract **complete Made-in-China.com data** — both sides of the marketplace in one actor: **products** (real FOB prices, MOQ, full spec tables, images, HS-relevant attributes) and **suppliers/manufacturers** (full company profiles: business type, certifications, year established, employees, main markets, terms of payment, lead time, and location). Score every supplier as a **B2B sourcing lead** and watch keywords for **new products or suppliers** with monitor mode.

The **clean, no-browser alternative to Alibaba scraping** — fast HTTP + JSON-LD extraction, no login, no cookies, no headless browser.

### Why this Made-in-China scraper?

Most Made-in-China scrapers return a product title and a price and stop there. This actor ships the **richest dataset in the category** — products *and* the full manufacturer profile behind them, with a lead score:

| Data | Typical scrapers | This actor |
|---|---|---|
| Product title + FOB price range + MOQ | ✅ | ✅ |
| Full product spec table (50+ technical attributes) | ❌ | ✅ |
| Product description, all images, brand (JSON-LD) | partial | ✅ |
| Supplier company name + storefront URL | partial | ✅ |
| Business type (Manufacturer / Trading Company) | ❌ | ✅ |
| Year established, number of employees, plant area | ❌ | ✅ |
| Audited Supplier / Diamond Member status | partial | ✅ |
| Certifications, main markets, terms of payment, lead time | ❌ | ✅ |
| Full address → city / province / country | ❌ | ✅ |
| **Lead score (0–100)** per supplier | ❌ | ✅ |
| New-product / new-supplier **monitoring** | ❌ | ✅ |
| No start fee | varies | ✅ |

### Use cases

- **Product sourcing & supplier discovery** — find verified manufacturers for any product (CNC machines, solar panels, LED lights, packaging, textiles, auto parts) filtered by audited status and lead score, with prices and MOQ to shortlist suppliers fast.
- **B2B lead generation** — manufacturers and trading companies are active sellers. Build target lists by category, location (Guangdong, Zhejiang, Jiangsu…), business type and certification, then reach out via their storefront.
- **Price & MOQ intelligence** — track FOB price ranges and minimum order quantities across competing suppliers for a product line.
- **Dropshipping & private label** — compare suppliers by tenure, markets served, payment terms and lead time before committing.
- **Market research** — map who manufactures what, where, and at what scale across China's largest English-language B2B marketplace.
- **Supply-chain monitoring** — schedule recurring runs to catch newly listed products or new suppliers entering a category.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Made-in-China Scraper**, pick a **mode**, enter search keywords (or paste Made-in-China URLs), and click **Start**.
3. Watch products and supplier leads stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "mode": "searchSuppliers",
    "searchKeywords": ["cnc machine", "solar panel"],
    "maxResults": 200,
    "maxPages": 5,
    "includeCompanyProfile": true,
    "includeContactPage": true,
    "auditedOnly": true,
    "minLeadScore": 40
}
````

- **mode** — `searchProducts` (products by keyword), `searchSuppliers` (manufacturers/suppliers as B2B leads), `productDetails` (full data for specific product URLs), `supplierDetails` (full company profiles for specific storefronts).
- **searchKeywords** — keywords for the search modes (`cnc machine`, `led light`, `packaging machine`…). Each runs separately.
- **productUrls / supplierUrls** — direct inputs for the detail modes (product `/product/…` URLs, or supplier storefront URLs / subdomains).
- **startUrls** — paste any mix of product pages, supplier storefronts, `/multi-search/` product searches or `/manufacturers/` directories; each is auto-routed.
- **maxResults / maxPages** — total record cap and how many search pages per keyword (~30 items/page).
- **fetchProductDetails** *(searchProducts)* — open each product for the full spec table, description, all images and brand.
- **fetchSupplierProfile** *(searchProducts)* — attach each product's supplier company info (deduplicated per supplier).
- **includeCompanyProfile / includeContactPage** *(supplier modes)* — pull the company-profile and contact pages for markets, payment terms, lead time and full address.
- **auditedOnly / minLeadScore** — keep only Audited Suppliers and/or suppliers above a lead-score threshold.
- **monitorMode / monitorStoreName** — emit only records not seen in previous runs (see below).

### Output

One record per **product** (`type: "product"`) and per **supplier** (`type: "supplier"`):

```json
{
    "type": "supplier",
    "supplierId": "jiongtaicnc",
    "companyName": "Zhejiang Jiongtai Numerical Control Equipment Co., Ltd.",
    "profileUrl": "https://jiongtaicnc.en.made-in-china.com/",
    "businessType": "Manufacturer/Factory & Trading Company",
    "yearEstablished": "2014",
    "employees": 14,
    "isAuditedSupplier": true,
    "isDiamondMember": true,
    "managementSystemCertification": "ISO 9001",
    "totalAnnualRevenue": null,
    "oemOdm": "OEM/ODM Service",
    "averageLeadTime": "Peak Season: 1-3 months / Off Season: one month",
    "termsOfPayment": "LC, T/T, PayPal, Western Union",
    "mainProducts": ["CNC Lathe", "CNC Machine", "Vertical Machining Center"],
    "mainMarkets": ["North America", "Western Europe", "Southeast Asia"],
    "address": "Wenzhou, Zhejiang, China",
    "city": "Wenzhou",
    "province": "Zhejiang",
    "country": "China",
    "contactPerson": null,
    "telephone": null,
    "contactPageUrl": "https://jiongtaicnc.en.made-in-china.com/contact-info.html",
    "leadScore": 78,
    "searchKeyword": "cnc machine",
    "scrapedAt": "2026-06-15T12:00:00.000Z"
}
```

```json
{
    "type": "product",
    "productId": "dYgURNoGJJWr",
    "name": "T50 Precision Slant Bed Milling CNC Machine Tool",
    "url": "https://jiongtaicnc.en.made-in-china.com/product/dYgURNoGJJWr/...html",
    "priceText": "US$22,535.00-25,000.00",
    "priceMin": 22535,
    "priceMax": 25000,
    "currency": "USD",
    "minOrder": "1 Piece",
    "brand": "Zhejiang Jiongtai Numerical Control Equipment Co., Ltd.",
    "image": "https://image.made-in-china.com/.../T50-...webp",
    "specifications": { "Spindle speed range": "50-3500rpm", "X-axis travel": "300mm" },
    "supplierId": "jiongtaicnc",
    "supplierUrl": "https://jiongtaicnc.en.made-in-china.com/",
    "scrapedAt": "2026-06-15T12:00:00.000Z"
}
```

> **Note on contact details:** Made-in-China hides supplier **phone, fax and email behind a login** (the public contact page shows "Sign In for Details"). This actor returns every publicly available field — company name, full address, business profile, certifications and the storefront/contact-page URL — so you can reach suppliers through their Made-in-China inquiry page. `telephone` / `email` are `null` unless a supplier publishes them openly.

### Monitor only new products & suppliers

Turn on **monitorMode** and the actor remembers everything it has seen (in a named key-value store) and emits **only new** products/suppliers on each run:

- It complements — and does **not** conflict with — [Apify Schedules](https://docs.apify.com/platform/schedules). Schedule the actor hourly/daily; each scheduled run reuses the same `monitorStoreName`, so you only get what's new since last time.
- Use a distinct `monitorStoreName` per saved task to keep histories separate.
- Perfect for watching a product category for new listings, or a region's manufacturers for new entrants, and pushing them straight into a CRM or Slack.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly to monitor a category or region for new suppliers and products.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, sheet append) the moment a run finishes.

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

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/made-in-china-scraper').call({
    mode: 'searchSuppliers',
    searchKeywords: ['cnc machine'],
    maxResults: 200,
    auditedOnly: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} supplier leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new supplier leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored keyword finds new suppliers.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find audited CNC-machine manufacturers in Zhejiang with FOB prices" and let it run this scraper for you.

### More scrapers from scrapesage

Build a complete **B2B sourcing & lead-gen stack**:

- **[Shopify App Store Scraper](https://apify.com/scrapesage/shopify-app-store-scraper)** — e-commerce apps, reviews & developer leads.
- **[Google Play Scraper](https://apify.com/scrapesage/google-play-scraper)** — apps, reviews & developer contacts.
- **[Apple App Store Scraper](https://apify.com/scrapesage/app-store-scraper)** — apps, reviews & charts.
- **[Product Hunt Scraper](https://apify.com/scrapesage/product-hunt-scraper)** — launches, makers & leads.
- **[GitHub Scraper](https://apify.com/scrapesage/github-scraper)** — repos, developers & contact leads.
- **[Companies House Scraper](https://apify.com/scrapesage/companies-house-scraper)** — UK companies, directors & PSCs.
- **[SEC EDGAR Scraper](https://apify.com/scrapesage/sec-edgar-scraper)** — filings, financials & company contacts.
- **[Eventbrite Scraper](https://apify.com/scrapesage/eventbrite-scraper)** — events + organizer leads.

### Tips

- **Sourcing workflow**: run `searchSuppliers` with `auditedOnly: true` and `minLeadScore: 40` to get a clean shortlist of verified manufacturers, then feed their storefronts back into `supplierDetails` for the deepest profile.
- **Price intelligence**: run `searchProducts` with `fetchSupplierProfile: true` to see every product's price/MOQ *and* the manufacturer behind it in one table.
- **Go deep on specs**: turn on `fetchProductDetails` to get the full technical spec table and all images per product.
- **Cost control**: supplier profile/contact pages are deduplicated per supplier, and detail fetches are opt-in — keep them off for fast, cheap breadth.
- **Proxies**: the default Apify datacenter proxy works; switch to residential only if you hit blocks under heavy concurrent load.

### FAQ

**How do I find suppliers for a specific product?** Use `searchSuppliers` mode with your product as a keyword (e.g. `cnc machine`). You get one lead record per manufacturer with company profile, certifications, markets and a lead score.

**Can I get supplier phone numbers and emails?** Made-in-China hides phone/fax/email behind a login, so those fields are `null` for most suppliers (this is true of every Made-in-China scraper). You get company name, full address and the storefront/contact-page URL to reach them through Made-in-China's own inquiry flow.

**Does it use a browser?** No. It extracts data over plain HTTP from server-rendered pages and JSON-LD — fast and reliable, no headless browser, no login.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I monitor a category for new suppliers?** Turn on `monitorMode`, then create a [Schedule](https://docs.apify.com/platform/schedules). Each run emits only suppliers/products not seen before.

**A field is null — why?** Some suppliers simply don't publish every field (revenue, plant area, certifications), and contact details are login-gated. Fields are `null` only when the data isn't public, not because the scraper skipped them.

**Is scraping Made-in-China legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws and Made-in-China's terms.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `mode` (type: `string`):

searchProducts = find products by keyword (price, MOQ, specs, supplier). searchSuppliers = find manufacturers/suppliers by keyword as B2B lead profiles. productDetails = full data for specific product URLs. supplierDetails = full company profiles for specific supplier storefronts. Start URLs override the mode.

## `searchKeywords` (type: `array`):

Keywords to search on Made-in-China.com for searchProducts / searchSuppliers mode. Examples: <code>cnc machine</code>, <code>solar panel</code>, <code>led light</code>, <code>industrial machinery</code>. Each keyword runs separately.

## `productUrls` (type: `array`):

Made-in-China product page URLs (<code>https://\<supplier>.en.made-in-china.com/product/….html</code>). Primary input for productDetails mode.

## `supplierUrls` (type: `array`):

Made-in-China supplier storefront URLs or subdomains (<code>https://camelmachinery.en.made-in-china.com/</code> or just <code>camelmachinery</code>). Primary input for supplierDetails mode.

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

Paste any Made-in-China URLs — product pages, supplier storefronts, <code>/multi-search/</code> product searches, or <code>/manufacturers/</code> supplier directories. Each is auto-detected and routed to the right handler.

## `maxResults` (type: `integer`):

Total cap on records emitted across all keywords/URLs in this run.

## `maxPages` (type: `integer`):

How many search-result pages to crawl per keyword (each product page lists ~30 products; each supplier directory page lists ~30 suppliers).

## `fetchProductDetails` (type: `boolean`):

For searchProducts mode, open every product page to extract the full spec table, description, all images, brand, HS code, packaging, ports and payment terms (JSON-LD). Adds one request per product.

## `fetchSupplierProfile` (type: `boolean`):

For searchProducts mode, fetch each unique supplier's storefront and attach their company name, business type, years on platform, audited status and location to every product. Deduplicated per supplier.

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

For supplier records, also fetch the supplier's <code>/company-profile.html</code> to add main markets, terms of payment, average lead time, OEM/ODM, export year and nearest port. One extra request per supplier.

## `includeContactPage` (type: `boolean`):

For supplier records, also fetch the supplier's <code>/contact-info.html</code> for contact person and full address. (Note: Made-in-China hides phone/email/fax behind login — those fields are null unless publicly shown.) One extra request per supplier.

## `auditedOnly` (type: `boolean`):

Emit only suppliers flagged as Audited Supplier on Made-in-China (third-party verified).

## `minLeadScore` (type: `integer`):

Emit only supplier records with at least this 0–100 lead score (based on audited/diamond status, tenure, age, certifications, markets and contactability).

## `monitorMode` (type: `boolean`):

Remember products/suppliers seen in previous runs (in a named key-value store) and emit only NEW ones. Pair with Apify Schedules to watch a keyword for newly listed products or suppliers. Does not conflict with scheduling.

## `monitorStoreName` (type: `string`):

Named key-value store that holds the 'already seen' keys for monitor mode. Use a distinct name per saved task so their histories stay separate.

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

Maximum parallel requests.

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

Proxy settings. Made-in-China serves cleanly to Apify datacenter proxies, so the default is fine; switch to residential only if you see blocks under heavy load.

## Actor input object example

```json
{
  "mode": "searchProducts",
  "searchKeywords": [
    "cnc machine"
  ],
  "maxResults": 100,
  "maxPages": 5,
  "fetchProductDetails": false,
  "fetchSupplierProfile": false,
  "includeCompanyProfile": true,
  "includeContactPage": true,
  "auditedOnly": false,
  "minLeadScore": 0,
  "monitorMode": false,
  "monitorStoreName": "made-in-china-monitor",
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped product and supplier records as JSON items in the default dataset.

# 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 = {
    "searchKeywords": [
        "cnc machine"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/made-in-china-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 = {
    "searchKeywords": ["cnc machine"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/made-in-china-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "searchKeywords": [
    "cnc machine"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapesage/made-in-china-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapesage/made-in-china-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Made-in-China Scraper - Suppliers, Products & B2B Leads",
        "description": "Scrape Made-in-China.com B2B suppliers & products: company profiles (business type, certifications, year, employees, markets, location), product specs, FOB prices & MOQ. The clean, no-browser Alibaba alternative for sourcing & lead gen, with monitoring.",
        "version": "0.1",
        "x-build-id": "DEU7fuKTd4hMPVIcD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~made-in-china-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-made-in-china-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scrapesage~made-in-china-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-made-in-china-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scrapesage~made-in-china-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-made-in-china-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "What to scrape",
                        "enum": [
                            "searchProducts",
                            "searchSuppliers",
                            "productDetails",
                            "supplierDetails"
                        ],
                        "type": "string",
                        "description": "searchProducts = find products by keyword (price, MOQ, specs, supplier). searchSuppliers = find manufacturers/suppliers by keyword as B2B lead profiles. productDetails = full data for specific product URLs. supplierDetails = full company profiles for specific supplier storefronts. Start URLs override the mode.",
                        "default": "searchProducts"
                    },
                    "searchKeywords": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Keywords to search on Made-in-China.com for searchProducts / searchSuppliers mode. Examples: <code>cnc machine</code>, <code>solar panel</code>, <code>led light</code>, <code>industrial machinery</code>. Each keyword runs separately.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "productUrls": {
                        "title": "Product URLs",
                        "type": "array",
                        "description": "Made-in-China product page URLs (<code>https://&lt;supplier&gt;.en.made-in-china.com/product/&hellip;.html</code>). Primary input for productDetails mode.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "supplierUrls": {
                        "title": "Supplier storefront URLs",
                        "type": "array",
                        "description": "Made-in-China supplier storefront URLs or subdomains (<code>https://camelmachinery.en.made-in-china.com/</code> or just <code>camelmachinery</code>). Primary input for supplierDetails mode.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs (auto-routed)",
                        "type": "array",
                        "description": "Paste any Made-in-China URLs — product pages, supplier storefronts, <code>/multi-search/</code> product searches, or <code>/manufacturers/</code> supplier directories. Each is auto-detected and routed to the right handler.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max records (total)",
                        "minimum": 1,
                        "maximum": 100000,
                        "type": "integer",
                        "description": "Total cap on records emitted across all keywords/URLs in this run.",
                        "default": 100
                    },
                    "maxPages": {
                        "title": "Max search pages per keyword",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "How many search-result pages to crawl per keyword (each product page lists ~30 products; each supplier directory page lists ~30 suppliers).",
                        "default": 5
                    },
                    "fetchProductDetails": {
                        "title": "Fetch full product details (searchProducts)",
                        "type": "boolean",
                        "description": "For searchProducts mode, open every product page to extract the full spec table, description, all images, brand, HS code, packaging, ports and payment terms (JSON-LD). Adds one request per product.",
                        "default": false
                    },
                    "fetchSupplierProfile": {
                        "title": "Attach supplier profile to products (searchProducts)",
                        "type": "boolean",
                        "description": "For searchProducts mode, fetch each unique supplier's storefront and attach their company name, business type, years on platform, audited status and location to every product. Deduplicated per supplier.",
                        "default": false
                    },
                    "includeCompanyProfile": {
                        "title": "Include company profile page",
                        "type": "boolean",
                        "description": "For supplier records, also fetch the supplier's <code>/company-profile.html</code> to add main markets, terms of payment, average lead time, OEM/ODM, export year and nearest port. One extra request per supplier.",
                        "default": true
                    },
                    "includeContactPage": {
                        "title": "Include contact page",
                        "type": "boolean",
                        "description": "For supplier records, also fetch the supplier's <code>/contact-info.html</code> for contact person and full address. (Note: Made-in-China hides phone/email/fax behind login — those fields are null unless publicly shown.) One extra request per supplier.",
                        "default": true
                    },
                    "auditedOnly": {
                        "title": "Only audited suppliers",
                        "type": "boolean",
                        "description": "Emit only suppliers flagged as Audited Supplier on Made-in-China (third-party verified).",
                        "default": false
                    },
                    "minLeadScore": {
                        "title": "Minimum lead score",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Emit only supplier records with at least this 0–100 lead score (based on audited/diamond status, tenure, age, certifications, markets and contactability).",
                        "default": 0
                    },
                    "monitorMode": {
                        "title": "Monitor mode (only new records)",
                        "type": "boolean",
                        "description": "Remember products/suppliers seen in previous runs (in a named key-value store) and emit only NEW ones. Pair with Apify Schedules to watch a keyword for newly listed products or suppliers. Does not conflict with scheduling.",
                        "default": false
                    },
                    "monitorStoreName": {
                        "title": "Monitor store name",
                        "type": "string",
                        "description": "Named key-value store that holds the 'already seen' keys for monitor mode. Use a distinct name per saved task so their histories stay separate.",
                        "default": "made-in-china-monitor"
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 16,
                        "type": "integer",
                        "description": "Maximum parallel requests.",
                        "default": 8
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Made-in-China serves cleanly to Apify datacenter proxies, so the default is fine; switch to residential only if you see blocks under heavy load.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
