# 1688.com 阿里巴巴 Wholesale Scraper - MOQ Prices & Suppliers (`clover_folktale/1688-scraper`) Actor

Search 1688.com (阿里巴巴) wholesale products by keyword, Chinese or English. Get price, MOQ tier prices, order and sales counts, supplier name, service scores, repurchase rate, factory verification and location for sourcing and dropshipping. No login or cookies needed. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/clover_folktale/1688-scraper.md
- **Developed by:** [Silkline](https://apify.com/clover_folktale) (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

from $3.75 / 1,000 results

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

This Actor searches 1688.com (阿里巴巴) wholesale products by keyword and returns one clean, flat JSON record per product. Each record has the wholesale price with quantity (MOQ) tiers, order and sales counts, the supplier's name, shop link and service scores, repurchase rates, factory and business verification, supplier province and city, and images. It is made for sourcing teams, resellers, cross-border and dropshipping sellers, and market researchers. No 1688 account, API keys, proxies or cookies are needed.

### What is 1688?

1688.com is a Chinese business-to-business (B2B) wholesale marketplace from Alibaba (阿里巴巴). Factories and wholesalers list their products there, usually with prices that go down as the order quantity goes up. Listings are written in Chinese and prices are shown in Chinese yuan (CNY).

### What data can you get?

Every item in the dataset is one product (offer) from a 1688 search result page. The most useful fields for sourcing come first.

| Field | What it means |
|---|---|
| `price` | Price in CNY for the smallest order quantity |
| `tierPrices` | Wholesale price tiers as a list of `{quantity, price}`. The quantity keeps 1688's own wording, for example `1~299个` or `≥3000个` |
| `orderCount` | Recent orders (成交笔数) as counted by 1688 |
| `salesText` | Units sold as 1688 words it, for example `已售100+件`; empty for many offers |
| `salesCount` | Lower bound of `salesText` as a number (`已售1.7万+件` becomes 17000) |
| `supplierName` | Supplier (company) name |
| `supplierId` | Supplier member ID |
| `shopUrl` | Supplier's shop link on 1688.com |
| `businessType` | Business type, for example 生产加工 (manufacturing) or 经销批发 (wholesale); empty for many |
| `isFactoryVerified` | Supplier passed the factory inspection (验厂) |
| `isBusinessVerified` | Supplier passed the business inspection (实力商家) |
| `repurchaseRateBadge` | The 回头率 (repeat-buyer rate) badge shown on the listing, in percent; present for most offers |
| `offerRepurchaseRate` | Repeat-buyer rate 1688 gives for this offer itself, in percent; empty for about 20% of offers and not the same number as `repurchaseRateBadge` |
| `compositeScore` | Supplier's overall service score (out of 5) |
| `goodsScore` | Supplier score: goods as described |
| `logisticsScore` | Supplier score: logistics |
| `consultationScore` | Supplier score: pre-sale consultation |
| `disputeScore` | Supplier score: dispute handling |
| `returnScore` | Supplier score: returns |
| `province` | Supplier province; empty for about 10% of offers |
| `city` | Supplier city; empty for about 10% of offers |
| `offerId` | 1688 offer ID |
| `url` | Link to the offer page on 1688.com |
| `title` | Offer title (Chinese), search highlighting removed |
| `searchKeyword` | The search keyword this offer was found with |
| `imageUrl` | First (main) image URL |
| `imageUrls` | All image URLs of the offer |
| `isAd` | `true` for paid ad placements in the search results (flagged by 1688 or recognisable by their ad link) |
| `type` | Record type, always `product` |

In the Apify Console the dataset also has a ready-made **Products** table view with `title`, `price`, `orderCount`, `supplierName`, `province`, `city`, `repurchaseRateBadge` and `url`.

#### How the data is cleaned

- Search highlighting is removed from titles.
- Links are short and stable.
- Paid ad placements are kept and flagged with `isAd` instead of being hidden, so you can filter them out yourself.
- Tier prices, recent orders, supplier scores, repurchase rates and the factory and business verification flags are all in one record, so you do not need to join tables.

### How to use 1688 Scraper

1. Open 1688 Scraper in Apify Console.
2. In **Keywords**, enter one or more search terms in Chinese or English, for example `手机壳` or `phone case`.
3. Set **Max results** to the total number of products you want for the whole run.
4. Click **Start** and wait for the run to finish.
5. Open the dataset and download it as JSON, CSV, Excel or another format, or read it through the Apify API.

The Actor has one mode: keyword search. An empty input `{}` searches 手机壳 (phone cases), which makes a quick test run.

### Input

| Field | Type | Required | What it does | Default |
|---|---|---|---|---|
| `keywords` | array of strings | Optional | Search keywords, Chinese or English. They are searched one after the other. Each keyword returns roughly 60 to 150 products. | Falls back to `手机壳` when empty |
| `maxResults` | integer (1 to 5000) | Optional | Maximum number of products to return in total for the whole run. The run stops as soon as it is reached. You are charged per product returned. | `20` |

One keyword, small test:

```json
{
  "keywords": ["手机壳"],
  "maxResults": 20
}
```

Several keywords, Chinese and English:

```json
{
  "keywords": ["手机壳", "phone case"],
  "maxResults": 100
}
```

Related keywords to collect more products for one product type:

```json
{
  "keywords": ["保温杯", "不锈钢保温杯", "儿童保温杯"],
  "maxResults": 300
}
```

### Output example

The values below are illustrative sample values.

```json
{
  "type": "product",
  "offerId": "700000000001",
  "url": "https://detail.1688.com/offer/700000000001.html",
  "searchKeyword": "手机壳",
  "title": "适用iPhone手机壳磁吸全包镜头保护套",
  "price": 11.0,
  "tierPrices": [
    {"quantity": "1~299个", "price": 11.0},
    {"quantity": "300~2999个", "price": 10.5},
    {"quantity": "≥3000个", "price": 9.5}
  ],
  "orderCount": 23,
  "salesText": "已售30+件",
  "salesCount": 30,
  "supplierName": "深圳示例电子科技有限公司",
  "supplierId": "b2b-0000000000example",
  "shopUrl": "http://shopexample.1688.com",
  "businessType": "生产加工",
  "compositeScore": 4.0,
  "goodsScore": 3.67,
  "logisticsScore": 3.14,
  "consultationScore": 3.5,
  "disputeScore": 4.0,
  "returnScore": 4.0,
  "repurchaseRateBadge": 57,
  "offerRepurchaseRate": null,
  "isFactoryVerified": false,
  "isBusinessVerified": true,
  "province": "广东",
  "city": "深圳市",
  "imageUrl": "https://cbu01.alicdn.com/img/ibank/example-main.jpg",
  "imageUrls": ["https://cbu01.alicdn.com/img/ibank/example-main.jpg"],
  "isAd": false
}
```

### How much does it cost?

The Actor uses pay-per-event pricing. You pay for two events:

| Event | Price (USD) | When it is charged |
|---|---|---|
| `run-start` | $0.015 | Charged when the first request to the data source succeeds, even if that request returns nothing. It is not charged when the data source fails from the start, or when your spending limit cannot cover it. Each further keyword that is actually searched pays one more start fee: it is charged before that keyword's first request and kept even if that keyword then returns nothing. A further keyword is only searched if the run still needs results to reach `maxResults`. |
| `result` | $0.005 | For each product returned |

Worked examples:

- **100 products, one keyword:** $0.015 + 100 × $0.005 = **$0.515**.
- **100 products, two keywords, when the first keyword gives fewer than 100 products:** 2 × $0.015 + 100 × $0.005 = **$0.53**. If the first keyword already gives 100 products, the second keyword is never searched and the run costs **$0.515**.
- **20 products, one keyword:** $0.015 + 20 × $0.005 = **$0.115**.

On the free Apify plan, a run returns at most 20 results in total, and only the first keyword is searched; the run then stops with the message "Free plan limit reached". Any paid Apify plan removes the limit. On the free Apify plan each account can run this Actor up to 3 times per 24 hours and 10 times per 7 days, within a small lifetime free allowance shared across all our Actors, and all free accounts share a daily free budget. When any of these limits is reached, the run stops before fetching anything and nothing is charged.

You never pay for more than `maxResults` items, and you are never charged for items that were not delivered. The run also stops by itself if your spending limit is reached.

### Use cases

- **Sourcing and supplier shortlists:** compare prices, minimum order quantities and supplier quality for one product in a single table.
- **Price research for resellers, cross-border and dropshipping sellers:** see wholesale price levels per keyword and per quantity tier with `tierPrices`.
- **Supplier vetting:** filter by `isFactoryVerified`, `isBusinessVerified`, `businessType`, `compositeScore` and `repurchaseRateBadge` before you contact anyone.
- **Market and trend research:** see which products sell (`orderCount`, `salesCount`) and in which provinces and cities the suppliers are.
- **Ad monitoring:** use `isAd` to see which products are pushed with paid placements for a keyword.
- **AI and data projects:** clean B2B product records for catalogs and price models.

### Integrations and API

You can start runs through the Apify API, schedule them in Apify Console (for example a daily price check for the same keywords), and connect the results to integrations such as webhooks, Google Sheets, Make or Zapier. Results are stored in an Apify dataset that you can read through the API in JSON, CSV, Excel and other formats.

Example with the Python `apify-client` package:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("clover_folktale/1688-scraper").call(run_input={
    "keywords": ["手机壳", "phone case"],
    "maxResults": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### Tips and limits

- **How many products per keyword.** 1688 does not page its search results. Each request returns about 60 products, and a repeated request returns a slightly different ranking. The Actor repeats the request for a keyword, drops products it already has, and stops when a request adds fewer than 10 new products or after 5 requests. Expect roughly 60 to 150 products per keyword. For more, add related keywords.
- **Paid ads.** 1688 mixes paid placements into the results. They are kept and marked `isAd: true`, so you can filter them out.
- **Two repurchase rates.** `repurchaseRateBadge` is the 回头率 percentage on the listing; `offerRepurchaseRate` is a separate figure 1688 gives per offer. The two differ (for example 55% and 5%), so both are returned as they are.
- **Tier prices.** `tierPrices` keep 1688's own wording for the quantity range (for example `1~299个`, `≥3000个`); `price` is the price for the smallest order.
- **Sales numbers.** `salesCount` is the lower bound of `salesText`: `已售1.7万+件` becomes 17000. `orderCount` is the number of recent orders 1688 counts.
- **Currency and freshness.** Prices are in Chinese yuan (CNY) and are what 1688 shows at the time of the run.
- **Titles are in Chinese.** The `title` field is returned as 1688 shows it, without translation. English keywords work for searching.
- **Empty fields.** `province` and `city` are empty for about 10% of the products. `businessType` and `salesText` are empty for many, `offerRepurchaseRate` is empty for about 20%, and the supplier scores are missing for suppliers with too few orders.
- **Errors.** The Actor retries transient errors on its own and stops cleanly instead of failing half-way. If too many keywords return nothing, the run stops to protect your budget.
- **Free plan.** On the free Apify plan a run returns at most 20 results in total, and only the first keyword is searched. The run then stops with the message "Free plan limit reached".
- **Feedback.** Missing a field? Open an issue from the Actor page and it will be looked at.

### FAQ

#### Do I need a 1688 account or cookies?

No. You do not need a 1688 account, API keys, proxies or cookies.

#### Is it legal to scrape 1688?

The Actor returns only public listing data: what anyone sees on a 1688 search page, such as the supplier's company name, shop link and scores. It returns no buyer data and no private data such as phone numbers or messages. You are responsible for how you use the data and for following the laws that apply to you.

#### How fresh is the data?

Every run fetches the search results live, so prices and counts are what 1688 shows at the time of the run.

#### Why are some fields empty?

1688 does not show every value for every offer. `province` and `city` are missing for about 10% of products, `offerRepurchaseRate` for about 20%, `businessType` and `salesText` for many, and supplier scores are missing when the supplier has too few orders. Missing values are `null`; empty lists (`tierPrices`, `imageUrls`) are `[]`, and the yes/no flags (`isFactoryVerified`, `isBusinessVerified`, `isAd`) are `false`.

#### How many results can I get?

Roughly 60 to 150 products per keyword, and up to 5000 per run through `maxResults`. On the free Apify plan a run returns at most 20 products and only the first keyword is searched. Add related keywords to get more.

#### Can I search by offer ID, shop or image?

No. The Actor searches by keyword only, in Chinese or English.

#### Can I schedule runs and export the data?

Yes. You can schedule runs in Apify Console, start them through the API, and download the dataset as JSON, CSV, Excel and other formats.

### More tools from the same developer

- [Taobao 淘宝 Scraper - Products, Prices, Sales & Shop Ratings](https://apify.com/clover_folktale/taobao-scraper)
- [Amazon Scraper - Products, Prices, Ratings & Best Sellers](https://apify.com/clover_folktale/amazon-scraper)
- [Douyin Shop 抖音商城 Scraper - Products, Sales, Commission](https://apify.com/clover_folktale/douyin-shop-scraper)
- [TikTok Shop Scraper - Products, SKUs, Reviews & Reviewer IDs](https://apify.com/clover_folktale/tiktok-shop-scraper)
- [Xiaohongshu 小红书 RedNote Scraper - Notes, Comments & User IP](https://apify.com/clover_folktale/xiaohongshu-scraper)

# Actor input Schema

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

Search keywords, Chinese or English (for example 手机壳 or phone case). Each keyword returns up to roughly 60 to 150 products. Falls back to 手机壳 when empty.

## `maxResults` (type: `integer`):

Maximum number of products to return in total for this run. You are charged per product returned. On the free Apify plan a run returns at most 20 results in total; any paid Apify plan removes the limit.

## Actor input object example

```json
{
  "keywords": [
    "手机壳"
  ],
  "maxResults": 20
}
```

# Actor output Schema

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

All scraped items (JSON, CSV, Excel via the dataset API).

# 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": [
        "手机壳"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("clover_folktale/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 = { "keywords": ["手机壳"] }

# Run the Actor and wait for it to finish
run = client.actor("clover_folktale/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 '{
  "keywords": [
    "手机壳"
  ]
}' |
apify call clover_folktale/1688-scraper --silent --output-dataset

```

## MCP server setup

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