# 1688.com Wholesale Scraper - Prices, MOQ, Suppliers & SKUs (`topapi/alibaba-1688-scraper`) Actor

Scrape 1688.com wholesale offers by keyword, offer id or URL: quantity price tiers, MOQ, supplier and trade-service scores, factory inspection, SKU matrix with stock, specs, shipping, rating, dropship stats and English titles. Monitor new offers and price changes. No login.

- **URL**: https://apify.com/topapi/alibaba-1688-scraper.md
- **Developed by:** [Top Api](https://apify.com/topapi) (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 $0.80 / 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.

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

### What does 1688.com Wholesale Scraper do?

**1688.com Wholesale Scraper** extracts wholesale offers from [1688.com](https://www.1688.com), Alibaba's domestic Chinese B2B marketplace. Give it keywords (Chinese or English), offer URLs or offer ids and get one row per 1688 offer: the quantity price ladder, minimum order quantity (MOQ), the Chinese supplier with its trade-service scores and inspection badges, and, as add-ons, the offer page's SKU matrix with stock, specs, shipping, rating and dropship statistics. Built for importers, Amazon/Shopify/TikTok Shop sellers, dropshippers and sourcing agents who compare factory prices without copying them by hand.

1688 scraper · 1688 API · Alibaba 1688 wholesale scraper · China supplier sourcing

<a href="https://console.apify.com/actors/nyw66DVd2X8R0i5Wi"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/alibaba-1688-scraper-source.png" alt="1688.com offer page that 1688.com Wholesale Scraper turns into rows" style="width:70%"></a>

- **Wholesale prices as data:** every quantity tier (`1~49个 ¥6.00 · 50~99个 ¥5.90 · ≥100个 ¥5.80`), the MOQ, the unit and the price range per offer.
- **Supplier signals on every row:** company, years on 1688, manufacturer or wholesaler, province and city, factory/business inspection, Super Factory, buyer repeat rate and six trade-service scores.
- **Offer page details (add-on):** gallery and video, specs, every SKU with its own stock, price and sales, total sold, shipping origin and dispatch promise, buyer protections, rating summary and shop stats.
- **Supplier intelligence (add-on):** dropship orders in the last 30 and 7 days, distributor count, 24/48-hour dispatch rates, quality and retention rates, sell points, certificates, per-SKU pack sizes and a dropship score.
- **English titles:** `titleEn` on every row (and `specsEn` with details), translated from Chinese.
- **Depth beyond one result list:** more sort orders and price bands are added automatically: one keyword search reached 5,283 (`蓝牙耳机`) and 6,208 (`手机壳`) unique offers in the measured runs.
- **No login, cookies or 1688 account:** keywords, URLs or ids are all you pass.
- **Monitor mode, exports and AI agents:** new offers only, price-drop alerts with a webhook; JSON, CSV, Excel; schedules, Make, Zapier, n8n, the Apify API and MCP.

### What data can you get from 1688.com?

<table>
<tr><td>🆔 Offer id and URL (<code>offerId</code>, <code>detailUrl</code>)</td><td>📝 Title + English title (<code>titleEn</code>)</td><td>💴 Price, price range (CNY)</td></tr>
<tr><td>📊 Quantity price ladder (<code>quantityPrices</code>)</td><td>📦 MOQ and unit</td><td>🔥 Units sold (<code>soldCount</code>)</td></tr>
<tr><td>🏭 Supplier company, login id, shop URL</td><td>📅 Years on 1688</td><td>🏷️ Manufacturer / wholesaler (<code>bizTypeEn</code>)</td></tr>
<tr><td>📍 Supplier province and city</td><td>✅ Factory / business inspection, Super Factory</td><td>⭐ Six trade-service scores</td></tr>
<tr><td>🔁 Buyer repeat rate, offer repurchase rate</td><td>📢 Sponsored flag (<code>isAd</code>)</td><td>🗂️ Category id and path</td></tr>
<tr><td>🧩 SKU matrix: variant, price, stock, sales</td><td>📐 Specs (+ <code>specsEn</code>)</td><td>🚚 Ship-from, dispatch promise, carrier</td></tr>
<tr><td>🖼️ Gallery, video, SKU images</td><td>💬 Rating summary and review tags</td><td>🛡️ Buyer protections and offer flags</td></tr>
<tr><td>📈 Dropship stats and dropship score</td><td>📜 Certificates, per-SKU pack sizes</td><td>🌍 Estimated landed cost (USD)</td></tr>
</table>

Measured on 3 runs of 300 search rows (`手机壳`, `蓝牙耳机`, `数据线`): price, title, supplier, years and trade-service scores 100%, units sold 96-100%, category 97-99%, province 82-98%. The quantity ladder and MOQ are on 23-76% of search rows, depending on the category (`数据线` 23%, `蓝牙耳机` 59%, `手机壳` 76%): offers priced per SKU print a single price in search, and the offer page (details add-on) gives their MOQ and per-SKU prices.

### How to scrape 1688.com with 1688.com Wholesale Scraper

1. [Create a free Apify account](https://console.apify.com/sign-up) — $5 of monthly credit, no card needed.
2. Open [1688.com Wholesale Scraper](https://apify.com/TopApi/alibaba-1688-scraper) and click **Try for free**.
3. Type your **Keywords** (e.g. `手机壳`, `wireless earbuds`) or paste offer URLs or ids, and set **Max results per keyword**.
4. Optional: pick filters (price, province, supplier type) and turn on **Offer details** or **Supplier intelligence**.
5. Click **Start**. Rows stream into the dataset as each result page is read.
6. Open the **Storage** tab and **Export** as JSON, CSV or Excel, or schedule the run.

### ⬇️ Input

| Parameter | Type | Description |
|---|---|---|
| **🔍 What to scrape** | | |
| `keywords` | List | Search terms in Chinese or English, e.g. `手机壳`, `蓝牙耳机`, `wireless earbuds`. |
| `startUrls` | List | `detail.1688.com/offer/<id>.html`, `m.1688.com/offer/<id>.html` or an `s.1688.com` search URL. |
| `offerIds` | List | Numeric offer ids, read from their offer pages. |
| `searchArray` | JSON | Searches with their own filters: `[{"keyword":"手机壳","sortBy":"bestSelling","priceMax":10}]`. |
| **🎯 Filters** (applied by 1688) | | |
| `sortBy` | Select | `relevance` (default), `bestSelling`, `priceAsc`, `priceDesc`. |
| `marketplace` | Select | `pcmarket` (wholesale market, default) or `pcindustry` (industrial products). |
| `priceMin` / `priceMax` | Number | Unit price range in CNY. |
| `province` / `city` | Select / Text | Supplier location, e.g. Guangdong + `深圳` (Shenzhen). English city names are converted. |
| `supplierType` | Select | `any`, `manufacturer` (生产加工), `wholesaler` (经销批发). 1688's own filter only favours the type, so every row is re-checked: only offers whose supplier shows that type are delivered and charged. |
| `onePerSupplier` | Boolean | At most one offer per supplier in each keyword's results. 1688's own option only favours different suppliers (60 rows from 56 suppliers measured), so every row is re-checked: a supplier's further offers are left out and not charged. |
| **✂️ Refine results** | | |
| `merchantType` | Select | `superFactory`, `inspectedFactory` or `verifiedMerchant`. |
| `maxMoq`, `minSupplierYears`, `categoryId` | Number / Text | MOQ ceiling, years on 1688, category id(s). |
| `excludeAds`, `excludeKeywords` | Boolean / List | Drop sponsored offers or titles containing words. |
| `fastShippingOnly`, `certifications` | Boolean / List | Dispatch within 48 h; certificate names (both read the offer page). |
| **➕ Extra data** | | |
| `includeDetails` | Boolean | The offer page: images, specs, SKU matrix, stock, shipping, rating, shop stats. Charged as product details. |
| `includeSkuDetails`, `includeDescription`, `includeDescriptionHtml` | Boolean | SKU matrix (default on), description text/images, raw description HTML. |
| `includeSupplierIntelligence` | Boolean | Dropship stats, sell points, certificates, pack sizes, dropship score. Turns on details. |
| `translateTitles` | Boolean | `titleEn` and `specsEn`. Default on. |
| `targetMarket`, `usdPerCny`, `shippingUsdPerKg` | Select / Number | For `estLandedCostUsd`. |
| **🔁 Monitoring** | | |
| `monitorMode`, `monitorStoreName` | Boolean / Text | Only offers not delivered before (keywords) or with a changed price or stock (offer ids). |
| `alertOnPriceDropPct`, `alertOnStockDropPct`, `webhookUrl` | Number / Text | Flag drops and POST them to your URL. |
| **📦 Output** | | |
| `maxResults` | Integer | Offers per keyword. Default `100`, up to `5000`. |
| `maxItems`, `compact` | Integer / Boolean | Total cap for the run; core fields only for AI agents (with details or supplier intelligence on, those add-ons' fields are kept in full). |
| **⚙️ Advanced** | | |
| `proxyConfiguration`, `detailProxyConfiguration`, `maxConcurrency` | Proxy / Integer | Managed by default; offer pages read 20 at a time. |

#### Input JSON

```json
{
  "keywords": ["手机壳", "wireless earbuds"],
  "maxResults": 200,
  "sortBy": "bestSelling",
  "priceMax": 20,
  "province": "广东",
  "includeDetails": true
}
```

#### Search in Chinese when you can

1688 titles are written in Chinese, so Chinese keywords match far more offers. Measured: `wireless earbuds` matched 70 offers, `蓝牙耳机` (the same product) matched 1688's maximum of 2,000. **Do:** `蓝牙耳机` · **Don't:** a long English sentence.

#### Use offer ids for a watchlist

Paste the ids (or URLs) of offers you already buy from into `offerIds`, turn on `monitorMode` and set `alertOnPriceDropPct`. Each scheduled run returns only offers whose price or stock changed, with `previousPrice` and `priceChangePct`.

### ⬆️ Output

Every offer becomes one dataset item. The table view of a run for `蓝牙耳机` with offer details on:

<a href="https://console.apify.com/actors/nyw66DVd2X8R0i5Wi"><img src="https://api.apify.com/v2/key-value-stores/qNQ9zP0xaj2yxGeMY/records/alibaba-1688-scraper-output.png" alt="1688.com Wholesale Scraper output table" style="width:70%"></a>

A search row (real, trimmed):

```json
{
  "offerId": "1041777957978",
  "title": "适用于Mate30RS保时捷手机壳保护套全包防摔简约素皮防指纹in",
  "titleEn": "Suitable for Mate30RS Porsche mobile phone case protective cover all-inclusive anti-fall simple plain leather anti-fingerprint in",
  "price": 6, "priceMin": 5.8, "priceMax": 6, "currency": "CNY",
  "quantityPrices": [
    { "quantityRange": "1~49个", "quantityMin": 1, "quantityMax": 49, "price": 6 },
    { "quantityRange": "50~99个", "quantityMin": 50, "quantityMax": 99, "price": 5.9 },
    { "quantityRange": "≥100个", "quantityMin": 100, "quantityMax": null, "price": 5.8 }
  ],
  "minOrderQuantity": 1, "unit": "个", "soldCount": 30, "soldDisplay": "已售30+件", "isAd": false,
  "supplier": {
    "companyName": "深圳市泽丰汇科技有限公司", "yearsOnPlatform": 1, "bizTypeEn": "wholesaler",
    "province": "广东", "city": "深圳市", "buyerRepeatRate": 30,
    "serviceScores": { "composite": 4.5, "consultation": 4, "logistics": 3.43, "dispute": 4, "return": 4, "goods": 3.67 }
  },
  "sourceKeyword": "手机壳", "searchFacet": "relevance", "position": 2
}
```

What offer details add (real, trimmed):

```json
{
  "stock": 57140, "totalSold": 18851, "categoryName": "耳机",
  "specsEn": [{ "name": "Headphone category", "value": "Back-hung headphones" }],
  "skuDetails": { "skuPriceType": "skuPrice", "variants": [
    { "skuId": "6132901524522", "specAttrs": "H08黑色TYPEC扁口+中文彩盒（中性）", "price": 25, "stock": 9197 } ] },
  "shipping": { "location": "广东省东莞市", "deliveryPromiseHours": 48, "carrier": "中通" },
  "rating": { "goodRatePct": 98.9, "reviewCount": 81 }
}
```

#### Fields

| Field | What it is |
|---|---|
| `offerId`, `detailUrl`, `mobileUrl` | 1688 offer id and links |
| `title`, `titleEn` | Title as 1688 prints it; English translation |
| `price`, `priceMin`, `priceMax`, `currency` | Price for the minimum order (the quantity ladder's first tier) and the lowest and highest tier price, in CNY. Offers priced per SKU: with details, the lowest and highest price in the offer's SKU matrix (the prices `skuDetails` lists, a SKU's discount price where 1688 prints one) and an empty ladder; without details, the tier the search card prints (or its display price when it prints none) |
| `searchDisplayPrice` | The price the search card displays; it can be a promotion or one SKU's price, so it can fall outside the ladder |
| `quantityPrices`, `minOrderQuantity`, `unit` | Quantity ladder, MOQ, selling unit (empty ladder = priced per SKU) |
| `soldCount`, `soldDisplay`, `bookedCount`, `offerRepurchaseRate` | Sales signals from the search card |
| `isAd`, `tags`, `serviceTags`, `promotionTags` | Sponsored flag and badges |
| `categoryId`, `categoryPath` | Leaf category and its parents |
| `supplier` | Company, ids, shop URL, years, business type, location, inspection badges, repeat rates, service scores, followers, fulfilment rate |
| `skuDetails`, `stock`, `totalSold`, `specs`, `specsEn`, `images`, `videoUrl` | Offer page details |
| `shipping`, `unitWeightKg`, `packageDimensions`, `services`, `productFlags`, `rating` | Logistics, protections and review summary |
| `supplierIntelligence`, `dropshipScore`, `estLandedCostUsd` | Supplier intelligence add-on |
| `changeType`, `previousPrice`, `priceChangePct`, `stockChangePct`, `alerts` | Monitor mode |
| `sourceKeyword`, `searchFacet`, `position`, `detailsStatus`, `scrapedAt` | Where the row came from |

### How can I use 1688 wholesale data?

- 🛒 **Amazon, Shopify and TikTok Shop sellers:** find the factory price and MOQ behind a product before ordering samples.
- 🚚 **Dropshippers:** rank suppliers by dropship orders, 48-hour dispatch rate and retention with the supplier intelligence block.
- 🏭 **Sourcing agents:** shortlist inspected factories in one province with `merchantType` + `province` and export them to a sheet.
- 📉 **Buyers with a supplier list:** watch your offer ids weekly and get a webhook when a price drops.
- 📊 **Market researchers:** compare price ladders and units sold across thousands of offers for one category.
- 🤖 **AI and research teams:** feed `titleEn`, `specsEn` and prices to an LLM for product matching.

### How much does it cost to scrape 1688.com?

1688.com Wholesale Scraper is pay-per-result with **no start fee**:

| Event | Price | Per 1,000 |
|---|---:|---:|
| Product (every row) | $0.0008 | $0.80 |
| Product details (with offer details on, or offer ids) | $0.0032 | $3.20 |
| Supplier intelligence (with supplier intelligence on) | $0.0025 | $2.50 |

| Run | Cost |
|---|---:|
| 100 search rows | $0.08 |
| 1,000 search rows | $0.80 |
| 100 rows with offer details | $0.40 |
| 100 rows with details + supplier intelligence | $0.65 |
| 1,000 rows with offer details | $4.00 |

Apify platform usage is included in the event prices. Measured on the default 256 MB (the time depends on 1688): 300 search rows for one keyword in 7.6-8.6 seconds (3 runs); 50 rows with offer details in 41-90 seconds (2 runs: `蓝牙耳机` 41 s, `手机壳` 90 s, whose offer pages are larger).

### Integrations, API, scheduling & MCP

- **Schedules:** run it daily or weekly from the **Schedules** tab; with `monitorMode` each run returns only new offers or changed prices.
- **Webhooks:** `webhookUrl` receives the run's price and stock alerts; Apify webhooks can fire on every finished run.
- **No-code:** Make, Zapier, n8n, Google Sheets, Airtable and Slack via [Apify integrations](https://docs.apify.com/integrations).
- **API:** start runs and read datasets from Node.js or Python with `apify-client` — code on the [API tab](https://apify.com/TopApi/alibaba-1688-scraper/api/python).
- **MCP / AI agents:** connect Claude, Cursor or any MCP client through the [MCP tab](https://apify.com/TopApi/alibaba-1688-scraper/api/mcp); `compact` keeps rows small.

### More scrapers for product research

<table>
<tr>
<td>™️ <a href="https://apify.com/TopApi/uspto-trademark-scraper">USPTO Trademark Scraper</a> — check a brand name before you import</td>
<td>🎵 <a href="https://apify.com/TopApi/tiktok-scraper">TikTok Scraper</a> — products trending on TikTok</td>
<td>📢 <a href="https://apify.com/TopApi/tiktok-ads-library-scraper">TikTok Ads Library Scraper</a> — products other sellers advertise</td>
</tr>
<tr>
<td>🏷️ <a href="https://apify.com/TopApi/facebook-marketplace-scraper">Facebook Marketplace Scraper</a> — local resale prices</td>
<td>⭐ <a href="https://apify.com/TopApi/trustpilot-reviews-scraper">Trustpilot Reviews Scraper</a> — what buyers say about competing brands</td>
<td>📈 <a href="https://apify.com/TopApi/similarweb-scraper">SimilarWeb Scraper</a> — traffic of competing stores</td>
</tr>
<tr>
<td>▶️ <a href="https://apify.com/TopApi/youtube-shorts-scraper">YouTube Shorts Scraper</a> — product videos and views</td>
<td>📸 <a href="https://apify.com/TopApi/instagram-scraper">Instagram Scraper</a> — influencer posts about a product</td>
<td>🧭 <a href="https://apify.com/TopApi">All TopApi actors</a></td>
</tr>
</table>

### Limits & empty runs

- **Results per keyword:** 1688 lists at most 2,000 matches per search, and in the measured runs it showed signed-out visitors 300-400 offers per sort order before its "no login" stop. The actor then reads the other sort orders and price bands (300-1,300 offers each): one search reached 6,208 unique offers for `手机壳` and 5,283 for `蓝牙耳机` (measured). Narrow keywords run out sooner.
- **Search order changes between runs:** 1688 reshuffles relevance results, so two runs of the same keyword overlap only partly. Monitor mode remembers every offer it delivered.
- **Offer pages:** 97-100% of offer pages were read in the measured runs; an offer page 1688 answers with its verification page is listed in the run summary as not readable and is not charged as details.
- **Prices are CNY** and are what 1688 shows a signed-out visitor; member-only or negotiated prices are not shown.
- **Certificates:** 1688 lists them for regulated categories: 8 of 9 charger, toy and kettle offers measured carried a CCC (3C) certificate number; most other categories list none.
- **Not available:** supplier catalogs (shop offer lists) and image search are served only to signed-in 1688 users. The full review list is not included in this version; the offer page's rating summary and review tags are included with details.
- **Supplier type:** with `supplierType` set, offers whose supplier shows another business type, or none, are left out (16-24% of search cards showed none in 3 measured runs), so a wholesaler search reads more result pages to fill `maxResults`.
- **One offer per supplier:** with `onePerSupplier` on, a supplier's second and later offers in the same keyword's results are left out (the run summary counts them under `onePerSupplier`), so the search may read more result pages to fill `maxResults`. Separate keywords can each return the same supplier once.
- **Empty dataset:** a keyword with no matches, offer ids that no longer exist, or filters that removed everything; the run summary says which.

### FAQ

#### How many offers can 1688.com Wholesale Scraper return per keyword?

`maxResults` goes up to 5,000 per keyword. 1688 caps a search at 2,000 matches and showed signed-out visitors 300-400 offers per sort order in the measured runs; the actor adds sort orders and price bands until it reaches `maxResults` or runs out of new offers (measured: one search reached 6,208 unique offers for `手机壳`).

#### Can 1688.com Wholesale Scraper translate titles to English?

Yes. `titleEn` is on by default, and with offer details the specs are translated too (`specsEn`). The original Chinese stays in `title` and `specs`.

#### Does 1688.com Wholesale Scraper get the SKU variants and stock?

Yes, with **Offer details** on: every SKU with its attributes, price, stock and sales, plus the offer's total stock and units sold.

#### How much does 1688.com Wholesale Scraper cost?

$0.80 per 1,000 search rows, plus $3.20 per 1,000 rows with offer details and $2.50 per 1,000 with supplier intelligence. No start fee.

#### Can I monitor 1688 prices with 1688.com Wholesale Scraper?

Yes. Turn on `monitorMode`, give it offer ids, set `alertOnPriceDropPct` and a `webhookUrl`, and schedule it. With keywords, monitor mode returns only offers not delivered before.

#### Can I use 1688.com Wholesale Scraper with the Apify API?

Yes. Start runs and fetch datasets with `apify-client` for [Node.js](https://apify.com/TopApi/alibaba-1688-scraper/api/javascript) or [Python](https://apify.com/TopApi/alibaba-1688-scraper/api/python), or call the REST API directly.

#### Can I use 1688.com Wholesale Scraper through an MCP server?

Yes. Open the [MCP tab](https://apify.com/TopApi/alibaba-1688-scraper/api/mcp), connect your MCP client and ask for 1688 offers in plain language. `compact` returns the core fields only, plus the fields of any add-on you turn on.

#### Do I need a 1688 account, cookies or a Chinese phone number?

No. 1688.com Wholesale Scraper reads only what 1688 shows a signed-out visitor; you pass keywords, URLs or ids.

#### Why did my 1688 run return fewer offers than I asked for?

English keywords match only English-titled offers (use Chinese), price or province filters narrow the result, or `maxItems` stopped the run. The run summary lists matches, pages and filtered offers per keyword.

#### Is it legal to scrape 1688.com?

1688.com Wholesale Scraper extracts only publicly available wholesale listings and does not log in. Results can include supplier business names and shop links; make sure your use of the data complies with the laws that apply to you.

#### Your feedback

We keep improving 1688.com Wholesale Scraper. Found a bug or missing a field? Open an issue on the [Issues tab](https://apify.com/TopApi/alibaba-1688-scraper/issues/open).

# Actor input Schema

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

Search terms in Chinese or English, e.g. "手机壳", "wireless earbuds", "led strip". Chinese terms match far more offers: 1688 titles are Chinese.

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

detail.1688.com/offer/<id>.html or m.1688.com/offer/<id>.html (read from the offer page) or an s.1688.com search URL (its keyword, price and province are kept).

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

Numeric 1688 offer ids, e.g. "735353578254". Each one is read from its offer page (charged as a product with details).

## `searchArray` (type: `array`):

Independent searches: \[{"keyword":"手机壳","sortBy":"bestSelling","priceMax":10,"province":"广东","maxResults":300}]. Keys: keyword, sortBy, marketplace, priceMin, priceMax, province, city, supplierType, onePerSupplier, maxResults.

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

The order 1688 returns offers in. Best selling also drops sponsored offers.

## `marketplace` (type: `string`):

Which 1688 market to search. Industrial products returns factory/industrial suppliers for the same keyword.

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

Lowest unit price in Chinese yuan, e.g. 5.

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

Highest unit price in Chinese yuan, e.g. 50.

## `province` (type: `string`):

Only suppliers located in this province, e.g. Guangdong for Shenzhen/Guangzhou electronics, Zhejiang for Yiwu small goods.

## `city` (type: `string`):

Chinese city name, e.g. "深圳", "义乌", "东莞"; common English names (Shenzhen, Yiwu, Dongguan, Guangzhou) are converted. Pair it with the province.

## `supplierType` (type: `string`):

The supplier's business model as 1688 records it. 1688's own filter only favours the type, so every row is re-checked: only offers whose supplier shows the chosen type are delivered and charged; offers with another or no business type are left out.

## `onePerSupplier` (type: `boolean`):

At most one offer per supplier in each keyword's results. 1688's own option only favours different suppliers (56 suppliers in 60 rows measured), so every row is re-checked: a supplier's further offers are left out uncharged.

## `merchantType` (type: `string`):

Keep only offers whose supplier carries this 1688 verification badge.

## `maxMoq` (type: `integer`):

Keep offers whose MOQ is at most this, e.g. 10. Without details, search rows that print no MOQ are kept. With details on, the MOQ comes from the offer page; an offer whose MOQ stays unknown (page not readable) is left out, not charged.

## `minSupplierYears` (type: `integer`):

Keep suppliers with at least this many years of 1688 membership, e.g. 3.

## `categoryId` (type: `string`):

Keep offers in this 1688 category (leaf, parent or top level), e.g. "1046694" (iPhone cases). Comma-separate several.

## `excludeAds` (type: `boolean`):

Drop offers marked as paid placements (P4P / bid) in relevance order.

## `excludeKeywords` (type: `array`):

Drop offers whose title or supplier name contains any of these, e.g. "二手", "定制".

## `fastShippingOnly` (type: `boolean`):

Keep offers whose page promises dispatch within 48 hours. Reads the offer page (turns on details).

## `certifications` (type: `array`):

Keep offers whose page lists a certificate containing one of these words, e.g. "3C", "CCC". 1688 lists certificates for regulated categories. Reads the offer page (turns on details).

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

Read each offer page: images, video, specs, SKU matrix with stock, total sold, shipping, buyer protection, rating summary, shop stats. Charged as product details per row that gets them.

## `includeSkuDetails` (type: `boolean`):

With details on: every variant with its attributes, stock, sales and image. Included in the details price.

## `includeDescription` (type: `boolean`):

With details on: the seller's description text and image list. Included in the details price.

## `includeDescriptionHtml` (type: `boolean`):

With details on: also the raw description HTML.

## `includeSupplierIntelligence` (type: `boolean`):

Dropship stats (30/7-day dropship orders, distributors, 24/48 h dispatch, quality and retention rates), sell points, certificates, per-SKU pack sizes, badges, dropship score. Turns on details.

## `translateTitles` (type: `boolean`):

Add titleEn (and specsEn with details) translated from Chinese.

## `targetMarket` (type: `string`):

With supplier intelligence: estLandedCostUsd = unit price x usdPerCny + unit weight x shipping rate per kg (US 9, EU/UK/AU 10, elsewhere 11 USD by default).

## `usdPerCny` (type: `number`):

Exchange rate used for estLandedCostUsd. Default 0.14.

## `shippingUsdPerKg` (type: `number`):

Override the shipping rate per kg used for estLandedCostUsd.

## `monitorMode` (type: `boolean`):

Keywords: deliver only offers not delivered by earlier runs. Offer ids: deliver only offers whose price or stock changed, with previousPrice and priceChangePct.

## `monitorStoreName` (type: `string`):

Named key-value store that remembers delivered offers. Use one name per watchlist. Default "alibaba-1688-monitor".

## `alertOnPriceDropPct` (type: `number`):

Monitor mode, offer ids: flag rows whose price fell by at least this percent (alerts: \["priceDrop"]).

## `alertOnStockDropPct` (type: `number`):

Monitor mode, offer ids: flag rows whose stock fell by at least this percent (alerts: \["stockDrop"]).

## `webhookUrl` (type: `string`):

POST the run's alerts as JSON to this URL when the run ends (only when there are alerts).

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

Offers per keyword. 1688 showed signed-out visitors 300-400 per sort order in the measured runs; the actor then adds more sort orders and price bands (one search reached 6,208 unique offers for "手机壳").

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

Stop the whole run after this many offers. Empty = no total cap.

## `compact` (type: `boolean`):

Core fields only (title, price ladder, MOQ, supplier essentials), sized for AI agents and MCP. With offer details or supplier intelligence on, the fields those add-ons charge for are kept in full.

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

Search and side-service calls. Default: the first 20 search calls of a run use Apify's own connection, then Apify datacenter proxy sessions of 10 calls each (side services always on datacenter sessions).

## `detailProxyConfiguration` (type: `object`):

Offer pages. Default: Apify residential (China), one fresh IP per offer page.

## `maxConcurrency` (type: `integer`):

How many offer pages are read at once (each on its own residential IP).

## Actor input object example

```json
{
  "keywords": [
    "wireless earbuds",
    "手机壳"
  ],
  "sortBy": "relevance",
  "marketplace": "pcmarket",
  "province": "",
  "supplierType": "any",
  "onePerSupplier": false,
  "merchantType": "any",
  "excludeAds": false,
  "fastShippingOnly": false,
  "includeDetails": false,
  "includeSkuDetails": true,
  "includeDescription": false,
  "includeDescriptionHtml": false,
  "includeSupplierIntelligence": false,
  "translateTitles": true,
  "targetMarket": "none",
  "monitorMode": false,
  "maxResults": 20,
  "compact": false,
  "maxConcurrency": 20
}
```

# Actor output Schema

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

One item per 1688 offer: price ladder, MOQ, supplier and scores; with the add-ons the SKU matrix, stock, specs, shipping, rating and dropship stats.

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

Per keyword: 1688's match count, pages and sort orders read, delivered, filtered and duplicate offers; offer pages not readable (not charged); calls per proxy session.

# 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": [
        "wireless earbuds",
        "手机壳"
    ],
    "maxResults": 20
};

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

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

```

## MCP server setup

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