TikTok shadowban check
Give me a list of accounts and an Apify key — I return, per account, a shadowban probability, the likely causes, and what to do about it.
python3 ../../tools/shadowban_check.py handle1 handle2 --apify-key apify_api_xxx
# optional: OPENROUTER_API_KEY=... adds a "what works / what flops" LLM read
Output: one table on stdout + shadowban_reports/<date>_<handle>.md per account
(≈$0.01 per account via Apify clockworks~tiktok-profile-scraper, last ≤30 posts).
The model behind the verdict
TikTok distributes in rounds. Every post gets a seed batch (~200–500 views); only if that batch's watch-time / completion / saves clear the bar does the post get the next round. So the histogram of posts by round is the diagnostic, not the average:
| Round | Views | Meaning |
|---|---|---|
| R0 | <200 | never left the seed batch — throttled or dead on arrival |
| R1 | 200–500 | seeded, no expansion — hook/retention failed the first test |
| R2 | 500–2k | one expansion |
| R3 | 2k–20k | FYP traction |
| R4 | >20k | viral |
Probability score (0–100): share of posts stuck in R0 (up to 40) + median <300 (20) + zero-view posts (up to 20) + burst posting (10) + duplicate captions (10).
The one split that matters: at the same low median, engagement ≥1% means the account is throttled (people who see it like it — TikTok just won't distribute), while engagement <1% means the content fails the seed test. Same symptom, opposite fix.
Signals it flags (each is a documented FYF-ineligibility or automation cue)
- ≥3 posts published <1h apart · >3 posts/day → burst/automation pattern
- duplicate captions · same hashtags on ≥60% of posts → near-identical content; a pattern of it de-recommends the whole account
- zero-view posts → not even seeded: check Account status (strike / private)
- last-10 vs previous-10 trend → what just changed
What to do with the verdict
- Throttled, healthy engagement → change how you post, not what: pause 48–72h, then 1/day from the phone with a library sound, ≥6h apart. Do not recreate the account unless Account status shows strikes — restrictions expire.
- Content fails seed → fix slide 1 / the first 1.5s: specific number + concrete object + mistake-or-rule; clone a format that already prints in the niche (look for accounts with a stable 100k+/30d median, not one viral fluke).
- Duplicate / burst signals → unique caption per post, rotate hashtags, never mirror one post across accounts, spread posting times.
- New account only for: strikes, a device/IP that has carried many accounts, or wrong geo. Create (clean phone, target-country region + real number or mobile proxy, ≤3 accounts/device, 7–14 days of consumption before posting); never buy — bought accounts flag on device/IP mismatch.
What's known vs believed
Official TikTok docs: unaudited API clients post private-only; audited ones are allowed (~15 posts/day cap) with no documented reach penalty — but API posts cannot carry library sounds or in-app behavioural signals. What is documented is account-level de-recommendation for repeated duplicate / spam content. No controlled API-vs-manual study exists; treat "schedulers get you shadowbanned" as a hypothesis and A/B it: same content, manual vs API, 7 days, compare R0 share.