TikTok Comments Scraper avatar

TikTok Comments Scraper

Pricing

from $0.75 / 1,000 tiktok comments

Go to Apify Store
TikTok Comments Scraper

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

Inus Grobler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

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_status row, so empty or limited videos are visible.
  • Large-run controls: maxSecondsPerVideo helps 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 ApifyClient
TOKEN = "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.