TikTok Shop Product Search API
Search US TikTok Shop products by keyword, with price, discount, rating, review count and units sold.
- 1 credit per call
- Failed calls are free
- Updated
- tiktok.shop.search
{ "has_more": true, "result_count": 30, "products": [ { "title": "Trendy Road Training Sneakers - Stretch Knit Upper Athletic Footwear for Flexible Fit In All Movements", "sale_price": "112", "rating": 0, "review_count": "0", "currency": "USD", "discount": null, "original_price": null, "product_id": "1732705185972719867", "shop_name": "Cozy The Hand", "sold_count": 1, "url": "https://shop.tiktok.com/us/pdp/1732705185972719867" }, { "title": "Retro fashion casual anti slip shock-absorbing high top basketball shoes black and red", "sale_price": "109", "rating": 0, "review_count": "0", "currency": "USD", "discount": null, "original_price": null, "product_id": "1732719278501695619", "shop_name": "Lapis Libby", "sold_count": 1, "url": "https://shop.tiktok.com/us/pdp/1732719278501695619" } ]}
| # | Product | Shop | Price | Was | Rating | Reviews | Sold | Currency | Product id | Url |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Trendy Road Training Sneakers - Stretch Knit Upper Athletic Foo… | Cozy The Hand | 112 | 0 | 0 | 1 | USD | 1732705185972719867 | https://shop.tiktok.com/us/pdp/1732705185972719867 | |
| 2 | Retro fashion casual anti slip shock-absorbing high top basketb… | Lapis Libby | 109 | 0 | 0 | 1 | USD | 1732719278501695619 | https://shop.tiktok.com/us/pdp/1732719278501695619 | |
| 3 | Unisex Lightweight Running Shoes | Brand New Sealed with Origin… | Royal My Glow | 108 | 0 | 0 | 2 | USD | 1732691407131611974 | https://shop.tiktok.com/us/pdp/unisex-lightweight-running-shoes… | |
| 4 | Men's Running Shoes Blade Tennis Walking Fashion Sneakers Breat… | Mevlzz | 38.99 | 51.99 | 4.3 | 8594 | 92,591 | USD | 1729416431099876154 | https://shop.tiktok.com/us/pdp/mens-running-shoes-mevlzz-breath… |
| 5 | Brand New Sealed with Original Shoe Box, Unisex All Black High-… | COMPLIANCE MATTERS INC | 135.68 | 0 | 0 | 0 | USD | 1732719363793982287 | https://shop.tiktok.com/us/pdp/1732719363793982287 | |
| 6 | White with Red Inner Hollow Cushion Running Sneakers for Men Wo… | Encompass Health Rehabilitation Hospital Of Tustin L.p. | 115 | 0 | 0 | 0 | USD | 1732719135818814118 | https://shop.tiktok.com/us/pdp/1732719135818814118 | |
| 7 | Black with Blue Accent Hollow Cushion Running Sneakers for Men … | Encompass Health Rehabilitation Hospital Of Tustin L.p. | 115 | 0 | 0 | 0 | USD | 1732719208417366694 | https://shop.tiktok.com/us/pdp/1732719208417366694 | |
| 8 | Black and Purple Mid Top Retro Sneakers for Men Women, Cushione… | Encompass Health Rehabilitation Hospital Of Tustin L.p. | 138 | 0 | 0 | 0 | USD | 1732719291308610214 | https://shop.tiktok.com/us/pdp/1732719291308610214 | |
| 9 | Suede & Mesh Retro Chunky Sneakers, Fashion Daily Footwear for … | Encompass Health Rehabilitation Hospital Of Tustin L.p. | 125 | 0 | 0 | 0 | USD | 1732719081859355302 | https://shop.tiktok.com/us/pdp/1732719081859355302 | |
| 10 | Men's Lace-Up Round Toe Sneakers, Breathable & Comfortable Casu… | TOLLYET TWO | 19.24 | 36.29 | 4.3 | 76 | 865 | USD | 1732290361127375760 | https://shop.tiktok.com/us/pdp/mens-lace-up-sneakers-casual-spo… |
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| query | string | yes | The product to search for. | shoes |
| cursor | string | no | Pass cursor from the last response, with the same search, to get the next page. | |
| region | string | no | The Shop region. US is supported. | US |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| products[].title | string | The product's title. | Trendy Road Training Sneakers - Stretch Knit Upper Athletic Foo… |
| products[].shop_name | string | The shop that sells it. | Cozy The Hand |
| products[].sale_price | string | The price the product sells for now, in the currency shown. | 112 |
| products[].original_price | null | The price before the discount, when there is one. | null |
| products[].rating | integer | The product's average star rating. | 0 |
| products[].review_count | string | How many reviews the product has. | 0 |
| products[].sold_count | integer | How many units TikTok Shop shows as sold. | 1 |
| products[].currency | string | The currency of the prices. | USD |
| products[].discount | null | The discount TikTok Shop shows, when there is one. | null |
| products[].product_id | string | TikTok Shop's ID for the product. | 1732705185972719867 |
| products[].url | string | The product's page on TikTok Shop. | https://shop.tiktok.com/us/pdp/1732705185972719867 |
| has_more | boolean | Whether another page of results is available. | true |
| products | array | The matching products. | 30 records |
| result_count | integer | How many results this answer holds. | 30 |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "tiktok.shop.search", "input": { "query": "shoes" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "tiktok.shop.search", "input": { "query": "shoes" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "tiktok.shop.search", "input": { "query": "shoes" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
Use Upscrape to search TikTok Shop US for shoes. Give me the products with price, discount, rating and units sold, best sellers first.
More from the TikTok API
- TikTok User Profile Detail API1 credit
- TikTok User Videos API1 credit
- TikTok Video Detail API1 credit
- TikTok Video Comments API1 credit
- TikTok Comment Replies API1 credit
- TikTok Keyword Video Search API1 credit
- TikTok Top Search Results API1 credit
- TikTok Hashtag Videos API1 credit
- TikTok Video Transcript API1 credit
- TikTok Shop Product Detail API1 credit
- TikTok Shop Store Products API1 credit
- TikTok Shop Product Reviews API1 credit
- TikTok Song Detail API1 credit
- TikTok Song Videos API1 credit
- TikTok Collection Videos API1 credit
- TikTok Trending Feed API1 credit
- TikTok Suggestions Search API1 credit
- TikTok User Live Status API1 credit
- TikTok Live Room Detail API1 credit
- TikTok User Followers API1 credit
- TikTok User Following API1 credit
TikTok Shop Product Search API FAQ
The short answers. The docs have the long ones.
How much does the TikTok Shop Product Search API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send query. The input fields below list every option with its type and limits.
Do I need a TikTok login?
No. It reads public TikTok data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds tiktok.shop.search, checks its price and runs it with the same credits as the REST API.
Your first TikTok call is free.
Up to 100 free credits to start, no card needed.