All use cases

TikTok Shop product research: find winners before they peak

November 8, 2026

Short answer

Search your niche keywords on TikTok Shop each week, pull details and reviews for the top products, check how many creators already sell each one, and score them on momentum, creator breadth, review quality and saturation. A weekly run over 20 keywords is about 210 credits, or $1.58 a month on the $47 pack. Buy into products with rising sold counts, several independent creators and few near-identical listings.

Product research on TikTok Shop is a funnel. You start with a wide keyword search, cut to a shortlist with product and review data, then check who is selling each product and how crowded it already is. Do it every week with the same keywords and the change between weeks becomes the signal.

This page covers picking products. To estimate the units and revenue behind a product once you track it, use the method in tracking TikTok Shop sales signals. For what each shop endpoint returns, see the TikTok Shop data guide.

Who does this

  • Sellers and brands choosing what to stock or launch next.
  • Affiliate creators choosing which products to add to their showcase.
  • Agencies pitching product ideas to brand clients with evidence.
  • Category analysts watching price points and new entrants.

The data, step by step

StepPlatformEndpointCalls a weekCredits
1. Search 20 niche keywords, 2 pages eachTikTok Shoptiktok shop search API4040
2. Details for the top 60 productsTikTok Shoptiktok product API6060
3. Reviews for 30 shortlisted, 2 pagesTikTok Shoptiktok shop product reviews API6060
4. Creator videos behind each shortlisted productTikToktiktok search keyword API3030
5. Best sellers of 10 competitor storesTikTok Shoptiktok shop products API1010
6. Showcases of 10 creators in the nicheTikTok Shoptiktok user showcase API1010
Weekly total210210

Four weekly runs are 840 credits a month, about $1.58 on the $47 pack. One pack covers more than two years of this routine at the same size.

The scoring model

Score every shortlisted product from 0 to 1 on four parts, then combine them. Rank-based scores (the product's percentile within your shortlist) are more stable than raw values.

  • Momentum: change in the sold count since last week, as a percentile. Needs two weekly snapshots, so the first week only builds the baseline.
  • Creator breadth: unique creators with a video about the product in the last 30 days. One creator driving all sales is a single point of failure.
  • Review quality: a weighted rating that does not reward tiny samples: (C × m + sum of ratings) / (C + n), where n is the review count, m is the average rating across your whole shortlist, and C is about 20.
  • Saturation: the number of near-identical listings in your keyword search results, as a percentile. Use 1 − saturation in the score.

Score = 0.35 × momentum + 0.25 × breadth + 0.20 × review quality + 0.20 × (1 − saturation).

A worked row: a desk lamp at the 90th percentile for momentum, 70th for breadth, weighted rating in the 60th, saturation at the 40th percentile. Score = 0.35 × 0.9 + 0.25 × 0.7 + 0.2 × 0.6 + 0.2 × 0.6 = 0.315 + 0.175 + 0.12 + 0.12 = 0.73. Anything above 0.7 goes to sampling.

Read the reviews for reasons, not stars

Pull two pages of reviews per shortlisted product and tag each one: quality, size or fit, shipping, matches video, or price. If "does not match video" passes 10% of reviews, the product sells on the creative and returns will follow. A complaint that repeats across competing listings is a product gap you can design around.

A weekly search snapshot

import datetime, json, os, requests

KEY = os.environ["SCRAPEIO_API_KEY"]
H = {"x-api-key": KEY}
KEYWORDS = ["desk lamp", "cable organizer", "monitor stand"]

def pick(d, *keys):
    for k in keys:
        if d.get(k) is not None:
            return d[k]
    return None

today = datetime.date.today().isoformat()
with open("shop_snapshots.jsonl", "a") as out:
    for kw in KEYWORDS:
        for page in (1, 2):
            r = requests.get("https://scrapeio.com/v1/tiktok/shop/search",
                             params={"query": kw, "region": "US", "page": page},
                             headers=H, timeout=60).json()
            for p in r["data"].get("items", []):
                out.write(json.dumps({"day": today, "kw": kw,
                    "id": pick(p, "id", "product_id"), "title": pick(p, "title"),
                    "sold": pick(p, "sold_count", "sold"), "price": pick(p, "price"),
                    "raw": p}) + "\n")

Check the field names in your first response and on the endpoint page, then adjust the pick() keys. Keeping the raw record means you can add new fields later without re-fetching history.

Pitfalls

  • Region. Search and products are per region. Pass the same region every week or the comparison breaks.
  • Cumulative counts. The sold count includes all time. A big number on an old product can hide flat sales; momentum fixes that.
  • Ad-driven spikes. A product can climb on paid spend. Check the TikTok Ad Library before you read a spike as organic demand.
  • Restricted categories and claims. Supplements, cosmetics and electronics carry rules on what you can claim. A product that sells on a risky claim is not one to copy.
  • Copying listings. Research the demand, not the creative. Copying another seller's images or video is an IP problem.

Run it from an AI agent

claude mcp add --transport http scrapeio https://scrapeio.com/mcp --header "x-api-key: $SCRAPEIO_API_KEY"

Then ask: "Use tiktok_shop_search for these 5 keywords in the US, 2 pages each. For the top 10 products by sold count, call tiktok_product and one page of tiktok_shop_product_reviews. Group complaints by reason and tell me which product has the fewest 'does not match video' complaints. Link every product." The TikTok Shop MCP server page lists each tool.

How to do it with ScrapeIO

Shop search, product details, reviews, store catalogs and creator showcases all cost 1 credit per call, in 16 regions, with the same envelope as every other platform. Credits never expire, so a weekly routine that uses 840 a month does not lose anything in a slow month.

100 free credits, no card. Credits never expire.

Get API key