How to use it: 3 steps
- Make a free Apify accountApify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
- Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example:
phone standin Search keywords. Each start is one run. - Download the resultsWhen the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.
This tool is an Apify Actor: a small program that runs on Apify. You can also run it on a schedule, for example every Monday. New to it? Read how it works, step by step and the 8 words you need first.
What it does
Give this Actor search keywords or public TikTok Shop links, and get one table row per product with price, units sold, rating, variants, shipping and shop stats. It needs no login or cookies, and a typical run of 10 products costs about $0.03.
Good for
- You research products before you sell them.
- You compare prices and units sold across shops.
- You watch a list of products or a shop every day.
- You need public data in a spreadsheet or an API, without a TikTok account.
Who uses it
Product sellers
Check which products sell before you buy stock.
Dropshipping researchers
Compare prices and units sold across shops.
Shop owners
Watch a list of products or a shop every day.
Price
Pay per event: you pay for each result the tool saves, plus a small start fee for each run. The price includes Apify platform costs. Apify bills you, not us. Prices below are for the Apify free plan.
| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.002 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Product saved | $0.002 (from $0.0014 on paid Apify plans) | One product saved to your dataset. |
| Page checked | $0.0005 (from $0.00035 on paid Apify plans) | One TikTok Shop page checked, including product pages opened for full details and pages with no new results. |
Examples
- One result: about $0.004.
- 1,000 results: about $2.00.
- Every day 100 results, for 30 days: about $6.06 a month.
Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed. That is enough for about 2,400 results.
Prices checked on 8 November 2026. See the current price on Apify.
Questions
Do I need a TikTok account or cookies?
No. Only public pages are read, so you stay logged out.
Is soldCount the real number of sales?
It is the counter that TikTok Shop shows on the page. We do not verify it.
Can I get markets other than the US?
Not in this version. Only the US storefront is verified.
Details
Step by step on Apify
- Open the input form. In box 1, keep Search by keywords.
- In box 2, type what you want to find, one phrase per line. The example is
phone stand. - In box 3, set Maximum products. The example is
10. - In box 4, keep Full product details on to get variants, shipping and reviews. Turn it off for a faster and cheaper list.
- Click Start. When the run ends, open the Output tab and download the table. Box 5 shows the main columns.
Use cases
| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Find products that sell | Keywords, sort by Most units sold | One product row | title, price, soldCount, rating, shopName | Google Sheets, CSV |
| Check a competitor shop | Shop links | Product rows and a shop summary | price, soldCount, shop, skus | Excel, API |
| Watch prices and sales every day | Product links, Track changes on, schedule | Rows with a change status | changeStatus, salesDelta, price, previousFetchedAt | Slack, Notion, webhook |
| Explore one category | Category links, price and rating filters | Filtered product rows | categories, price, rating, reviewCount | Dataset API |
| Find creators who promote a product | Keywords, Full product details off | Rows with a promotional video | video, soldCount, url | CSV |
Tips for better results
- Only the US storefront is verified. Other markets stop the run before any page is paid for.
- Add more keywords or category links. One keyword gives a limited list.
- Turn on Track changes and keep the same Monitor name to see what changed.
Limits and good to know
- Market: only the US storefront is verified. Any other market, in Markets or in a link, stops the run with an error before any page is paid for
- Speed: full details take about 3 seconds per product. With the default Timeout of 300 seconds, three tests stopped at 89, 96 and 110 products. The source can block a run sooner when many runs go at the same time. The run then stops as partial and keeps the saved rows. For more, raise Timeout or turn off full details. With details off, 114 products took 24 seconds
- Inputs run in order: in one test with 4 inputs and 300 seconds, the first keyword used the whole time and saved 89 products. The other inputs are listed in
unprocessedInputs, and the run ends as a partial SUCCEEDED. Use a longer Timeout for many inputs - One keyword has a limited list: TikTok Shop gave 50 to 114 different products for one keyword on the test dates. Add more keywords or category links to get more
- Products to check:
scanLimitis 100 by default, per input - Retries: each page gets up to 3 tries. A product page that still fails keeps its row from the list, with
detailsFetched: falseand a warning. After 3 blocked product pages in a row, or one blocked list page, the run stops as partial and keeps the saved rows. A bad link goes tofailedInputs, and the next input runs - Reviews: you get the public sample and the star counts, not the full history
- Sales rank and videos: there is no rank across all of TikTok Shop.
videoshows the one video that search gives, not every promo video
For developers
Sample result
One result from a real test run, in JSON. Real values change from run to run. In Excel or CSV each field is a column.
{
"productId": "1730860052779143503",
"title": "Remote Control for TikTok Scrolling, Wireless Page Turner & Selfie with Smartphone Holder Stand",
"price": 20.79,
"currency": "USD",
"originalPrice": 45.49,
"discountPercent": 54,
"soldCount": 11690,
"rating": 4.4,
"reviewCount": 1497,
"shopName": "PUTARE",
"sellerId": "7495880414145841487",
"url": "https://shop.tiktok.com/us/pdp/remote-control-by-putare-for-tiktok-kindle-with-wireless-page-turner/1730860052779143503",
"region": "US",
"source": "shop.tiktok.com",
"brand": "PUTARE",
"variants": [{ "name": "Color", "values": ["Green", "Purple", "Black", "Pink"] }],
"shipping": {
"free_shipping": false,
"reachable": true,
"delivery_min_days": 7,
"delivery_max_days": 10,
"delivery_name": "Standard shipping",
"shipping_fee": { "price_str": "$5.99" }
},
"ratingDistribution": { "1": "111", "2": "51", "3": "68", "4": "118", "5": "1149" },
"shop": {
"sold_count": 576817,
"on_sell_product_count": 7,
"review_count": 63638,
"followers_count": "41189",
"video_count": "1219",
"shop_rating": "4.5"
},
"changeStatus": null,
"salesDelta": null,
"salesTrend": "unknown",
"detailsFetched": true
}Use it from code
Actor ID: cliqtomedia/tiktok-shop-scraper. You need your Apify API token from Apify Console → Settings → API & Integrations.
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/tiktok-shop-scraper").call(run_input={
"mode": "search",
"keywords": [
"phone stand"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~tiktok-shop-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode": "search", "keywords": ["phone stand"]}'# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("cliqtomedia/tiktok-shop-scraper")
result = tool.invoke({"run_input": {"mode": "search", "keywords": ["phone stand"]}})
print(result)The cURL call waits for the results, up to 300 seconds. For longer runs, start a run (/runs) and get the results with a webhook or by checking the run. Apify API docs. LlamaIndex, MCP for AI agents and the JavaScript client: AI agents & MCP.
Data fields (38)
| Field | Type | Meaning |
|---|---|---|
productId | string | TikTok Shop product ID, for example 1730860052779143503. |
title | string | Product title shown in the store. |
price | number | Lowest current sale price, in the currency below. Null when the store shows no price. |
currency | string | Currency code for the observed price. |
originalPrice | number | Price before the discount. Null when the store shows no old price. |
discountPercent | number | Discount percentage reported for the cheapest SKU. |
soldCount | number | Cumulative units sold reported by the storefront. |
rating | number | Average star rating from 1 to 5. Null when the product has no rating. |
reviewCount | number | Number of reviews the store reports. |
shopName | string | Name of the shop that sells the product. |
sellerId | string | TikTok Shop seller ID. |
url | string | Public product page link. |
images | array/string | Product gallery image links. These links can expire. |
region | string | Market of the storefront, for example US. |
source | string | Website that gave the data: shop.tiktok.com. |
fetchedAt | string | UTC time when this product was fetched. |
video | object/string | Public promotional video attached to a search result, with creator and engagement data. |
description | string | Product description text. Null when full details are off. |
skus | array/string | Variant IDs, prices, properties and stock reported by the storefront. |
shipping | object/string | Public delivery information for the storefront context, without a buyer address. |
ratingDistribution | object/string | Counts of reviews with one through five stars. |
reviews | array/string | Public review sample with buyer names removed. This is not the full history. |
detailsFetched | boolean | True when the Actor opened the product page for full details. |
specifications | array/string | Name and value pairs from the product page, such as material or model. |
available | boolean | True when the store says the product can be delivered in this storefront context. |
reviewsHasMore | boolean | Whether the storefront reports more reviews beyond the public sample. |
shop | object/string | Shop totals: units sold, products on sale, reviews, followers, videos and rating. |
changeStatus | string | Only with Track changes: new, changed, unchanged, or unknown when full details could not be read. Empty otherwise. |
salesDelta | number | Increase in the sold counter since the previous observation; null for a new or reset counter. |
previousFetchedAt | string | Time of the previous observation. Only with Track changes. |
productVideo | object/string | Product demonstration media. It may have no associated public creator profile. |
sourceGenerated | object/string | Text generated by TikTok Shop, kept separate from the product description. |
categories | array/string | Category path reported on the product page. |
brand | string | Brand reported in the listing or specifications. |
variants | array/string | Variant property names and available values. |
salesTrend | string | Rising or flat based on the observed sales delta; unknown without a comparable baseline. |
salesCounterReset | boolean | True when the source sold counter decreased between observations. |
descriptionImages | array/string | Images embedded in the product description, separate from the product gallery. |
Input settings (23)
The main fields of the input form. With the API you send them as JSON.
| Setting | Name in the API | Type | Example value |
|---|---|---|---|
| Mode | mode | string | "search" |
| Search keywords | keywords | array | ["phone stand"] |
| Maximum products | maxItems | integer | 10 |
| Products to check per input | scanLimit | integer | 100 |
| Full product details | includeProductDetails | boolean | true |
| Markets | regions | array | ["US"] |
| Track changes | monitor | boolean | false |
| Monitor name | stateName | string | |
| Only changed products | onlyChanges | boolean | false |
| Output format | outputFormat | string | "nested" |
| Sort products | sortBy | string | "relevance" |
| Product links | productUrls | array | |
| Category links | categoryUrls | array | |
| Shop links | shopUrls | array | |
| Minimum price | minPrice | number | |
| Maximum price | maxPrice | number | |
| Minimum rating | minRating | number | |
| Minimum units sold | minSoldCount | number | |
| Title must contain | titleContains | array | |
| Exclude title words | excludeKeywords | array | |
| Primary market | region | string | "US" |
| Send results to (optional) | deliveryConnector | string | |
| Notion page or channel (optional) | deliveryTarget | string |


