TikTok Comments Scraper — Full Threads & Replies
Pricing
from $1.20 / 1,000 results
TikTok Comments Scraper — Full Threads & Replies
Scrape comments from any public TikTok video - text, author, like count, reply count, timestamp - with full pagination and optional nested reply threads. No login, no API key.
Pricing
from $1.20 / 1,000 results
Rating
0.0
(0)
Developer
Axery
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
TikTok Comments Scraper (with Replies)
Scrapes comments from any public TikTok video — text, author, like count, reply count, timestamp — with full pagination and optional nested reply threads. No login, no API key, no browser.
Useful for sentiment analysis, brand monitoring, audience research, and creator engagement studies.
What makes this different
Full reply threads, reassembled in order. Most comment scrapers return top-level comments only, or return replies as a flat list you have to stitch back together yourself. Here each reply is emitted directly after its parent and carries parent_comment_id, so a conversation reads top-to-bottom in dataset order with no client-side re-sorting.
is_author_liked — the signal creators actually care about. Every row records whether the video's own creator liked that comment. That's the difference between a comment that got traction and one the creator personally endorsed, and it isn't something a plain comment dump surfaces.
reply_count is null on replies, not zero. TikTok doesn't report a reply count for reply rows themselves. Writing 0 there would look like "this reply has no responses," which isn't a claim the data supports — so it's null, and only top-level rows carry a real number.
Deduplicated across pages. Comment IDs are tracked within a run, so a paginated walk returns distinct comments rather than repeats padding out your requested count.
Per-comment hashtags and TikTok's own language guess travel with every row, so filtering a multilingual comment section doesn't need a second pass.
Input
| Field | Type | Notes |
|---|---|---|
videos | array | Full TikTok video URLs or bare numeric video IDs. |
maxItems | integer | Rows per video, counting replies. 0 walks every page. |
includeReplies | boolean | Fetch nested reply threads. |
maxRepliesPerComment | integer | Cap on replies per parent comment. |
proxyConfiguration | object | Defaults to Residential. |
Output
{"comment_id": "tiktok.com:6718335906996502533","video_id": "tiktok.com:6718335390845095173","rank": 1,"is_reply": false,"text": "ok ;) have fun~","like_count": 166,"reply_count": 20,"created_at": "2019-07-27T14:54:35Z","is_author_liked": false,"author_username": "flamigo_kisses","author_nickname": "flamigoo"}
A removed video and a video with comments switched off look identical from the outside — TikTok answers both with an empty list rather than an error — so a video returning nothing is reported explicitly in RUN_COVERAGE instead of passing as a clean empty run. Each run writes that record to the key-value store with what was requested, what came back, and any per-video failures.
Local development
pip install -r requirements.txtpython test_local.py 6718335390845095173 --max 45python test_local.py 6718335390845095173 --max 40 --replies --out sample_output.json
sample_output.json is real output from a live run with reply threads enabled.