# 1688 Product Details, Prices and SKUs API, No Login (`hhonlineventures/1688-product-details`) Actor

1688 Product Details, Prices and SKUs API: paste 1688.com product URLs or offer ids, get quantity price tiers, SKU prices and stock, attributes, images, sold count and supplier company per product. Schedule it to monitor wholesale prices. Pay per product; failed URLs are free.

- **URL**: https://apify.com/hhonlineventures/1688-product-details.md
- **Developed by:** [HH Online Ventures](https://apify.com/hhonlineventures) (community)
- **Categories:** E-commerce, Developer tools, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 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.
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 Product Details, Prices and SKUs API

**1688 Product Details, Prices and SKUs API**: paste 1688.com product URLs or offer ids, get quantity price tiers, SKU prices and stock, attributes, images, sold count and supplier company per product. Schedule it to monitor wholesale prices. Pay per product; failed URLs are free.

### What data does 1688 Product Details, Prices and SKUs API return?

Each run returns one dataset item per result with these fields:

| Field | Type | Description |
|---|---|---|
| `offerId` | string or null | 1688's numeric offer id, as a string. Null on an error row when the entry held no id. |
| `url` | string | The product page, https://detail.1688.com/offer/ID.html. On an error row, the URL that was tried (or your entry when it was not a 1688 product link). |
| `inputUrl` | string | Your entry exactly as given, so you can match rows to your list. |
| `title` | string | The product title as the supplier wrote it (usually Chinese). |
| `currency` | string | Always CNY: 1688 prices are in Chinese yuan. |
| `priceType` | string or null | How the page prices the product: rangePrice (one price per order quantity, see priceTiers) or skuPrice (a price per variant, see priceRange and skus). |
| `priceTiers` | array of object | Wholesale price by order quantity: from minQuantity units up, each unit costs price (CNY). Empty when prices are per SKU. |
| `priceRange` | object or null | Lowest and highest unit price (CNY) when prices are per SKU; null when the page prices by quantity. |
| `minOrderQuantity` | integer or null | Smallest quantity the supplier sells in one order. |
| `unit` | string or null | The selling unit as the page shows it, for example 个 (piece) or 件 (item). |
| `soldText` | string or null | The page's own sold figure, for example 10万+ (100,000 or more) or 300+. |
| `soldCount` | integer or null | The lower bound of soldText as a number: 10万+ is 100000, 3700+ is 3700. Null when the page shows none. |
| `skuProps` | array of object | The option groups buyers choose from (for example 颜色, color) with each value and its image link when the page has one. |
| `skus` | array of object | Every variant: skuId, specs (its option values), price, discountPrice, stock (units the page says can be ordered) and soldCount. A field the page does not show for a variant is null. |
| `attributes` | array of object | Product attributes from the page's parameter table (material, size, brand ...), as name and value. |
| `images` | array of string | Product image links (cbu01.alicdn.com), main images first. |
| `categoryIds` | object or null | 1688 category ids: top (top-level category) and post (the category the offer is listed in). |
| `location` | object or null | Where the product ships from: province, city and the page's own text (for example 广东省佛山市). |
| `seller` | object | The supplier business: registered company name, 1688 member id and shop link. No account handle, user id or contact details. |
| `scrapedAt` | string | When this row was collected (ISO 8601, UTC). |
| `error` | string or null | Null on a product row. On a free error row, why no product was delivered for this entry. |

### Sample output

Real output from the prefilled example input (first 1 of 1 results; lists longer than 10 entries are cut to their first 10 here, the dataset holds them all):

```json
[
  {
    "offerId": "735353578254",
    "url": "https://detail.1688.com/offer/735353578254.html",
    "inputUrl": "https://detail.1688.com/offer/735353578254.html",
    "title": "适用iphone18PRO大视窗磁吸手机壳15磨砂漏标苹果11秒变17保护套",
    "currency": "CNY",
    "priceType": "rangePrice",
    "priceTiers": [
      {
        "minQuantity": 2,
        "price": 9
      },
      {
        "minQuantity": 500,
        "price": 8.5
      },
      {
        "minQuantity": 5000,
        "price": 7.5
      }
    ],
    "priceRange": null,
    "minOrderQuantity": 2,
    "unit": "个",
    "soldText": "1.8万+",
    "soldCount": 18000,
    "skuProps": [
      {
        "name": "颜色",
        "values": [
          {
            "name": "樱桃红【纳米磨砂防指纹手汗】",
            "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01mLerzF1OFCHJw6Hvh_!!3872131675-0-cib.jpg"
          },
          {
            "name": "橙色【纳米磨砂防指纹手汗",
            "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01ewTYsW1OFCVTwByxb_!!3872131675-0-cib.jpg"
          },
          {
            "name": "沙漠金【纳米磨砂防指纹手汗】",
            "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01fERjZg1OFCTLhY97Y_!!3872131675-0-cib.jpg"
          },
          {
            "name": "钛金灰【纳米磨砂防指纹手汗】",
            "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01HTCT631OFCIm7p2og_!!3872131675-0-cib.jpg"
          },
          {
            "name": "海军蓝【纳米磨砂防指纹手汗】",
            "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01JuqQMA1OFCHQOJIWf_!!3872131675-0-cib.jpg"
          },
          {
            "name": "暗紫【纳米磨砂防指纹手汗】",
            "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01Z5vACN1OFCHTgcyBw_!!3872131675-0-cib.jpg"
          },
          {
            "name": "黑色【纳米磨砂防指纹手汗】",
            "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01rIIXQU1OFCHUpOPHV_!!3872131675-0-cib.jpg"
          },
          {
            "name": "远峰蓝【纳米磨砂防指纹手汗】",
            "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01aEtGNC1OFCHSNBuY0_!!3872131675-0-cib.jpg"
          },
          {
            "name": "粉色【纳米磨砂防指纹手汗】",
            "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01RhV1Wj1OFCHPmG3Wg_!!3872131675-0-cib.jpg"
          },
          {
            "name": "暗绿【纳米磨砂防指纹手汗】",
            "imageUrl": "https://cbu01.alicdn.com/img/ibank/O1CN01BsdHNH1OFCHZ7rG8w_!!3872131675-0-cib.jpg"
          }
        ]
      },
      {
        "name": "适用型号",
        "values": [
          {
            "name": "iPhone 18promax",
            "imageUrl": null
          },
          {
            "name": "iPhone 18pro",
            "imageUrl": null
          },
          {
            "name": "iPhone  17PROMAX",
            "imageUrl": null
          },
          {
            "name": "iPhone  17PRO",
            "imageUrl": null
          },
          {
            "name": "iPhone  17",
            "imageUrl": null
          },
          {
            "name": "iPhone 17AIR",
            "imageUrl": null
          },
          {
            "name": "iPhone 16PROMAX",
            "imageUrl": null
          },
          {
            "name": "iPhone 16PRO",
            "imageUrl": null
          },
          {
            "name": "iPhone  16",
            "imageUrl": null
          },
          {
            "name": "iPhone 16PLUS",
            "imageUrl": null
          }
        ]
      }
    ],
    "skus": [
      {
        "skuId": "5994388491383",
        "specs": [
          "海军蓝【纳米磨砂防指纹手汗】",
          "iPhone 15PLUS"
        ],
        "price": null,
        "discountPrice": null,
        "stock": 9999,
        "soldCount": 0
      },
      {
        "skuId": "6117535683935",
        "specs": [
          "钛金灰【纳米磨砂防指纹手汗】",
          "iPhone  17PROMAX"
        ],
        "price": null,
        "discountPrice": null,
        "stock": 9976,
        "soldCount": 0
      },
      {
        "skuId": "6117540027003",
        "specs": [
          "橙色【纳米磨砂防指纹手汗",
          "iPhone  17PRO"
        ],
        "price": null,
        "discountPrice": null,
        "stock": 9997,
        "soldCount": 0
      },
      {
        "skuId": "5994388491461",
        "specs": [
          "粉色【纳米磨砂防指纹手汗】",
          "iPhone 16PLUS"
        ],
        "price": null,
        "discountPrice": null,
        "stock": 9985,
        "soldCount": 0
      },
      {
        "skuId": "5994388491451",
        "specs": [
          "粉色【纳米磨砂防指纹手汗】",
          "iPhone 15PROMAX"
        ],
        "price": null,
        "discountPrice": null,
        "stock": 9997,
        "soldCount": 0
      },
      {
        "skuId": "6117535683976",
        "specs": [
          "暗绿【纳米磨砂防指纹手汗】",
          "iPhone  17PRO"
        ],
        "price": null,
        "discountPrice": null,
        "stock": 9993,
        "soldCount": 0
      },
      {
        "skuId": "6288175910358",
        "specs": [
          "黑色【纳米磨砂防指纹手汗】",
          "iPhone 18promax"
        ],
        "price": null,
        "discountPrice": null,
        "stock": 9821,
        "soldCount": 0
      },
      {
        "skuId": "6134484685798",
        "specs": [
          "樱桃红【纳米磨砂防指纹手汗】",
          "iPhone 14PLUS"
        ],
        "price": null,
        "discountPrice": null,
        "stock": 9995,
        "soldCount": 0
      },
      {
        "skuId": "5994388491411",
        "specs": [
          "暗紫【纳米磨砂防指纹手汗】",
          "iPhone 12PRO"
        ],
        "price": null,
        "discountPrice": null,
        "stock": 9998,
        "soldCount": 0
      },
      {
        "skuId": "6117540027011",
        "specs": [
          "橙色【纳米磨砂防指纹手汗",
          "iPhone 12PRO"
        ],
        "price": null,
        "discountPrice": null,
        "stock": 9998,
        "soldCount": 0
      }
    ],
    "attributes": [
      {
        "name": "材质",
        "value": "PC"
      },
      {
        "name": "功能",
        "value": "其它,磁吸,防摔,抗指纹"
      },
      {
        "name": "款式",
        "value": "防摔款"
      },
      {
        "name": "品牌",
        "value": "潮虹兔"
      },
      {
        "name": "工艺",
        "value": "磨砂"
      },
      {
        "name": "流行元素",
        "value": "磨砂"
      },
      {
        "name": "风格",
        "value": "商务,情侣,时尚,民族风,个性,潮流,奢华,创意,日韩风,复古风,中国风,潮牌,北欧风,小香风,简约,欧美,暗黑风,轻奢风,ins风"
      },
      {
        "name": "颜色",
        "value": "樱桃红【纳米磨砂防指纹手汗】,橙色【纳米磨砂防指纹手汗,沙漠金【纳米磨砂防指纹手汗】,钛金灰【纳米磨砂防指纹手汗】,海军蓝【纳米磨砂防指纹手汗】,暗紫【纳米磨砂防指纹手汗】,黑色【纳米磨砂防指纹手汗】,远峰蓝【纳米磨砂防指纹手汗】,粉色【纳米磨砂防指纹手汗】,暗绿【纳米磨砂防指纹手汗】"
      },
      {
        "name": "适用型号",
        "value": "iPhone 18promax,iPhone 18pro,iPhone  17PROMAX,iPhone  17PRO,iPhone  17,iPhone 17AIR,iPhone 16PROMAX,iPhone 16PRO,iPhone  16,iPhone 16PLUS,iPhone 15PROMAX,iPhone 15PRO,iPhone 15,iPhone 15PLUS,iPhone 14PROMAX,iPhone 14PRO,iPhone 14,iPhone 14PLUS,iPhone 13PROMAX,iPhone 13PRO,iPhone 13,iPhone 12PROMAX,iPhone 12PRO,iPhone 12,iPhone  11PROMAX,iPhone  11PRO,iPhone  11"
      },
      {
        "name": "支持订制",
        "value": "支持"
      }
    ],
    "images": [
      "https://cbu01.alicdn.com/img/ibank/O1CN01lAdPke1OFCTM0qUJK_!!3872131675-0-cib.jpg",
      "https://cbu01.alicdn.com/img/ibank/O1CN01Y6UOuGbwKnH1chua_!!3872131675-0-cib.jpg",
      "https://cbu01.alicdn.com/img/ibank/O1CN01UsmJRC1OFCTNRUGl7_!!3872131675-0-cib.jpg",
      "https://cbu01.alicdn.com/img/ibank/O1CN01DywbdD1OFCTM0owg1_!!3872131675-0-cib.jpg",
      "https://cbu01.alicdn.com/img/ibank/O1CN016z43Pk1OFCVurQGUT_!!3872131675-0-cib.jpg",
      "https://cbu01.alicdn.com/img/ibank/O1CN01mLerzF1OFCHJw6Hvh_!!3872131675-0-cib.jpg",
      "https://cbu01.alicdn.com/img/ibank/O1CN01ewTYsW1OFCVTwByxb_!!3872131675-0-cib.jpg",
      "https://cbu01.alicdn.com/img/ibank/O1CN01fERjZg1OFCTLhY97Y_!!3872131675-0-cib.jpg",
      "https://cbu01.alicdn.com/img/ibank/O1CN01HTCT631OFCIm7p2og_!!3872131675-0-cib.jpg",
      "https://cbu01.alicdn.com/img/ibank/O1CN01JuqQMA1OFCHQOJIWf_!!3872131675-0-cib.jpg"
    ],
    "categoryIds": {
      "top": 7,
      "post": 1046694
    },
    "location": {
      "province": "广东省",
      "city": "深圳市",
      "text": "广东省深圳市"
    },
    "seller": {
      "companyName": "深圳市亿佳合兴科技有限公司",
      "memberId": "b2b-38721316754ec7c",
      "shopUrl": "https://winport.m.1688.com/page/index.html?memberId=b2b-38721316754ec7c"
    },
    "scrapedAt": "2026-11-04T20:00:00.000Z",
    "error": null
  }
]
```

### Use cases

- **Sourcing and supplier research:** paste the 1688 offers you are comparing and get their wholesale price tiers, minimum order, SKU prices and stock, and the supplier company in one table.
- **Wholesale price monitoring:** schedule the actor daily or weekly on the same offer list and compare price tiers, SKU prices and stock run by run.
- **Dropshipping and cross-border catalogs:** pull titles, attributes, option values with their images, and product images for the offers you list, ready for your own translation and import.
- **Market and category research:** collect sold counts, shipping locations and category ids for a set of offers you found by hand or with another tool.
- **AI agents and automations:** a clean, typed dataset that an agent or a Make, Zapier or n8n flow can read directly, one row per product.

### Input examples

The prefilled example input. It runs in seconds and returns a handful of results:

```json
{
  "productUrls": [
    "https://detail.1688.com/offer/735353578254.html"
  ],
  "maxItems": 10
}
```

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `productUrls` | array | yes |  | 1688 product links, one per line (bulk paste works): https://detail.1688.com/offer/735353578254.html (a query string is fine and is dropped), the mobile form https://m.1688.com/offer/735353578254.html, or just the numeric offer id 735353578254. Anything else gets a free error row. Duplicates are fetched once. Up to 5,000 per run. |
| `maxItems` | integer | no |  | Stop after this many products are in your dataset. You pay per product, so this also caps the cost of a run. Leave empty to fetch every entry. |
| `maxRetries` | integer | no | `2` | How many more times a page that arrives without product data (1688 often answers a load with an error) is fetched before the product gets a free error row. Retries go through a proxy in China. |

### How much does 1688 Product Details, Prices and SKUs API cost?

This actor uses pay-per-event pricing: you pay only for results you get, plus a small fee per run.
Higher Apify plans get a lower price per result.

| Event | Free plan | Bronze plan | Silver plan | Gold plan |
|---|---|---|---|---|
| Product (per 1,000) | $4.40 | $4.40 | $4.00 | $3.50 |
| Actor start (per run) | $0.00039 | $0.00039 | $0.00039 | $0.00039 |

**1,000 results cost $4.40039 on the Bronze plan.** In one run, 1,000 results cost $4.40039 on the Free plan, $4.40039 on the Bronze plan, $4.00039 on the Silver plan and $3.50039 on the Gold plan, including the actor start.

Product: One 1688 product row with data in your dataset. Rows for entries that deliver no product (not a product link, not available, or no data after retries) are free. Actor start: Charged once when a run starts (Apify counts one start per GB of memory).
You can set a maximum cost per run in the run options; the actor stops cleanly when it is reached.

### Schedule and monitor

**Monitor 1688 wholesale prices and stock:** save your offer list as a task and schedule it daily or weekly. Each run adds a dataset with the current price tiers, SKU prices, stock and sold count of every product and a `scrapedAt` time, so you can track changes in a spreadsheet or alert on them.

Run 1688 Product Details, Prices and SKUs API on a schedule to keep your data fresh and to monitor what changed since the last run:

1. Run the actor once with your input, then save that input as a task in Apify Console.
2. Open **Schedules** in Apify Console, click **Create new**, choose the task and set how often it runs with a cron expression, for example `0 6 * * 1` for every Monday at 06:00. Schedules support time zones and daylight saving time.
3. Every scheduled run writes a new dataset. Compare it with the previous run, or send it onward with a webhook or one of the integrations below.

### Integrations and API

1688 Product Details, Prices and SKUs API runs on the Apify platform, so its results can go wherever Apify connects:

- **API:** start a run and read the results over HTTP from any language (examples below).
- **Make, Zapier and n8n:** Apify has official integrations for all three. Run the actor from a Make scenario, a Zap or an n8n workflow and pass each result to the next step, such as a spreadsheet, a CRM or a chat message.
- **Webhooks:** have Apify call your own URL when a run succeeds or fails, for example to load the new dataset into your system.
- **Schedules:** run it automatically at the times you choose (see Schedule and monitor above).
- **Downloads:** export any run's dataset as JSON, CSV, Excel, XML, HTML table, RSS or JSONL.

#### Run it with the API

One request starts a run and returns its dataset items, for runs that finish within 300 seconds. For bigger runs, start the run, then read its dataset when it finishes.

```bash
curl -X POST "https://api.apify.com/v2/actors/hhonlineventures~1688-product-details/run-sync-get-dataset-items" \
  -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"productUrls": ["https://detail.1688.com/offer/735353578254.html"], "maxItems": 10}'
```

JavaScript, with `npm install apify-client`:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('hhonlineventures/1688-product-details').call({"productUrls": ["https://detail.1688.com/offer/735353578254.html"], "maxItems": 10});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Python, with `pip install apify-client`:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("hhonlineventures/1688-product-details").call(run_input={'productUrls': ['https://detail.1688.com/offer/735353578254.html'], 'maxItems': 10})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

Your API token is in Apify Console under API & Integrations.

### Use with AI agents (MCP)

AI agents can run 1688 Product Details, Prices and SKUs API as a tool through the Apify MCP server (`https://mcp.apify.com`). The agent reads the input schema and the output fields above, fills in the input and gets the dataset back, with no glue code.

To give an agent exactly this actor, add the server to your MCP client with the actor in the `tools` parameter:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=hhonlineventures/1688-product-details"
    }
  }
}
```

On first connection your browser opens so you can sign in to Apify and approve access. A client that cannot do that can send an `Authorization: Bearer <YOUR_APIFY_TOKEN>` header instead, and a client that runs only local servers can start `npx -y @apify/actors-mcp-server` with `APIFY_TOKEN` set.

Then ask in plain language, for example:

> Run 1688 Product Details, Prices and SKUs API with this input: `{"productUrls": ["https://detail.1688.com/offer/735353578254.html"], "maxItems": 10}`. Show me the results as a table.

The server also has `search-actors`, `fetch-actor-details` and `call-actor` tools, which let an agent find this actor in Apify Store, read its details and run it. Agent runs are charged the same pay-per-event prices as any other run.

### Limits

- You bring the product links or offer ids. The actor reads the public product page of each offer; it does not search 1688 or list a shop's products.
- All text is 1688's own, mostly Chinese: titles, option names, attributes and units are not translated. Prices are in Chinese yuan (CNY).
- 1688 often answers a load with an error instead of the page. The actor then tries again (2 more times by default, through a proxy in China); if the product still does not arrive, its row is free and says so. Expect some products of a large list to need a second run.
- A page load takes from a few seconds to about a minute (a refused load takes about a minute), and about 10 pages are fetched at a time. In our 100-product test run on 2026-11-04, 91 products arrived and the run took about 10 minutes.
- Some offers have no product page in the normal layout (for example service listings); they get a free row with `product not available`.
- `stock` is the quantity the page says can be ordered, and `soldCount` is the lower bound of the page's own sold text (for example `10万+` becomes 100000); neither is an exact inventory or sales figure.
- Up to 5,000 entries per run.

#### What this actor is not

- **Not a search tool:** no keyword or image search and no category browsing. You need the product links or offer ids.
- **Not a shop or supplier list scraper:** it returns the supplier's company name, member id and shop link for each product, not lists of shops or suppliers.
- **Not a translator:** the data comes in the language 1688 shows, mostly Chinese.
- **Not a contact finder:** no supplier phone numbers, e-mail addresses, contact names or account handles.
- **Not a review scraper:** no reviews or ratings text.
- **Not a description scraper:** the long description (the image and HTML part of the page) is not fetched; no video files or download links either.

### Search terms buyers use

- 1688 scraper
- 1688 product scraper
- 1688 product details API
- 1688 price scraper
- 1688 SKU scraper
- 1688.com product data
- 1688 wholesale price monitor
- Alibaba 1688 scraper
- 1688 offer details
- Chinese wholesale product data API

### FAQ

#### What do I need to run it?

Only 1688 product links or offer ids and an Apify account. No 1688 or Taobao account, login, cookies or API key. Paste the links one per line, or send them as the `productUrls` array through the API.

#### Which link formats work?

Desktop product links like `https://detail.1688.com/offer/735353578254.html` (tracking parameters after `?` are fine and are dropped), mobile links like `https://m.1688.com/offer/735353578254.html`, and bare offer ids like `735353578254`. Search, shop and category links are not product links and get a free error row.

#### What am I charged for?

One `product` event per product row in your dataset, plus the actor start. Entries that deliver no product (not a product link, not available, or no data after the retries) are free, and so are duplicates, which are fetched once.

#### Why did some products come back as error rows?

1688 turns away part of all page loads, more on some days than others. The actor retries each product up to 2 more times by default (you can raise `maxRetries` to 4), and you pay nothing for a product that did not arrive. Running the failed offer ids again later usually gets most of them.

#### How are prices shown?

`priceType` says how the supplier prices the product. With `rangePrice`, `priceTiers` lists the unit price from each order quantity up (for example 9 CNY from 2 units, 8.5 CNY from 500). With `skuPrice`, each variant has its own price in `skus`, and `priceRange` gives the lowest and highest. `minOrderQuantity` is the smallest order the supplier accepts.

#### Is the data translated into English?

No. Titles, option values and attributes come exactly as 1688 shows them, mostly in Chinese. Field names and the structure are in English, so you can translate the text with your own tool after the run.

#### Can I track price and stock changes?

Yes. Save the input as a task and schedule it (for example every day). Each run adds a new dataset with the current prices, stock and sold counts and a `scrapedAt` time, so you can compare runs or send them to a spreadsheet.

#### What happens if I set a maximum cost per run?

The actor fetches only as many products as your limit pays for, then stops cleanly. Every product in your dataset was charged once; nothing else was.

#### Is it legal to collect this data?

The actor reads only public product pages, the same ones anyone can open without logging in, never logs in, and leaves out supplier contact details and account handles. You are responsible for how you use the data and for following 1688's terms and the laws that apply to you.

# Actor input Schema

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

1688 product links, one per line (bulk paste works): https://detail.1688.com/offer/735353578254.html (a query string is fine and is dropped), the mobile form https://m.1688.com/offer/735353578254.html, or just the numeric offer id 735353578254. Anything else gets a free error row. Duplicates are fetched once. Up to 5,000 per run.

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

Stop after this many products are in your dataset. You pay per product, so this also caps the cost of a run. Leave empty to fetch every entry.

## `maxRetries` (type: `integer`):

How many more times a page that arrives without product data (1688 often answers a load with an error) is fetched before the product gets a free error row. Retries go through a proxy in China.

## Actor input object example

```json
{
  "productUrls": [
    "https://detail.1688.com/offer/735353578254.html"
  ],
  "maxItems": 10,
  "maxRetries": 2
}
```

# Actor output Schema

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

All 1688 product rows returned by this run.

# 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"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("hhonlineventures/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"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("hhonlineventures/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"
  ],
  "maxItems": 10
}' |
apify call hhonlineventures/1688-product-details --silent --output-dataset

```

## MCP server setup

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