# 1688 Scraper & API: Product Search, Price Tiers, Suppliers (`quarra/1688-scraper`) Actor

1688 scraper for 1688.com, China's wholesale marketplace: search by keywords or a 1688 search URL, or paste product links. Price per quantity tier, minimum order, every variant with price and stock, specifications, sales and supplier. No 1688 account.

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

## Pricing

from $5.00 / 1,000 product with full details

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 Scraper (阿里巴巴 1688): wholesale products, price tiers, suppliers

Scrape 1688.com, China's wholesale marketplace, without a 1688 account or cookies. Search by keywords (Chinese or
English) or paste a 1688 search URL, or paste product links. Get the price per quantity tier, the minimum order, every
variant with its price and stock, the specifications, sales, rating, and who sells it: factory or trading company,
repeat buyer rate, and years on 1688 for search results. Export as JSON, CSV or Excel, or read it through the Apify API.

**$2.50 per 1,000 search results, $5 per 1,000 products with full details**, plus a small start fee per run. Offers
that do not exist, and inputs that fail, are not charged.

### What it is for

- Find suppliers for a product and compare them: price at your quantity, minimum order, factory or trader, repeat
  buyers, sales.
- Check the real wholesale price behind a product sold on Amazon, AliExpress, Shopee or TikTok Shop.
- Follow prices, stock and sales of a list of offers over time (schedule the run, compare the datasets).
- Feed a sourcing tool, a spreadsheet or an AI agent with clean, structured 1688 data.

### Measured on 15 October 2026

| Run | Result | Time |
|---|---|---|
| Search 雨伞 (umbrella), sorted by sales, Max results per search 2,000 | 2,000 search results, no duplicate | 44 s |
| Searches 收纳盒 and 连衣裙, full details | 150 products with full details | 83 s |
| Search 手机壳 (phone case), 500 results | 500 search results | 23 s |

1688 shows at most 2,000 results for one search: to cover more, split it into several searches (more precise
keywords, price ranges).

### Quick start

1. Type keywords into **Search keywords or search URLs** (one search per line), or paste product links into
   **Product URLs or offer IDs**.
2. Set **Max products** and, for searches, **Max results per search**.
3. Tick **Full details for search results** if you want price tiers, variants and specifications for every search
   result.
4. Click **Start** and read the products in the run's **Output** tab.

Like any Apify Actor, it can also be run and read through the Apify API, scheduled, and connected to webhooks, Make,
Zapier, n8n or Apify's MCP server for AI agents.

### Inputs

- **Search keywords or search URLs**: keywords (Chinese works best on 1688: 手机壳 rather than phone case), or a 1688
  search URL pasted as is (`https://s.1688.com/selloffer/offer_search.htm?keywords=…`): its price range and sort are
  used too, unless you set them in the fields below.
- **Product URLs or offer IDs**: `https://detail.1688.com/offer/832596583777.html`, the mobile link, or the offer ID
  alone (`832596583777`). Each product gets the full details.
- **Max products**: total products the run delivers, counted exactly.
- **Max results per search**: up to 2,000.
- **Full details for search results**: off by default (search results only, charged as search results); on, every
  search result also gets its full details (charged as products).
- **Sort**: best match, sales, price low to high, price high to low.
- **Min price / Max price**: in Chinese yuan (CNY), for searches. Every search result is checked against your range;
  with full details, a product is kept when part of its prices (tiers, variants) falls in it. Product URLs you paste
  are not filtered.

Example, through the API:

```json
{
  "searchQueries": ["收纳盒", "蓝牙耳机"],
  "productUrls": ["https://detail.1688.com/offer/832596583777.html"],
  "scrapeDetails": false,
  "maxResultsPerSearch": 500,
  "sort": "sales",
  "maxPrice": 50,
  "maxItems": 2000
}
```

### Output

One record per product. A product with full details, from 15 October 2026 (lists shortened here):

```json
{
  "type": "product",
  "status": "ok",
  "detailLevel": "full",
  "offerId": "832596583777",
  "url": "https://detail.1688.com/offer/832596583777.html",
  "title": "秋装新款新中式国风水墨花花拼接长袖连衣裙显瘦设计感收腰长裙子",
  "price": 33,
  "priceRange": "31.00-33.00",
  "currency": "CNY",
  "unit": "件",
  "priceTiers": [
    {
      "minQuantity": 1,
      "price": 33
    },
    {
      "minQuantity": 100,
      "price": 32
    },
    {
      "minQuantity": 300,
      "price": 31
    }
  ],
  "minOrderQuantity": 1,
  "mixedOrder": {
    "minQuantity": 1,
    "minAmount": null
  },
  "stock": 907642,
  "sold": 5648,
  "soldText": "5600+",
  "soldPeriod": "一年内",
  "rating": 3.7,
  "positiveReviewRate": 65.9,
  "reviewCount": 4513,
  "reviewTags": [
    {
      "tag": "服务不错",
      "count": 527
    },
    {
      "tag": "价格很便宜",
      "count": 503
    }
  ],
  "options": [
    {
      "name": "颜色",
      "values": [
        {
          "name": "图片色【长款】",
          "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01k9ga3l1kLzp97VL8B_!!2216448154668-0-cib.jpg"
        }
      ]
    },
    {
      "name": "尺码",
      "values": [
        {
          "name": "M【建议80-100斤】",
          "imageUrl": null
        }
      ]
    }
  ],
  "variants": [
    {
      "skuId": "5772884070046",
      "options": [
        "图片色【短款】",
        "XL【建议115-130斤】"
      ],
      "price": 33,
      "listPrice": null,
      "stock": 76208
    }
  ],
  "attributes": [
    {
      "name": "款式",
      "value": "套头款"
    },
    {
      "name": "主面料成分",
      "value": "涤纶（聚酯纤维）"
    },
    {
      "name": "面料名称",
      "value": "针织面料"
    }
  ],
  "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01GFh0KA1kLzpA9z4hE_!!2216448154668-0-cib.jpg",
  "images": [
    "https://cbu01.alicdn.com/img/ibank/O1CN01GFh0KA1kLzpA9z4hE_!!2216448154668-0-cib.jpg",
    "https://cbu01.alicdn.com/img/ibank/O1CN017W3nXr1kLzp97JSVE_!!2216448154668-0-cib.jpg"
  ],
  "videoUrl": "https://cloud.video.taobao.com/play/u/2216448154668/p/2/e/6/t/1/481000742440.mp4",
  "descriptionUrl": "https://itemcdn.tmall.com/1688offer/icoss3582759695b5b87994d01e1466",
  "labels": [
    "一件代发"
  ],
  "dropshipping": true,
  "sevenDayReturns": true,
  "shippingFee": 4,
  "dispatchTime": "承诺48小时发货·常发中通快递",
  "categoryId": "1031910",
  "categoryName": "连衣裙",
  "listedAt": "2024-09-08T18:26:59Z",
  "updatedAt": "2026-10-14T00:44:10Z",
  "topCategoryId": "10166",
  "supplierName": "佛山市禅城区凯轩旺服饰厂(个体工商户)",
  "supplierLoginId": "凯轩旺服饰厂",
  "supplierMemberId": "b2b-22164481546686a447",
  "supplierUrl": "https://shop91j07u5570566.1688.com",
  "supplierTrustPass": true,
  "supplierType": "factory",
  "supplierServiceScore": 4,
  "supplierRepeatBuyerRate": 59.85,
  "input": "连衣裙",
  "inputType": "search",
  "searchQuery": "连衣裙",
  "searchPage": 1,
  "searchPosition": 55,
  "scrapedAt": "2026-10-15T02:24:36.340Z"
}
```

A search result has the data 1688 shows in its search: title, price, units sold, orders booked, repurchase rate,
images, the supplier's province and city, years on 1688, business type, factory inspection, supplier scores, service
tags, and whether the card is sponsored (`isAd`).

Fields that need a word of explanation:

- Prices are in Chinese yuan (CNY), as on 1688, before shipping.
- `priceTiers`: the price per quantity, from `minQuantity` up. Empty when the price depends on the variant only:
  then each variant has its own `price`.
- `price`: for a product with full details, the price at the minimum order (first tier), or the lowest variant price.
- `sold`: units sold as a number, read from 1688's text (`soldText`, e.g. 5600+); `soldPeriod` says over which period.
- `supplierType`: factory, trading company and so on, as 1688 classifies the supplier. `supplierRepeatBuyerRate`:
  share of the supplier's buyers who ordered again, in percent.
- `descriptionUrl`: the long description of the product (HTML with images), to download if you need it.
- `listedAt` / `updatedAt`: when the offer was listed and last changed.
- `status`: `ok` (delivered, charged). An offer that does not exist or was taken down gets a record with `status`
  `unavailable`, free. An offer listed without any price gets `noPrice`, free. An input that fails gets an `error` record, free: `error` says why, `retryable` says if a
  later run may work.
- `detailLevel`: `full` or `search`. When full details were asked but 1688 did not serve them at that moment, you get
  the search data with a `detailsNote`, charged as a search result.

Titles, options and specifications are in Chinese, as on 1688.

The run summary (products per input, notes, why the run stopped) is the `OUTPUT` record of the run's key-value store.

### Pricing

Pay per event:

| Event | Price |
|---|---|
| Search result | $2.50 per 1,000 |
| Product with full details | $5 per 1,000 |
| Run start | $0.005 per GB of memory (1 GB minimum; $0.005 at the default 512 MB) |

Never charged: offers that do not exist, offers without a price, error records, duplicates (a product found by two searches is delivered
once). Set **Maximum cost per run** in the run options and the run stops before going over it.

### Limits

- At most 2,000 results per search, as on 1688.
- 1688 sometimes serves a page of results empty; the run asks for it again. If it stays empty, the run skips it and
  goes on; two empty pages in a row end that search, with a note in the run summary.
- Prices for members only, coupons and shipping costs outside China are not collected.

### FAQ

**Do I need a 1688 account or cookies?** No.

**Can I search in English?** Yes, but 1688 is a Chinese site: Chinese keywords give more and better results.

**What if the run is restarted by the platform (migration or reboot)?** It resumes where it was: products already in
the dataset are not delivered or charged again.

**Is it legal?** It collects public product and supplier information shown to any visitor of 1688. Check the rules
that apply to your use of the data.

**Does the Actor send anything to Quarra?** Only when a run fails or runs out of time: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your input, your results, your account or the run ID.

# Actor input Schema

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

One per line: keywords in Chinese (手机壳) or English, or a 1688 search URL pasted as is (s.1688.com/selloffer/offer_search.htm?keywords=…). Each search returns products in 1688 order, up to 'Max results per search'.

## `productUrls` (type: `array`):

One per line: 1688 product URLs (detail.1688.com/offer/….html, mobile links) or offer IDs. Each gets the full details.

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

Total number of products delivered by the run (search results and products with full details), counted exactly.

## `maxResultsPerSearch` (type: `integer`):

Products per search, at most 2,000 (1688 shows no more than 2,000 results for one search).

## `scrapeDetails` (type: `boolean`):

Off: search results with title, price, sales, repurchase rate, images and supplier (charged as search results). On: every search result also gets the full product details: price tiers, minimum order, every variant with price and stock, specifications, rating (charged as products).

## `sort` (type: `string`):

Order of search results.

## `minPrice` (type: `number`):

Lowest price, in Chinese yuan.

## `maxPrice` (type: `number`):

Highest price, in Chinese yuan.

## Actor input object example

```json
{
  "searchQueries": [
    "手机壳"
  ],
  "productUrls": [
    "https://detail.1688.com/offer/987518482392.html"
  ],
  "maxItems": 20,
  "maxResultsPerSearch": 20,
  "scrapeDetails": false,
  "sort": "relevance"
}
```

# Actor output Schema

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

Every product with all its fields, and free error records with the reason.

## `overview` (type: `string`):

One line per product: title, price, minimum order, sales, rating, supplier.

## `summary` (type: `string`):

Counts per input, why the run stopped, unavailable products and errors.

# 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": [
        "手机壳"
    ],
    "productUrls": [
        "https://detail.1688.com/offer/987518482392.html"
    ],
    "maxItems": 20,
    "maxResultsPerSearch": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("quarra/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": ["手机壳"],
    "productUrls": ["https://detail.1688.com/offer/987518482392.html"],
    "maxItems": 20,
    "maxResultsPerSearch": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("quarra/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": [
    "手机壳"
  ],
  "productUrls": [
    "https://detail.1688.com/offer/987518482392.html"
  ],
  "maxItems": 20,
  "maxResultsPerSearch": 20
}' |
apify call quarra/1688-scraper --silent --output-dataset

```

## MCP server setup

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