# Taobao Tmall Product Detail Scraper — SKUs (`khadinakbar/taobao-product-detail-scraper`) Actor

Scrape public Taobao and Tmall product details from item URLs or numeric IDs. Returns title, CNY price, shop, images, ratings, and SKU hints via cookieless world.taobao.com HTTP. Use the sibling search Actor for keyword listing cards.

- **URL**: https://apify.com/khadinakbar/taobao-product-detail-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** E-commerce, Automation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 product detail scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Taobao Tmall Product Detail Scraper — SKUs

Turn a Taobao or Tmall **item URL or numeric ID** into **one dataset row per public product**, with title, CNY price, shop, images, ratings, Tmall flag, SKU hints, and source URL. This Actor reads the crawlable world.taobao.com item page over HTTP on Apify, with proxy rotation, scheduling, API access, and MCP-ready output.

Taobao and Tmall are trademarks of their respective owners. This independent Actor is not affiliated, associated, or endorsed by Alibaba Group, Taobao, or Tmall.

### Best fit for this Actor

This Actor is designed as a focused standalone workflow for public Taobao and Tmall product detail:

- Ecommerce analysts and sourcing teams who already have an item URL or ID and need price, shop, and SKU hints.
- Arbitrage researchers comparing a known Taobao or Tmall SKU against another catalogue.
- AI agents that call a bounded detail tool through [Apify MCP](https://mcp.apify.com) and read the dataset plus `OUTPUT`.

When the same research job starts from a keyword instead of a known item, start with [Taobao Tmall Search Scraper](https://apify.com/khadinakbar/taobao-tmall-search-scraper) then pass item URLs here. For Alibaba B2B supplier cards, use [Alibaba Listings Scraper](https://apify.com/khadinakbar/alibaba-listings-scraper).

### Practical scenario

A merchandiser has `https://item.taobao.com/item.htm?id=974671890820` from a supplier chat. They set `maxItems: 1` and `includeVariants: true`. The Actor returns title, price, originalPrice, shopName, platform, images, and SKU property strings. They export JSON and file the row next to the search-listing card for the same item.

### Input

#### Input fields

| Field | Type | What it controls |
|---|---|---|
| `productUrls` | array | Taobao, Tmall, world.taobao.com item URLs, or short links such as `e.tb.cn`. Prefill: `https://item.taobao.com/item.htm?id=974671890820`. |
| `itemIds` | array | Numeric item IDs when you have digits only. |
| `maxItems` | integer | Hard cap on billed rows. Prefill 1, default 10, maximum 100. |
| `includeVariants` | boolean | Collect public SKU property strings from the world catalogue page. |
| `maxConcurrency` | integer | Parallel HTTP fetches, 1–5. |
| `proxyConfiguration` | object | Direct fetch first, then Apify Residential. |

#### Quick start input

```json
{
  "productUrls": ["https://item.taobao.com/item.htm?id=974671890820"],
  "maxItems": 1,
  "includeVariants": true
}
```

### What data you receive

One default-dataset record is one public product-detail row. You can download the dataset in JSON, HTML, CSV, or Excel.

| Field | Description |
|---|---|
| `itemId` | Numeric item identifier |
| `title` | Public product title |
| `price` / `originalPrice` | Displayed yuan prices when public |
| `currency` | ISO currency, usually CNY |
| `platform` / `isTmall` | Tmall vs Taobao from public title or shop |
| `images` | Public image URLs |
| `shopName` / `shopUrl` / `shopId` | Storefront identity when exposed |
| `rating` / `salesVolume` | Public signals when the catalogue shows them |
| `variants` | SKU property strings when `includeVariants` is true |
| `specs` / `description` / `shipping` | Extra public text when present |
| `worldUrl` / `sourceUrl` | Catalogue URL and original input URL |
| `scrapedAt` | ISO 8601 collection time |

#### Illustrative output record

```json
{
  "itemId": "974671890820",
  "title": "Apple iPhone 17",
  "price": 5899,
  "originalPrice": 5999,
  "currency": "CNY",
  "platform": "tmall",
  "isTmall": true,
  "shopName": "Example Tmall Store",
  "images": ["https://img.alicdn.com/imgextra/example.jpg"],
  "variants": [{ "skuId": null, "propertiesText": "颜色:白;容量:256GB", "price": null, "stock": null }],
  "worldUrl": "https://world.taobao.com/item/974671890820.htm",
  "sourceUrl": "https://item.taobao.com/item.htm?id=974671890820",
  "extractionMethod": "world_taobao_http",
  "scrapedAt": "2026-09-16T00:00:00.000Z"
}
```

### Pricing

Billing is **Pay per event** plus **platform usage**. Confirm the live unit prices on the Actor **Pricing tab** before a large run.

| Event | Price | When it fires |
|---|---|---|
| Actor start | $0.00005 | Once per run |
| Product detail | $0.008 | Each validated product-detail row saved to the dataset |

`maxItems` is the event-cost ceiling: 1 product is about $0.008 plus start and platform usage; 10 products are about $0.08 plus start and platform usage. Invalid URLs and fully unavailable targets skip the product-detail event.

### Use through the API

```bash
curl "https://api.apify.com/v2/acts/khadinakbar~taobao-product-detail-scraper/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"productUrls":["https://item.taobao.com/item.htm?id=974671890820"],"maxItems":1}'
```

Read default dataset items after the Actor reaches a terminal status.

### Use with AI agents through Apify MCP

> Scrape the public Taobao or Tmall product at https://item.taobao.com/item.htm?id=974671890820, keep at most 1 row, return title, CNY price, shop, Tmall flag, images, SKU hints, and source URL, then report the run outcome and dataset.

Inspect `OUTPUT` for the outcome, read the dataset rows, keep `sourceUrl` as provenance, and respect `maxItems` as the cost control. Connect through [Apify MCP](https://mcp.apify.com) for the current client setup.

### Best results and workflow guidance

- Start with one known item URL and `maxItems: 1` to confirm the catalogue shape.
- Paste `detail.tmall.com` or `item.taobao.com` URLs; the runtime fetches the matching world.taobao.com item page.
- Use numeric `itemIds` when you already have the digits from a search export.
- Turn on `includeVariants` when you need public SKU property strings.
- Pair this detail workflow with [Taobao Tmall Search Scraper](https://apify.com/khadinakbar/taobao-tmall-search-scraper) when the job starts from a keyword.
- Confirm the Pricing tab and platform usage before raising `maxItems`.

Public world.taobao.com item pages are the supported surface. Empty or delisted items finish as a completed empty dataset. Catalogue pages that stay unavailable finish with an upstream outcome so you can retry with a residential proxy route.

### Builder's note

I built this as an HTTP-only SKU after I found that mainland item and Tmall detail hosts stay behind login and WAF pages. The public world catalogue embeds `normalItemResponse` JSON that Chrome-TLS can read, so the Actor rewrites item URLs to that surface and charges only after a schema-validated row is saved.

### Responsible use

Use this Actor only on public product pages you are authorized to access, and in line with applicable laws and the site terms of service. Keep personal data out of the workflow unless you have a lawful basis. This Actor is provided for legitimate product research, price monitoring, and sourcing.

# Actor input Schema

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

Product page URLs to scrape, one per line. Accepted hosts include item.taobao.com, detail.tmall.com, world.taobao.com/item, and short links such as e.tb.cn. Example: https://item.taobao.com/item.htm?id=974671890820. Shop homepages and s.taobao.com search URLs are ignored.

## `itemIds` (type: `array`):

Numeric item identifiers when you do not have a full URL. Enter digits only, for example 974671890820. Each ID is fetched from https://world.taobao.com/item/{id}.htm. This is not a shop seller ID or a search keyword.

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

Hard cap on billed product-detail rows for this run. The Actor stops before the cap and checks again immediately before every paid dataset write. Prefill 1; default 10 costs at most $0.08 in product-detail events plus the $0.00005 start event. This does not raise HTTP concurrency.

## `includeVariants` (type: `boolean`):

When true, collect public SKU property strings shown on world.taobao.com review snippets. Leave true for a richer parent record. Turn false for a smaller parent-level row. This does not unlock private inventory or member prices.

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

How many item pages to fetch in parallel. Keep 1–3 for stability on world.taobao.com. Default and prefill are 2. This does not raise the maxItems billing cap.

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

Optional Apify Proxy override. The Actor tries a direct world.taobao.com fetch first, then Residential. Prefer RESIDENTIAL when the direct hop is blocked. This does not change billed event prices.

## Actor input object example

```json
{
  "productUrls": [
    "https://item.taobao.com/item.htm?id=974671890820"
  ],
  "itemIds": [
    "974671890820"
  ],
  "maxItems": 1,
  "includeVariants": true,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Validated product detail rows with price, shop, images, variants, and source URLs.

## `output` (type: `string`):

Compact stable terminal outcome and result count.

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

Detailed safe diagnostics, cost-cap state, and route counts.

# 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://item.taobao.com/item.htm?id=974671890820"
    ],
    "itemIds": [],
    "maxItems": 1,
    "includeVariants": true,
    "maxConcurrency": 2,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/taobao-product-detail-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 = {
    "productUrls": ["https://item.taobao.com/item.htm?id=974671890820"],
    "itemIds": [],
    "maxItems": 1,
    "includeVariants": True,
    "maxConcurrency": 2,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/taobao-product-detail-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 '{
  "productUrls": [
    "https://item.taobao.com/item.htm?id=974671890820"
  ],
  "itemIds": [],
  "maxItems": 1,
  "includeVariants": true,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call khadinakbar/taobao-product-detail-scraper --silent --output-dataset

```

## MCP server setup

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