Search Taobao (China consumer marketplace) by keyword and return structured product results — title, CNY price, sold count, shop name, Tmall flag, and canonical URL — with filters for price range, ship-from location, shipping, and sort by sales / price / rating. Read-only.
Works with
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionsearch-productsExecute the skills CLI command in your project's root directory to begin installation:
Fetches search-products from taobao.com/search-products-fac5nw and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate search-products. Access via /search-products in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Automate repetitive workflows and reduce manual effort
Example
Generate reports, summarize documents, draft communications
Save 3-5 hours per week on routine tasks
Learn new skills, understand complex topics, get expert guidance
Example
Explain concepts, provide examples, suggest learning resources
Accelerate learning and skill development by 2x
Enhance output quality through reviews, suggestions, and refinements
Example
Review drafts, suggest improvements, catch errors
Improve work quality by 30-40% with less effort
1
total installs
1
this week
0
upvotes
Run in your terminal
1
installs
1
this week
—
stars
| name | search-products |
| title | Taobao Product Search |
| description | >- Search Taobao (China consumer marketplace) by keyword and return structured product results — title, CNY price, sold count, shop name, Tmall flag, and canonical URL — with filters for price range, ship-from location, shipping, and sort by sales / price / rating. Read-only. |
| website | taobao.com |
| category | marketplace |
| tags | - marketplace - ecommerce - china - taobao - tmall - search - anti-bot |
| source | 'browserbase: agent-runtime 2026-05-20' |
| updated | '2026-05-20' |
| recommended_method | browser |
| alternative_methods | - method: api rationale: >- Taobao's internal mtop API (h5api.m.taobao.com/h5/mtop.taobao.wsearch.h5search/) requires an HMAC sign over body + per-session _m_h5_tk token + appKey + timestamp. The _m_h5_tk is rotated server-side every ~30 min and only mintable through a successful page warm-up that itself trips the same Baxia anti-bot gate. No public unsigned endpoint exists — verified iter-2 2026-05-20. - method: browser rationale: >- The only honest path is the JS-rendered s.taobao.com/search?q= page driven by a stealth + residential-proxy Browserbase session. With a logged-in context-id, the wsearch XHR returns; without one, Browserbase IP ranges hit a Baxia cloud_ip_bl flat-deny (verified across 4 iters in us-east-1 + ap-southeast-1, 2026-05-20). |
| verified | true |
| proxies | true |
Search Taobao (China consumer marketplace) for products by keyword in Chinese or English and return structured product results — title, price in CNY/RMB, sold count, shop name, rating, Tmall flag, and canonical item URL — with optional filters for price range, ship-from location, shipping options, and sort by sales / price / rating. Read-only — never adds to cart, never posts a comment, never logs in.
{title, price, sold, shopName, rating, isTmall, url} per result row.Taobao's PC search page (s.taobao.com/search) is a thin React shell that fetches results from the internal mtop API at h5api.m.taobao.com/h5/mtop.taobao.wsearch.h5search/. The API requires (a) an appKey, (b) a per-session _m_h5_tk token freshly minted by visiting www.taobao.com, (c) a request sign derived from the body + token + timestamp, and (d) the cookie2 + t cookies set on first page hit. There is no public unsigned API. The browser path is the only honest option — but be aware that on Browserbase IP ranges Alibaba's Baxia anti-bot system serves a flat cloud_ip_bl deny (no captcha to solve) and the API XHR never returns. Verified across 4 iterations 2026-05-20: --verified --proxies --solve-captchas in us-east-1 and ap-southeast-1 all hit the same wall. Document this as a candidate skill until Browserbase IP rep changes or a logged-in context-id is supplied.
Create the most-stealthy session available:
SID=$(browse cloud sessions create --keep-alive --verified --proxies --solve-captchas \
--region ap-southeast-1 \
| node -e "let s='';process.stdin.on('data',c=>s+=c).on('end',()=>process.stdout.write(JSON.parse(s).id))")
export BROWSE_SESSION="$SID"
ap-southeast-1 is the closest Browserbase region to mainland China and gives the residential proxy a marginally better reputation profile than US regions, but in our 2026-05-20 run it still got cloud_ip_bl. If you have a Browserbase context with logged-in Taobao cookies (cookie2, _tb_token_, t, _m_h5_tk) baked in, pass --context-id <ID> — that bypasses the Baxia IP gate because the API trusts a warm session.
Warm up cookies on the homepage first (don't go straight to /search?q=):
browse open "https://www.taobao.com/" --remote
browse wait timeout 3000 --remote
This sets the thw=cn, cna, and tfstk cookies that the wsearch endpoint validates. Skipping this step doubles the chance of an immediate Baxia 405-then-deny redirect.
Encode the query — Chinese keywords MUST be percent-encoded (UTF-8). English passes through. Construct:
https://s.taobao.com/search?q={urlenc-query}
&sort={_coefp|_sale-desc|price-asc|price-desc|_ratesum-desc}
&loc={location-cn-name}
&start_price={n}&end_price={n}
&filter={tag1};{tag2}
&tab={all|mall|taobao|shop|bizz}
&style=list
&page={1..100}
Verified URL parameters from the page's window.__last_search_params (iter-2):
q — query (URL-encoded UTF-8 for Chinese; e.g. %E6%89%8B%E6%9C%BA for "手机").sort — _coefp (default "综合"), _sale-desc (sales desc, the default for sort=sale-desc URL param), price-asc / price-desc, _ratesum-desc (rating).tab — all (默认 "所有宝贝"), mall (Tmall only — same as tab=mall from list.tmall.com redirect), taobao (淘宝-only excludes Tmall), shop (店铺), bizz (企业购 / B2B).loc — ship-from location, accepts Chinese names: 广东, 上海, 北京, 浙江, 江苏. Mainland-China-only is implicit when loc is set to a Chinese province; for "anywhere in mainland" omit the param (国际 cross-border listings only appear if loc is left blank AND no service=tmall filter is set).start_price / end_price — integer CNY. Max value enforced server-side (~999999).filter — semicolon-joined service flags. Known: service:tmall (Tmall only), service:cod (cash-on-delivery), service:freeshipping, service:postFee=0, service:24h (24h ship), service:7day (7-day-no-reason-return).style=list returns the dense list view (more parseable than style=card).page — 1-indexed, hard cap 100. pageSize is fixed at 48 (cannot be raised).totalResults and totalPage in __last_search_params are placeholders that read 4800/100 BEFORE the API call returns — only treat them as ground truth after the product cards have rendered (see step 6).Open the constructed URL:
browse open "$URL" --remote
browse wait load --remote
browse wait timeout 8000 --remote # the wsearch XHR completes 2-6s after `load` fires
Branch on Baxia state BEFORE trying to parse cards — the page renders the skeleton + nav + pagination "1/100" + sort tabs (综合/销量/价格) regardless of whether the API succeeded, so DOM presence is not proof of data:
browse eval "(() => ({
dialog: !!document.querySelector('.baxia-dialog'),
items: document.querySelectorAll('a[href*=\"item.taobao.com\"], a[href*=\"detail.tmall.com\"]').length,
bodyTextEnd: document.body.innerText.slice(-50)
}))()" --remote
dialog: true AND items: 0 AND bodyText ends in 加载中... — Baxia denied. Stop. Emit {success: false, reason: "anti_bot_blocked"}.dialog: false AND items >= 30 — API returned. Proceed to step 6.dialog: false AND items: 0 — wait another 4 s, then re-check. If still 0, treat as no_results only after also confirming __last_search_params.totalResults === 0.Extract one record per [data-name="item"] card. Each card is a div[data-name="item"] (or div[data-name="itemNT"] for "new" Tmall cards). Per card:
[class*="title"] span[title] — getAttribute('title') gives the full text (otherwise truncated by …). Tmall cards prefix the title with a red "Tmall" badge — exclude that badge from the title string.[class*="priceInt"] + [class*="priceFloat"] pair concatenated → e.g. "1899" + ".00" → 1899.00. Some Tmall cards use a single [class*="priceWrapper"] span with embedded ¥ glyph — strip ¥ and parse.[class*="realSales"] text, e.g. "1万+人付款" → 10000. Patterns: \d+人付款 (literal), \d+万\+人付款 (×10000+). For card variants: class*=salesText.[class*="shopNameText"] (Tmall+Taobao unified).data-name="itemNT", OR detail link starts with https://detail.tmall.com/, OR card root has class containing tmall/mallStyle.null in output. Only available on the item detail page.a[href] — Tmall items: https://detail.tmall.com/item.htm?id={itemId}; Taobao items: https://item.taobao.com/item.htm?id={itemId}. Strip all query params except id for canonicalization.[class*="procity"] text — e.g. "广东 深圳" (province city).If the Baxia wall is up (the dominant case for Browserbase IPs as of 2026-05-20), there is no page-context fallback that returns real product data. Honest options:
{success: false, reason: "anti_bot_blocked"} with the URL we attempted.__last_search_params (the search query echo) and totalResults / totalPage placeholder values so the caller can confirm the URL parameters were accepted, even if data was withheld.Do not try to scrape s.m.taobao.com/h5?q=... as a fallback — it is also fully JS-rendered and depends on the same blocked mtop API. Do not try list.tmall.com/search_product.htm?q=... — it 302s to s.taobao.com/search?fromTmallRedirect=true&tab=mall (same blocked page). Do not try world.taobao.com/search/search.htm?q=... — it also 302s to s.taobao.com/search. All three were verified dead ends in iter-3.
cloud_ip_bl — verified across 4 sessions 2026-05-20 spanning bare, --verified, --verified --proxies, and --verified --proxies --solve-captchas in two regions (us-east-1, ap-southeast-1). The deny is served as an iframe https://bixi.alicdn.com/punish/punish:resource:template:baba:default_*.html?qrcode=...|cloud_ip_bl|0&action=deny — note action=deny (not action=challenge); there is no captcha for --solve-captchas to solve. The only known workaround is supplying a Browserbase context-id with a logged-in Taobao session, OR running from a non-Browserbase residential IP. Do not waste wall time iterating without one of those.亲,请登录 redirects to login.taobao.com/member/login.jhtml?redirectURL=.... The presence of this link does NOT mean login is required for the search itself; it is rendered for all anonymous sessions. Login is only required if you want to (a) save a search, (b) see "personalized" rankings, or (c) view shop-only sections.__last_search_params.totalResults = 4800 and totalPage = 100 are placeholders, not API responses. They are populated from URL params + defaults before the wsearch XHR fires. Verify they have changed (or that items.length > 0 in the DOM) before trusting them.page=101 returns page=1 data silently. To enumerate beyond 4,800 items you must narrow with category, price, or shop filters and re-search.sort=sale-desc is rewritten to internal _sale-desc; sort=price-asc → price-asc (no underscore prefix); the underscore prefix appears to be vestigial. Default (no sort) is _coefp ("综合排序" = relevance).tab=all results with a red badge. To filter Tmall-only, use tab=mall OR filter=service:tmall. To exclude Tmall, use tab=taobao. There is no native "exclude-Tmall" param if you also want shop-results — you must filter client-side on data-name="item" (Taobao) vs. data-name="itemNT" (Tmall).rating field is always null. To get rating, follow the canonical URL to item.htm?id=... and read DSR (Detail Seller Rating) from the shop info widget — that is a separate skill.1万+人付款 = 10,000+, 5000+人付款 = 5,000+, 已售10万+件 = 100,000+. Parse 万 as ×10000, + as a lower bound. Some new cards show monthSales ("月销量 1.2万+") instead of cumulative realSales — they are different metrics; document which you extracted.loc= set to a Chinese province name silently excludes Hong Kong, Macau, Taiwan, and overseas listings. To include those, omit loc AND avoid filter=service:tmall (which is mainland-only). The marketplace flag for cross-border listings is 属性->发货地 containing 海外 (overseas) — visible only if not filtered out.q must be UTF-8 percent-encoded for Chinese. GBK-encoded queries silently return zero results (Taobao's URL rewriter assumes UTF-8 since 2018).--solve-captchas is a no-op here. Baxia's cloud_ip_bl deny path does not present a captcha — it serves a "请稍后再试" / "请输入验证码" QR-code-only dialog with no human-solvable challenge. Browserbase's solver looks for a Recaptcha / hCaptcha widget and finds nothing.h5api.m.taobao.com/h5/mtop.taobao.wsearch.h5search/. Direct curl returns Baxia HTML even with proxies + spoofed cookies + Referer: https://s.taobao.com/. The endpoint validates a sign HMAC over (appKey + t + body + _m_h5_tk-prefix) and the _m_h5_tk token is rotated server-side every ~30 minutes, gated behind a successful mtop.alibaba.acl.guard.guardEntry round-trip that itself requires the same anti-bot pass. Verified blocked in iter-2.mtop.relationrecommend.wirelessrecommend.recommend — that endpoint is the one consistently observed serving Baxia denies even when wsearch succeeds. Iframes showing Access denied — We have detected unusual traffic are NOT proof that the search itself failed; check items.length on the main grid.browse snapshot is fine but heavy. The PC search page DOM is 5,000+ refs when fully populated. Prefer browse eval to extract just the fields you need rather than parsing the full a11y tree.Three distinct outcome shapes:
// Search succeeded — products extracted
{
"success": true,
"query": "phone",
"sort": "_coefp",
"filters": { "loc": null, "start_price": null, "end_price": null, "filter": null, "tab": "all" },
"totalResults": 4800,
"page": 1,
"results": [
{
"title": "Apple/苹果 iPhone 15 Pro Max 256G 全网通5G手机",
"price": 7999.00,
"currency": "CNY",
"sold": 50000,
"soldRaw": "已售5万+件",
"shopName": "Apple Store官方旗舰店",
"rating": null,
"isTmall": true,
"shipFrom": "上海",
"url": "https://detail.tmall.com/item.htm?id=735810829485"
}
]
}
// Anti-bot wall — Baxia denied the wsearch API
{
"success": false,
"reason": "anti_bot_blocked",
"antiBotSystem": "baxia",
"denyCode": "cloud_ip_bl",
"url": "https://s.taobao.com/search?q=phone&sort=sale-desc",
"lastSearchParamsEcho": { "q": "phone", "sort": "_coefp", "totalResults": 4800, "totalPage": 100 }
}
// Zero results (rare — usually a Chinese-encoding bug or over-narrow filter)
{
"success": true,
"query": "...",
"totalResults": 0,
"results": []
}
Prerequisites
Time Estimate
15-45 minutes depending on use case complexity
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use when skill capabilities match your task, clear ROI on time saved, and you can validate outputs. Best for repetitive tasks, learning, and quality improvement.
✗ Avoid when
Avoid when task requires deep expertise you can't validate, involves sensitive decisions, or when learning process is more valuable than speed of completion.
shopmeskills/mcp
aliexpress.com/search-product-p0h8a7
kostja94/marketing-skills
aaaaqwq/claude-code-skills
agentbay-ai/agentbay-skills
glebis/claude-skills
search-products fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
search-products is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
search-products fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
Keeps context tight: search-products is the kind of skill you can hand to a new teammate without a long onboarding doc.
We added search-products from the explainx registry; install was straightforward and the SKILL.md answered most questions upfront.
Solid pick for teams standardizing on skills: search-products is focused, and the summary matches what you get after install.
Keeps context tight: search-products is the kind of skill you can hand to a new teammate without a long onboarding doc.
search-products has been reliable in day-to-day use. Documentation quality is above average for community skills.
search-products is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
search-products fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
showing 1-10 of 53