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.
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
Time estimate: 15-45 minutes depending on use case complexity
Prerequisites
Submit your Claude Code skill and start earning
browse install taobao.com/search-products-fac5nwCompatible with
Supported agents
| 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": []
}
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:
browse install taobao.com/search-products-fac5nwFetches 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:
.cursor/skills/search-products
Restart Cursor to activate search-products. Access via /search-productsin your agent's command palette.
Learn more:View source on GitHubSkills CLI docsAbout CursorWhat are agent skills?
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.
search-marketplace
facebook.com/search-marketplace-m9gyrc · marketplace · 2 shared tags
search-flights
google.com/search-flights-ts4g1f · travel · 2 shared tags
filter-clean-label-products
finelysourced.com/filter-clean-label-products-7xpu9m · marketplace · tag: marketplace
google-image-search
glebis/claude-skills · Backend · tag: search
exa-web-search-free
sundial-org/awesome-openclaw-skills · Productivity · tag: search
web-search
inference-sh/skills · Productivity · tag: search
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