Scrapers
TikTok trends
Tracks TikTok For You feed, hashtag velocity, sound velocity, and search results. Uses a real browser with in-page webmssdk signing for the X-Bogus header. Writes one item per video to the dataset.
Updated today
Overview
At a glance
- Worker
ultron-tiktok-trends- Runtime
- Playwright Chromium, headless by default
- Modes
- recommend, challenge, music, search
- Signing
- X-Bogus computed in-page via webmssdk
- Cap
- 500 items per target
- Proxy
- Residential proxy, country matches the region knob
- Default delay
- 2500 ms per signed fetch, +50% jitter
TikTok defenses are the most aggressive in the social fleet. Every endpoint requires the X-Bogus header, which is computed from the request body via a JS shim TikTok ships into every page. The actor lets the browser compute it natively rather than reimplementing the algorithm.
Four modes
| Mode | Inputs | Surface |
|---|---|---|
| recommend | (none beyond region) | The For You feed. Useful for tracking what is rising right now in a region. |
| challenge | hashtags[] (no #) | Hashtag landing page. Per hashtag, scroll-paginate up to maxItemsPerTarget. |
| music | musicIds[] (numeric) | Sound landing page. Tracks creators who used a given sound. |
| search | searchQueries[] | Keyword search results. Each query is a separate iteration. |
Input schema
.actor/INPUT_SCHEMA.jsonjson
Request signing
Every TikTok API call needs an X-Bogus header.
src/sign.py (concept)py
Note
Reimplementing X-Bogus outside the browser is possible but fragile. The shim changes when TikTok pushes a new web bundle, and the in-browser approach picks the new algorithm up with zero changes on our side.
Crawl flow
src/__main__.pypy
Output shape
dataset-row.jsonjson
Webhook contract
actor.jsonjson
File map
actors/tiktok-trends
.actor
actor.json
INPUT_SCHEMA.json
src
__main__.pybrowser boot + per-mode dispatchers
sign.pyin-page X-Bogus signer wrapper
Dockerfile
requirements.txt
README.md