Extract product search results from TikTok Shop by keyword and country region — returns product id, title, price, currency, seller, shop, rating, review count, sold count, images, SKU variants, brand, and product URL. Use when user mentions TikTok Shop, tiktok shop scraper, tiktok shop search, tikto
Coding
Scavio Tiktok Shop
Try itSearch TikTok Shop products with exact prices, read product details, reviews, the category tree, category and seller catalogs, and resolve any TikTok Shop link to an id. 8 endpoints, all 1 credit.
What it does
Search TikTok Shop products with exact prices, read product details, reviews, the category tree, category and seller catalogs, and resolve any TikTok Shop link to an id. 8 endpoints, all 1 credit.
The skill document
TikTok Shop via Scavio
Search the TikTok Shop catalog, read full product detail, pull paginated reviews with a star histogram, walk the global category tree, list a category's or a seller's products, and resolve any TikTok Shop URL or share link to a product_id / shop_id. All endpoints return structured JSON.
When to trigger
Use this skill when the user asks to:
- Search TikTok Shop for products by keyword, with prices, ratings and sold counts
- Get autocomplete or keyword expansion for a TikTok Shop search term
- Read a product's description, images, variants, stock, shipping and seller profile
- Pull a product's reviews, filter them by rating or media, or get the star distribution
- Browse the TikTok Shop category tree or list products in a category
- List a seller's / shop's product catalog
- Turn a TikTok Shop link (canonical page, affiliate share link,
vt.tiktok.comshort link) into an id - Do e-commerce price research, competitor catalog tracking or review mining on TikTok Shop
This skill covers the shop side of TikTok. For creator profiles, videos, comments and hashtags use the scavio-tiktok skill instead. There is no video-to-product join available: you cannot ask "which products are attached to this TikTok video".
Two things to read before you call anything
1. A /search result is not guaranteed to resolve on /product. Measured on 25 product ids taken straight from /tiktok-shop/search, only 11 (44%) returned detail from /tiktok-shop/product. TikTok has no detail data for the rest, permanently — retries do not help and no other region helps. Those ids answer HTTP 404, and that is a normal outcome, not an error. The 404 body is {"error": "Product not found in this region.", "credits_used": 1, "credits_remaining": N} — there is no data key on it at all, so branch on the status code, never on a data field. Skip the item and move on; do not retry it, do not report a failure to the user, and do not treat search -> product as a reliable pipeline. Build listing workflows on /search, /category/products and /shop/products, which return complete rows. If you need something for an id detail cannot resolve, /product/reviews is the fallback: measured on 8 ids that 404 on /product, 8 of 8 returned HTTP 200 from /product/reviews and 7 of 8 carried at least one review (counts 15, 0, 2, 20, 4, 6, 20, 11). That is a measured sample of 8, not a guarantee.
2. /product does not return a price. TikTok masks the price digits on the product page, so price.current and price.original come back as null on that endpoint. Exact prices are returned by /search, /shop/products and /category/products — take the price from a listing call, and use /product only for the fields listings do not carry (description, images, variants, stock, shipping, full seller profile, category path, top reviews). Never derive, estimate or guess a price.
Setup
Get a free API key at scavio.dev (50 free credits to get started, no card required):
export SCAVIO_API_KEY=sk_live_your_key
Every request is a POST with a JSON body and:
Authorization: Bearer $SCAVIO_API_KEY
Endpoints
Base URL: https://api.scavio.dev. All paths are under /api/v1/tiktok-shop. Every endpoint costs 1 credit.
| Endpoint | Credits | Description |
|---|---|---|
POST /api/v1/tiktok-shop/search | 1 | Search products by keyword, with exact prices (US catalog) |
POST /api/v1/tiktok-shop/search/suggestions | 1 | Keyword autocomplete and expansion, 8 regions |
POST /api/v1/tiktok-shop/product | 1 | Full product detail (no price -- see above) |
POST /api/v1/tiktok-shop/product/reviews | 1 | Paginated reviews, up to 200 per call |
POST /api/v1/tiktok-shop/categories | 1 | The global category tree (28 top-level, 240 nodes) |
POST /api/v1/tiktok-shop/category/products | 1 | Products in a category, with exact prices |
POST /api/v1/tiktok-shop/shop/products | 1 | A shop's catalog, 30 per page, with exact prices |
POST /api/v1/tiktok-shop/resolve | 1 | Resolve a TikTok Shop URL to a product_id / shop_id |
Workflow
- Find products: call
/tiktok-shop/searchwithsearch. Each row already carriesprice.current,rating,sold_countandshop— for price and popularity work you are done here, no second call needed. - Widen a query: call
/tiktok-shop/search/suggestionswith a partialsearchto get related and corrected keywords, then search those. - Deep-dive a product: call
/tiktok-shop/productwithproduct_idfor description, images, variants and stock, shipping, the full seller profile, the category path and up to 3 top reviews. Expect an HTTP 404 on roughly half of ids taken from search; skip those, or fall back to step 4. - Mine reviews: call
/tiktok-shop/product/reviewswithproduct_id. Raisepage_size(up to 200) rather than making more calls — each call is 1 credit regardless of size. This endpoint also answers for ids/productcannot resolve: on 8 measured 404-on-detail ids, 8 of 8 returned HTTP 200 and 7 of 8 had at least one review, so it is the fallback detail source for those products. - Browse by category: call
/tiktok-shop/categoriesonce to get ids, then/tiktok-shop/category/productswith acategory_id(level 1 or 2 both work). - Track a seller: get a
shop_idfrom any product card or from/tiktok-shop/product, then call/tiktok-shop/shop/products. - Start from a link: call
/tiktok-shop/resolvewith any TikTok Shop URL and feed the returned id into the endpoints above.
Paginated endpoints (search, category/products, shop/products) return next_cursor; pass it back as cursor for the next page. Stop when next_cursor is null or has_more is false. Cursors are opaque strings — never build, edit or reuse one across endpoints.
Parameters
Regions are US, GB, SG, MY, PH, TH, VN, ID unless noted. Coverage is genuinely uneven: search is US-only and takes no region at all, category listings serve US and GB only, and categories is global so it takes no parameters.
Search (/search)
| Parameter | Type | Default | Description |
|---|---|---|---|
search | string | required | Search query (1-200 chars) |
cursor | string | -- | Opaque cursor from a prior next_cursor |
US catalog only. There is no sort and no price/rating filter — TikTok exposes no way to submit one, so none is invented here.
Search suggestions (/search/suggestions)
| Parameter | Type | Default | Description |
|---|---|---|---|
search | string | required | Partial query (1-100 chars) |
region | string | US | US, GB, SG, MY, PH, TH, VN, ID |
Suggestions are not guaranteed prefix matches: a misspelling comes back as a typo correction, and results can include brand and shop names.
Product (/product)
| Parameter | Type | Default | Description |
|---|---|---|---|
product_id | string | required | 6-25 digits, e.g. 1732293553906094315 |
region | string | US | US, GB, SG, MY, PH, TH, VN, ID |
Returns no price (price.current / price.original are null) — get the price from /search, /shop/products or /category/products. Answers HTTP 404 for roughly 56% of ids returned by /search; that is a normal, permanent outcome for those products, not an error and not worth retrying. The 404 body carries error plus the credit fields and no data key, so test the status code. /product/reviews still answered for every one of the 8 unresolvable ids measured (7 of them with at least one review), so try it before dropping the product.
Product reviews (/product/reviews)
| Parameter | Type | Default | Description |
|---|---|---|---|
product_id | string | required | 6-25 digits |
page | number | 1 | 1-based page number (1-500) |
page_size | number | 20 | Reviews per call (1-200) |
sort | string | relevant | relevant or recent |
rating | number | -- | Only reviews with this star rating (1-5) |
has_media | boolean | false | Only reviews carrying a photo or video |
verified_only | boolean | false | Only verified purchases |
region | string | US | US, GB, SG, MY, PH, TH, VN, ID |
sort: "recent" is fresher but far more text-sparse — many rows are stars only, with no text and no images. sort: "relevant" (the default) is text-complete and image-heavy.
has_media and verified_only share one upstream filter slot: if both are true, has_media wins. The response echoes what was actually applied in filters_applied, so read that rather than assuming.
Categories (/categories)
No parameters. Send {}. Category ids are identical in every region and names are always English. The tree is two levels deep — that is all TikTok publishes; do not expect deeper nesting.
Category products (/category/products)
| Parameter | Type | Default | Description |
|---|---|---|---|
category_id | string | required | 4-20 digits, from /tiktok-shop/categories; level 1 or 2 both work |
cursor | string | -- | Opaque cursor from a prior next_cursor |
region | string | US | US or GB only |
Page size varies upstream (15-20 items), so always paginate with next_cursor instead of assuming a fixed size. These listings are shallow: after a few pages TikTok stops returning new products and has_more turns false — that is the end of the listing, not an error.
Shop products (/shop/products)
| Parameter | Type | Default | Description |
|---|---|---|---|
shop_id | string | required | 6-25 digits (called seller_id elsewhere on TikTok) |
cursor | string | -- | Opaque cursor from a prior next_cursor |
region | string | US | US, GB, SG, MY, PH, TH, VN, ID |
30 products per page with exact prices. Follower count, shop location and shop-level rating are not available here — only /tiktok-shop/product carries the full shop profile.
Resolve (/resolve)
| Parameter | Type | Default | Description |
|---|---|---|---|
url | string | required | A TikTok Shop URL (max 2000 chars) |
Accepted forms: shop.tiktok.com product (/pdp/...) and store (/store/...) pages, tiktok.com/view/product/... and tiktok.com/view/shop/..., affiliate-*.tiktok.com share links, and vt.tiktok.com / tiktok.com/t/ short links. Anything else returns 400 and is not billed.
Examples
# 1. Search -- the field is "search", not "query". Prices here are exact.
curl -s -X POST https://api.scavio.dev/api/v1/tiktok-shop/search \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"search": "protein powder"}'
# 2. Next page -- pass next_cursor back as cursor
curl -s -X POST https://api.scavio.dev/api/v1/tiktok-shop/search \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"search": "protein powder", "cursor": "eyJrIjoic2VhcmNoIiwibyI6MzAsInQiOiIyMDI2..."}'
# 3. Keyword expansion
curl -s -X POST https://api.scavio.dev/api/v1/tiktok-shop/search/suggestions \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"search": "wireless", "region": "US"}'
# 4. Product detail -- no price here; an HTTP 404 for this id is normal
curl -s -X POST https://api.scavio.dev/api/v1/tiktok-shop/product \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"product_id": "1729508370969629931", "region": "US"}'
# 5. Reviews -- one call of 200 costs the same 1 credit as one call of 20
curl -s -X POST https://api.scavio.dev/api/v1/tiktok-shop/product/reviews \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"product_id": "1729508370969629931", "page": 1, "page_size": 200, "sort": "relevant"}'
# 6. Only 5-star reviews that carry a photo or video
curl -s -X POST https://api.scavio.dev/api/v1/tiktok-shop/product/reviews \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"product_id": "1729508370969629931", "rating": 5, "has_media": true}'
# 7. The category tree -- no parameters
curl -s -X POST https://api.scavio.dev/api/v1/tiktok-shop/categories \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
# 8. Products in a category (US or GB only)
curl -s -X POST https://api.scavio.dev/api/v1/tiktok-shop/category/products \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"category_id": "601450", "region": "US"}'
# 9. A seller's catalog
curl -s -X POST https://api.scavio.dev/api/v1/tiktok-shop/shop/products \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"shop_id": "7495514739648989419", "region": "US"}'
# 10. Resolve a share link to an id
curl -s -X POST https://api.scavio.dev/api/v1/tiktok-shop/resolve \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"url": "https://vt.tiktok.com/ZT2AHoGsE/"}'
Chaining it, with the 404 handled the way it should be:
import requests
BASE = "https://api.scavio.dev"
# Your key from https://scavio.dev. Load it from your environment or secret
# store in real code - keep it out of source control.
API_KEY = "sk_your_key_here"
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
def call(path, body):
return requests.post(f"{BASE}/api/v1/tiktok-shop/{path}", headers=HEADERS, json=body)
# 1. Search carries the exact price already -- this is the authoritative price.
results = call("search", {"search": "protein powder"}).json()
for card in results["data"]["products"]:
print(card["product_id"], card["price"]["current"], card["rating"]["score"], card["title"][:60])
# 2. Detail is best-effort. Roughly 56% of search ids have no detail upstream:
# an HTTP 404 is a normal outcome -- skip the item, do not retry. Branch on
# r.status_code: the 404 body is {"error": ..., "credits_used": 1,
# "credits_remaining": N} and has no "data" key to test.
for card in results["data"]["products"]:
r = call("product", {"product_id": card["product_id"], "region": "US"})
if r.status_code == 404:
continue # no detail exists for this product, permanently
r.raise_for_status()
detail = r.json()["data"]
# detail["price"]["current"] is None -- keep the price from the search card.
print(detail["title"], len(detail["variants"]), "variants", card["price"]["current"])
# 2b. Reviews are the fallback for an id detail cannot resolve. Measured on 8
# such ids: 8/8 returned HTTP 200 here and 7/8 had at least one review --
# a small measured sample, so still handle the empty case.
for card in results["data"]["products"]:
if call("product", {"product_id": card["product_id"]}).status_code != 404:
continue
rv = call("product/reviews", {"product_id": card["product_id"], "page_size": 200})
if rv.status_code != 200:
continue
rows = rv.json()["data"]["reviews"]
print(card["product_id"], len(rows), "reviews", "(none)" if not rows else rows[0]["text"][:60])
# 3. Reviews: one 200-row call instead of ten 20-row calls, same 1 credit.
reviews = call("product/reviews", {
"product_id": results["data"]["products"][0]["product_id"],
"page_size": 200, "sort": "relevant",
}).json()["data"]
print(reviews["rating"]["distribution"], reviews["total_reviews"])
Response shapes
Every response uses the envelope { data, response_time, credits_used, credits_remaining }.
search, category/products and shop/products all return the same product card, and it is the only place exact prices appear:
{
"product_id": "1729508370969629931",
"title": "medicube PDRN Pink Collagen Volume Multi Balm 10g",
"url": "https://shop.tiktok.com/us/pdp/medicube-pdrn-pink-collagen-volume-multi-balm/1729508370969629931",
"image": "https://p19-oec-general.ttcdn-us.com/tos-maliva-i-o3syd03w52-us/2f1c8a.webp",
"price": {
"current": 19.99,
"original": 29.0,
"currency": "USD",
"discount_percent": 31,
"savings": 9.01,
"min": 19.99,
"max": 54.99
},
"rating": { "score": 4.7, "review_count": 12561 },
"sold_count": 231615,
"variant_count": 12,
"brand": "medicube",
"shop": {
"shop_id": "7495514739648989419",
"shop_name": "medicube US Store",
"shop_logo": "https://p16-oec-general.ttcdn-us.com/tos-maliva-avt-0068/8a91.png"
},
"labels": ["Free shipping", "Limited time deal"]
}
Key data fields per endpoint:
- search —
query,products[](product card),shops[](shop_id,shop_name,shop_logo— a 0-8 item brand carousel),next_cursor,has_more,degraded. - search/suggestions —
query,region,suggestions[](plain strings, 20-50 of them; no scores, no search volume, no CPC). - product —
product_id,title,description,url,images[],price(currency,current,original,discount_percent,savings),rating(score,review_count,distribution),sold_count,variants[](sku_id,name,in_stock,available_quantity,properties[],weight_kg,dimensions_cm),shipping(fee,currency,delivery_min_days,delivery_max_days,delivery_min_business_days,delivery_max_business_days,cod_available,fulfillable),shop(shop_id,shop_name,shop_logo,shop_url,rating,review_count,sold_count,followers_count,product_count,video_count,region,is_official),categories[](category_id,name,slug),breadcrumbs[],top_reviews[](up to 3),seller(business_name,business_address). - product/reviews —
product_id,page,page_size,filters_applied(sort,rating,has_media,verified_only),total_reviews,rating(score,review_count,distribution),reviews[],has_more. - categories —
categories[](category_id,name,slug,level,parent_id,image,children[]),total_categories. - category/products —
category_id,products[](product card),next_cursor,has_more. - shop/products —
shop_id,shop(shop_id,shop_name,shop_logo),products[](product card),next_cursor,has_more. - resolve —
type(productorshop),product_id,shop_id,url,resolved_by(url_patternorshare_link).
Search response:
{
"data": {
"query": "protein powder",
"products": [ { "product_id": "1729508370969629931", "price": { "current": 19.99 } } ],
"shops": [ { "shop_id": "7494676034572093351", "shop_name": "AmiShell", "shop_logo": "https://..." } ],
"next_cursor": "eyJrIjoic2VhcmNoIiwibyI6MzAsInQiOiIyMDI2..." ,
"has_more": true,
"degraded": false
},
"response_time": 3412,
"credits_used": 1,
"credits_remaining": 999
}
Product detail — note price.current and price.original are null:
{
"data": {
"product_id": "1729508370969629931",
"title": "medicube PDRN Pink Collagen Volume Multi Balm 10g",
"description": "Plain text, HTML stripped, image blocks removed.",
"url": "https://shop.tiktok.com/us/pdp/1729508370969629931",
"images": ["https://p19-oec-general.ttcdn-us.com/....webp"],
"price": {
"currency": "USD",
"current": null,
"original": null,
"discount_percent": 31,
"savings": null
},
"rating": {
"score": 4.7,
"review_count": 12561,
"distribution": { "1": 431, "2": 221, "3": 571, "4": 1175, "5": 10163 }
},
"sold_count": 231615,
"variants": [
{
"sku_id": "1732293560756310251",
"name": "PMEUS43022R00",
"in_stock": true,
"available_quantity": 64657,
"properties": [ { "name": "Specifications", "value": "Default" } ],
"weight_kg": 0.1,
"dimensions_cm": { "length": 7, "width": 4, "height": 4 }
}
],
"shipping": {
"fee": 4.22,
"currency": "USD",
"delivery_min_days": 6,
"delivery_max_days": 9,
"delivery_min_business_days": 4,
"delivery_max_business_days": 7,
"cod_available": false,
"fulfillable": true
},
"shop": {
"shop_id": "7495514739648989419",
"shop_name": "medicube US Store",
"shop_url": "https://shop.tiktok.com/us/store/7495514739648989419",
"rating": 4.6,
"review_count": 455798,
"sold_count": 7938115,
"followers_count": 588860,
"product_count": 153,
"video_count": 1006,
"region": "US",
"is_official": true
},
"categories": [
{ "category_id": "601450", "name": "Beauty & Personal Care", "slug": "beauty-personal-care" },
{ "category_id": "848776", "name": "Skincare", "slug": "skincare" }
],
"breadcrumbs": [ { "name": "Skincare", "url": "https://shop.tiktok.com/us/c/skincare/848776" } ],
"top_reviews": [],
"seller": { "business_name": "APR US INC", "business_address": "41 Greenfield, Irvine, California, 92614, United States" }
},
"response_time": 5108,
"credits_used": 1,
"credits_remaining": 998
}
A product with no detail upstream — HTTP 404, and the credit fields are still present because the lookup really happened:
{
"error": "Product not found in this region.",
"credits_used": 1,
"credits_remaining": 997
}
Reviews:
{
"data": {
"product_id": "1729508370969629931",
"page": 1,
"page_size": 20,
"filters_applied": { "sort": "relevant", "rating": null, "has_media": false, "verified_only": false },
"total_reviews": 12561,
"rating": {
"score": 4.6,
"review_count": 12561,
"distribution": { "1": 431, "2": 221, "3": 571, "4": 1175, "5": 10163 }
},
"reviews": [
{
"review_id": "7632550597593466637",
"rating": 5,
"text": "Absorbs fast and does not pill under makeup. Repurchasing.",
"created_at": "2026-04-25T04:34:57.611Z",
"reviewer_name": "C**",
"reviewer_avatar": "https://p16-oec-general.ttcdn-us.com/...?x-expires=1777091697",
"images": ["https://p19-oec-general.ttcdn-us.com/....webp"],
"is_verified_purchase": true,
"is_incentivized": false,
"variant": "Default",
"country": "US"
}
],
"has_more": true
},
"response_time": 2210,
"credits_used": 1,
"credits_remaining": 996
}
Categories and resolve:
{
"data": {
"categories": [
{
"category_id": "601450",
"name": "Beauty & Personal Care",
"slug": "beauty-personal-care",
"level": 1,
"parent_id": null,
"image": "https://lf16-tiktok-common.tiktokcdn-us.com/obj/....png",
"children": [
{
"category_id": "849032",
"name": "Hand & Foot Care",
"slug": "hand-foot-care",
"level": 2,
"parent_id": "601450",
"image": "https://lf16-tiktok-common.tiktokcdn-us.com/obj/....png",
"children": []
}
]
}
],
"total_categories": 240
},
"credits_used": 1,
"credits_remaining": 995
}
{
"data": {
"type": "product",
"product_id": "8651224669119091502",
"shop_id": null,
"url": "https://shop.tiktok.com/us/pdp/8651224669119091502",
"resolved_by": "share_link"
},
"credits_used": 1,
"credits_remaining": 994
}
Guardrails
- Every TikTok Shop endpoint costs 1 credit, including the ones that answer
404. Tell the user before paginating through many pages or looping detail lookups over a whole search page. /productreturns no price.price.currentandprice.originalarenullthere by design. Read the price from/search,/shop/productsor/category/products, and never compute one fromdiscount_percentorsavings.- A
404from/productis expected for about 56% of search ids and is not a failure to report or retry. Detect it by HTTP status: the 404 body iserrorplus the credit fields, with nodatakey to inspect. Skip the item, or try/product/reviewsfor it. Never describe search -> product as a dependable pipeline to the user. - Reviews are the fallback when detail 404s, measured on a sample of 8 unresolvable ids: all 8 returned HTTP 200 from
/product/reviewsand 7 returned at least one review. Present it that way — a measured sample, not a guarantee — and handle an emptyreviews[]. - Never fabricate product titles, prices, ratings, sold counts, review text or shop names. Only return API data. If a field is
null, say it is unavailable. searchis US-only and takes noregion.category/productsservesUSandGBonly. Do not pass a region a given endpoint does not accept.- Cursors are opaque. Pass
next_cursorback verbatim ascursor; do not decode, edit or share one between endpoints. - Products can repeat across search pages. Dedupe by
product_idwhen you merge pages. total_reviewsdrifts between calls minutes apart. Never compute a page count from it — page withhas_more.- Reviewer names arrive pre-masked by TikTok (
"C**"). Leave them as they are. - Reviewer avatars and review images are signed, short-lived URLs. Do not cache them as stable identifiers.
- Review text is genuinely multilingual, including inside US reviews. That is real user data — do not strip or translate it silently.
- Prefer one large
page_sizeon reviews over many small pages: 200 rows and 20 rows both cost 1 credit. - If
searchreturns"degraded": true, TikTok served a short page after retries were exhausted — the list is incomplete, so say so rather than presenting it as the full result set.
Failure handling
400— an invalid parameter, or aresolveURL in a form TikTok Shop does not accept. Not billed. Fix the input; the error message forresolvelists the accepted URL forms.400 "Invalid cursor."— the cursor was edited, expired or came from a different endpoint. Restart the pagination from page 1.401— the API key is invalid or missing. CheckSCAVIO_API_KEY.404on/product— normal. No detail exists for this product upstream. The body is{"error": "Product not found in this region.", "credits_used": 1, "credits_remaining": N}; there is nodatakey, so branch on the status code. Skip it; do not retry./product/reviewsis worth one call for the same id: 8 of 8 measured unresolvable ids answered HTTP 200 there, 7 of 8 with reviews.404on/category/productsor/shop/products— the id returned nothing on the first page, so the category or shop does not exist or has no products. Check the id rather than retrying.404on/resolve— a supported link that TikTok could not resolve; it may have expired or may not point to a product or shop.429— rate or usage limit exceeded. Wait before retrying. See rate limits.502— TikTok Shop data is temporarily unavailable. Wait a few seconds and retry; the request already spent an internal retry budget, so retry slowly, not in a tight loop.- Calls can take several seconds because short or truncated upstream pages are retried internally. Set a client timeout of at least 60 seconds.
- If a search returns nothing, try
/tiktok-shop/search/suggestionsfor a better keyword before giving up. - If
SCAVIO_API_KEYis not set, prompt the user to export it before continuing.
Related
scavio-tiktok— creator profiles, videos, comments, hashtags and the social graph. Use that skill for anything about TikTok content; use this one for the shop catalog.- Full API reference: Tiktok shop search (one page per endpoint:
tiktok-shop-search,tiktok-shop-suggestions,tiktok-shop-product,tiktok-shop-product-reviews,tiktok-shop-categories,tiktok-shop-category-products,tiktok-shop-shop-products,tiktok-shop-resolve)
Related skills
Search TikTok Shop products and retrieve known product details through the official Gecho Bridge MCP tools. Use for product discovery, catalog research, competitor comparison, pricing, sales signals, and item-level detail.
Collect and analyze public TikTok Shop data
Retrieve complete TikTok Shop product details with the official Gecho Bridge MCP tool, including title, price, SKU, description, sales, ratings, and reviews. Use when the user provides a TikTok Shop product URL or product ID.
Look up TikTok profiles, search videos and users, explore hashtags, read comments, and traverse the social graph (followers/followings). Eleven endpoints, all at 1 credit per request.
Finds trending products on TikTok Shop using apidojo's TikTok scraper on Apify. Triggers when the user asks to: find trending TikTok Shop products, discover what products are selling on TikTok Shop right now, identify viral TikTok Shop items in a category, find trending items with TikTok affiliate links, research TikTok Shop bestsellers, discover products going viral on TikTok for e-commerce, find hot items being promoted by TikTok creators, or build a trending product list from TikTok Shop data. Returns product name, creator promotion count, engagement signals, price range, and trend momentum. Ideal for TikTok Shop sellers, dropshippers, and e-commerce trend researchers.