# Taobao & Tmall Scraper 🛍️ (prices, shops, reviews) (`tagadanar/taobao-scraper`) Actor

Taobao and Tmall products by keyword, product link, category or shop: price and original price in yuan, ship-from city, Tmall flag, shop credit level and rating scores, share of positive reviews, latest review, images and category path. Product page details included. No login, no proxy setup.

- **URL**: https://apify.com/tagadanar/taobao-scraper.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** E-commerce, Agents, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## Taobao & Tmall Scraper: product prices, shops and reviews (淘宝 天猫 商品采集)

Get Taobao and Tmall products as clean rows: title, price and original price in yuan, the city the seller ships from, whether it is a Tmall store, the shop's name, credit level, opening date and its three rating scores, the share of positive, neutral and negative reviews, the latest review, images and the category path. Search by keyword, paste product links or IDs, or list a whole category or shop.

$2.50 per 1,000 products (Free plan; less on paid plans), with the product page details included and platform usage included. No login, no cookies, no proxy to set up.

### How it works

Taobao publishes a public copy of its catalogue for visitors outside mainland China (the pages on world.taobao.com and www.taobao.com/list that search engines index). This actor reads those pages. It never logs in, never touches the login or slider wall on item.taobao.com, detail.tmall.com or s.taobao.com, and solves no captchas. Links to those pages are fine as input: the actor reads the product ID or keyword out of them.

What the public catalogue shows, and so what you can expect:

| Input | What you get |
| --- | --- |
| A keyword (`连衣裙`, `蓝牙耳机`, `iphone`) | Up to about 40 top products for it, each with its product page details |
| A product link or ID | That product's page: price, original price, ship-from, shop and review summary |
| A category ID | The category's top 20 products |
| A shop | Up to 60 of the shop's products, plus the shop's rating scores |

Taobao shows one page per keyword, category or shop. There is no page 2 on the public catalogue, so the actor does not invent one: when a keyword returns 40 products, that is everything Taobao publishes for it. To cover more, run several related keywords (they are de-duplicated across the run).

#### How it compares

| | This actor | Typical Taobao scraper on the Store |
| --- | --- | --- |
| Price per 1,000 products | $2.50, product page details included | $3 to $4 for list rows, $4.50 to $8 with details |
| Products per keyword | up to about 40 | 20 for most |
| Inputs | keywords, product links or IDs, categories, shops | usually keywords or links |
| Proxy setup | none, nothing to configure | often asks for residential proxies |
| Buyer data | none (reviewer names are masked by Taobao and not kept) | varies |

### What you get

One row per product:

| Field | Description |
| --- | --- |
| `itemId`, `url`, `publicPageUrl` | Product ID, the Taobao or Tmall product link, and its public world.taobao.com page |
| `title`, `titleShortened` | Title in Chinese as listed. Taobao shortens the title on the product page itself, so a product you paste by link comes back with the short title and `titleShortened: true`; products found by keyword, category or shop carry the full title |
| `platform`, `isTmall` | `taobao` or `tmall` |
| `price`, `originalPrice`, `hasPriceRange` | Current price and original price in yuan (CNY) from the product page; `hasPriceRange` is true when variants have different prices |
| `listingPrice`, `discountPrice`, `discountLabel` | The price shown in the search list and its promotion label (`优惠价`, `新品促销`...) |
| `priceHkd`, `priceTwd` | The same price in Hong Kong and Taiwan dollars, as Taobao converts it |
| `shipsFrom`, `freeShipping`, `deliveryRestricted` | Seller's city (`浙江杭州`), free shipping, and whether delivery is limited to some regions |
| `imageUrl`, `imageUrls` | Main image |
| `categoryId`, `rootCategoryId`, `categoryPath` | Taobao category and its path (`品牌女装 > 连衣裙 > 气质连衣裙`) |
| `sellingPoints`, `reviewTags` | The seller's highlighted selling points, and what buyers mention most with a count, when Taobao shows them |
| `shopId`, `shopName`, `shopUrl`, `sellerId`, `shopLogoUrl` | The shop |
| `shopCreditLevel`, `shopOpenedAt`, `shopItemCount`, `shopNewItemCount` | Seller credit level, opening date, products listed and recently added |
| `shopScoreDescription`, `shopScoreService`, `shopScoreDelivery` | The shop's three ratings out of 5 (item as described, service, delivery) |
| `positiveReviews`, `positiveReviewsMin`, `negativeReviews` | Review counts as Taobao shows them (`900+`) and as a number |
| `positiveRate`, `neutralRate`, `negativeRate` | Share of reviews in percent (Taobao shows these for Taobao shops, not for Tmall) |
| `latestReview` | The newest review: rating, text, date and the variant bought |
| `paymentMethods` | Payment options listed on the product page |
| `source`, `search`, `rank` | How it was found (keyword, category, shop, product), your search, and its position on Taobao's page |
| `detailsIncluded`, `scrapedAt` | Whether the product page was read, and when |

Sales counts, the full variant (SKU) table and stock are not on the public pages, so they are not in the output.

#### Example row (real, 2026-10-21)

```json
{
  "itemId": "1090460480215",
  "title": "美洋MEIYANG 小魔女连衣裙 省心可机洗_立领中长款小黑裙【70】",
  "url": "https://item.taobao.com/item.htm?id=1090460480215",
  "platform": "taobao",
  "isTmall": false,
  "price": 499,
  "originalPrice": 499,
  "currency": "CNY",
  "priceHkd": 592.56,
  "shipsFrom": "福建厦门",
  "categoryPath": ["品牌女装", "连衣裙", "气质连衣裙"],
  "shopName": "美洋MEIYANG",
  "shopCreditLevel": 20,
  "shopOpenedAt": "2015-08-11 10:30:32",
  "shopScoreDescription": 4.9,
  "shopScoreService": 4.9,
  "shopScoreDelivery": 4.9,
  "positiveRate": 100,
  "latestReview": { "rating": 5, "text": "该用户觉得商品非常好，给出好评", "date": "2026-10-21 17:11", "variant": "颜色分类:黑色连衣裙;尺码:XL" },
  "source": "keyword",
  "search": "连衣裙",
  "rank": 1
}
```

### Who uses it

- Dropshippers and sourcing agents: find the best-rated products for a keyword and check the shop (credit level, age, scores) before buying.
- Cross-border sellers: compare prices on Taobao with your own listings, in yuan, HKD or TWD.
- Brand and pricing teams: watch the price and original price of a list of products by running the same links on a schedule.
- Market research: the top products, shops and ship-from cities of a category or a keyword.

### Input examples

Top products for two keywords:

```json
{
  "searchKeywords": ["连衣裙", "蓝牙耳机"],
  "maxResultsPerSearch": 40
}
```

A list of products by link or ID (links from item.taobao.com, detail.tmall.com, detail.tmall.hk, m.intl.taobao.com and world.taobao.com all work):

```json
{
  "productUrls": [
    "https://item.taobao.com/item.htm?id=730344766230",
    "https://detail.tmall.com/item.htm?id=1077492506594",
    "1090460480215"
  ]
}
```

A category and a shop:

```json
{
  "categoryIds": ["50010850"],
  "shopUrls": ["https://shop128593474.taobao.com/"]
}
```

### Pricing

Pay per product delivered: $2.50 per 1,000 on the Free plan, less on paid Apify plans (Bronze $2.25, Silver $2.00, Gold $1.75), plus $0.001 per run. Product page details are included. Keywords, categories or shops with no public page, and pasted products Taobao no longer shows, cost nothing.

### FAQ

**Can I search in English?** Partly. Taobao publishes keyword pages for common Chinese shopping words, and for some English words it sees often (`dress`, `iphone`, `phone case`). There is no translation step. If an English keyword has no page, the run says so and you can try the Chinese word (蓝牙耳机 rather than bluetooth earphones).

**Why do I get about 40 products per keyword and not thousands?** Taobao's public catalogue shows one page per keyword: about 40 top products. The total Taobao counts for the keyword is in the run log. Run related keywords, categories or shops to cover more products.

**Does it scrape item.taobao.com or s.taobao.com directly?** No. Those pages need a Taobao login or a slider check, and this actor does neither. It reads the public catalogue pages Taobao serves outside mainland China. Your item.taobao.com and detail.tmall.com links still work as input.

**Why is the title shortened for a pasted product?** Taobao shortens titles on its public product page (`美洋MEIYANG ...`). Products found by keyword, category or shop get the full title from the list. `titleShortened` tells you which one you have.

**Does it return sales numbers or every SKU?** No, the public pages do not show them. You get the product page price, the original price and whether the price varies by variant.

**What happens to products that no longer exist?** Taobao answers them with its "page not found" redirect; the run skips them, does not charge for them, and names how many in its status message.

**Do I need a proxy?** No. There is no proxy setting; the actor picks its own route and pays for it.

**What currency are prices in?** Yuan (CNY), with Taobao's own HKD and TWD conversions alongside.

### Related actors

- [AliExpress Scraper](https://apify.com/tagadanar/aliexpress-scraper): AliExpress products, variants, shipping and reviews.
- [Alibaba Scraper](https://apify.com/tagadanar/alibaba-scraper): Alibaba.com suppliers and products.

Keywords: taobao scraper, tmall scraper, 淘宝, 天猫, 淘宝商品采集, 淘宝价格监控, 天猫店铺评分, taobao product data, taobao price tracker, taobao shop scraper, taobao category scraper, chinese ecommerce scraper, dropshipping product research, sourcing agent tool, taobao api alternative.

# Changelog

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

# Actor input Schema

## `searchKeywords` (type: `array`):

Shopping keywords, one per line (for example 连衣裙, 蓝牙耳机, 手机壳, iphone). Each keyword returns the products on Taobao's public page for it, up to about 40. Chinese keywords work best; English works only for words Taobao has a page for (dress, iphone, phone case), and nothing is translated. A Taobao search link (s.taobao.com/search?q=...) is read as its keyword.

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

Taobao or Tmall product links (item.taobao.com, detail.tmall.com, detail.tmall.hk, world.taobao.com/item/..., m.intl.taobao.com) or bare product IDs, one per line. Each one returns the product's price, ship-from city, shop scores and review summary. Products with no public page are skipped and not charged.

## `categoryIds` (type: `array`):

Taobao category numbers or world.taobao.com/category/<number>.htm links, one per line. Each returns the category's top products (Taobao shows 20).

## `shopUrls` (type: `array`):

Shop addresses like shop128593474.taobao.com, world.taobao.com/dianpu/<number>.htm links, or the shop number, one per line. Each returns up to 60 of the shop's products and its rating scores.

## `maxResultsPerSearch` (type: `integer`):

Upper limit per search line. Taobao's public pages show about 40 products per keyword, 20 per category and 60 per shop, so higher values cannot return more.

## Actor input object example

```json
{
  "searchKeywords": [
    "连衣裙"
  ],
  "maxResultsPerSearch": 20
}
```

# Actor output Schema

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

One item per Taobao or Tmall product in the default dataset.

# 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 = {
    "searchKeywords": [
        "连衣裙"
    ],
    "maxResultsPerSearch": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("tagadanar/taobao-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 = {
    "searchKeywords": ["连衣裙"],
    "maxResultsPerSearch": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("tagadanar/taobao-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 '{
  "searchKeywords": [
    "连衣裙"
  ],
  "maxResultsPerSearch": 20
}' |
apify call tagadanar/taobao-scraper --silent --output-dataset

```

## MCP server setup

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