TikTok Comments Scraper & Monitor - Replies, Likes, New Only avatar

TikTok Comments Scraper & Monitor - Replies, Likes, New Only

Pricing

from $1.46 / 1,000 comment row returneds

Go to Apify Store
TikTok Comments Scraper & Monitor - Replies, Likes, New Only

TikTok Comments Scraper & Monitor - Replies, Likes, New Only

For brand monitoring, community management and sentiment research: comments of TikTok videos as rows with text, author, likes, reply count, time posted and whether the creator pinned or liked them, with optional replies. Monitoring returns only comments posted since the last run. Unofficial.

Pricing

from $1.46 / 1,000 comment row returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Export the comments of TikTok videos from their URLs: the comment text, the author's username and display name, the like count, the reply count, the time it was posted and the comment id, plus whether the creator pinned or liked it. Turn on replies to get each comment's replies right after it, with the parent comment id and the username replied to.

Turn on monitoring mode, schedule the Actor, and each run returns only the comments posted since the last run. Videos TikTok returns no comment list for come back as free rows that say so.

Unofficial. Public data only. This Actor is not affiliated with TikTok. It reads the comments TikTok shows to any visitor without logging in, and it does not read private accounts, direct messages or anything behind a login.

What you can use it for

  • Brand and campaign monitoring: schedule monitoring mode on your videos or a creator's campaign videos and get only the new comments each hour or day.
  • Community management: find new questions and complaints under your videos without scrolling.
  • Sentiment and research datasets: export comments with likes, reply counts, language and time to a spreadsheet, a database or an AI pipeline.
  • Influencer vetting: see who comments under a creator's videos and how much engagement the comments get.

How it works

  1. Paste video URLs (https://www.tiktok.com/@nasa/video/7676868860749827342), photo post URLs (/photo/), mobile URLs (https://m.tiktok.com/v/7676868860749827342.html) or bare numeric video ids.
  2. For each video the Actor reads TikTok's public comment list page by page (https://www.tiktok.com/api/comment/list/, up to 50 comments per page) and returns each comment once. Only comments that TikTok labels with the video you asked for are returned.
  3. With includeReplies on, it reads the replies of every comment that has any (/api/comment/list/reply/) and returns them right after their comment.
  4. Videos that TikTok returns no comment list for, bot checks and invalid input get a free row that says why.

Input

FieldDefaultWhat it does
videosexample videosVideo URLs, photo post URLs or numeric video ids, one per line (commas also separate entries, and so do spaces between entries that are all video URLs or ids). A repeated video is read and charged once; the repeat gets a free duplicate row. Short links (vm.tiktok.com) are not followed. Up to 500 videos per run.
maxCommentsPerVideo100With monitoring off, stop a video after this many rows (comments plus replies). In monitoring mode it limits only the first check of a video. Up to 10,000.
includeRepliesfalseAlso return replies, as rows of type reply. Charged like comments.
monitoringModefalseReturn only comments posted since the last run of each video.
resetMonitoringStatefalseForget everything remembered and start again with a first check. Turn it off again after one run.
useProxytrueRetry a page through a US proxy only if TikTok answers it with a bot check or a rate limit.
{
"videos": [
"https://www.tiktok.com/@nasa/video/7676868860749827342"
],
"maxCommentsPerVideo": 500,
"includeReplies": true,
"monitoringMode": true
}

If you leave videos out of the input with monitoring off, the two example videos in the input form are read (their URLs appear in inputVideo and the run log says so). In monitoring mode videos is required, so a schedule never pays to watch the examples. An empty list is rejected with a free invalid-input row.

Output

One row per comment. This row was read from Apify on 2026-09-21 (UTC):

{
"status": "ok",
"inputVideo": "https://www.tiktok.com/@nasa/video/7676868860749827342",
"videoId": "7676868860749827342",
"videoUrl": "https://www.tiktok.com/@nasa/video/7676868860749827342",
"videoCommentCount": 1247,
"commentId": "7676872245000602398",
"type": "comment",
"parentCommentId": null,
"repliedToCommentId": null,
"repliedToUsername": null,
"text": "My dream job posted",
"imageCount": 0,
"likeCount": 1601,
"replyCount": 10,
"createdAt": "2026-08-22T15:05:43.000Z",
"createTime": 1787411143,
"language": "en",
"isPinnedByCreator": false,
"isLikedByCreator": false,
"authorUsername": "harlowniederle",
"authorNickname": "Harlow🌎🌘🚀🇸🇰🇵🇷",
"authorId": "7449540857897763883",
"authorSecUid": "MS4wLjABAAAABuTp51IjFEYhZOfE7Q1A_LXqjJ10v_TMSU4LNh2th8favObQE65D0KhEtOed22KB",
"authorProfileUrl": "https://www.tiktok.com/@harlowniederle",
"isFirstCheck": null,
"isNew": null
}

Every row also has source and scrapedAt. Notes on the columns:

  • type is comment or reply. A reply has parentCommentId (the comment it sits under) and, when it answers another reply, repliedToCommentId and repliedToUsername. replyCount is only filled on comments.
  • text is null for comments with no text, such as a photo or a sticker only; imageCount says how many photos a comment has. The text is returned as TikTok shows it.
  • language is the language TikTok detected for the comment, or null when TikTok could not tell.
  • videoCommentCount is the comment count TikTok shows for the video.
  • videoUrl is filled when you gave a full video URL; with a bare id it is null.
  • isFirstCheck and isNew are filled only in monitoring mode (see below).

How many comments you get

TikTok's listing does not reach the comment count it shows. On 2026-09-21, for a NASA video showing 1,249 comments, reading the whole list with replies from Apify returned 623 comments and 209 replies (832 rows, 117 seconds). So expect fewer rows than the count on the video, and use videoCommentCount for the shown figure. On a larger video (Zach King, 66,172 comments shown) the same day, 3,000 comments were read in 271 seconds.

Comments come in TikTok's own order (most relevant first), not by time. TikTok also repeats some comments on later pages (when the same video was read page by page earlier that day, 59 of the 676 comments listed were repeats); each comment is returned once.

Rows that are never charged

StatusMeaning
video-not-returnedTikTok returned no comment list and no comment count for the id. It does this for ids that do not exist; it may also mean the video is private, removed or has comments turned off, and the row does not claim which.
no-comments-listedTikTok's comment list for the video is empty.
blockedTikTok answered with a bot check, a rate limit or an empty response, even after retrying.
unreadableThe comment list could not be read (tiktokStatusCode has TikTok's code when it gave one).
stopped-readingReading a video stopped part way (a later page could not be read, or replies of some comments could not be read). The rows returned before that are complete.
max-comments-reachedThe video reached maxCommentsPerVideo rows.
invalid-inputThe entry is not a video URL or id, or it is a short link.
duplicateThe same video appeared earlier in the list.
no-new-commentsMonitoring mode: no new comments on the videos checked.
budget-reachedThe run's maximum total charge had no room for more rows (the row says how many comments or videos were left out).
not-checkedMore than 500 videos were given.

Pricing

  • $2.00 per 1,000 comment rows (comments and replies), charged only for rows with status: "ok".
  • In monitoring mode, also $0.30 per 1,000 comment pages read: every page of up to 50 comments or replies read costs a page check, whether or not it has new comments. Example: 10 videos with about 500 comments each (about 10 pages each) checked every hour is 72,000 pages a month, which is $21.60, plus $2.00 per 1,000 new comments returned.

The Actor reads only as many pages as the run's maximum total charge can pay for (in monitoring mode, a page check and a comment row each), and a free row says what was left out.

Monitoring mode

  • The first run of a video returns up to maxCommentsPerVideo comments with isFirstCheck: true and remembers the time of that check.
  • Later runs read the video's whole comment list again (TikTok does not sort it by time) and return only comments posted after the previous check that were not returned before, with isNew: true. They are not cut by maxCommentsPerVideo.
  • To catch comments that appear in TikTok's list a little late, the boundary is placed 10 minutes before each check, and comments already returned inside that window are remembered so they are not returned twice.
  • If a run stops part way (for example at the maximum total charge), the boundary does not move, so comments that were not reached are returned by the next run.
  • With includeReplies on, a comment's replies are read again only when the comment is new or its reply count went up since a check that read it, and only replies posted after the previous check are returned. Comments the first check did not reach (beyond maxCommentsPerVideo) have their reply count remembered from the next check on; their replies are read once that count goes up.
  • Large videos cost more pages per check: on 2026-09-21 a second check of a NASA video showing 13,593 comments read 200 comment pages (the most read per video) plus reply pages. When a check stops at 200 pages or at the maximum total charge, the boundary does not move, so comments it did not reach are still returned later.
  • Comments that were posted before the first check and not returned by it (beyond maxCommentsPerVideo) are never returned by later checks.
  • The memory is kept per video for this Actor, not per list. Do not put the same video in two schedules that can run at the same time: Apify's key-value store has no atomic update, so two runs of the same video finishing together can overwrite each other.
  • If Apify restarts or moves a run, it continues after the videos it had already finished, and a comment already in the run's dataset is not returned or charged again.

Limits

  • Up to 500 videos per run, read one page at a time with a short pause between requests. Up to 200 comment pages per video and 20 reply pages (1,000 positions) per comment; a free row says when a comment had more replies than that.
  • The Actor does not search TikTok or list a creator's videos; give it the video URLs.
  • It does not follow short links (vm.tiktok.com); open one in a browser and paste the full URL.