Online shops · Live on Apify

TikTok Shop Scraper: Products, Prices and Units Sold

Get public TikTok Shop products without login or cookies. Search by keyword, or start from product, category or shop links. Each row has price, units sold, rating and shop stats.

About $2.00 for 1,000 results$0.002 per result + $0.002 per run. Apify bills you, not us.Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Run it on Apify Opens apify.com, the website where our tools run. Sign up free with Google or email, no card needed.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure

What you get, for example

productId1730860052779143503
titleRemote Control for TikTok Scrolling, Wireless Page Turner & Selfie…
price20.79

How to use it: 3 steps

  1. 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.
  2. Paste your input and press StartNo code needed: you fill in a form (the input). It already has a working example. For example: phone stand in Search keywords. Each start is one run.
  3. 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 forPriceWhen
Start fee$0.002Charged 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
  1. Open the input form. In box 1, keep Search by keywords.
  2. In box 2, type what you want to find, one phrase per line. The example is phone stand.
  3. In box 3, set Maximum products. The example is 10.
  4. In box 4, keep Full product details on to get variants, shipping and reviews. Turn it off for a faster and cheaper list.
  5. Click Start. When the run ends, open the Output tab and download the table. Box 5 shows the main columns.
Use cases
TaskInputYou getKey fieldsNext step
Find products that sellKeywords, sort by Most units soldOne product rowtitle, price, soldCount, rating, shopNameGoogle Sheets, CSV
Check a competitor shopShop linksProduct rows and a shop summaryprice, soldCount, shop, skusExcel, API
Watch prices and sales every dayProduct links, Track changes on, scheduleRows with a change statuschangeStatus, salesDelta, price, previousFetchedAtSlack, Notion, webhook
Explore one categoryCategory links, price and rating filtersFiltered product rowscategories, price, rating, reviewCountDataset API
Find creators who promote a productKeywords, Full product details offRows with a promotional videovideo, soldCount, urlCSV
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: scanLimit is 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: false and 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 to failedInputs, 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. video shows 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.

one result · JSON
{
  "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.

Python · apify-client
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
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"]}'
LangChain · langchain-apify
# 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)
FieldTypeMeaning
productIdstringTikTok Shop product ID, for example 1730860052779143503.
titlestringProduct title shown in the store.
pricenumberLowest current sale price, in the currency below. Null when the store shows no price.
currencystringCurrency code for the observed price.
originalPricenumberPrice before the discount. Null when the store shows no old price.
discountPercentnumberDiscount percentage reported for the cheapest SKU.
soldCountnumberCumulative units sold reported by the storefront.
ratingnumberAverage star rating from 1 to 5. Null when the product has no rating.
reviewCountnumberNumber of reviews the store reports.
shopNamestringName of the shop that sells the product.
sellerIdstringTikTok Shop seller ID.
urlstringPublic product page link.
imagesarray/stringProduct gallery image links. These links can expire.
regionstringMarket of the storefront, for example US.
sourcestringWebsite that gave the data: shop.tiktok.com.
fetchedAtstringUTC time when this product was fetched.
videoobject/stringPublic promotional video attached to a search result, with creator and engagement data.
descriptionstringProduct description text. Null when full details are off.
skusarray/stringVariant IDs, prices, properties and stock reported by the storefront.
shippingobject/stringPublic delivery information for the storefront context, without a buyer address.
ratingDistributionobject/stringCounts of reviews with one through five stars.
reviewsarray/stringPublic review sample with buyer names removed. This is not the full history.
detailsFetchedbooleanTrue when the Actor opened the product page for full details.
specificationsarray/stringName and value pairs from the product page, such as material or model.
availablebooleanTrue when the store says the product can be delivered in this storefront context.
reviewsHasMorebooleanWhether the storefront reports more reviews beyond the public sample.
shopobject/stringShop totals: units sold, products on sale, reviews, followers, videos and rating.
changeStatusstringOnly with Track changes: new, changed, unchanged, or unknown when full details could not be read. Empty otherwise.
salesDeltanumberIncrease in the sold counter since the previous observation; null for a new or reset counter.
previousFetchedAtstringTime of the previous observation. Only with Track changes.
productVideoobject/stringProduct demonstration media. It may have no associated public creator profile.
sourceGeneratedobject/stringText generated by TikTok Shop, kept separate from the product description.
categoriesarray/stringCategory path reported on the product page.
brandstringBrand reported in the listing or specifications.
variantsarray/stringVariant property names and available values.
salesTrendstringRising or flat based on the observed sales delta; unknown without a comparable baseline.
salesCounterResetbooleanTrue when the source sold counter decreased between observations.
descriptionImagesarray/stringImages 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.

SettingName in the APITypeExample value
Modemodestring"search"
Search keywordskeywordsarray["phone stand"]
Maximum productsmaxItemsinteger10
Products to check per inputscanLimitinteger100
Full product detailsincludeProductDetailsbooleantrue
Marketsregionsarray["US"]
Track changesmonitorbooleanfalse
Monitor namestateNamestring
Only changed productsonlyChangesbooleanfalse
Output formatoutputFormatstring"nested"
Sort productssortBystring"relevance"
Product linksproductUrlsarray
Category linkscategoryUrlsarray
Shop linksshopUrlsarray
Minimum priceminPricenumber
Maximum pricemaxPricenumber
Minimum ratingminRatingnumber
Minimum units soldminSoldCountnumber
Title must containtitleContainsarray
Exclude title wordsexcludeKeywordsarray
Primary marketregionstring"US"
Send results to (optional)deliveryConnectorstring
Notion page or channel (optional)deliveryTargetstring

Start on Apify

Make a free Apify account: you get $5 of free usage every month. Missing a tool? Suggest it. We read every idea, but we do not promise to build it.

Apify links on this page are affiliate links. We may earn a commission. You pay the same price. Affiliate disclosure