# 1688 Scraper (`flarewow/1688-scraper`) Actor

Scrape 1688.com wholesale offers by keyword: price, quantity price tiers, MOQ, sales, supplier company, location and service scores. Optional English titles. No login.

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

## Pricing

$2.00 / 1,000 offers

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

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

## 1688 Scraper – wholesale products, tiered prices, MOQ & suppliers (1688.com)

**1688 Scraper** extracts wholesale product offers from [1688.com](https://www.1688.com) – Alibaba's Chinese B2B marketplace where factories sell to resellers. Search by keyword (Chinese or English) and get prices, quantity price tiers, minimum order quantity, sales volume, supplier company, location and service scores. Optional English translation of titles. No login, no browser, no Chinese phone number needed.

### Who is it for?

- **Dropshippers & Amazon / Shopify / Allegro sellers** – find the factory price of a product and calculate your margin.
- **Sourcing agents & importers** – compare suppliers by price tiers, MOQ, years on 1688 and service scores.
- **Market researchers** – track wholesale prices and sales volumes of product categories in China.

### What you get for every offer

| Field | Example |
|---|---|
| `offerId`, `url` | `674028939004`, link to the offer |
| `title` / `titleEn` | Chinese title / English translation (optional) |
| `price`, `currency` | `490`, `CNY` |
| `priceTiers` | `[{ "quantity": "1~499个", "minQuantity": 1, "maxQuantity": 499, "price": 490 }, …]` |
| `minOrderQuantity`, `unit` | `1`, `个` (when the offer has quantity tiers) |
| `imageUrl`, `images` | main product image |
| `salesText`, `salesCount`, `bookedCount`, `repurchaseRate` | `已售100+件`, `100`, …, `30%` |
| `supplierName`, `supplierShopUrl`, `supplierYearsOn1688`, `supplierType` | company name, shop link, `18`, `生产加工` (manufacturer) |
| `province`, `city` | `广东`, `广州市` |
| `serviceScores`, `serviceTags`, `factoryInspection`, `isSuperFactory` | overall / logistics / dispute / goods scores, verified-factory badges |
| `isAd`, `searchQuery`, `page`, `position`, `scrapedAt` | ranking context |

Supplier data is company data (business names and shops), not personal data.

### How to use it

1. Enter one or more **search keywords**. Chinese keywords give the most results (e.g. `手机壳` = phone case, `充电宝` = power bank); English keywords also work.
2. Set **Max offers per keyword** (up to ~2,000 – the limit of 1688 search).
3. Optionally turn on **Translate titles to English**.
4. Click **Start** and download the results as JSON, CSV, Excel or HTML.

#### Input example

```json
{
  "searchQueries": ["充电宝", "yoga mat"],
  "maxItemsPerQuery": 100,
  "translateTitles": true,
  "proxyFallback": true
}
```

#### Output example (real data, shortened)

```json
{
  "offerId": "674028939004",
  "title": "ALLPOWERS户外电源无线储能电源笔记本便携式充电宝 移动电源200w",
  "url": "https://detail.1688.com/offer/674028939004.html",
  "price": 490,
  "currency": "CNY",
  "priceTiers": [
    { "quantity": "1~499个", "minQuantity": 1, "maxQuantity": 499, "unit": "个", "price": 490 },
    { "quantity": "500~4999个", "minQuantity": 500, "maxQuantity": 4999, "unit": "个", "price": 470 },
    { "quantity": "≥5000个", "minQuantity": 5000, "maxQuantity": null, "unit": "个", "price": 450 }
  ],
  "minOrderQuantity": 1,
  "unit": "个",
  "salesText": "已售100+件",
  "salesCount": 100,
  "repurchaseRate": "30%",
  "supplierName": "广州奥鹏能源科技有限公司",
  "supplierShopUrl": "https://aopeng168.1688.com",
  "supplierYearsOn1688": 18,
  "supplierType": "生产加工",
  "province": "广东",
  "city": "广州市",
  "serviceTags": ["深度验厂", "深度验商"]
}
```

#### Use it from code

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("flarewow/1688-scraper").call(run_input={"searchQueries": ["手机壳"], "maxItemsPerQuery": 120})
for offer in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(offer["price"], offer["supplierName"], offer["title"])
```

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('flarewow/1688-scraper').call({ searchQueries: ['phone case'], translateTitles: true });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

### Pricing

**$2 per 1,000 offers** (pay per result). You pay only for offers saved to the dataset. Use **Max cost per run** to cap spending.

### How it stays reliable

The actor reads 1688's own search data. It starts without a proxy and, only if 1688 blocks the request, switches automatically to Apify datacenter proxy and then to residential proxy. If no offers can be returned, the run ends as **FAILED with an explanation** – you never pay for an empty "successful" run.

### Limitations & FAQ

- **How many results per keyword?** 1688 shows up to about 2,000 offers per search.
- **Why is MOQ empty for some offers?** Some offers on 1688 do not show quantity tiers in search results; `minOrderQuantity` is filled when tiers are present.
- **Translation** uses a free machine-translation service and is best effort; if it is unavailable, `titleEn` is empty and the run still succeeds.
- **Prices** are in Chinese yuan (CNY), as shown on 1688, without shipping.

### Integrations

Works with the Apify API, schedules, webhooks and integrations such as **n8n, Make, Zapier, Google Sheets** and the **Apify MCP server** for AI agents.

### Responsible use

The actor collects publicly visible business listings. Use the data in line with 1688's terms and applicable law.

***

### 中文说明

**1688 爬虫**：按关键词（中文或英文）抓取 1688.com 批发商品：价格、阶梯价、起订量、销量、复购率、供应商公司名称、店铺链接、入驻年限、经营模式、所在省市、服务评分和验厂/验商标签。可选将标题翻译成英文。无需登录、无需浏览器。

- 每个关键词最多约 2,000 条结果。
- 先直连，被拦截时自动切换到数据中心代理、再切换到住宅代理；没有结果时运行会以失败结束并说明原因，不会产生“空的成功”。
- 价格：每 1,000 条商品 $2，只按实际结果收费。

# Actor input Schema

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

Keywords to search on 1688.com. Chinese keywords give the best results (e.g. 手机壳), English keywords work too (e.g. phone case).

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

How many offers to save for each keyword. 1688 shows up to about 2,000 results per search.

## `translateTitles` (type: `boolean`):

Adds a titleEn field with a machine translation of each offer title (best effort, free translation service).

## `proxyFallback` (type: `boolean`):

The actor starts without a proxy. If 1688 blocks the requests, it automatically switches to Apify datacenter proxy and then to residential proxy.

## Actor input object example

```json
{
  "searchQueries": [
    "手机壳"
  ],
  "maxItemsPerQuery": 60,
  "translateTitles": false,
  "proxyFallback": true
}
```

# Actor output Schema

## `offers` (type: `string`):

No description

## `errors` (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 = {
    "searchQueries": [
        "手机壳"
    ],
    "maxItemsPerQuery": 60,
    "translateTitles": false,
    "proxyFallback": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("flarewow/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 = {
    "searchQueries": ["手机壳"],
    "maxItemsPerQuery": 60,
    "translateTitles": False,
    "proxyFallback": True,
}

# Run the Actor and wait for it to finish
run = client.actor("flarewow/1688-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 '{
  "searchQueries": [
    "手机壳"
  ],
  "maxItemsPerQuery": 60,
  "translateTitles": false,
  "proxyFallback": true
}' |
apify call flarewow/1688-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,flarewow/1688-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/xU7CieUgYYXZmXD4X/builds/gIEUSvSQSAk863dek/openapi.json
