# Taobao & 1688 Scraper: Prices, Sellers & Images, No Login (`cliqtomedia/taobao-1688-scraper`) Actor

Search 1688.com (Alibaba China wholesale) offers or Taobao and Tmall products by keyword, or look up Taobao item links: price in CNY, seller, images and link for each product. No login or cookies, pay per product row.

- **URL**: https://apify.com/cliqtomedia/taobao-1688-scraper.md
- **Developed by:** [Cliqto Media](https://apify.com/cliqtomedia) (community)
- **Categories:** E-commerce
- **Security:** Limited permissions
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 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

Search 1688.com (Alibaba China) factory offers or Taobao and Tmall products by keyword, or look up Taobao item links. You get one row per product with the price in CNY, the seller, images and a link, with no login and no cookies.

It is for sourcing teams, resellers and price researchers. The smallest run is one keyword: `phone case` on 1688 gives 10 offers in about 5 seconds and costs about $0.023.

![Taobao & 1688 Products Scraper: keywords in, live 1688 and Taobao offers out, one row per product with price, seller, images and link](https://api.apify.com/v2/key-value-stores/uvUVWRhfNfvqFtCwP/records/README-HERO-20261022.png)

### Table of contents

- [What it does](#what-it-does)
- [How it works](#how-it-works)
- [Quick start](#quick-start)
- [Use cases](#use-cases)
- [Input](#input)
- [Output](#output)
- [Pricing](#pricing)
- [Limits](#limits)
- [API, export and integrations](#api-export-and-integrations)
- [Troubleshooting](#troubleshooting)
- [FAQ](#faq)
- [Related Actors](#related-actors)
- [Support](#support)

### What it does

The Actor reads public product listings from two Chinese marketplaces:

- **1688.com** — the wholesale site of Alibaba for factories and trading companies. You search by keyword.
- **Taobao and Tmall** — the biggest retail sites in China. You search by keyword or give item links or item IDs.

For each product you get the item ID, title, price in CNY, seller name, image links and the product link. On Taobao you can also open each product page to add the seller location and the shop link.

It does not log in, does not read reviews and does not collect any personal contact data.

#### Good fit

- Find factory prices on 1688 for a product idea before you order samples.
- Compare Taobao and Tmall retail prices for the same product type.
- Check the current price, shop and location of a list of Taobao items.

### How it works

1. You choose the site (`1688` or `taobao`) and add keywords or Taobao item links.
2. The Actor opens the public search or product pages of that site and reads the product cards.
3. It saves one Dataset row per product and a short `RUN_SUMMARY` record with counts and the reason if the run stopped early.

Keywords with no results and items that do not exist get their own row with status `not_found`, so you can see what was missing.

### Quick start

1. Open the **Input** tab.
2. Keep **Platform** as `1688` and **Keywords** as `phone case` (this is the prefill).
3. Keep **Max products per keyword** at `10`.
4. Click **Start**.
5. Open the **Output** tab. Check `title`, `price` and `seller` in the first rows.

Expected result: 10 rows with status `complete`, each with a price in CNY, a 1688 seller and a link to the offer.

### Use cases

| Buyer job | Input path | Output entity | Key fields | Next integration |
| --- | --- | --- | --- | --- |
| Factory price research | `platform: 1688`, `keywords` | 1688 offer | `price`, `seller`, `url`, `images` | Export to Google Sheets or CSV |
| Retail price check | `platform: taobao`, `keywords` | Taobao/Tmall product | `price`, `seller`, `sellerId`, `categoryId` | Schedule a daily run, compare prices |
| Item list lookup | `platform: taobao`, `productUrls` | Taobao/Tmall product with page details | `price`, `seller`, `location`, `sellerUrl` | API or webhook to your own system |

### Input

#### Input fields

| Field | Plain name | Type | Required | Default / prefill | Allowed values | Effect | Example | Recommendation |
| --- | --- | --- | --- | --- | --- | --- | --- | --- |
| `platform` | Site | text | no | default `1688`, prefill `1688` | `1688`, `taobao` | Which site to search | `taobao` | Use `1688` for wholesale, `taobao` for retail and item links |
| `keywords` | Search words | list of text | one of `keywords` / `productUrls` | prefill `["phone case"]` | up to 20, each up to 100 characters | One search per keyword | `["手机壳", "保温杯"]` | On Taobao use popular or Chinese words (see Limits) |
| `productUrls` | Taobao item links or IDs | list of text | one of `keywords` / `productUrls` | empty | up to 200; Taobao or Tmall links, or bare item IDs | Reads each product page | `["https://item.taobao.com/item.htm?id=732435348817"]` | Works only with `platform: taobao` |
| `maxItems` | Max products per keyword | whole number | no | default `20`, prefill `10` | 1–2000 | Stops each keyword at this many rows | `100` | Taobao gives about 100 per keyword at most |
| `includeDetails` | Open each product page (Taobao) | true/false | no | `false` | `true`, `false` | Adds `location` and `sellerUrl` to keyword results; billed as a detailed product | `true` | Turn on only when you need location or the shop link |

Empty input: the run stops with a clear message: add at least one keyword or one product link. The same keyword written twice, or the same item given as a link and as an ID, is read only once.

#### Interacting settings

| When | Input A | Input B | Effective behavior | Example | Cost/result effect |
| --- | --- | --- | --- | --- | --- |
| Product links on 1688 | `platform: 1688` | `productUrls` | Links are not read; each gets an `error` row `UNSUPPORTED_URL` | 1688 offer link | Free |
| Details on 1688 | `platform: 1688` | `includeDetails: true` | Ignored; 1688 rows come from search only | — | No extra cost |
| Product links on Taobao | `platform: taobao` | `productUrls` | Always read with page details | 5 item IDs | Each found item is a detailed product |
| Keywords and links together | `keywords` | `productUrls` | Both run; `maxItems` applies only to keywords | 1 keyword + 3 links | Rows add up |

#### Input examples

##### Factory offers on 1688

```json
{
  "platform": "1688",
  "keywords": ["phone case"],
  "maxItems": 10
}
```

Expected behavior: one 1688 search, first 10 offers.
Expected output: 10 rows with `itemId`, `title`, `price`, `seller`, `url`.
Limit or cost note: about $0.023 on the Free plan.

##### Taobao items by link

```json
{
  "platform": "taobao",
  "productUrls": ["https://item.taobao.com/item.htm?id=732435348817"]
}
```

Expected behavior: reads the product page.
Expected output: 1 row with `price`, `seller`, `location`, `sellerUrl`.
Limit or cost note: about $0.007 on the Free plan ($0.004 per item plus the $0.003 start).

### Output

#### Output fields

| Field | Meaning | Type | Can be empty? | Example / enum | Source / notes |
| --- | --- | --- | --- | --- | --- |
| `platform` | Site | text | no | `1688`, `taobao` | From input |
| `status` | Row result | text | no | `complete`, `partial`, `not_found`, `error` | See the table below |
| `itemId` | Item or offer ID | text | on error rows | `889868234534` | Tmall items use the same ID |
| `title` | Product title | text | on not_found/error rows | `iPhone 18磁吸手机壳…` | In Chinese as on the site; many Taobao titles are in traditional characters |
| `titleTruncated` | Title was cut by the source | true/false | no | `false` | |
| `price` | Price | number | yes | `3.5` | CNY, as shown on the card; on 1688 the card price, not every wholesale tier |
| `currency` | Currency | text | no | `CNY` | Always CNY |
| `seller` | Shop or company name | text | yes | `广州富琳商贸商行` | |
| `sellerId` | Seller ID | text | yes | `110699403` | Taobao only |
| `sellerUrl` | Shop link | link | yes | `https://shop.m.taobao.com/…` | Taobao with page details only |
| `location` | Seller city or province | text | yes | `广东佛山` | Taobao with page details only |
| `freeShipping` | Free shipping flag | true/false | yes | `false` | Taobao only, as the site marks it |
| `categoryId` | Taobao category ID | text | yes | `350507` | Taobao only |
| `url` | Product link | link | on error rows | `https://detail.1688.com/offer/889868234534.html` | Tmall links are given as `item.taobao.com` links |
| `images` | Image links | list | can be `[]` | `["https://cbu01.alicdn.com/…jpg"]` | |
| `keyword` | Keyword that found the row | text | for item links | `phone case` | |
| `position` | Place in the search results | number | for item links | `1` | |
| `sourceUrl` | Page or input the row came from | text | no | | For error rows, your input |
| `errorCode` | Why a row is not complete | text | yes | `NO_RESULTS`, `ITEM_NOT_FOUND`, `NO_PRICE`, `DETAIL_FAILED`, `INVALID_URL`, `UNSUPPORTED_URL`, `SOURCE_BLOCKED`, `SOURCE_ERROR` | |
| `errorMessage` | Plain note | text | yes | | What to change |
| `fetchedAt` | Time read | date | no | `2026-10-22T16:15:21.020Z` | UTC |
| `minOrder`, `sales`, `originalPrice` | Minimum order, sales count, old price | — | always empty now | `null` | The public pages this Actor reads do not show them |

#### Output entities and surfaces

| Situation | Dataset/API/KVS/live view | Result shape | User action |
| --- | --- | --- | --- |
| Normal item | Dataset, view **Overview** | `status: complete` row | Export or use `price`, `seller`, `url` |
| No results or missing item | Dataset | `status: not_found`, `NO_RESULTS` or `ITEM_NOT_FOUND` | Check the keyword or item ID |
| Partial result | Dataset | `status: partial`, `NO_PRICE` or `DETAIL_FAILED`; search fields are kept | Use the row; run the link again for details |
| Wrong link or source failure | Dataset + `RUN_SUMMARY` in the Key-value store | `status: error` row; run status message says what failed | Fix the link, or run again later |

#### Output example

```json
{
  "platform": "taobao",
  "status": "complete",
  "itemId": "732435348817",
  "title": "【礼物】格米莱3006A猫头鹰冷热双萃意式家用小型半自动咖啡机",
  "titleTruncated": false,
  "price": 5798,
  "currency": "CNY",
  "originalPrice": null,
  "minOrder": null,
  "seller": "Gemilai格米莱官方旗舰店",
  "sellerId": "110699403",
  "sellerUrl": "https://shop.m.taobao.com/shop/shop_index.htm?user_id=1919506031",
  "sales": null,
  "location": "广东佛山",
  "freeShipping": false,
  "categoryId": "350507",
  "url": "https://item.taobao.com/item.htm?id=732435348817",
  "images": ["https://img.alicdn.com/imgextra/i1/1919506031/O1CN01mmR7h91uQFlTXHMmy_!!4611686018427385455-2-item_pic.png"],
  "keyword": "咖啡机",
  "position": 1,
  "sourceUrl": "https://www.taobao.com/list/product/%E5%92%96%E5%95%A1%E6%9C%BA.htm",
  "errorCode": null,
  "errorMessage": null,
  "fetchedAt": "2026-10-22T16:15:21.020Z"
}
```

This is one full row from a Taobao keyword run with page details on. `null` means the site did not show that value for this product. A 1688 row has the same fields; `sellerId`, `location`, `freeShipping` and `categoryId` are empty there.

### Pricing

#### Pricing unit

You pay per row saved, plus a small start fee. Platform usage is included: you do not pay for compute or proxy.

| Event | Free plan | Bronze | Silver | Gold and higher |
| --- | ---: | ---: | ---: | ---: |
| Product row (search result) | $0.002 | $0.0018 | $0.0016 | $0.0014 |
| Detailed product (Taobao page read) | $0.004 | $0.004 | $0.004 | $0.004 |
| Not found (keyword without results or missing item) | $0.0002 | $0.0002 | $0.0002 | $0.0002 |
| Actor start | $0.003 | $0.003 | $0.003 | $0.003 |

- A row is charged once: a detailed product is not charged again as a product row.
- Wrong links, unsupported links and rows the site failed to give after retries (`status: error`) are free.
- The start fee is charged once per run for each 1 GB of run memory (minimum one). The default 256 MB is one start fee.
- A run with no results still pays the start fee and $0.0002 for each keyword or item not found.
- You can set **Maximum cost per run** in the run options. The Actor stops when it is reached and keeps the rows saved so far (`stopReason: CHARGE_LIMIT`).

#### Cost examples

Measured on real runs, Free plan prices.

| Scenario | Input scope | Rows | Base charge | Optional charge | Stop/cap behavior |
| --- | --- | ---: | ---: | ---: | --- |
| Prefill | 1688, `phone case`, 10 | 10 | $0.023 | — | Stops at `maxItems` |
| Small Taobao search | `保温杯`, 20 | 20 | $0.043 | — | Stops at `maxItems` |
| Taobao with page details | 1 keyword, 20, `includeDetails` | 20 | $0.083 | details included | Stops at `maxItems` |
| Bigger 1688 search | 5 keywords × 200 | 972 | $1.947 | — | Stops at `maxItems` or at the cost limit |
| No results | 1 keyword without results | 0 (+1 not found) | $0.0032 | — | Ends `not_found` |

### Limits

- **Taobao keywords:** Taobao keeps public search pages only for popular search words, mostly Chinese ones. `phone case` and `drone` work; `laptop bag` does not, but `笔记本电脑包` does. A word without a page gives a `not_found` row with this hint.
- **Taobao depth:** about 100 products per keyword at most. Use more specific keywords for more products.
- **1688 depth:** deep; about 3,500 offers in one run with the default 300-second timeout. Raise the timeout for more.
- **Page details:** about 1 product per second, so about 200 detailed products in one default run.
- **No minimum order, sales count or old price:** these fields are always empty. Use the product link to see them on the site.
- **1688 offer links are not supported** (1688 product pages need a CAPTCHA). Use keywords for 1688.
- **Prices as on the site:** a few Taobao listings show a placeholder price of 10,000 CNY or more; the Actor keeps it as shown. On 1688 the price is the card price, not each wholesale tier.
- **Titles in Chinese:** many Taobao titles come in traditional characters.
- **Not a drop-in replacement** for other Taobao or 1688 scrapers: field names are different.
- No login, no cookies, no reviews, no personal contact data.

### API, export and integrations

- **API:** start a run with `POST https://api.apify.com/v2/acts/cliqtomedia~taobao-1688-scraper/runs` and the input JSON; read rows from the run's default Dataset.
- **Export:** download the Dataset as JSON, CSV, Excel or XML from the **Output** tab or the API.
- **Scheduling:** create a Task with your keywords and add a schedule in Apify to track prices daily.
- **Webhooks / no-code:** use an Apify webhook on run success, or the Apify apps for Make, Zapier or n8n, to send rows to Google Sheets or your database.

#### Use with AI agents (MCP)

- MCP server URL with only this Actor: `https://mcp.apify.com?tools=cliqtomedia/taobao-1688-scraper`.
- Smallest useful input: `{"platform": "1688", "keywords": ["phone case"], "maxItems": 10}`.
- Key output fields: `price` (number, CNY), `seller` (shop or company), `url` (product link), `status` (`complete`, `partial`, `not_found`, `error`), `errorMessage` (what to change).
- A 10-row run takes about 5 seconds and costs about $0.023. Keep `maxItems` small for quick answers; Taobao keywords work best in Chinese.

### Troubleshooting

#### Taobao keyword gives `not_found`

Symptom: one row with `status: not_found` and `NO_RESULTS`.
Likely reason: Taobao has no public search page for this word.
Check: try the same word in Chinese.
Action: use a popular Chinese keyword, for example `笔记本电脑包` instead of `laptop bag`.

#### Fewer Taobao rows than `maxItems`

Symptom: a keyword stops at about 20–100 rows.
Likely reason: Taobao public pages show a limited number of products per keyword.
Check: the run status message says which keywords ran out.
Action: add more specific keywords.

#### Run ends with `TIME_LIMIT`

Symptom: status `partial`, message about the time limit.
Likely reason: too many keywords, a high `maxItems` or many product links for one run.
Check: `RUN_SUMMARY` counts.
Action: raise the run timeout, or split the input into smaller runs. Saved rows are kept.

#### Rows with `SOURCE_BLOCKED` or `SOURCE_ERROR`

Symptom: `status: error` rows and a failed run message.
Likely reason: the site did not answer after several retries.
Check: the `errorMessage` of the row.
Action: run again later. These rows are free. If the site fails 8 times in a row, the run stops early with the message "is not answering right now", so a site outage costs you only the start fee.

### FAQ

#### Do I need a Taobao or 1688 account?

No. The Actor reads public pages only. It does not log in and does not use cookies.

#### Can I get the minimum order quantity or sales count?

Not now. The public pages this Actor reads do not show them, so `minOrder` and `sales` are always empty.

#### Why is a price very high?

Some Taobao sellers put a placeholder price (10,000 CNY or more) on a listing. The Actor shows the price as the site does. Filter these rows out if you need real prices.

#### Is the data live?

Yes. Each run reads the sites at run time. `fetchedAt` shows when each row was read.

### Related Actors

- [Google Autocomplete Scraper](https://apify.com/cliqtomedia/google-autocomplete-scraper) — find the search words people use for a product before you search 1688 or Taobao.
- [Historical FX Rates Converter](https://apify.com/cliqtomedia/historical-fx-rates-converter) — convert CNY prices to your currency for a given date.

### Support

For a bug, question or feature request, open the Actor's **Issues** tab on Apify. Include the run ID, the platform and the keyword or link, and the `errorMessage` text. Never send tokens, cookies or other private data.

# Changelog

This Actor's version history is a separate document: https://apify.com/cliqtomedia/taobao-1688-scraper/changelog.md

# Actor input Schema

## `platform` (type: `string`):

1688: wholesale factory offers from 1688.com (Alibaba China). Taobao: retail products from Taobao and Tmall.

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

Search words in English or Chinese (for example phone case, 手机壳, 保温杯). Up to 20 per run.

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

Taobao or Tmall item links (https://item.taobao.com/item.htm?id=..., detail.tmall.com links) or bare item IDs. Up to 200 per run. Works with platform Taobao only; 1688 offer links are not supported.

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

How many products to save for each keyword. 1688 search goes deep (hundreds of pages). Taobao public pages show about 20 products per sort order or filter, so deep Taobao searches return fewer; add more specific keywords for more.

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

Taobao only. Also reads each product page to add seller location and shop link. Slower and billed as a detailed product. Product links are always read in detail.

## Actor input object example

```json
{
  "platform": "1688",
  "keywords": [
    "phone case"
  ],
  "maxItems": 10,
  "includeDetails": false
}
```

# Actor output Schema

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

Product rows as a table.

## `runSummary` (type: `string`):

Status, counts per keyword or product link, request statistics.

# 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 = {
    "platform": "1688",
    "keywords": [
        "phone case"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("cliqtomedia/taobao-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 = {
    "platform": "1688",
    "keywords": ["phone case"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("cliqtomedia/taobao-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 '{
  "platform": "1688",
  "keywords": [
    "phone case"
  ],
  "maxItems": 10
}' |
apify call cliqtomedia/taobao-1688-scraper --silent --output-dataset

```

## MCP server setup

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