TikTok Trending Products - Product, Video & Price Feed
Pricing
from $5.00 / 1,000 trending product records
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
Maintained by CommunityActor stats
0
Bookmarked
123
Total users
29
Monthly active users
19 days
Issues response
a day ago
Last modified
Categories
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 ApifyClientclient = 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:
- 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.
- Public TikTok Shop product page fills in price, sale price, "X sold", rating that Creative Center does not expose (the enrichment hop).
- 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
| Mode | What you get |
|---|---|
feed | Full record: trending product + price/sales enrichment + driving video. The feed. |
discover | Trending 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"}
Velocity & price history (the part that makes "trending" real)
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
| Event | What it covers | Price |
|---|---|---|
trending_product | One ranked product + trend signal + driving video | $0.005 |
enriched_product | Price / sale price / "X sold" / rating filled from the product page | $0.005 |
scheduled_delta_run | Per 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_cffiTLS impersonation handles product pages; Apify RESIDENTIAL proxy carries the browser leg. - Fail-soft throughout: a blocked surface emits a documented
surface_pendingnote and the run still SUCCEEDS. A run that extracts nothing says so in its status line, pushes anavailability_noticerecord, 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.