TikTok Trending Products - Product, Video & Price Feed avatar

TikTok Trending Products - Product, Video & Price Feed

Pricing

from $5.00 / 1,000 trending product records

Go to Apify Store
TikTok Trending Products - Product, Video & Price Feed

TikTok Trending Products - Product, Video & Price Feed

Trending TikTok Shop products as a ready-to-use feed: each product with its driving video, price + sale price, 'X sold', rank, and (on scheduled runs) sales velocity + price history. From public Creative Center Top Products + product pages - no seller account, no Shop API. PPE pricing.

Pricing

from $5.00 / 1,000 trending product records

Rating

0.0

(0)

Developer

Seibs.co

Seibs.co

Maintained by Community

Actor stats

0

Bookmarked

123

Total users

29

Monthly active users

19 days

Issues response

a day ago

Last modified

Share

TL;DR for anyone running a trending-products site, TikTok Shop affiliates, and dropshippers: A ready-to-use data feed of trending TikTok Shop products - each product paired with the video driving it, its price + sale price, "X sold", category, and leaderboard rank. Schedule it daily and it also emits sales velocity (units/day) and price history per product. Built entirely from public surfaces (Creative Center Top Products + public product pages) - no seller account, no TikTok Shop API, no data-security review. Compared to paying Kalodata or FastMoss $99+/mo for a closed dashboard, this hands you the raw, normalized feed you can pipe straight into your own site or app. Priced as PPE: a run that returns nothing costs nothing. Free Apify plan covers small daily pulls on your $5 platform credit.

Run it in 30 seconds

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("seibs.co/tiktok-trending-products").call(run_input={
"mode": "feed",
"region": "US",
"period_days": "7",
"max_products": 50
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

Or via curl:

curl -X POST "https://api.apify.com/v2/acts/seibs.co~tiktok-trending-products/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"mode": "feed", "region": "US", "period_days": "7", "max_products": 50}'

Or click "Try for free" on this page if you prefer the no-code UI.

What you get

Each run produces a clean dataset, filterable in the Apify console and downloadable as CSV or JSON, with two ready-made table views: Trending feed (rank / product / price / sold / driving video / buy link) and Velocity & price history. Each trending_product record is a complete feed item: product, image, price + sale price, "X sold", rating, category, rank, the driving TikTok video (URL + embed + creator + views), and a monetizable buy_url.

Source status (September 2026)

TikTok folded Creative Center into "TikTok One" and the logged-out Top Products leaderboard is gone: the page now redirects to the Creative Center home page and the leaderboard sits behind a login. The actor checks for it with one cheap HTTP request on every run and uses it whenever TikTok serves it again. Until then the feed is built from Creative Center Top Ads, which is still public: the top-performing TikTok ads for your region and window, filtered to commerce objectives (Conversions, Product Sales), each emitted as a trending_product_ad record with the ad headline, brand, industry, objective, CTR score, likes, budget tier, the ad video (playable link + cover + duration), and a link to the ad's Creative Center page. These records have no price, "X sold" or buy link - TikTok does not expose them on this surface - and those fields stay null rather than being guessed. Set include_all_ad_objectives to keep every objective. Use the Top product ads dataset view for these records.

What it does

For a region + trend window, it builds a trending-products feed from three public surfaces - none of which need a seller account or the TikTok Shop API:

  1. Creative Center -> Top Products (the trending leaderboard, and the friendliest TikTok surface to read). The browser tier renders the page and captures its own product-list call - we never forge a signature. This gives ranked products + each product's trend signal + the videos/ads that drove it.
  2. Public TikTok Shop product page fills in price, sale price, "X sold", rating that Creative Center does not expose (the enrichment hop).
  3. Public TikTok video page for the driving video's engagement (views/likes/creator).

Then, on every scheduled run, it diffs against the previous snapshot and attaches velocity + price history per product.

Modes

ModeWhat you get
feedFull record: trending product + price/sales enrichment + driving video. The feed.
discoverTrending leaderboard only (name / rank / category / trend). Cheap reconnaissance.

The feed record

{
"record_type": "trending_product",
"rank": 1, "region": "US", "category": "Beauty & Personal Care", "trend_window_days": 7,
"product_id": "1729...", "product_name": "Wonderskin Lip Stain", "image_url": "...",
"price": 24.0, "list_price": 32.0, "on_sale": true, "discount_pct": 25.0, "currency": "USD",
"units_sold": 128500, "rating": 4.7, "shop_name": "Wonderskin Official",
"buy_url": "https://shop.tiktok.com/view/product/1729...?aff_id=YOURID",
"driving_video": {
"video_id": "7390...", "video_url": "https://www.tiktok.com/@beautybyamy/video/7390...",
"embed_url": "https://www.tiktok.com/embed/v2/7390...", "thumbnail_url": "...",
"creator_handle": "@beautybyamy", "views": 4200000, "likes": 388000, "posted_at_epoch": 1718841600
},
"trend": { "trend_score": 0.92, "rank_change": 4, "first_seen": "2026-06-18T00:00:00+00:00" },
"velocity": { "units_sold_delta": 5100, "units_sold_per_day": 5100.0, "price_change": 0.0,
"rank_change": 4, "is_new": false, "days_tracked": 7 },
"scraped_at": "2026-06-25T14:00:00+00:00"
}

A single snapshot only tells you what is popular now. "Trending" is change over time. So when this actor runs under an Apify Schedule, every run diffs against the previous snapshot and derives per product:

  • units_sold_per_day - estimated daily sales velocity from the "X sold" delta (the same method Kalodata/FastMoss sell).
  • price_change / price_change_pct - price history.
  • rank_change - climbing vs fading on the leaderboard.
  • is_new - just entered the leaderboard (the highest-value early signal for an affiliate).

History only accrues forward, so the actor snapshots from its very first run. Schedule it once and your moat compounds daily. Set monitor_webhook_url to get the daily movers digest pushed to Slack.

Inputs

{
"mode": "feed",
"region": "US",
"period_days": "7",
"max_products": 50,
"enrich_price": true,
"include_all_ad_objectives": false,
"affiliate_tag": "aff_id=YOURID&source=dailyvirals",
"monitor_webhook_url": "",
"use_browser_fallback": true,
"browser_cdp_url": ""
}

affiliate_tag is appended to every buy_url so the feed is monetizable out of the box.

Pricing

EventWhat it coversPrice
trending_productOne ranked product + trend signal + driving video$0.005
enriched_productPrice / sale price / "X sold" / rating filled from the product page$0.005
scheduled_delta_runPer scheduled run: velocity + price-history + movers digest$0.050

Pay-per-event: failed fetches are not charged. A run that returns nothing costs nothing.

What you DON'T get

For transparency: this surfaces public, estimated commerce signals. It does not return:

  • TikTok's official GMV (those numbers live behind the authenticated seller/partner API). Sales figures here are estimates derived from the public "X sold" delta - the same basis every third-party tool uses.
  • Other creators' private affiliate analytics (those require each creator's authorization via TikTok's CAP flow).

Reliability

  • The browser tier captures Creative Center's own requests (no forged signatures): one shared Chromium per run, headful under a private Xvfb (TikTok's edge answers 403 to headless browsers), images/media/fonts blocked, a per-flow time cap and a circuit breaker. curl_cffi TLS impersonation handles product pages; Apify RESIDENTIAL proxy carries the browser leg.
  • Fail-soft throughout: a blocked surface emits a documented surface_pending note and the run still SUCCEEDS. A run that extracts nothing says so in its status line, pushes an availability_notice record, and costs $0 - no sample records are passed off as data.
  • TikTok Shop product pages currently answer logged-out clients with a captcha page; price enrichment detects it and stops after three consecutive blocks instead of spending the run on it.
  • The run sizes itself to its own timeout, so a short timeout returns what was collected instead of timing out.

Powering a website (e.g. a daily-virals feed)

Schedule the actor daily, then have your site read the run's dataset via the Apify API:

GET https://api.apify.com/v2/acts/seibs.co~tiktok-trending-products/runs/last/dataset/items?token=<TOKEN>&clean=true

That endpoint always returns the latest feed - point your frontend at it (or cache it) and the site updates itself every day. Velocity and price history ride along automatically.