Taobao Category Products Scraper API avatar

Taobao Category Products Scraper API

Pricing

Pay per event

Go to Apify Store
Taobao Category Products Scraper API

Taobao Category Products Scraper API

3,133 products came back the run that drained all 20 categories. Each row has the title, price in CNY, image, product URL, SKU, leaf category, seller id and shop id. No account, no Chinese IP, no browser. Not keyword search. $1.95 per 1,000.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Pick a Taobao category, get product rows back as JSON: product id, title, price in CNY, image, product URL, SKU id, Taobao's own leaf category id, seller id and shop id.

No Taobao account, no cookies, no captcha solving, no browser, no Chinese IP, no proxy of your own.

Read What this is not before you buy. This browses categories, it does not search keywords, and the catalogue it can reach is finite. Saying that up front is cheaper for both of us than a refund.

Price

$1.95 per 1,000 products, plus $0.002 to start a run.

Flat rate. The same $1.95 on the free plan as on any paid plan, no volume tiers, no minimum spend, no subscription. You're charged per product row returned. Sample rows and diagnostic rows are never charged, and a run that returns nothing costs only the start fee.

ProductsCost
100$0.197
500$0.977
1,000$1.952
3,133 (every product all 20 categories hold)$6.111

What a row looks like

Real row, straight out of a cloud run:

{
"productId": "14694804727",
"title": "整流二极管快恢复4007等各种型号",
"price": 2.42,
"currency": "CNY",
"productUrl": "https://item.taobao.com/item.htm?id=14694804727",
"imageUrl": "https://img.alicdn.com/bao/uploaded/i2/738263294/O1CN01XWMLM81aChmOpZuYi_!!4611686018427379966-0-item_pic.jpg",
"skuId": "3807680996276",
"leafCategoryId": "50018814",
"sellerId": "738263294",
"shopId": "68071911",
"shopUrl": "https://shop68071911.taobao.com",
"promoBadgeImageUrl": "https://img.alicdn.com/imgextra/i1/O1CN01nRidmm1UAVxdcYMzF_!!6000000002477-2-tps-104-56.png",
"categoryId": "999999207",
"category": "industrial",
"categoryNameZh": "工业用品",
"categoryNameEn": "Industrial supplies",
"page": 0,
"position": 1,
"scrapedAt": "2026-08-20T19:51:32.189Z"
}

Field coverage, counted

Counted over a run that drained all 20 categories to exhaustion: 3,133 products, 3,133 unique product ids, zero duplicates. These are actual percentages, not a wish list.

FieldFilledWhat it is
productId100%Taobao's numeric item id (nid)
title100%Product title as listed, in Chinese
price100%Current price in yuan. Range seen: ¥0.01 to ¥99,999, median ¥56
currency100%Always CNY
productUrl100%https://item.taobao.com/item.htm?id=...
imageUrl100%Main product image on img.alicdn.com
skuId100%The specific SKU the feed surfaced
leafCategoryId100%Taobao's own leaf category id. 1,248 distinct across 3,133 rows
sellerId100%Seller account id
shopId100%Shop id. 2,462 distinct shops across 3,133 rows
shopUrl100%https://shop<shopId>.taobao.com
categoryId / category / categoryNameEn100%Which category the row came from
categoryNameZh95.9%Chinese category name. Empty only for the two unlisted feeds, which Taobao gives no name
promoBadgeImageUrl67.3%Campaign badge image when the listing carries one. 4 distinct badges seen
page / position100%Where in the feed it appeared
scrapedAt100%ISO timestamp

Fields you won't find here, and why. The category feed carries a monthSale field and it's an empty string on 100% of 2,897 rows measured, so this actor doesn't ship it and doesn't promise sales volume. The price object carries an originalPrice next to the promotionPrice and the two are identical on 100% of those rows, so a "was / now" pair would be fiction. There's one honest price. isPreSale is false on every row, icons is empty on every row, and matchType and source each have a single constant value. None of them ship.

What this is not

Not a keyword search. There's no search box in this feed and no keyword parameter. You can't ask it for "red shoes". Taobao's actual keyword search API, mtop.taobao.wsearch.appsearch, sits behind an authentication wall: it answers RGV587_ERROR::SM and redirects to login.taobao.com/...?from=sm at every version, on every host, under every referer, from a home address, from two datacenter addresses, from a rented static-ISP address and from a mainland-China address. That's a login demand, not a captcha and not a geo-block, so no proxy buys past it.

Not a product-detail scraper. No descriptions, no attributes, no review text, no stock, no shipping. mtop.taobao.detail.getdetail, getdesc and rate.detaillist sit behind the same wall.

Not unlimited. Each category is a finite, deterministic pool that runs out. A run that drained all 20 returned 3,133 unique products and stopped: industrial 982, building & renovation 291, home 230, pets 217, smart appliances 190, down to digital services at 12. That's the whole reachable catalogue. Re-running doesn't conjure more, and neither does changing IP. Four different exit addresses returned identical product ids for the same category, four times out of four.

Not a live inventory feed. It's Taobao's own recommendation surface per category. The same category returns the same products call after call, but Taobao decides what's in it.

What it's good for

Price benchmarking and market research. Every row is a live listing with a price in yuan against it, and you don't need an account or a scraping stack to pull a few thousand of them.

Seller and shop discovery. A full drain carried 2,462 distinct shops, each with a working shop<id>.taobao.com URL.

Category mapping: 1,248 distinct Taobao leaf category ids tied to real products.

Training or demo data for anything that needs real Chinese e-commerce titles, prices and images.

Input

OptionWhat it does
categoriesWhich of the 20 categories to browse. Pick as many as you like, they're drained four at a time in parallel.
maxItemsHard cap on products across every category selected, 1 to 5,000.
maxPagesPerCategoryHow deep to page inside one category before moving on, 1 to 200, default 60. Each page returns 7 to 25 products; the deepest category needs 64.
proxyConfigurationOptional. The actor brings its own exit addresses.
{
"categories": ["industrial", "pets", "home"],
"maxItems": 500,
"maxPagesPerCategory": 60
}

The 20 categories, with each pool's size as measured on a full drain:

CategoryChineseProducts
industrial工业用品~982
building-materials家装建材~291
home家享家居~230
pets宠物生活~217
smart-appliances智能家电~190
commercial-agri商业农业~152
daily-goods日用百货~148
sports-outdoor运动户外~125
fashion服饰时尚~116
jewellery珠宝饰品~109
stationery文教香薰~94
food-fresh食品生鲜~91
unlisted-109~79
toys玩具潮玩~60
flowers-garden鲜花园艺~59
auto汽车用品~56
unlisted-206~51
3c-digital3C数码~37
appliances家用电器~34
digital-life数字生活~12

The category list is a closed set on purpose. Taobao answers SUCCESS with an empty result for any id outside its own list, so an unknown category looks exactly like an exhausted one. A free-text field would fail silently instead of telling you.

Speed and limits, measured

Throughput. 1,000 products in 31 seconds on Apify at the default 1 GB, four categories in parallel. A 25-product run finishes in 7 seconds. Draining all 20 categories took 16 minutes.

Rate limit. None found. 443 consecutive requests on a single datacenter exit at 92 requests per minute returned 442 successes and zero challenges. No captcha, no session death, no rotation needed.

Latency. 0.3 to 0.6 seconds per request while the pagination cursor is short. It degrades to 5 to 10 seconds per request on a deep drain, because the cursor is the list of every product id already seen and it passes 10,000 characters. A full 982-product drain of one category took about 6 minutes on a slow exit and under a minute on a fast one.

Depth. Each category exhausts deterministically. Taobao returns SUCCESS with an empty result when there's nothing left, and the actor stops there rather than paging into nothing.

Rotation. The actor rotates exit addresses when one is refused, but rotation adds zero rows. The pool is deterministic per category, so this actor deliberately doesn't burn proxy money chasing volume that doesn't exist.

Proxy. Plain Apify datacenter addresses. Residential is never requested. Measured PROXY_RESIDENTIAL_TRANSFER_GBYTES: 0 on every run.

How it works, and how it can break

The actor talks to Taobao's mobile JSON gateway (h5api.m.taobao.com) using the same md5 request signature Taobao's own web client uses, with a token minted from a _m_h5_tk cookie. The category feed is addressed by an application id lifted from a versioned Alibaba CDN bundle (@ali/pegasus-project-tbhome-2024). Alibaba can retire that id without notice. If they do, the gateway will answer something other than SUCCESS.

When that happens this actor fails loudly. It writes an uncharged TAOBAO_API_CHANGED row carrying the exact ret string Taobao returned, and the run is marked failed. It won't quietly return zero rows and bill you for them. Every failure path, whether that's a blocked exit, an empty category or an unknown category, writes an uncharged diagnostic row saying what happened.

FAQ

Can I search Taobao for a keyword with this? No. Taobao's keyword search API requires a logged-in, real-name-verified Taobao account. Without one it returns RGV587_ERROR::SM and a login redirect. This actor browses categories instead.

Do I need a Taobao account, cookies, or a Chinese IP? None of the three, and no browser either. The category feed answers plain HTTP requests from ordinary datacenter addresses.

How many products can I get in total? 3,133 unique products across all 20 categories, measured on a run that drained every one of them. industrial alone holds 982. Each category has a fixed pool. More requests and more IP addresses don't enlarge it.

Why is there no sales volume field? Because the feed's monthSale field is empty on 100% of the rows measured. Any sales volume shown from this surface would be invented.

Why is there no "original price" vs "sale price"? Because Taobao returns both and they're identical on 100% of 2,897 rows measured. One price is the honest answer.

Do the same products come back if I run it twice? Yes, largely. The pool per category is deterministic. That's useful if you're tracking prices over time and a limitation if you expected an endless firehose.

What do I pay if the run fails or finds nothing? Only the $0.002 start fee. Diagnostic and sample rows are never charged.

Can I get product descriptions, reviews or stock levels? Not from this actor. Those endpoints are behind the same login wall as keyword search.

Output fields

productId, title, price, currency, productUrl, imageUrl, skuId, leafCategoryId, sellerId, shopId, shopUrl, promoBadgeImageUrl, categoryId, category, categoryNameZh, categoryNameEn, page, position, scrapedAt.