# 1688.com Scraper (`automation-lab/1688-scraper`) Actor

Scrape product listings from 1688.com — Alibaba's B2B domestic wholesale platform. Extract factory-direct prices, tiered bulk pricing, MOQ, supplier quality scores, and order counts by keyword.

- **URL**: https://apify.com/automation-lab/1688-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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

## 1688.com Scraper — B2B Wholesale Product Extractor

### What does it do?

This actor scrapes **1688.com** — Alibaba's B2B domestic marketplace and China's largest wholesale platform — extracting product listings by keyword. Get factory-direct pricing, bulk pricing tiers, MOQ (minimum order quantity), supplier ratings, and order volume data for dropshipping research, Amazon FBA sourcing, and competitive analysis.

Each search query returns up to 500 products with:
- 💰 **Factory-direct prices** in CNY + USD equivalent
- 📦 **MOQ & tiered bulk pricing** — see price breaks at different volumes
- 🏭 **Supplier information** — name, location, performance scores
- 📊 **Demand metrics** — order count and repurchase rate
- 🏅 **Supplier quality scores** — logistics, goods quality, dispute resolution

---

### Who is it for?

#### 🚀 Dropshippers & Product Sourcers
Find products at factory-direct prices (typically 30–60% lower than Alibaba international). Validate demand with real order counts before placing bulk orders.

#### 📦 Amazon FBA Sellers
Identify high-potential products by filtering for items with 500+ orders. Compare factory prices against Amazon selling prices to calculate exact margins before sourcing.

#### 🔍 Competitive Intelligence Analysts
Monitor competitor product catalogs, track price changes over time, and identify trending categories in the Chinese wholesale market.

#### 💼 B2B Procurement Teams
Automate supplier discovery. Search for specific product types, filter by supplier quality scores, and build a shortlist of pre-vetted manufacturers.

#### 📈 E-commerce Entrepreneurs & AI Developers
Build product databases, train price prediction models, or feed AI pipelines with real wholesale pricing data from China's largest B2B platform.

---

### Why use this scraper?

- ✅ **Extracts data competitors don't** — tiered bulk pricing tiers, supplier score breakdowns, repurchase rates
- ✅ **Fresh data** — scrapes live 1688.com listings, not cached datasets
- ✅ **Structured output** — clean JSON/CSV ready for spreadsheets or databases
- ✅ **Numeric fields** — prices as numbers (not strings), scores as decimals
- ✅ **Session cookie auth** — uses your existing 1688.com browser session (easy copy-paste setup)
- ✅ **Multi-keyword support** — run multiple product searches in a single job

---

### What data does it extract?

| Field | Description | Example |
|-------|-------------|---------|
| `productId` | 1688 listing ID | `549929725456` |
| `title` | Product title (Chinese) | `TWS无线蓝牙耳机5.0` |
| `url` | Direct product URL | `https://detail.1688.com/offer/...` |
| `thumbnailUrl` | Main product image | `https://cbu01.alicdn.com/...` |
| `priceCny` | Price in CNY (numeric) | `28.50` |
| `priceUsd` | Approx USD price | `3.93` |
| `moq` | Minimum order quantity | `10` |
| `currency` | Always "CNY" | `CNY` |
| `supplierName` | Factory/supplier name | `深圳市XX电子有限公司` |
| `supplierId` | Seller member ID | `b2b-2582465574` |
| `supplierUrl` | Supplier storefront URL | `https://b2b-xxx.1688.com/` |
| `province` | Province (Chinese) | `广东` |
| `city` | City (Chinese) | `深圳市` |
| `orderCount` | Total orders placed | `2547` |
| `repurchaseRate` | Customer repurchase % | `18%` |
| `compositeScore` | Overall supplier rating (0–5) | `4.2` |
| `logisticsScore` | Shipping performance (0–5) | `4.5` |
| `goodsScore` | Product quality rating (0–5) | `4.0` |
| `disputeScore` | Dispute resolution (0–5) | `4.3` |
| `consultationScore` | Customer service (0–5) | `4.1` |
| `returnScore` | Return processing (0–5) | `4.4` |
| `quantityPrices` | Array of tiered bulk pricing | `[{quantity: "1-99", priceCny: 28.5}]` |
| `serviceTags` | Service terms (Chinese) | `["退货包运费", "先采后付"]` |
| `productBadges` | Certifications/badges | `["认证工厂", "实力商家"]` |
| `searchKeyword` | Search term that found this | `"phone case"` |
| `scrapedAt` | ISO 8601 timestamp | `2026-04-01T12:00:00Z` |

---

### 💰 How much does it cost to scrape 1688.com products?

This actor uses **Pay Per Event (PPE)** pricing — you only pay for what you scrape:

| Event | FREE Plan | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|-------|-----------|--------|--------|------|----------|---------|
| Run start | $0.020 | $0.019 | $0.017 | $0.015 | $0.012 | $0.010 |
| Per product | $0.0040 | $0.0036 | $0.0030 | $0.0024 | $0.0016 | $0.0011 |

**Example costs:**
- Scrape 50 products: ~$0.22 (FREE tier)
- Scrape 200 products: ~$0.82
- Scrape 1,000 products: ~$4.02

**Free trial:** New Apify accounts include a $5 free credit — enough to scrape 1,000+ products.

**Tip:** Use Apify's subscription plans for volume discounts (up to 72% off at DIAMOND tier).

---

### How to scrape 1688.com products

#### Step 1: Open the actor
Go to [1688.com Scraper](https://apify.com/automation-lab/1688-scraper) on Apify Store.

#### Step 2: Enter keywords
Type your product keywords (Chinese or English — both work):
- `phone case` → searches for phone cases
- `手机壳` → same in Chinese (more results)
- `bluetooth earbuds` → earbuds
- `led strip lights` → LED strips

#### Step 3: Set max results
Set `maxResults` to control how many products to extract per keyword. Default is 48 (one page).

#### Step 4: Add session cookies (required)
1688.com requires a valid login session to return product data. In Chrome/Edge:
1. Go to [www.1688.com](https://www.1688.com) and log in
2. Press F12 → Network tab → reload the page
3. Click any request to 1688.com → copy the `Cookie` header value
4. Paste the full cookie string into the **Session Cookies** field

#### Step 5: Choose sort order
- **Best Selling** (recommended) — finds proven products with high demand
- **Price: Low to High** — cheapest factory prices first
- **Default** — relevance sorting

#### Step 6: Run and export
Click "Start" and wait for results. Export to JSON, CSV, or Excel from the Results tab.

---

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `keywords` | array | required | Search keywords (Chinese or English) |
| `cookies` | string | required | Your 1688.com session cookies — required for search results |
| `maxResults` | integer | 48 | Max products per keyword (up to 500) |
| `sortType` | string | `bestSelling` | Sort: `default`, `bestSelling`, `priceLow`, `priceHigh` |
| `proxyConfiguration` | object | CN residential | Proxy settings (change only if needed) |

#### Sort type options

| Sort Type | Value | Best for |
|-----------|-------|----------|
| Best Selling | `bestSelling` | Finding proven high-demand products |
| Price Low | `priceLow` | Finding cheapest factory prices |
| Price High | `priceHigh` | Premium/high-value products |
| Default | `default` | Relevance-based results |

---

### Output example

```json
{
  "productId": "549929725456",
  "title": "TWS无线蓝牙耳机5.0降噪运动",
  "url": "https://detail.1688.com/offer/549929725456.html",
  "thumbnailUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01.../image.jpg",
  "priceCny": 28.50,
  "priceUsd": 3.93,
  "moq": 10,
  "currency": "CNY",
  "supplierName": "深圳市鸿达电子科技有限公司",
  "supplierId": "b2b-2582465574fd1bb",
  "supplierUrl": "https://b2b-2582465574fd1bb.1688.com/",
  "province": "广东",
  "city": "深圳市",
  "orderCount": 2547,
  "repurchaseRate": "18%",
  "compositeScore": 4.2,
  "logisticsScore": 4.5,
  "goodsScore": 4.0,
  "disputeScore": 4.3,
  "consultationScore": 4.1,
  "returnScore": 4.4,
  "quantityPrices": [
    { "quantity": "1~99件", "minQty": 1, "priceCny": 28.50, "priceUsd": 3.93 },
    { "quantity": "100~499件", "minQty": 100, "priceCny": 24.00, "priceUsd": 3.31 },
    { "quantity": "≥500件", "minQty": 500, "priceCny": 19.50, "priceUsd": 2.69 }
  ],
  "serviceTags": ["退货包运费", "先采后付"],
  "productBadges": ["认证工厂", "实力商家"],
  "searchKeyword": "bluetooth earbuds",
  "scrapedAt": "2026-04-01T12:34:56.789Z"
}
````

***

### Tips for best results

#### 🔍 Search tips

- **Use Chinese keywords** for more results (1688 is a Chinese-language platform)
- Combine searches: `["手机壳", "phone case"]` gets overlapping results for more coverage
- Broad keywords work best: `耳机` (earphones) vs a specific model number

#### 📊 Finding winning products

1. Use `sortType: "bestSelling"` to find proven sellers
2. Filter for `orderCount >= 500` — high orders = proven demand
3. Check `repurchaseRate` — 10%+ indicates satisfied customers
4. Verify `compositeScore >= 4.0` for reliable suppliers

#### 🏭 Evaluating suppliers

- `compositeScore 4.0–5.0` = Excellent (recommended)
- `compositeScore 3.0–3.9` = Good (proceed with caution)
- `compositeScore < 3.0` = Below average (higher risk)
- `logisticsScore` = Shipping reliability
- `goodsScore` = Product quality consistency

#### 💰 Calculating margins

Use `quantityPrices` to find your break-even MOQ. Example:

- 1–99 units: ¥28.50 ($3.93) each
- 100+ units: ¥24.00 ($3.31) each — 15% discount for bulk
- 500+ units: ¥19.50 ($2.69) each — 31% bulk discount

#### ⚙️ Service tags reference (Chinese → English)

- `退货包运费` = Free return shipping
- `先采后付` = Buy now, pay later
- `7天无理由退货` = 7-day no-reason returns
- `假一赔四` = Counterfeit product 4x refund guarantee

***

### Integrations

#### 🤖 AI/LLM sourcing pipeline

Feed 1688.com data into an AI system to automate product research:

```
1688 Scraper → GPT-4 analyzer → Supplier shortlist → Order automation
```

#### 📊 Price monitoring workflow

Schedule daily runs to track wholesale price changes:

```
1688 Scraper (daily) → Database → Price alert when > 10% change
```

#### 🔗 Apify integrations

Connect to 500+ apps via [Apify integrations](https://apify.com/integrations):

- **Google Sheets** — auto-update a product research spreadsheet
- **Zapier/Make** — trigger downstream workflows
- **Slack** — notify your team when new products meet criteria
- **Airtable** — build a sourcing CRM with supplier contacts

***

### API usage

#### Node.js

```javascript
const { ApifyClient } = require('apify-client');
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('automation-lab/1688-scraper').call({
    keywords: ['phone case', 'bluetooth earbuds'],
    maxResults: 100,
    sortType: 'bestSelling',
});

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

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_API_TOKEN')

run = client.actor('automation-lab/1688-scraper').call(run_input={
    'keywords': ['phone case', 'bluetooth earbuds'],
    'maxResults': 100,
    'sortType': 'bestSelling',
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(f"Scraped {len(items)} products")
for item in items[:3]:
    print(f"{item['title']} — ¥{item['priceCny']} | Orders: {item['orderCount']}")
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/automation-lab~1688-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "keywords": ["phone case"],
    "maxResults": 50,
    "sortType": "bestSelling"
  }'
```

***

### Use with Claude (MCP)

Connect this actor to Claude via the **Model Context Protocol (MCP)** to research 1688.com products conversationally.

#### Claude Code setup

```bash
claude mcp add --transport http apify https://mcp.apify.com?tools=automation-lab/1688-scraper
```

#### Claude Desktop / VS Code / Cursor setup

Add to your MCP config (Claude Desktop on macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=automation-lab/1688-scraper",
      "headers": {
        "Authorization": "Bearer YOUR_APIFY_TOKEN"
      }
    }
  }
}
```

#### Example prompts for Claude

Once connected, you can ask Claude:

> "Find the top 20 best-selling phone accessories on 1688.com with prices under ¥50 and at least 500 orders"

> "Search 1688.com for 'led strip lights' and summarize the price range, MOQ, and which provinces the suppliers are from"

> "Compare 50 bluetooth earbuds on 1688.com — which have composite scores above 4.0 and what are their prices?"

> "Find 30 products in the 'portable charger' category and calculate potential Amazon FBA margins assuming 3x markup"

***

### Is scraping 1688.com legal?

Web scraping publicly accessible product listings for personal use, research, and non-commercial purposes is generally considered legal in most jurisdictions. This actor scrapes publicly accessible product data (no private data, no user accounts accessed beyond your own session).

**Important:**

- 1688.com's Terms of Service may restrict automated access. Review their ToS before large-scale use.
- This actor does not scrape personal information, messages, or account data.
- Data is intended for research and business intelligence — not for republishing competitor supplier lists or for spamming.
- Apify's [Responsible Data Collection Policy](https://apify.com/legal/responsible-scraping) applies.

***

### FAQ

**Q: Does this actor require a 1688.com account?**
A: Yes — 1688.com's search API returns empty results for unauthenticated sessions. You need to provide your session cookies from a logged-in 1688.com account. See the "Session Cookies" input field instructions for how to extract them from your browser in under a minute.

**Q: Why are titles in Chinese?**
A: 1688.com is a Chinese-language platform. All product titles, service tags, and location data are in Simplified Chinese. You can use a translation API to convert them.

**Q: What currency are prices in?**
A: Prices are extracted in CNY (Chinese Yuan). The `priceUsd` field provides an approximate USD equivalent using a fixed rate (~0.138 USD/CNY). Verify current rates before financial decisions.

**Q: The actor returned 0 results for my keyword. Why?**
A: This can happen when:

1. The keyword has no results on 1688.com (try a broader term or Chinese equivalent)
2. Anti-bot protection blocked the session (retry once — the actor auto-rotates proxies)
3. Network issues with the CN residential proxy — retry after a few minutes

**Q: Can I scrape product detail pages for more data?**
A: The current version scrapes search results (list view). Product detail pages (MOQ details, full spec sheets, more images) can be added in a future version.

**Q: How many results can I get per keyword?**
A: Up to 500 products per keyword (approximately 10–11 pages of ~44–48 results each).

**Q: Do I need a Chinese proxy?**
A: The actor uses Apify's CN residential proxies by default. This is required to access 1688.com's search pages, which are geo-restricted. Do not change the proxy settings unless you know what you're doing.

***

### Related scrapers

- [Alibaba.com Scraper](https://apify.com/automation-lab/alibaba-scraper) — International wholesale listings
- [AliExpress Scraper](https://apify.com/automation-lab/aliexpress-scraper) — Consumer-facing retail prices
- [Temu Scraper](https://apify.com/automation-lab/temu-scraper) — Cross-border e-commerce platform
- [Amazon Product Scraper](https://apify.com/automation-lab/amazon-scraper) — Calculate FBA margins from source to sale
- [Amazon Reviews Scraper](https://apify.com/automation-lab/amazon-reviews-scraper) — Validate product demand with buyer feedback

# Actor input Schema

## `keywords` (type: `array`):

Enter product keywords to search on 1688.com. Chinese or English keywords both work (e.g. 'phone case', '手机壳', 'bluetooth earbuds').

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

Maximum number of products to extract per keyword. One page typically has 44-48 products.

## `sortType` (type: `string`):

How to sort search results. 'Best Selling' is recommended for finding proven products.

## `cookies` (type: `string`):

Your 1688.com session cookies (required to get product data). In Chrome/Edge: open 1688.com, log in, press F12 → Network tab → reload → click any request to 1688.com → copy the 'Cookie' header value. Paste the full string here.

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

1688.com requires Chinese residential proxy. Leave default for best results.

## Actor input object example

```json
{
  "keywords": [
    "phone case"
  ],
  "maxResults": 10,
  "sortType": "bestSelling",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CN"
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "keywords": [
        "phone case"
    ],
    "maxResults": 10,
    "sortType": "bestSelling",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "CN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/1688-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 = {
    "keywords": ["phone case"],
    "maxResults": 10,
    "sortType": "bestSelling",
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "CN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/1688-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 '{
  "keywords": [
    "phone case"
  ],
  "maxResults": 10,
  "sortType": "bestSelling",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "CN"
  }
}' |
apify call automation-lab/1688-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "1688.com Scraper",
        "description": "Scrape product listings from 1688.com — Alibaba's B2B domestic wholesale platform. Extract factory-direct prices, tiered bulk pricing, MOQ, supplier quality scores, and order counts by keyword.",
        "version": "0.1",
        "x-build-id": "9pYL4wbGgE7w1kDJS"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~1688-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-1688-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/automation-lab~1688-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-1688-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/automation-lab~1688-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-1688-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",
                "required": [
                    "keywords"
                ],
                "properties": {
                    "keywords": {
                        "title": "🔍 Search Keywords",
                        "type": "array",
                        "description": "Enter product keywords to search on 1688.com. Chinese or English keywords both work (e.g. 'phone case', '手机壳', 'bluetooth earbuds').",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max Products per Keyword",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of products to extract per keyword. One page typically has 44-48 products.",
                        "default": 48
                    },
                    "sortType": {
                        "title": "Sort Order",
                        "enum": [
                            "default",
                            "bestSelling",
                            "priceLow",
                            "priceHigh"
                        ],
                        "type": "string",
                        "description": "How to sort search results. 'Best Selling' is recommended for finding proven products.",
                        "default": "bestSelling"
                    },
                    "cookies": {
                        "title": "🔐 Session Cookies",
                        "type": "string",
                        "description": "Your 1688.com session cookies (required to get product data). In Chrome/Edge: open 1688.com, log in, press F12 → Network tab → reload → click any request to 1688.com → copy the 'Cookie' header value. Paste the full string here."
                    },
                    "proxyConfiguration": {
                        "title": "🌐 Proxy Configuration",
                        "type": "object",
                        "description": "1688.com requires Chinese residential proxy. Leave default for best results.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "CN"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
