1688 Product Detail API avatar

1688 Product Detail API

Pricing

from $10.00 / 1,000 results

Go to Apify Store
1688 Product Detail API

1688 Product Detail API

Extract detailed product data from 1688, including title, price, reviews, specifications, images, options, and categories. Perfect for market research, e-commerce insights, and data-driven decision-making

Pricing

from $10.00 / 1,000 results

Rating

0.0

(0)

Developer

Pizani

Pizani

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

🏭 1688 Product Scraper

This Actor extracts product data from 1688.com (Alibaba's Chinese wholesale marketplace) and returns a ready-to-use JSON. No browser is used — the data comes from JSON APIs, so runs are fast and cheap.


✨ What it does

  • Accepts a 1688 product_url (or a bare offer ID).
  • Extracts title (translated + original Chinese), price (USD and CNY), MOQ, stock, images, attributes and SKU variants.
  • Collects store data (name and ID).
  • Pushes the result to the Dataset (Output tab).

🔧 Input

{
"product_url": "https://detail.1688.com/offer/884771400190.html",
"resolve_shop_name": true
}
FieldRequiredDefaultDescription
product_urlOffer URL (detail.1688.com/offer/<id>.html) or the bare offer ID.
resolve_shop_nametrueMakes one extra request to fill sellerInfo.shopTitle (the main API returns it empty for 1688).

🧾 Example Output

{
"sellerInfo": {
"shopTitle": "佛山市禅城区盈多万服装店",
"shopID": "BBBN4mn-Ub-019cgQIEf1tAdg",
"shopLink": null
},
"productInfo": {
"urlproduct": "https://detail.1688.com/offer/884771400190.html",
"title": "Os Snoopy Spaceship Speedmaster 3861 Multifunctional Chronograph Moon Landing 42m Men's Watch",
"titleCN": "OS史努比飞船超霸3861多功能计时登月42m男士手表机械表跨境外贸",
"price": "124.05",
"priceCNY": "750.0",
"minOrderQuantity": 1,
"totalStock": 4,
"imgList": [
"https://cbu01.alicdn.com/img/ibank/O1CN014EtQA51x7sfFSBYiw_!!2212305196397-0-cib.jpg",
"... more images ..."
],
"atributtes": {
"Brand": "Other",
"Model": "8215/3861",
"Movement type": "Machine",
"Case material": "Stainless steel"
},
"options": [
{
"name": "Snoopy / 8215 back cover (without spaceship)",
"imgUrl": "https://cbu01.alicdn.com/img/ibank/O1CN014EtQA51x7sfFSBYiw_!!2212305196397-0-cib.jpg",
"price": "124.05",
"priceCNY": "750.0",
"stock": 199,
"skuNo": "58cac820dde29a250cd05dbf578c31f3"
}
]
}
}

🧩 Field Reference

  • sellerInfo.shopTitle: Store name (original Chinese).
  • sellerInfo.shopID: Store identifier — on 1688 this is an opaque hash, not a numeric ID.
  • sellerInfo.shopLink: Always null on 1688 — the store URL cannot be derived from the hashed ID.
  • productInfo.urlproduct: Offer URL.
  • productInfo.title / titleCN: Translated title / original Chinese title.
  • productInfo.price / priceCNY: Base price in USD / CNY.
  • productInfo.minOrderQuantity: Minimum order quantity (MOQ) — 1688 is a wholesale marketplace, so this is often greater than 1.
  • productInfo.totalStock: Total stock available.
  • productInfo.imgList: List of image URLs (main image first).
  • productInfo.atributtes: Map of product attributes (key/value).
  • productInfo.options[]: SKU variants — name (all variation values joined with /), imgUrl, price (USD), priceCNY, stock, skuNo.

⚠️ 1688 vs Taobao

If you are coming from the Taobao scraper, note these platform differences:

Taobao1688
Shop IDnumeric (1822521250)opaque hash (BBBN4mn-Ub-…)
Shop linkshop{id}.taobao.comnot derivable → null
MOQalways 1often > 1 (wholesale)
SKU namingsingle attributemultiple attributes (colour + size) joined with /

🛠️ How to use via API

import os
import time
import json
import requests
API_TOKEN = "YOUR_APIFY_API_KEY"
ACTOR_ID = "pizani~1688-product-scraper"
PRODUCT_URL = "https://detail.1688.com/offer/884771400190.html"
output_dir = "./scraped_results"
os.makedirs(output_dir, exist_ok=True)
output_file = os.path.join(output_dir, "product_data.json")
run_resp = requests.post(
f"https://api.apify.com/v2/acts/{ACTOR_ID}/runs?token={API_TOKEN}",
json={"product_url": PRODUCT_URL}
)
run_data = run_resp.json()
run_id = run_data.get("data", {}).get("id")
if not run_id:
raise Exception(f"Failed to start Actor: {run_data}")
status_url = f"https://api.apify.com/v2/actor-runs/{run_id}?token={API_TOKEN}"
while True:
status_resp = requests.get(status_url).json()
status = status_resp.get("data", {}).get("status")
if status in {"SUCCEEDED", "FAILED", "ABORTED", "TIMED-OUT"}:
break
time.sleep(5)
items_url = (
"https://api.apify.com/v2/datasets/"
f"{status_resp['data']['defaultDatasetId']}"
f"/items?clean=true&format=json&token={API_TOKEN}"
)
result = requests.get(items_url).json()
with open(output_file, "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=4)

ℹ️ Notes

  • The Actor tries a primary JSON API and automatically falls back to a secondary one, so a single blocked endpoint does not fail the run.
  • Fields can vary depending on the product and site availability. Attributes are richer on the primary source.