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.
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.
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).