# 1688 Product Details API: Price Tiers, MOQ, Specs & Supplier (`tenfoldfleet/1688-product-details-scraper`) Actor

Get the details of any 1688.com product from its link or offer ID: quantity price tiers, MOQ, specs, images, variant names, stock, sales count and supplier. Optional translation to English and a changes-only monitor mode. $2.50 per 1,000 products; failed and missing products are free.

- **URL**: https://apify.com/tenfoldfleet/1688-product-details-scraper.md
- **Developed by:** [Tenfold Fleet](https://apify.com/tenfoldfleet) (community)
- **Categories:** E-commerce, Agents, MCP servers
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 product details

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 Product Details API do?

**1688 Product Details API** turns a list of **1688.com product links or offer IDs** into structured rows. For each product you get the **quantity price tiers in CNY, the minimum order quantity (MOQ), the full spec table, gallery images, variant names with their photos, stock, units sold** and the **supplier**: company name, member ID, shop link, ship-from city and delivery promise.

Use it as a **1688 product details scraper** with no login, no cookies and no Chinese phone number. It reads the public mobile product page over plain HTTP (no browser) and costs **$2.50 per 1,000 products**. Products that 1688 removed, pages that stay blocked and invalid links are free.

Not affiliated with 1688.com or Alibaba Group. You are responsible for using the data in line with the site's terms and the laws that apply to you.

**Which Actor do I need?** This one reads product pages you already know. To find products by keyword first, use our [1688 Products Search](https://apify.com/tenfoldfleet/1688-products-search): each row has an `offerId` you can paste here. To find a product from a photo, use our [Alibaba Image Search](https://apify.com/tenfoldfleet/alibaba-image-search).

### Why use it?

- 💰 **Landed-cost and margin sheets**: pull the real price at each order quantity, the MOQ and the unit weight for a list of offers.
- 🏭 **Supplier shortlists**: see who sells the product, where it ships from, how fast they promise to dispatch and how many units they sold.
- 🌍 **Listings in your language**: add an optional translation of the title, specs and variant names to English or 15 other languages.
- 🔔 **Price and MOQ monitoring**: schedule the Actor in monitor mode and pay the full price only for products that changed.
- 🤖 **AI agents and MCP**: one product in, one flat JSON row out, with stable field names.

### What data can 1688 Product Details API extract?

| Field | What it holds |
| --- | --- |
| `offerId`, `url`, `title` | The 1688 offer ID, its product link and the Chinese title |
| `price`, `priceMax`, `currency` | Lowest and highest unit price in CNY |
| `priceTiers` | Quantity ladder: `minQuantity` and `price` per step |
| `priceType` | `quantity-tiers`, `by-variant` (price depends on the variant) or `hidden` |
| `originalPrice` | Crossed-out price during a promotion |
| `minOrderQuantity`, `unit` | MOQ and the sales unit (个, 件, 套 ...) |
| `soldCount`, `wantToBuyCount`, `availableQuantity`, `soldOut` | Sales and stock counters |
| `mixedBatch`, `mixedBatchMinQuantity`, `mixedBatchMinAmount` | Whether variants can be mixed in one order, and the thresholds 1688 shows |
| `variantType`, `variantCount`, `variants` | Variant names with their photos |
| `specs` | Every row of the attribute table as `name` and `value` |
| `images`, `videoUrl`, `descriptionUrl` | Gallery photos, product video and the long description page |
| `companyName`, `supplierLoginId`, `supplierMemberId`, `supplierUserId`, `shopUrl` | The supplier |
| `trustPassMember`, `powerMerchant` | Supplier membership flags |
| `shipsFrom`, `deliveryPromise`, `dispatchDays`, `unitWeightKg` | Logistics |
| `services`, `badges`, `dropshipping`, `crossBorder` | Buyer protection labels and offer flags |
| `categoryId`, `topCategoryId` | 1688 category IDs |
| `titleTranslated`, `specs[].nameTranslated`, `variants[].nameTranslated` ... | Only with translation on |
| `changed`, `firstSeen`, `previousPrice`, `previousPriceTiers`, `lastChangedAt` | Only in monitor mode |

**What it does not return:** a price and stock number for every single variant. In our sample of 40 product pages, the public page carried a per-variant price and stock table in only 1, so variants come as **names and images**, and by-variant pricing comes as the lowest and highest variant price. Reviews and the supplier's company profile are not included either.

### How to scrape 1688 product details

1. Open the Actor and paste your 1688 product links or offer IDs, one per line.
2. Optional: pick a language under **Translate to**, or switch on **Monitor mode** for scheduled runs.
3. Click **Start**. Ten products run in parallel: about 100 products a minute, or about 25 a minute with translation on.
4. Download the results as JSON, CSV or Excel, or read them through the Apify API.

### How much does it cost to scrape 1688 product details?

| Event | Price |
| --- | --- |
| Product details | **$0.0025** per product ($2.50 per 1,000) |
| Unchanged product, monitor mode only | $0.001 |
| Translation, optional | $0.001 per translated product |
| Actor start | $0.00005 per run |

The residential proxy is included. You are **not charged** for removed products, blocked pages, invalid links or failed translations. On the **Apify free plan** a run reads the first 5 products of your list; any paid plan removes the limit.

### Input

```json
{
    "products": [
        "https://detail.1688.com/offer/735353578254.html",
        "672929783458"
    ],
    "translateTo": "en",
    "onlyChanges": false
}
```

- `products`: desktop links, mobile links or bare offer IDs. Duplicates are read once, and several links pasted into one line are split. A run reads up to 20,000 products.
- `translateTo`: `none` (default), `en`, `es`, `pt`, `fr`, `de`, `it`, `ru`, `ar`, `tr`, `vi`, `id`, `th`, `ja`, `ko`, `hi` or `pl`.
- `onlyChanges`: monitor mode, see the FAQ.

### Output

One row per product. You can download the dataset as JSON, CSV, Excel, XML or HTML.

```json
{
    "input": "672929783458",
    "offerId": "672929783458",
    "url": "https://detail.1688.com/offer/672929783458.html",
    "title": "适用苹果17promax透明手机壳iphone16tpu防摔15太空全包13保护套",
    "price": 0.8,
    "priceMax": 1,
    "currency": "CNY",
    "priceType": "quantity-tiers",
    "priceTiers": [
        { "minQuantity": 1, "price": 1 },
        { "minQuantity": 500, "price": 0.9 },
        { "minQuantity": 99999, "price": 0.8 }
    ],
    "originalPrice": null,
    "minOrderQuantity": 1,
    "unit": "个",
    "soldCount": 903887,
    "wantToBuyCount": 23729,
    "availableQuantity": 6563245,
    "soldOut": false,
    "mixedBatch": true,
    "mixedBatchMinQuantity": 10,
    "mixedBatchMinAmount": 30,
    "variantType": "款式",
    "variantCount": 2,
    "variants": [
        { "name": "透明太空壳", "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01bP8fIy1nJC0lTbx9s_!!2206457435068-0-cib.jpg", "nameTranslated": "Transparent Space Case" }
    ],
    "specs": [
        { "name": "材质", "value": "tpu", "nameTranslated": "Material", "valueTranslated": "tpu" },
        { "name": "工艺", "value": "注塑", "nameTranslated": "Technology", "valueTranslated": "Injection Molding" }
    ],
    "images": ["https://cbu01.alicdn.com/img/ibank/..."],
    "companyName": "广州市艾尚数码科技有限公司",
    "supplierMemberId": "b2b-2206457435068a76ea",
    "shopUrl": "https://winport.m.1688.com/page/index.html?memberId=b2b-2206457435068a76ea",
    "trustPassMember": true,
    "shipsFrom": "广东广州",
    "deliveryPromise": "承诺48小时发货",
    "dispatchDays": 2,
    "unitWeightKg": 0.03,
    "services": ["7天无理由退货", "晚发必赔"],
    "dropshipping": true,
    "crossBorder": true,
    "translatedTo": "en",
    "titleTranslated": "Suitable for Apple 17 Promax Transparent Phone Case Iphone16 TPU Drop Proof 15 Space Full Cover Case",
    "error": null,
    "scrapedAt": "2026-11-10T00:33:28.135Z"
}
```

A product that could not be read comes as a short row with an `error` text and is not charged.

### Tips

- Feed it straight from [1688 Products Search](https://apify.com/tenfoldfleet/1688-products-search): map each `offerId` into `products`.
- `price` is the lowest unit price (the top quantity step or the cheapest variant). For the price at your order size, read `priceTiers`.
- Set a **maximum cost per run** in the run options to cap spending; the Actor stops when the cap is reached and adds a row that says how many products were left.
- The default run timeout is 1 hour. For lists of more than about 4,000 products (about 1,200 with translation on), raise the timeout in the run options.
- Translations are machine translations of marketplace wording. Check them before you publish a listing.

### FAQ

#### How does monitor mode work?

With `onlyChanges` on, the Actor stores a fingerprint of each product's title, price tiers, MOQ, unit, sold-out flag, variant names and specs in a key-value store in your own account (`product-details-1688-monitor`). On the next run, a product with the same fingerprint comes as a short row with `changed: false` for $0.001. A changed or new product comes as a full row for $0.0025, with `previousPrice`, `previousMinOrderQuantity` and `previousPriceTiers`. Sales and stock counters move all the time, so they do not count as a change.

#### Why did a product come back with an error?

Either 1688 removed the offer, or the page stayed blocked after 5 tries on fresh IPs. Blocked products are worth one more run later. Neither case is charged. If 40 products in a row stay blocked, the run stops early and a last row says how many products were not read.

#### Does it solve CAPTCHAs or log in?

No. It never logs in and never solves a slider. When 1688 shows an anti-bot check, the Actor drops that IP and tries a new one.

#### Can I get prices in USD?

Prices are returned in CNY, as 1688 shows them. Convert them with your own exchange rate.

#### Is scraping 1688 legal?

The Actor collects publicly visible business listings. It does not collect private personal data. Check that your use complies with the site's terms and your local laws, including the GDPR if it applies to you.

#### What does the translation cover?

The title, unit, variant type and names, spec names and values, ship-from city, delivery promise, service labels and badges. Spec values longer than 80 characters (long size or model lists) and text past about 1,200 characters per product stay in Chinese, with `valueTranslated: null`. Text without Chinese characters is copied as it is.

#### How fast is it?

Ten products run in parallel. In our tests, 40 products without translation finished in 25 seconds, and in a 100-product benchmark all 100 returned data. With English translation on, 20 products finished in 46 seconds.

# Actor input Schema

## `products` (type: `array`):

One product per line: a link such as https://detail.1688.com/offer/735353578254.html, a mobile link (m.1688.com/offer/...) or the offer ID alone (735353578254). Duplicates are read once, and several links pasted into one line are split. A run reads up to 20,000 products. Products that 1688 removed, and pages that stay blocked, come back as free error rows. On the Apify free plan a run reads the first 5 products.

## `translateTo` (type: `string`):

Optional. Adds a translated title, specs, variant names, unit, delivery promise and service labels next to the Chinese originals. Costs $0.001 extra per translated product; a failed translation is not charged and the product still comes in Chinese.

## `onlyChanges` (type: `boolean`):

For scheduled runs on the same product list. The Actor remembers each product's title, price tiers, MOQ, unit, sold-out flag, variant names and specs in a key-value store in your account (product-details-1688-monitor). A product that changed, or is new, comes as a full row with the previous price ($0.0025). An unchanged product comes as a short row with changed: false ($0.001).

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

How many product pages to read at the same time. Every request uses its own residential IP.

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

1688 blocks datacenter IPs, so the Actor uses Apify residential proxy by default. The proxy is included in the price.

## Actor input object example

```json
{
  "products": [
    "https://detail.1688.com/offer/735353578254.html",
    "672929783458",
    "1078508361444"
  ],
  "translateTo": "none",
  "onlyChanges": false,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "products": [
        "https://detail.1688.com/offer/735353578254.html",
        "672929783458",
        "1078508361444"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("tenfoldfleet/1688-product-details-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 = { "products": [
        "https://detail.1688.com/offer/735353578254.html",
        "672929783458",
        "1078508361444",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("tenfoldfleet/1688-product-details-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 '{
  "products": [
    "https://detail.1688.com/offer/735353578254.html",
    "672929783458",
    "1078508361444"
  ]
}' |
apify call tenfoldfleet/1688-product-details-scraper --silent --output-dataset

```

## MCP server setup

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