# 1688 Wholesale Scraper — Prices, MOQ, SKUs & Suppliers (`sourcelab/1688-wholesale-scraper`) Actor

Scrape 1688.com wholesale products by keyword or offer ID: tiered wholesale prices, MOQ, SKU variants, stock, supplier verification. No login. Pay per product.

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

## Pricing

from $3.43 / 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 Wholesale Scraper — Prices, MOQ, SKUs & Suppliers

Get structured wholesale data from **1688.com** (Alibaba's domestic China marketplace) without a Chinese phone number, Alipay account or login. Search by keyword (Chinese or English) or pass offer IDs, and receive tiered wholesale prices, MOQ, SKU variants, stock, sales and supplier verification — as JSON, CSV or Excel, or straight into your own code through the API.

**You pay per product delivered**, plus a $0.00005 start fee per run.

### What you get

| field | example |
|---|---|
| `offerId`, `url`, `title`, `titleEn` | 745126303581, "无线蓝牙耳机…" |
| `priceMin`, `priceMax`, `currency` | 12.5, 18.0, CNY |
| `moq` | 2 |
| `tieredPrices[]` | `{from: 2, price: 18.0}`, `{from: 100, price: 15.2}`, `{from: 1000, price: 12.5}` |
| `skus[]` | colour / size variants with price, stock and image |
| `stock`, `sales` | 48 200, 12 870 |
| `images[]`, `attributes[]` | gallery URLs, spec table |
| `supplierName`, `supplierProvince`, `supplierYears`, `superFactory` | 深圳市…电子有限公司, 广东, 6, true |

### How to use

1. Enter one keyword per line (`蓝牙耳机`, `phone case`) **or** paste offer IDs / detail URLs.
2. Set the number of products per keyword, sort order and optional price / Super Factory filters.
3. Run. Results appear in the dataset as they are extracted; export them from the **Storage** tab or via API.

### Use cases

- **Sourcing**: shortlist factories by tiered price, MOQ and supplier verification (`superFactory`, `supplierYears`, `supplierProvince`) before contacting them.
- **Price monitoring**: rerun the same offer IDs on a schedule and track `priceMin` / `priceMax`, `stock` and `sales`.
- **Dropshipping and margin checks**: compare the 1688 factory price with what the same kind of product sells for on Temu, AliExpress or Amazon.
- **Market research**: what sells for a keyword in China — sales counts, price ranges, where the suppliers are.

### How much does it cost?

Pay per event: you pay only for results delivered. Platform usage (compute, residential proxy) is included. Failed, blocked or removed items are never charged.

| What you get | Event | Price | Per 1,000 |
|---|---|---|---|
| Product with full detail (`fetchDetails` on) | `product` | $0.0049 | $4.90 |
| Search row only (`fetchDetails` off) | `listing` | $0.0015 | $1.50 |
| Actor start | `apify-actor-start` | $0.00005 per GB of memory, once per run | — |

Example: 1 keyword × 40 products with full detail ≈ 40 × $0.0049 = **$0.20**; the same as search rows only ≈ **$0.06**.

Set a maximum cost per run when you start the Actor (Console or API): it stops cleanly when the limit is reached.

### Input example

```json
{
  "keywords": [
    "蓝牙耳机"
  ],
  "offerIds": [
    "905559094884"
  ],
  "maxItemsPerKeyword": 40,
  "sortBy": "relevance",
  "fetchDetails": true
}
```

### Output example

Real output from a run on 13 Oct 2026 (selected fields, arrays shortened):

```json
{
  "offerId": "905559094884",
  "title": "适用苹果17简约纯色肤感手机壳iphone18pro硅胶防摔13全包保护套",
  "priceMin": 1.98,
  "priceMax": 1.98,
  "currency": "CNY",
  "moq": 1,
  "tieredPrices": [
    {
      "from": 1,
      "price": 1.98
    },
    {
      "from": 500,
      "price": 1.5
    },
    {
      "from": 9999,
      "price": 1.3
    }
  ],
  "sales": 100000,
  "stock": 3233623,
  "supplierName": "广州欧诺斯科技有限公司",
  "supplierMemberId": "b2b-35345497994841a",
  "supplierShopUrl": "https://shop2g62z018l3562.1688.com",
  "images": [
    "https://cbu01.alicdn.com/img/ibank/O1CN01jfi5m12MG09ibSxzp_!!3534549799-0-cib.jpg"
  ],
  "url": "https://detail.1688.com/offer/905559094884.html"
}
```

### FAQ

**Do I need an account on the marketplace?**
No. The Actor reads public pages and endpoints: no login, no cookies, no phone number.

**Can I search in English?**
Yes. English keywords are translated to Chinese before the search; Chinese keywords usually return more relevant offers.

**What currency are prices in?**
CNY (Chinese yuan), as published on 1688. `tieredPrices` lists the quantity breaks.

**Why did I get fewer products than requested?**
You are charged only for products delivered. 1688 returns fewer offers for narrow keywords, and products that cannot be opened are skipped; the run statistics are in the `STATS` record of the key-value store.

**Can I run it on a schedule or from my code?**
Yes. Schedule it in Apify Console, call it through the Apify API (JavaScript, Python, HTTP), or connect it to Make, Zapier, n8n or Google Sheets. Export as JSON, CSV or Excel.

### Why 1688 and not Alibaba.com

1688 is where Chinese factories sell to Chinese resellers: the same products that reach Alibaba.com, AliExpress, Temu or Amazon, typically 20-50 % cheaper and with lower MOQs. The site is Chinese-only and blocks datacenter IPs, which is exactly what this Actor takes care of.

### Limits and good practice

- Scrape only what you need; 1688 rate-limits aggressive crawling.
- Data is public marketplace information (product listings and supplier profiles). No personal data is collected.
- Residential proxies are used by default; a run of 1 000 products transfers roughly 30-60 MB.

### Chain it with

| Take this output field | Feed it to | Input field |
|---|---|---|
| `supplierMemberId` or `supplierShopUrl` | [1688 Supplier Scraper](https://apify.com/sourcelab/1688-supplier-scraper) | `shops` |
| `images[0]` | [1688 Image Search](https://apify.com/sourcelab/1688-image-search) | `imageUrls` (find other factories selling the same product) |
| `url` (or `offerId`) | [1688 Supplier Scraper](https://apify.com/sourcelab/1688-supplier-scraper) | `shops` (the supplier is resolved from the product) |

Values are accepted exactly as this Actor outputs them (full URL or bare ID). In code, start the next Actor with the dataset of this run, or use an Apify integration (*Actor-to-Actor*) to chain them automatically.

#### More SourceLab scrapers

- **[1688 Supplier Scraper](https://apify.com/sourcelab/1688-supplier-scraper)** — found a good product? get the supplier's full catalog and company profile (Trade Pass years, buyer retention rate, certificates).
- **[1688 Image Search](https://apify.com/sourcelab/1688-image-search)** — no Chinese keyword? search 1688 with a product photo instead and get the visually similar factory offers.
- **[Alibaba.com Product Scraper](https://apify.com/sourcelab/alibaba-product-scraper)** — the export side of Chinese factories: USD quantity price tiers, MOQ, lead times, certifications and supplier credentials on Alibaba.com.
- **[Taobao & Tmall Product Scraper](https://apify.com/sourcelab/taobao-product-scraper)** — compare with Chinese retail on Taobao & Tmall: current price, seller DSR scores and credit level, rating breakdown.
- **[AliExpress Scraper](https://apify.com/sourcelab/aliexpress-product-scraper)** — check the retail price abroad: per-variant price and stock, shipping fees and delivery days to your country, review summary.
- **[Temu Product Scraper](https://apify.com/sourcelab/temu-product-scraper)** — see what similar products sell for on Temu in 20 countries: price, rating, units sold and discount from category pages.
- **[JD.com Product Scraper](https://apify.com/sourcelab/jd-product-scraper)** — compare with China's B2C retail on JD.com: real CNY price (when confirmed), UPC barcode, specification table, self-operated flag.

### Support

Open an issue on the Actor's page. Feature requests are welcome.

# Actor input Schema

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

Chinese or English keywords, one search each (e.g. 蓝牙耳机, phone case). English is translated to Chinese before searching.

## `offerIds` (type: `array`):

1688 offer IDs (e.g. 905559094884) or detail URLs (https://detail.1688.com/offer/905559094884.html). Fetched directly by ID, in addition to any keywords. Clear the keywords to fetch only these offers.

## `maxItemsPerKeyword` (type: `integer`):

Upper bound per keyword. You are charged only for products actually delivered.

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

Sort order of search results.

## `priceMin` (type: `number`):

Minimum unit price in CNY (search filter).

## `priceMax` (type: `number`):

Maximum unit price in CNY (search filter).

## `superFactoryOnly` (type: `boolean`):

Keep only suppliers with the Super Factory (超级工厂) badge.

## `fetchDetails` (type: `boolean`):

Opens each product page for tiered prices, SKU matrix, stock and supplier scores. Off = search listing only (cheaper event).

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

1688 blocks datacenter IPs. Residential proxies are required.

## Actor input object example

```json
{
  "keywords": [
    "蓝牙耳机",
    "phone case"
  ],
  "offerIds": [
    "905559094884",
    "https://detail.1688.com/offer/905559094884.html"
  ],
  "maxItemsPerKeyword": 40,
  "sortBy": "relevance",
  "superFactoryOnly": false,
  "fetchDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `products` (type: `string`):

No description

## `productsCsv` (type: `string`):

No description

## `stats` (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": [
        "蓝牙耳机"
    ],
    "offerIds": [
        "905559094884"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sourcelab/1688-wholesale-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": ["蓝牙耳机"],
    "offerIds": ["905559094884"],
}

# Run the Actor and wait for it to finish
run = client.actor("sourcelab/1688-wholesale-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 '{
  "keywords": [
    "蓝牙耳机"
  ],
  "offerIds": [
    "905559094884"
  ]
}' |
apify call sourcelab/1688-wholesale-scraper --silent --output-dataset

```

## MCP server setup

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