# 1688 Product Details Scraper: Prices, Variants & Suppliers (`serenido/1688-product-details`) Actor

Full 1688.com product data from links or offer ids: wholesale price tiers, every variant with price and stock, specs, weight, ship-from city, supplier facts, in Chinese with English copies and USD prices. No login.

- **URL**: https://apify.com/serenido/1688-product-details.md
- **Developed by:** [Serenido](https://apify.com/serenido) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 1,000 product saveds

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

> ⭐ If this tool saves you time, please leave a quick review on this page. It helps other people find it. Found a problem? Open an issue in the Issues tab and we'll fix it fast.

### What does 1688 Product Details Scraper do?

Paste 1688.com product links (or just offer ids) and get one clean row per product: wholesale price tiers, minimum order, every variant with its own price and stock, specifications, weight, ship-from city, shipping fee, supplier facts, images and video. Every Chinese text comes with an English copy, and prices come in CNY and USD. Download as Excel, CSV or JSON, or use the API.

No login, no browser, no cookies from you.

### Why this one?

- **English next to Chinese.** Title, specs, variant names, unit, ship-from city, supplier name, services and shipping promise all get an English copy (`titleEn`, `attributesEn`, `nameEn`...). Units are translated with a fixed list, so 台 is "unit" and 个 is "piece", never "Taiwan" or "a".
- **CNY and USD.** `priceMin` and `priceMax` in CNY as 1688 shows them, plus `priceMinUsd` and `priceMaxUsd` at the day's rate (`usdRate`).
- **Every variant.** Each SKU with its name, price, stock, image and weight. The price range counts variants in stock, like the 1688 page.
- **Wholesale facts.** Price tiers by quantity, minimum order, sale unit, total stock, dropshipping (一件代发) flag, factory or trader, 3-month repeat-buy rate.
- **Free rows for problems.** Products that were taken down, bad links and pages that could not be loaded come back as rows with a `status` and a message. **They are not charged.**
- **Tested.** 127 product ids in one run: all 109 live products returned data (94 full rows, 15 basic rows), 18 taken-down products found, 0 failed, in about 2 minutes.

### What data do you get?

| Group | Fields |
|---|---|
| Product | offerId, url, title, titleEn, images, video, attributes, attributesEn, brand, brandEn, categoryId, categoryName, descriptionUrl |
| Price | priceMin, priceMax, currency (CNY), priceMinUsd, priceMaxUsd, usdRate, priceType ("by quantity" or "per variant"), priceTiers (minQuantity, price) |
| Order | minOrder, unit, unitEn, stock, soldCount, soldText, soldTextEn |
| Variants (`skus`) | skuId, specId, name, nameEn, options, price, stock, soldCount, image, weightKg |
| Variant names (`variantProperties`) | name and nameEn of each property (Color, Size...) with every value and its image |
| Shipping | shipsFrom, shipsFromEn, shippingFee, freeShipping, shippingPromise, shippingPromiseEn, weightKg, packageCm |
| Supplier | supplierName, supplierNameEn, supplierLoginId, supplierMemberId, supplierUserId, supplierUrl, supplierType, supplierServiceScore, repeatBuyRate3mPct, powerMerchant |
| Extras | services, servicesEn, dropshipping, badges, offerStatus |

### How much does it cost?

You pay per product saved with `status: "ok"`. Check the **Pricing** tab for the current price. Proxies, translation and platform costs are included. Problem rows and basic rows are free.

### How to use it

1. Paste product links or offer ids into **Product links or offer ids**, one per line. Desktop links, mobile links (m.1688.com) and links with tracking all work.
2. Keep **Add English copies** on, or turn it off for Chinese only.
3. Click **Start**. Download the results or connect them to Google Sheets, Make, Zapier or your app.

### Input example

```json
{
  "productUrls": [
    "https://detail.1688.com/offer/839141493144.html",
    "787646790056"
  ],
  "translateToEnglish": true
}
```

### Output example

Shortened: real rows carry every image, spec and variant.

```json
{
  "status": "ok",
  "offerId": "839141493144",
  "url": "https://detail.1688.com/offer/839141493144.html",
  "title": "现货跨境女装速卖通亚马逊土耳其纯色春夏连衣裙厂家批发",
  "titleEn": "Spot cross-border women's clothing AliExpress Amazon Türkiye solid color spring and summer dress manufacturer wholesale",
  "priceMin": 33,
  "priceMax": 35,
  "currency": "CNY",
  "priceMinUsd": 4.94,
  "priceMaxUsd": 5.24,
  "priceType": "by quantity",
  "priceTiers": [
    {"minQuantity": 1, "price": 35},
    {"minQuantity": 50, "price": 34},
    {"minQuantity": 100, "price": 33}
  ],
  "minOrder": 1,
  "unit": "件",
  "unitEn": "piece",
  "soldCount": 443,
  "soldTextEn": "past year 400+",
  "skuCount": 8,
  "inStockSkus": 8,
  "skus": [
    {"skuId": 5678941825718, "name": "杏色 / XXXL", "nameEn": "apricot / XXXL", "price": 35, "stock": 225822,
     "image": "https://cbu01.alicdn.com/img/ibank/O1CN01MLmtK51zS9O7RsNqv_!!2218312586712-0-cib.jpg"}
  ],
  "attributesEn": {"Fabric name": "Polyester (polyester fiber)", "Sleeve length": "long sleeves", "skirt length": "long skirt"},
  "shipsFromEn": "Guangzhou City, Guangdong Province",
  "shippingFee": 7,
  "freeShipping": false,
  "shippingPromiseEn": "Promise to deliver within 48 hours · Changfa YTO Express",
  "weightKg": 0.45,
  "dropshipping": true,
  "supplierName": "广州正祥服装厂",
  "supplierNameEn": "Guangzhou Zhengxiang Garment Factory",
  "supplierType": "factory",
  "repeatBuyRate3mPct": 49.47,
  "supplierUrl": "https://shop7702e03022777.1688.com",
  "scrapedAt": "2026-10-28T14:38:14Z"
}
```

A product that was taken down looks like this, and costs nothing:

```json
{"status": "not_found", "offerId": "1017849348967", "message": "1688 says this product does not exist or was taken down."}
```

### Status values

| status | Meaning | Charged |
|---|---|---|
| ok | Full product data | Yes |
| basic | 1688 shows this product only in its old page layout: title, price, minimum order, unit, specs, supplier, city and image, but no variants, tiers, stock or weights | No |
| not_found | The product does not exist or was taken down | No |
| invalid_link | Not a 1688 product link or offer id | No |
| failed | 1688 refused every try. Run it again later | No |

### Good to know

- **Prices are what a logged-out visitor sees.** Some suppliers show lower prices to logged-in buyers or members. The page says "login to view more discounts" in that case.
- **Per-variant products:** when each variant has its own price, `priceType` is "per variant" and `priceTiers` is empty. Sold-out variants can cost more than `priceMax`, because the range counts variants in stock.
- **Sold counts:** `soldCount` is the exact count in 1688's page data; `soldText` is the rounded text on the page ("一年内 400+" = past year 400+). When the page counts sales on all channels ("全网销量"), `soldText` can be higher than `soldCount`.
- **No reviews yet.** The rating numbers inside 1688's page data do not match the review block the page shows, so this version does not return them rather than return wrong numbers.
- **English copies** come from machine translation. Chinese fields stay in the row, so you can always check the original.
- **Proxy:** keep the default residential proxy. 1688 blocks datacenter IPs.

### Use cases

- **Sourcing and dropshipping:** compare wholesale prices, minimum orders and stock before you order from a factory.
- **Price lists in English:** turn a supplier's catalogue into an English sheet with USD prices.
- **Supplier checks:** factory or trader, service score, repeat-buy rate and location.
- **Margin research:** pair 1688 costs with your AliExpress, Amazon or Shopify prices.
- **Listings and AI:** titles, specs, images and variant tables ready for your store or an AI pipeline.

### Is it legal?

It collects only public product information that 1688.com shows to any logged-out visitor. It does not log in, solve captchas or collect personal data. Check that your use follows 1688's terms and the law where you are.

# Actor input Schema

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

One per line. Any 1688 product link (detail.1688.com, m.1688.com, links with tracking) or just the offer id, for example 735353578254.

## `translateToEnglish` (type: `boolean`):

Adds English versions of the title, specs, variant names, unit, ship-from city, supplier name and services next to the Chinese text.

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

Stop after this many products from the list.

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

How many products load at the same time.

## `proxy` (type: `object`):

Keep the default. 1688 blocks datacenter IPs.

## Actor input object example

```json
{
  "productUrls": [
    "https://detail.1688.com/offer/735353578254.html",
    "787646790056"
  ],
  "translateToEnglish": true,
  "maxItems": 1000,
  "maxConcurrency": 8,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

## `all` (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 = {
    "productUrls": [
        "https://detail.1688.com/offer/735353578254.html",
        "787646790056"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("serenido/1688-product-details").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 = {
    "productUrls": [
        "https://detail.1688.com/offer/735353578254.html",
        "787646790056",
    ],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("serenido/1688-product-details").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 '{
  "productUrls": [
    "https://detail.1688.com/offer/735353578254.html",
    "787646790056"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call serenido/1688-product-details --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,serenido/1688-product-details"
        }
    }
}
```

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/adR593rfpfECS68s2/builds/VAPCnZFHK4K3Wf6gL/openapi.json
