TikTok Comments Scraper
Pricing
from $0.75 / 1,000 tiktok comments
TikTok Comments Scraper
Scrape TikTok video comments and replies into clean JSON with author details, engagement counts, timestamps, mentions, hashtags, and video status records.
Pricing
from $0.75 / 1,000 tiktok comments
Rating
0.0
(0)
Developer
Inus Grobler
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
TikTok Comments & Replies Scraper
Scrape comments and reply threads from public TikTok videos into clean, analysis-ready JSON. This TikTok comments scraper is built for social listening, sentiment analysis, moderation workflows, audience research, brand monitoring, and creator or campaign analysis.
The Actor collects top-level comments, can fetch replies under each comment, deduplicates comment IDs, and streams one dataset row per comment or reply.
This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by TikTok.
Why use this Actor
- Monitor audience reactions on TikTok videos for social listening and brand tracking
- Export TikTok comments for sentiment analysis, topic modeling, moderation, or research
- Collect reply threads when you need conversation context, not just top-level comments
- Analyze creator, campaign, news, politics, product, or trend conversations
- Track comment counts and per-video scrape status across many TikTok videos
- Start quickly with a small default run, then scale to larger comment exports
Common use cases
- Social listening: collect public TikTok comments from campaign, trend, or brand videos.
- Sentiment analysis: export comment text, language, like counts, timestamps, and author fields for downstream NLP.
- Moderation and trust and safety: review public comment threads, replies, labels, mentions, hashtags, and pinned/liked flags.
- Market and audience research: compare reactions across videos, creators, topics, or regions where TikTok returns profile metadata.
- Journalism and academic research: preserve analysis-ready public comments and per-video scrape status records for auditability.
- Creator and influencer analytics: understand audience responses and identify high-engagement comment threads.
What it collects
- Top-level comment text and IDs
- Replies, including parent comment IDs
- Author username, display name, profile URL, avatar URL, user ID, and secUid
- Author profile details when TikTok returns them, including signature, region, language, follower count, following count, heart count, and video count
- Like count, reply count, pin/liked flags, labels, language, IP label, and creation time
- Mentions, hashtags, text entity offsets, comment image URLs, sticker URLs, and share URLs when available
- Source video ID and resolved TikTok video URL
- Per-video status records with scrape status, counts, and errors
Why this scraper is useful for analysis
- One row per comment or reply: easier to load into Excel, Google Sheets, BI tools, Python, R, or databases.
- Reply context: reply rows include parent comment IDs and reply target fields where TikTok returns them.
- Deduplication: repeated comment IDs are tracked during the run to avoid duplicate rows.
- Status rows: every processed video can produce a
video_statusrow, so empty or limited videos are visible. - Large-run controls:
maxSecondsPerVideohelps prevent one high-comment video from consuming a whole multi-video run. - Live streaming output: dataset rows are written as they are found, so long runs can be inspected while still running.
Input
Provide TikTok video URLs or raw numeric video IDs in videoUrls. You can paste a full /video/ URL, a short TikTok URL, or just the numeric video ID.
The main controls are the video list, comment limit, reply collection, and optional cookies. Residential proxy routing, request pacing, retries, and memory-friendly result streaming are tuned automatically.
{"videoUrls": ["https://www.tiktok.com/@khaby.lame/video/7623088450576633119","7615594654058237206"],"maxCommentsPerVideo": 10,"includeReplies": false,"maxRepliesPerComment": 0,"maxSecondsPerVideo": 0}
For large multi-video runs, set maxSecondsPerVideo to a non-zero value to improve coverage across the whole input list. This is useful when one video has a very large comment or reply thread and would otherwise consume most of the run time. A value of 0 disables the per-video soft limit.
Runs use Apify Residential Proxy by default. A real TikTok cookie header can improve reliability when TikTok challenges anonymous sessions. Use cookieHeader only with cookies you are authorized to use.
Rows are written to the dataset as soon as each comment or reply is found, so long runs can be inspected while they are still running. The Actor does not keep collected comments in memory.
Output
Dataset items are comment, reply, or video status records. Comment and reply rows are written immediately as they are parsed. Video status rows are written once per input video and are useful when TikTok returns no comments for the current session.
{"record_type": "comment","video_id": "7106594312292453678","video_url": "https://www.tiktok.com/@tiktok/video/7106594312292453678","comment_id": "7107000000000000000","parent_comment_id": "","is_reply": false,"text": "Example comment text","like_count": 12,"reply_count": 2,"create_time": "2026-05-28T10:15:00Z","create_time_epoch": 1780000000,"author_unique_id": "example_user","author_nickname": "Example User","author_profile_url": "https://www.tiktok.com/@example_user","scraped_at": "2026-05-28T14:30:00Z"}
{"record_type": "video_status","video_id": "7623088450576633119","video_url": "https://www.tiktok.com/@khaby.lame/video/7623088450576633119","status": "succeeded","top_level_comments": 10,"replies": 0,"api_pages": 1,"video_metadata_status": "not_loaded","scraped_at": "2026-05-28T14:30:00Z"}
The run summary is stored in OUTPUT_SUMMARY and includes per-video counts, failures, API page counts, and the effective settings.
Python API example
from apify_client import ApifyClientTOKEN = "YOUR_APIFY_TOKEN"ACTOR_ID = "thescrapelab/tiktok-comments-scraper"apify_client = ApifyClient(TOKEN)actor_client = apify_client.actor(ACTOR_ID)run_input = {"videoUrls": ["https://www.tiktok.com/@khaby.lame/video/7623088450576633119"],"maxCommentsPerVideo": 10,"includeReplies": False,"maxRepliesPerComment": 0,"maxSecondsPerVideo": 0,}call_result = actor_client.call(run_input=run_input)if call_result is None:raise RuntimeError("Actor run failed")dataset_client = apify_client.dataset(call_result["defaultDatasetId"])for item in dataset_client.list_items().items:if item.get("record_type") in {"comment", "reply"}:print(item["record_type"], item.get("comment_id"), item.get("text"))else:print(item["record_type"], item.get("video_id"), item.get("status"))
Notes and limitations
TikTok changes its web API and challenge behavior often. The Actor uses residential proxy routing by default, but a cookie header can still be needed for a warmer session. Keep request limits realistic. The Actor only scrapes comments available to the session used for the run.
If TikTok returns a late paging error after comments have already been collected, the Actor keeps the rows and marks that video as partial_success instead of discarding the useful result.