# 1688.com Scraper (`rp_openpro.ai/alibaba-1688-scraper`) Actor

Scrape 1688.com (Alibaba China wholesale): factory prices, MOQ, quantity price tiers, units sold, repurchase rate and supplier details with scores. Chinese or English keywords. No login. $2.50/1,000.

- **URL**: https://apify.com/rp_openpro.ai/alibaba-1688-scraper.md
- **Developed by:** [Rémi Pelloux](https://apify.com/rp_openpro.ai) (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 $1.75 / 1,000 products

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

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

## What's an Apify Actor?

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

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

## How to integrate an Actor?

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

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

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

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

# README

## 1688.com Scraper — China Wholesale Products, Factory Prices & Suppliers

Scrape **1688.com**, Alibaba's Chinese wholesale marketplace where factories sell at source prices. Enter a keyword (Chinese or English) and get products with **factory price, quantity price tiers, minimum order quantity, units sold, repurchase rate**, product link and photo, plus the **supplier**: company name, manufacturer or wholesaler, province and city, years on 1688 and its **service scores** (goods, logistics, disputes, returns…).

Built for **dropshippers, Amazon / Shopify / TikTok Shop sellers, sourcing agents and importers** who want to find suppliers and compare China wholesale prices without opening 1688 page by page. No 1688 account, no Chinese phone number, no browser.

### What you get

| Data | Field |
|---|---|
| Product title, link, photo | `title`, `url`, `image` |
| Unit price (CNY) and quantity tiers | `price`, `priceTiers` \[{ minQuantity, price, quantityText }] |
| Minimum order | `minOrderQuantity`, `unit` |
| Sales and loyalty | `soldCount` (lower bound of "已售600+件"), `soldText`, `repurchaseRate` |
| Badges, original and in English | `tags` (退货包运费…), `tagsEnglish` (Free return shipping, Buy now pay later…) |
| Supplier | `supplierName`, `supplierType` / `supplierTypeEnglish` (Manufacturer, Wholesaler…), `supplierProvince`, `supplierCity`, `supplierYears`, `supplierShopUrl`, `supplierLoginId`, `supplierMemberId` |
| Supplier service scores (1-5) | `supplierScores` { overall, goods, logistics, consultation, disputes, returns } |
| Sponsored placement | `isAd` |
| Similar products on 1688 | `similarProductsUrl` |
| Search context | `searchQuery`, `position`, `scrapedAt` |

```json
{
    "searchQuery": "手机壳",
    "position": 1,
    "productId": "1013313661573",
    "title": "军工犀甲指环二合一手机套iPhone17ProMax Phone Case多品牌可",
    "url": "https://detail.1688.com/offer/1013313661573.html",
    "price": 4.4,
    "currency": "CNY",
    "minOrderQuantity": 100,
    "unit": "个",
    "priceTiers": [{ "minQuantity": 100, "unit": "个", "price": 4.4, "quantityText": "≥100个" }],
    "soldCount": 600,
    "soldText": "已售600+件",
    "repurchaseRate": "62%",
    "tags": ["退货包运费", "先采后付"],
    "tagsEnglish": ["Free return shipping", "Buy now, pay later"],
    "supplierName": "佛山市森利塑料制品有限公司",
    "supplierType": "生产加工",
    "supplierTypeEnglish": "Manufacturer",
    "supplierProvince": "广东",
    "supplierCity": "佛山市",
    "supplierYears": 6,
    "supplierScores": { "overall": 4, "goods": 5, "logistics": 4.14, "consultation": 3, "disputes": 5, "returns": 5 },
    "supplierShopUrl": "http://shop8uv8m07012423.1688.com",
    "isAd": false
}
```

The dataset has a **Products** view and a **Suppliers** view. Export to JSON, CSV or Excel, or use the API, webhooks, Make, Zapier or n8n.

### How to use

1. Add **search keywords**. Chinese keywords return the most results (e.g. `手机壳` phone case, `蓝牙耳机` Bluetooth earbuds, `瑜伽垫` yoga mat); English keywords work too.
2. Optional: **sort** (relevance, best selling in the last 30 days, price low→high, high→low), **min / max price** in CNY, and whether to **include sponsored products**.
3. Set **Max products per keyword** and run.

#### How many products per keyword?

1688 shows visitors who are not logged in roughly the first 60-100 products of a search. When you ask for more, the actor searches the same keyword again with the other sort orders and in several price ranges, and merges the results without duplicates. In our tests this gave **400 unique products for one keyword** (`蓝牙耳机`) in under 3 minutes. Very narrow keywords have fewer products.

#### Examples

Best-selling Bluetooth earbuds between ¥20 and ¥200, no ads:

```json
{
    "queries": ["蓝牙耳机"],
    "sortBy": "bestSelling",
    "minPrice": 20,
    "maxPrice": 200,
    "includeAds": false,
    "maxProductsPerQuery": 200
}
```

Supplier research for several products at once:

```json
{
    "queries": ["瑜伽垫", "保温杯", "宠物牵引绳"],
    "maxProductsPerQuery": 300
}
```

### FAQ

**Do I need a 1688 account or a Chinese phone number?**
No. The actor reads the data 1688 shows to any visitor.

**Which proxy should I use?**
1688 often asks datacenter IPs for a captcha, so residential proxies (the default) are the most reliable. With the plain Apify Proxy the actor switches to residential by itself when that happens.

**Are prices per piece?**
`price` is the unit price 1688 shows in the search results (CNY). `priceTiers` gives the price per minimum quantity when the supplier sets one, e.g. ≥100 pieces.

**Can I get the full product page (all SKUs, specs, description)?**
Not in this version: it scrapes search results, which carry price, sales and supplier data. Use `url` to open a product.

### Related actors

- [Google Maps Scraper — Emails & Socials Included](https://apify.com/rp_openpro.ai/google-maps-scraper) — local businesses with emails and phones.
- [Amazon Product Scraper](https://apify.com/rp_openpro.ai/amazon-ultimate-scraper) — compare 1688 factory prices with Amazon retail prices.
- [TikTok Ultimate Scraper](https://apify.com/rp_openpro.ai/tiktok-ultimate-scraper) — spot trending products on TikTok, then source them on 1688.

# Actor input Schema

## `queries` (type: `array`):

Products to find on 1688.com. Chinese keywords (e.g. 手机壳 for phone case) return the most results; English keywords work too.

## `maxProductsPerQuery` (type: `integer`):

0 = as many as 1688 shows. 1688 shows visitors about 60-100 products per search, so above that the actor also searches the other sort orders and price ranges and merges them (usually 200-500 unique products per keyword).

## `sortBy` (type: `string`):

Order of the first products returned.

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

Only products from this unit price, in Chinese yuan.

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

Only products up to this unit price, in Chinese yuan.

## `includeAds` (type: `boolean`):

1688 mixes paid placements into results. They are flagged with isAd either way.

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

1688 asks datacenter IPs for captchas often; residential proxies are the most reliable. With the plain Apify Proxy the actor switches to residential by itself when that happens.

## Actor input object example

```json
{
  "queries": [
    "手机壳",
    "yoga mat"
  ],
  "maxProductsPerQuery": 100,
  "sortBy": "relevance",
  "includeAds": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `products` (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 = {
    "queries": [
        "手机壳",
        "yoga mat"
    ],
    "maxProductsPerQuery": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rp_openpro.ai/alibaba-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 = {
    "queries": [
        "手机壳",
        "yoga mat",
    ],
    "maxProductsPerQuery": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("rp_openpro.ai/alibaba-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 '{
  "queries": [
    "手机壳",
    "yoga mat"
  ],
  "maxProductsPerQuery": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call rp_openpro.ai/alibaba-1688-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rp_openpro.ai/alibaba-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/1fQt5xrPuhHAHs7wa/builds/YrfmRaXEf1hkOFEbz/openapi.json
