Taobao Category Products Scraper API
Pricing
Pay per event
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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.
| Products | Cost |
|---|---|
| 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.
| Field | Filled | What it is |
|---|---|---|
productId | 100% | Taobao's numeric item id (nid) |
title | 100% | Product title as listed, in Chinese |
price | 100% | Current price in yuan. Range seen: ¥0.01 to ¥99,999, median ¥56 |
currency | 100% | Always CNY |
productUrl | 100% | https://item.taobao.com/item.htm?id=... |
imageUrl | 100% | Main product image on img.alicdn.com |
skuId | 100% | The specific SKU the feed surfaced |
leafCategoryId | 100% | Taobao's own leaf category id. 1,248 distinct across 3,133 rows |
sellerId | 100% | Seller account id |
shopId | 100% | Shop id. 2,462 distinct shops across 3,133 rows |
shopUrl | 100% | https://shop<shopId>.taobao.com |
categoryId / category / categoryNameEn | 100% | Which category the row came from |
categoryNameZh | 95.9% | Chinese category name. Empty only for the two unlisted feeds, which Taobao gives no name |
promoBadgeImageUrl | 67.3% | Campaign badge image when the listing carries one. 4 distinct badges seen |
page / position | 100% | Where in the feed it appeared |
scrapedAt | 100% | 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
| Option | What it does |
|---|---|
categories | Which of the 20 categories to browse. Pick as many as you like, they're drained four at a time in parallel. |
maxItems | Hard cap on products across every category selected, 1 to 5,000. |
maxPagesPerCategory | How 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. |
proxyConfiguration | Optional. 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:
| Category | Chinese | Products |
|---|---|---|
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-digital | 3C数码 | ~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.