Search public TikTok Shop products by keyword in the United States, or browse public US category URLs. Export structured product, price, seller, rating, sales and media data for product discovery, pricing research and catalog monitoring.
Use this TikTok Shop product search API to export TikTok Shop products into datasets, spreadsheets, JSON, or downstream catalog workflows. It is built for ecommerce analysts, marketplace sellers, agencies, and developers who need repeatable product discovery across supported markets.
Who is it for?
- Marketplace sellers researching products, prices, shops, ratings, and public sales signals.
- Ecommerce analysts comparing assortments and promotions in the US TikTok Shop market.
- Developers and agencies feeding structured search results into dashboards, databases, and automations through API or MCP.
Example input
{
"searchQueries": ["water bottles"],
"categoryUrls": ["https://shop.tiktok.com/us/c/water-bottles/600048"],
"maxItemsPerQuery": 10,
"maxPagesPerQuery": 2,
"country": "US",
"includeProductDetails": true
}
Example output
{
"productId": "1731726912824578262",
"title": "HydroPal 32oz Motivational Sports Water Bottle - BPA-Free, Drop-Resistant, Food-Safe PP Plastic, Time Markers, Leak-Proof, Fruit Strainer, Carrying Strap for Active Sports & Workouts",
"productUrl": "https://shop.tiktok.com/us/pdp/hydropal-32oz-water-bottle-with-time-markers-straw/1731726912824578262",
"price": 7.75,
"currency": "USD",
"sellerName": "HydroPal",
"rating": 4.8,
"reviewCount": 271,
"soldCount": 2014,
"rank": 1,
"page": 1,
"searchQuery": "water bottles",
"country": "US"
}
What data can you export?
| Field | Description |
|---|---|
productId |
Stable TikTok Shop product ID |
title |
Product title |
productUrl |
Canonical public product URL |
description |
Public product description when detail enrichment succeeds |
category |
Primary public product category |
categories |
Public product category hierarchy |
variants |
Public SKU IDs, names, property pairs, available stock, status, price, original price, and currency |
totalStock |
Sum of known public SKU available quantities; null when quantities are unavailable |
images, videos |
Public product media URLs |
price |
Current search-card price |
currency |
Price currency |
originalPrice |
Original price when a promotion exposes it |
discountText |
Public promotion or discount label |
sellerId |
Public seller ID |
sellerName |
Shop name |
sellerUrl |
Public shop URL when present |
rating |
Product rating |
reviewCount |
Number of reviews |
soldCount |
Public sold count |
soldText |
Source sales label |
imageUrl |
Primary product image |
videoUrl |
Bound product video when present |
brandName |
Brand name when present |
skuMinPrice |
Lowest SKU price when present |
skuMaxPrice |
Highest SKU price when present |
shippingFee |
Shipping-fee estimate shown to the Actor's anonymous session; not a destination guarantee |
deliveryMinDays, deliveryMaxDays |
Delivery-window estimate shown to the anonymous session; not a destination guarantee |
shopRating, shopSoldCount, shopFollowersCount |
Public shop summary metadata |
detailEnriched |
Whether ID-matched public product details were added |
rank |
Deduplicated rank within the keyword or category |
page |
Result page number |
sourceType |
Whether the row came from keyword or category mode |
searchQuery |
Exact keyword that produced the row, or null for category rows |
categoryUrl, categoryId, categoryName |
Target-bound category attribution, or null for keyword rows |
country |
Verified TikTok Shop market |
scrapedAt |
UTC extraction timestamp |
Input settings
| Setting | Description | Default |
|---|---|---|
searchQueries |
Optional product keywords | ['water bottles'] |
categoryUrls |
Optional public US TikTok Shop category URLs | [] |
maxItemsPerQuery |
Maximum unique products per keyword | 10 |
maxPagesPerQuery |
Maximum pages per keyword | 2 |
country |
Keyword-search market: US |
US |
includeProductDetails |
Attempt ID-matched public US enrichment | true |
proxyConfiguration |
US residential proxy; an explicit proxy country must be US | US residential |
Tips and limits
- Start with 10–30 products per keyword, then scale after reviewing the output.
- Results reflect the public US market at run time and can change. Prices are reported in USD when the source exposes them.
- Category URLs are supported only with
country: "US". - Public video fields and other sparse optional fields are not guaranteed.
- Other country values are rejected and never replaced with US inventory.
- Missing optional values remain
null; the Actor does not invent seller or regional metadata. - Duplicate product IDs within a keyword are removed automatically.
- A query may return fewer rows than requested when the public search has no more unique products.
API usage
cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~tiktok-shop-search-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"searchQueries":["water bottles"],"maxItemsPerQuery":10,"country":"US"}'
JavaScript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/tiktok-shop-search-scraper').call({
searchQueries: ['water bottles'],
maxItemsPerQuery: 10,
country: 'US',
});
console.log(`Dataset: ${run.defaultDatasetId}`);
Python
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('fetch_cat/tiktok-shop-search-scraper').call(run_input={
'searchQueries': ['water bottles'],
'maxItemsPerQuery': 10,
'country': 'US',
})
print(f"Dataset: {run['defaultDatasetId']}")
Use from MCP at https://mcp.apify.com/?tools=fetch_cat/tiktok-shop-search-scraper or call the Actor through the Apify API client.
Support
Open an issue on the Actor page with the input, expected behavior, and a run link. Do not include passwords, cookies, or private account data.