# Changelog of TikTok Trending Products - Product, Video & Price Feed (`seibs.co/tiktok-trending-products`) Actor

- **URL**: https://apify.com/seibs.co/tiktok-trending-products/changelog.md
- **Full Actor documentation**: https://apify.com/seibs.co/tiktok-trending-products.md

## Changelog - tiktok-trending-products

### 0.2 - 2026-09-27 - Live feed from Creative Center Top Ads; shared browser; honest zero runs

- **Source change (checked live 2026-09-27):** the logged-out Creative Center Top Products page now 301s to the Creative Center home page (TikTok One) and its list endpoints return 404, so browser runs captured nothing. Each run now probes the page with one HTTP request; when the leaderboard is gone the feed is built from **Creative Center Top Ads** (still public), filtered to commerce objectives (Conversions, Product Sales) and ranked by likes then CTR score. New record type `trending_product_ad` with `ad_id`, `ad_title`, `brand_name`, `category` (industry name from the page's own filter dictionary), `objective`, `ctr_score`, `likes`, `budget_tier`, `ad_detail_url`, and `driving_video` (playable 720p link, cover, duration, size). Price / sold / buy link stay null on these records. New input `include_all_ad_objectives`; new dataset view "Top product ads". Pricing unchanged: one `trending_product` event per record; no `enriched_product` charge on ad records.
- **Capture fix:** the page fires several `creative_radar_api` calls (user info first); the leaderboard capture now only accepts a response that parses to product rows instead of the first URL match.
- **Browser tier rebuilt around one shared Chromium per run** (`src/browser_session.py`): isolated context per flow, pages capped by run memory (1 below 2 GB, 2 at 2 GB, 3 at 4 GB+), 60 s / 150 s caps per fetch / flow, a circuit breaker after 3 consecutive failures, a private Xvfb when the image has one and no display is running (headful is required - TikTok answers 403 to headless Chromium), `--disable-dev-shm-usage`, and a fallback to the Playwright build when patchright's Chromium is missing. The Dockerfile now installs both builds.
- **Price enrichment:** TikTok Shop's "Security Check" captcha page (served as HTTP 200) is now recognized as a block; enrichment runs on the HTTP tiers only and stops after 3 consecutive blocks.
- **Honest zero-result runs:** when nothing is extracted the run finishes SUCCEEDED with a status message, an `availability_notice` record and the source notes, and charges $0. Sample records are no longer pushed on that path.
- **Time-aware:** the compute cap shrinks to fit the platform timeout minus a 30 s reserve.
- `access_notes` reports `source_surface`, Top Ads stats, and browser-session telemetry. README examples pass `period_days` as a string, matching the input schema.

### 0.1 (build 0.1.0) - 2026-06-25

Initial build. A public-data trending-TikTok-Shop-products feed (product + driving
video + price/sales) for sites like thedailyvirals.com. No seller account, no
TikTok Shop Open API, no USDS review.

- **Surfaces:** Creative Center Top Products (browser tier captures the page's own
  product-list XHR), public TikTok Shop product page (price / sale price / "X sold"
  / rating enrichment), public video page (driving-video engagement).
- **Modes:** `feed` (full record) and `discover` (leaderboard only).
- **Velocity / price history:** on scheduled runs, diffs against the prior snapshot
  and emits `units_sold_per_day`, `price_change`, `rank_change`, `is_new`, plus a
  movers digest (fastest-selling / biggest-climbers / new-entrants) with optional
  Slack webhook. Snapshots from the first run so history accrues forward.
- **Monetization:** `affiliate_tag` appended to every `buy_url`.
- **PPE:** `trending_product` $0.005, `enriched_product` $0.005, `scheduled_delta_run`
  $0.050. Returns-nothing-costs-nothing.
- **Cost-control:** pre-flight caps, demo-mode soft-fail (run always SUCCEEDS),
  `_RunBudget` guard, hardcoded PPE prices.
- **Reuses** the proven `tiktok-research-intel` browser tier, escalation ladder, and
  monitor-mode state store.
- **Validation:** 63/63 offline smoke checks (`scripts/smoke_test_tiktok_trending.py`)
  on real-shaped fixtures; all modules compile; all `.actor` JSON valid. The live
  browser-tier extraction is confirmed on the first deployed run (playwright image).

#### Known follow-ups

- Confirm/tune the Creative Center `creative_radar` product-list endpoint needle on
  the first live browser run.
- Richer driving-video stats via an optional video-page fetch (currently sourced from
  Creative Center's linked refs).
- `related_actors.py` cross-promo registration for this slug.
- Region/category deep-filtering on the Creative Center page (currently region +
  period via page params; category is best-effort).
