TikTok Comments Scraper avatar

TikTok Comments Scraper

Pricing

from $0.40 / 1,000 comment scrapeds

Go to Apify Store
TikTok Comments Scraper

TikTok Comments Scraper

Scrape public TikTok comments and replies from any video — no browser, no login. Provide video URLs or numeric IDs and get comment text, likes, reply counts, timestamps, author info (username, nickname, ID, secUid), and parent-video metadata. Pay-per-comment .

Pricing

from $0.40 / 1,000 comment scrapeds

Rating

0.0

(0)

Developer

Gopalakrishnan

Gopalakrishnan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Scrapes public TikTok comments (and optionally replies) from a list of video URLs or numeric IDs. Built as an Apify Actor using got-scraping — no browser required, fetching comments via unsigned API requests over plain datacenter proxies.

Features

  • Accepts full TikTok video URLs (e.g. https://www.tiktok.com/@stoolpresidente/video/7473199106861796654) or bare numeric video IDs (7473199106861796654).
  • Returns detailed comment records: text, likes, reply counts, creation timestamp, creator-liked badge (isAuthorLiked), author info (username, nickname, avatar, ID, secUid).
  • Supports recursive reply thread extraction (sub-comments) matching parent comments.
  • Attaches parent-video metadata (videoId, videoUrl, videoAuthor, videoDesc) to every comment/reply record.
  • Pay-Per-Event pricing: No start fee ($0.00) and a floor price of $0.0003 per comment/reply scraped.
  • Graceful error handling for missing/invalid videos instead of failing the run.

How it works

  1. Resolve Video details: For each video, the Actor first fetches the HTML detail page using got-scraping + datacenter proxy to extract the video's rehydration JSON (__UNIVERSAL_DATA_FOR_REHYDRATION__). This verifies the video exists and obtains metadata (author, description) + the canonical aweme_id (video ID).
  2. Fetch Comments: It paginates the unsigned TikTok comment list API (/api/comment/list/) using plain datacenter proxies with rotated session IDs. It implements a retry backoff strategy for transient empty pages to ensure completeness.
  3. Fetch Replies (Optional): If includeReplies is enabled, for each top-level comment that has reply_comment_total > 0, it paginates the TikTok comment reply API (/api/comment/list/reply/) to extract all replies.
  4. Cap and Push: Both comments and replies are streamed into the dataset. The total comments count respects maxCommentsPerPost.

Input

FieldTypeDescription
postUrlsarray (required)TikTok videos to scrape. Each item may be a bare numeric video ID (7473199106861796654) or a full video URL (https://www.tiktok.com/@stoolpresidente/video/7473199106861796654).
maxCommentsPerPostinteger (optional)Cap the number of comments (and replies, if included) fetched per video. Defaults to 100.
includeRepliesboolean (optional)When enabled, also fetch replies (sub-comments) for each comment. Defaults to false.
proxyConfigurationobjectProxy settings. Datacenter proxies are sufficient. Defaults to { "useApifyProxy": true }.

Example:

{
"postUrls": [
"https://www.tiktok.com/@stoolpresidente/video/7473199106861796654",
"7473199106861796654"
],
"maxCommentsPerPost": 100,
"includeReplies": true,
"proxyConfiguration": { "useApifyProxy": true }
}

Output

One flat record per comment/reply:

FieldTypeDescription
commentIdstringUnique TikTok comment ID
textstring or nullComment body text
likeCountinteger or nullNumber of likes on the comment
replyCountinteger or nullNumber of replies to this comment
createTimeinteger or nullUnix timestamp (seconds) of creation
createTimeISOstring or nullISO 8601 string of creation time
isAuthorLikedbooleantrue if the video creator liked this comment
authorUniqueIdstring or nullAuthor handle / username
authorNicknamestring or nullAuthor nickname
authorIdstring or nullNumeric author user ID
authorSecUidstring or nullAuthor security UID
authorAvatarstring or nullURL of the author's avatar thumbnail
parentCommentIdstring or nullParent comment ID if isReply is true
replyToReplyIdstring or nullID of the specific reply this comment is replying to, if nested
isReplybooleantrue if this record is a reply, false if it is a top-level comment
commentUrlstring or nullDirect URL link to the comment
videoIdstring or nullTikTok Video ID
videoUrlstringURL of the TikTok video
videoAuthorstring or nullHandle of the video creator
videoDescstring or nullDescription of the video
scrapeStatusstringsuccess or error
scrapeErrorstring or nullError details if scrapeStatus is error

Pay-Per-Event billing

EventWhen chargedNo discountBronzeSilverGold
actor-startOnce per run (flat start fee).$0.00$0.00$0.00$0.00
commentOnce per comment or reply successfully scraped.$0.0003$0.00027$0.00024$0.00021

Base pricing matches the category floor ($0.0003 per comment) with a $0 flat start fee. The Bronze/Silver/Gold tiers apply automatically based on the user's Apify Store membership level.

Set the prices for these events in the Apify Console. Event names must match the Actor.charge calls in src/main.js exactly.

Running locally

$apify run --purge

Configure your test input in storage/key_value_stores/default/INPUT.json. Local runs store results on disk (storage/datasets/default/) and do not sync to the Apify Console.