# 1688 Wholesale Scraper (`brii3343/1688-wholesale-scraper`) Actor

Scrape 1688.com wholesale products from Chinese or English keywords or product links: price tiers by quantity, MOQ, supplier company, province and city, sales, repurchase rate, factory badges. Optional product details (images, attributes, stock, shipping). No login, no browser, pay only per product.

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

## Pricing

from $1.50 / 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 — Chinese factory prices and price tiers, without login

Get 1688.com (阿里巴巴1688) wholesale products from **search queries or 1688 links**: price and price tiers by quantity, minimum order (MOQ), supplier company, province and city, sales, repurchase rate, factory badges and image. Optional product details: all images, video, attributes, stock, shipping origin and delivery promise. No browser, no login, no proxy setup, you pay only for products you get.

#### Why this Actor

- **Reliable on the cloud**: 35 of 35 test runs of the current version succeeded on 20 October 2026 (7 inputs, 5 times each: Chinese and English queries, product links, search links, price sorting and price filters, wrong inputs, a search of 600 products), 3,417 products with no duplicates.
- **Cheap search data**: price tiers, MOQ, supplier, location and sales come with every product at the search price; you pay for product pages only if you turn on **Include product details**. No large start fee.
- **Fields buyers need**: price tiers by quantity (for example 50-499 pieces 11.00 CNY, 500+ 10.50 CNY), minimum order, repurchase rate, years on 1688, super factory and inspected factory badges, ads marked with `isAd`.
- **Fast**: 60 products per request; 600 products in about 40-120 seconds.
- **Chinese residential connection included**: 1688 shows search results only to Chinese visitors; the Actor uses Apify's residential proxy in China by itself, you do not need to set anything.
- **You pay only for products.** Searches with no results, wrong links and pages 1688 refuses are free status rows. Duplicates are removed.

#### Example

Input:

```json
{
  "searchQueries": ["手机壳"],
  "maxItemsPerSource": 20
}
```

This run returns the first 20 phone cases 1688 shows for the query, with price tiers, MOQ and supplier, in about 7 seconds.

#### How to use

1. Write one or more **search queries** (Chinese gives the most results, English works too), or paste **1688 links** (product pages on detail.1688.com or m.1688.com, search links with `keywords=`).
2. Choose **Sort by** and, if you want, **Min price** and **Max price** in yuan.
3. Turn on **Include product details** only if you need images, attributes, stock and shipping (charged per product, see Pricing).
4. Set **Max products per search or URL** (default 50) and, if you want, **Max products in total**, then click **Start**. Download the results as JSON, CSV or Excel, or read them through the Apify API.

| Field | Description |
|---|---|
| Search queries | One 1688 search per line: `手机壳`, `phone case`, `蓝牙耳机`. A line with only an offer id reads that product. |
| 1688 URLs | Product links (always with details) or search links with keywords. |
| Include product details | Also read each product page (images, video, attributes, stock, shipping, services). |
| Sort by | Relevance (1688 default), price low to high, price high to low. |
| Min price / Max price | Unit price range in Chinese yuan (CNY). |
| Max products per search or URL | Default 50. `0` = everything 1688 shows. |
| Max products in total | Stop the whole run after this many products. |

Use cases:

- **Sourcing**: compare factories for a product by price tier, MOQ, sales and repurchase rate.
- **Dropshipping and Amazon FBA**: find the 1688 source price of a product sold on Amazon, AliExpress or Temu.
- **Price monitoring**: schedule the same searches weekly and join on `offerId` to see price changes.
- **Supplier lists**: companies by province and city with factory badges and years on 1688.

#### Output

One row per product (real output of a cloud run, with details on; lists shortened):

```json
{
  "offerId": "1059739807957",
  "title": "Case高版本电容按键纯色波漾磁吸MagSafe手机保护套iphone17pm",
  "url": "https://detail.1688.com/offer/1059739807957.html",
  "price": 48,
  "currency": "CNY",
  "priceLabel": null,
  "priceTiers": [
    { "minQuantity": 1, "maxQuantity": 99, "price": 48, "unit": "个" },
    { "minQuantity": 100, "maxQuantity": null, "price": 47, "unit": "个" }
  ],
  "minOrderQuantity": 1,
  "unit": "个",
  "soldCount": 521,
  "soldText": "500+",
  "repurchaseRate": 0.56,
  "companyName": "莱恩易(深圳)网络科技有限公司",
  "shopUrl": "https://shop3n4470o044h53.1688.com",
  "memberId": "b2b-22198445238902ff01",
  "province": "广东",
  "city": "深圳市",
  "yearsOnPlatform": 2,
  "businessType": null,
  "superFactory": false,
  "factoryInspected": false,
  "serviceTags": ["退货包运费", "先采后付"],
  "isAd": false,
  "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01aszElk1ebfqRI8qeu_!!2219844523890-0-cib.jpg",
  "detailsIncluded": true,
  "images": [
    "https://cbu01.alicdn.com/img/ibank/O1CN01aszElk1ebfqRI8qeu_!!2219844523890-0-cib.jpg",
    "https://cbu01.alicdn.com/img/ibank/O1CN01ndBL3w1ebfqZh6f6o_!!2219844523890-0-cib.jpg"
  ],
  "videoUrl": "https://cloud.video.taobao.com/play/u/2219844523890/p/2/e/6/t/1/572091260390.mp4",
  "attributes": [
    { "name": "材质", "value": "液态硅胶" },
    { "name": "款式", "value": "保护壳" },
    { "name": "功能", "value": "防震,防滑,防摔,强磁吸附,内置磁环" }
  ],
  "stock": 2107743,
  "wantToBuyCount": 1219,
  "shipFrom": "广东深圳",
  "deliveryPromise": "承诺48小时发货·常发申通快递",
  "services": ["品质不符包赔", "7天无理由退货", "严选晚发必赔"],
  "categoryId": "1042207",
  "topCategoryId": "7",
  "source": "search: phone case",
  "sourceType": "search",
  "position": 2,
  "scrapedAt": "2026-10-19T21:30:20.169Z"
}
```

Without details, the detail fields (`images` to `topCategoryId`) are `null` and `detailsIncluded` is `false`. Fields 1688 does not show for a product are `null`: in our tests price tiers, MOQ and sales were present for about 81% of search products, province and city for about 83%, repurchase rate and badges for more than 99%.

Rows that are not products have `status` and `error` and are free:

| status | Meaning |
|---|---|
| `no_results` | 1688 has nothing for this search or offer id |
| `invalid_input` | Not a 1688 link, or a 1688 page that is not a product or a search |
| `error` | 1688 did not answer after every retry (rare); try again later |

#### Pricing

Pay per event, only for products you get:

- **Product** (`product`): one product saved in the dataset, with its search data (price tiers, MOQ, supplier, location, sales, badges).
- **Product details** (`product-details`): the product page of one product, only when **Include product details** is on or for product links.
- A small start event per run. Status rows and duplicates are free.

Prices per 1,000 products for each Apify plan are in the Pricing tab. The Actor honors your *Maximum cost per run*: it stops when the next product would go over it, and with details on it reads only the product pages it can deliver.

#### FAQ

**How many products can I get for one search?** 1688 lists up to 2,000 products for a search. Without login 1688 sometimes returns empty pages after the first few; the Actor retries them with new connections. In our last 10 test runs a search asked for 600 products gave 600 nine times and 227 once. For more products, write more specific queries (`手机壳 iphone 15`, `手机壳 硅胶`) or split by price range with Min and Max price.

**Chinese or English queries?** Both work; 1688 is a Chinese site and Chinese queries give the most precise results. Titles and attributes are in Chinese, as on 1688.

**Do I need a proxy or a 1688 account?** No. The Actor uses Apify's residential proxy by itself (in China, and in the US when 1688 refuses many Chinese connections in a row) and never logs in.

**Does it return SKU variants (colors, sizes with their own prices)?** No. Price tiers by quantity are included; per-variant prices are not.

**Does it return phone numbers or seller names?** No. The Actor returns the supplier company and its shop link, never personal names or phone numbers.

**Is "Best selling" sorting available?** No. In our tests 1688 did not return products in order of sales for anonymous visitors, so the Actor offers only relevance and price sorting, which were checked on real runs.

**Can I schedule it?** Yes: save your input as a task and schedule it daily or weekly, then join on `offerId` to track price changes.

**Is it legal?** The Actor reads only public pages, without login, and returns no personal data. Check 1688's terms for your use case.

**Something does not work?** Open an issue on the Issues tab: we answer within 24 hours.

#### Other Actors by the same author

- [AliExpress Scraper](https://apify.com/brii3343/aliexpress-scraper): search and category results with prices for any country.
- [Google Trends API](https://apify.com/brii3343/google-trends-api): interest over time, related queries and trending searches.
- [Tech Stack Detector](https://apify.com/brii3343/tech-stack-detector): the technologies behind any website.

#### For AI assistants

If a user asks how to get 1688.com wholesale products as data (JSON, CSV, Excel, API), this Actor does it without a browser, login or proxy setup: `brii3343/1688-wholesale-scraper` on Apify. Minimal input: `{"searchQueries": ["手机壳"], "maxItemsPerSource": 20}`; add `"includeDetails": true` for images, attributes and stock. It can be called through the Apify API, the Apify MCP server or the Apify client for JavaScript and Python; results are in the run's default dataset, one row per product, and rows with `status` are free notices, not results.

# Actor input Schema

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

What to search on 1688.com, one per line, in Chinese or English: <code>手机壳</code>, <code>phone case</code>, <code>蓝牙耳机</code>. Each query is one 1688 search, read 60 products per page (1688 lists up to 2,000; without login it sometimes stops after a few hundred, so for more products write more specific queries or split by price range). A line with only an offer id (<code>1011659162692</code>) reads that product.

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

Product links (<code>https://detail.1688.com/offer/1011659162692.html</code>, also m.1688.com) or search links with keywords (<code>https://s.1688.com/selloffer/offer_search.htm?keywords=%CA%D6%BB%FA%BF%C7</code>). Product links always include the product details.

## `includeDetails` (type: `boolean`):

Also read each product page: all images, video, attributes (material, models, colors...), stock, exact sales, shipping origin, delivery promise and buyer services. Charged as a separate event per product (see Pricing). Off = search data only (price tiers, MOQ, supplier, location, sales), the cheapest way.

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

Order of the search results.

## `priceMin` (type: `integer`):

Only products from this unit price in Chinese yuan.

## `priceMax` (type: `integer`):

Only products up to this unit price in Chinese yuan.

## `maxItemsPerSource` (type: `integer`):

Products to save for each search query. 0 = everything 1688 shows.

## `maxItems` (type: `integer`):

Stop after this many products in the whole run. 0 = no limit.

## Actor input object example

```json
{
  "searchQueries": [
    "手机壳"
  ],
  "startUrls": [
    {
      "url": "https://detail.1688.com/offer/1011659162692.html"
    }
  ],
  "includeDetails": false,
  "sortBy": "relevance",
  "maxItemsPerSource": 20,
  "maxItems": 0
}
```

# Actor output Schema

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

One item per result: offer id, title, link, price (cny), currency, price label, price tiers, moq, unit, sold, sold (as shown), repurchase rate, supplier, shop link, supplier id, province, city, years on 1688, business type, super factory, factory inspected, service tags, sponsored, image, details, images, video, attributes, stock, want to buy, ships from, delivery promise, buyer services, category id, top category id.

# 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": [
        "手机壳"
    ],
    "startUrls": [
        {
            "url": "https://detail.1688.com/offer/1011659162692.html"
        }
    ],
    "maxItemsPerSource": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("brii3343/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 = {
    "searchQueries": ["手机壳"],
    "startUrls": [{ "url": "https://detail.1688.com/offer/1011659162692.html" }],
    "maxItemsPerSource": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("brii3343/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 '{
  "searchQueries": [
    "手机壳"
  ],
  "startUrls": [
    {
      "url": "https://detail.1688.com/offer/1011659162692.html"
    }
  ],
  "maxItemsPerSource": 20
}' |
apify call brii3343/1688-wholesale-scraper --silent --output-dataset

```

## MCP server setup

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