TikTok Comments Scraper icon

TikTok Comments Scraper

Scrape comments from TikTok videos using one or more video URLs or IDs. Extract comment text, author, likes, reply count and timestamp in clean…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

TikTok Comments Scraper at a glance

TikTok Comments Scraper is a ready-to-run Apify actor from abotapi for collecting web data. Its documented output includes video id, comment, author, display name and likes, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.40 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Web data
Pricing
$1.40 per 1,000 results (Free plan), from $1.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
30 options

Scrape comments from TikTok videos using one or more video URLs or IDs. Extract comment text, author, likes, reply count and timestamp in clean structured data. Supports multiple videos in a single run with no login required.

What TikTok Comments Scraper can do

  • Two ways to pick videos. Paste video links or ids, or give usernames and let the actor discover each account's recent videos.
  • Filters that save money. A minimum like count, a required keyword, a reply exclusion or a days-old cutoff are all applied before a row is written, so filtered-out comments are never billed.
  • Reply capture, honestly reported. Reply fetching is attempted per comment and switches itself off for a video once it is clear nothing is coming back, so you are never billed for a long stream of empty attempts.
  • Recurring monitoring. Incremental mode classifies every comment NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED against a remembered baseline, so a scheduled run returns only what changed.
  • Resume big crawls. Paste a previous run or dataset id and comments already collected there are skipped, so you never pay twice.
  • Export to your apps. Optionally pipe results into Notion, Linear, Airtable or Apify through connectors, without changing the dataset.

Choose what to collect

These inputs let you configure TikTok Comments Scraper - Comments, Authors & Likes. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
modestring · requiredHow to choose the videos. 'videos': scrape the video URLs/ids you paste. 'search': give usernames and the actor walks their recent videos, then scrapes comments on those.

Choices: videos, search

videoUrlsarrayOne or more TikTok videos to pull comments from: full video URLs (with or without a query string), m.tiktok.com/v/.html links, or numeric video ids. Several URLs of the same video are scraped once. Short share links (vm.tiktok.com) are not supported.
usernamesarrayOne or more TikTok usernames (with or without @, or a pasted profile URL such as https://www.tiktok.com/@tiktok). The actor lists each account's recent videos and scrapes their comments.
maxVideosPerUserintegerHow many of each account's most recent videos to scan for comments. 0 = the maximum (10,000).
profileSortingstringWhich of each account's videos are scanned first: latest, most liked (popular) or oldest. popular and oldest rank the account's most recent 500 videos, so 'oldest' is the oldest of those.

Choices: latest, popular, oldest

profileScrapeSectionsarrayWhich part of an account to scan. 'videos' is supported. 'reposts' is not exposed by the source: if it is the only entry, nothing is scanned for that account and a warning is logged.
oldestPostDateUnifiedstringSkip videos older than this. A date (YYYY-MM-DD) or an age such as 30 or '2 weeks'. Empty = no limit.
Show 23 more inputs
More input fields
InputWhat it controls
newestPostDatestringSkip videos newer than this date (YYYY-MM-DD). Empty = no limit.
excludePinnedPostsbooleanLeave out the videos the account pinned to the top of its profile.
minCommentLikesintegerOnly keep comments with at least this many likes. 0 = no minimum.
commentKeywordstringOnly keep comments whose text contains this word or phrase (case-insensitive). Leave empty for no text filter.
excludeRepliesbooleanKeep only top-level comments and drop replies to other comments.
commentsSinceDaysintegerDrop comments older than this many days. 0 = no date filter.
fetchRepliesbooleanAlso try to collect replies. The source currently returns no reply rows for automated sessions, so this usually adds nothing; leave it off unless you want to try.
maxRepliesPerCommentintegerCap on replies collected per comment when reply fetching is enabled. 0 = the maximum (1,000).
replyPatienceSecondsintegerTime budget for each reply request. Only used when reply fetching is enabled.
maxCommentsPerVideointegerHow many comments to collect from each video. 0 = the maximum (100,000).
topLevelCommentsPerPostintegerStop after this many top-level comments per video that pass your filters; replies and filtered-out comments do not count toward it. 0 = no separate limit (the overall per-video limit still applies).
maxPagesPerVideointegerSafety cap on result pages per video. 0 = no page limit (the comment cap above still applies).
pagePatienceSecondsintegerThe source answers only a share of requests, and only during certain windows (sometimes shut for a minute or more), so each page keeps being requested until one succeeds or this budget runs out. Raise it for stubborn videos.
maxAttemptsPerPageintegerOptional hard ceiling on requests per page. 0 = no ceiling (the seconds budget above is the only limit).
concurrencyintegerHow many requests run at the same time. Higher samples more exits per second. 20 is the maximum.
incrementalModebooleanTurn this on for recurring monitoring: each comment is labelled NEW, UPDATED, UNCHANGED or REAPPEARED against the remembered baseline, and unchanged comments are not returned. A comment becomes UPDATED when ANY output field changes (text, diggCount, replyCommentTotal, and also author flags such as likedByAuthor or pinnedByAuthor, authorNickname, mentions, images), and changedFields names which. Only scrapedAt, authorAvatarUrl (a rotating picture link), avatarThumbnail, submittedVideoUrl, input and anything you list under Ignore fields are excluded. Turn on Emit unchanged or Emit expired only if you also want those rows returned (and billed).
stateKeystringOptional name for this monitoring campaign. Leave empty to let the actor derive a key from the videos and filters.
emitUnchangedbooleanReturn comments that did not change since the last run. Off by default because unchanged rows are usually noise.
emitExpiredbooleanReturn comments that were in the baseline but are gone this run. Only emitted after a run that provably finished the whole tracked scope.
ignoreFieldsForChangesarrayOptional. Top-level field names to leave out of UPDATED change detection, on top of the built-in exclusions (scrapedAt, authorAvatarUrl, a rotating signed picture link, avatarThumbnail, submittedVideoUrl and input never trigger a false UPDATED). Ignored fields stay in the output.
mcpConnectorsarrayOptionally send results into the apps you already use, via Model Context Protocol connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write or digest. Leave empty to skip; never changes the dataset output.
notionParentPageUrlstringURL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

videoIdVideo ID (text)
textComment (text)
authorUsernameAuthor (text)
authorNicknameDisplay name (text)
diggCountLikes (number)
replyCommentTotalReplies (number)
isReplyIs reply (boolean)
commentIdComment ID (text)
createTimeIsoCreated at (date)
scrapedAtScraped at (date)
changeTypeChange (text)
replyToCommentIdReplies to (text)
Show 3 more fields
changedFieldsChanged fields (array)
firstSeenAtFirst seen (date)
lastSeenAtLast seen (date)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "recordType": "comment",
  "sourceMode": "comments",
  "commentId": "7685134583982015250",
  "videoId": "7673909736131038495",
  "videoUrl": "https://www.tiktok.com/video/7673909736131038495",
  "isReply": false,
  "replyToCommentId": null,
  "text": "This made my day",
  "authorUsername": "sampleuser",
  "authorNickname": "Sample User",
  "authorUid": "7000000000000000002",
  "authorAvatarUrl": "https://p16-sign-va.tiktokcdn.com/sample-avatar.jpeg",
  "authorRegion": "US",
  "diggCount": 12,
  "replyCommentTotal": 3,
  "createTime": 1700000000,
  "createTimeIso": "2023-11-14T22:13:20.000Z",
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}

Ways to use this data

  • Brand and campaign teams: track sentiment and engagement on your own or a competitor's TikTok videos.
  • Community managers: pull recent comments for moderation review, filtered to a keyword or a minimum like count.
  • Researchers and analysts: build a dataset of comment text, likes and timestamps across a set of videos or creators.
  • Growth and marketing teams: monitor a creator's newest videos on a schedule and get only new or changed comments.
  • Customer feedback teams: search a brand account's videos for comments that mention a product or keyword.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does TikTok Comments Scraper return?

The documented output for TikTok Comments Scraper includes video id, comment, author, display name, likes, replies, is reply and comment id. Availability of each field depends on the source page and the selected mode.

How much does TikTok Comments Scraper cost?

It costs $1.40 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

Can I get only new or changed comments on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then classifies every comment against what was remembered from earlier runs on the same State key: NEW, UPDATED (with the changed fields listed), or UNCHANGED (suppressed and not billed unless Emit unchanged is on). A comment is only reported EXPIRED after a run that reached the natural end of every tracked video or account, with no block or resume, and with Max comments per video (and, in search mode, Max videos per username) set to 0 or high enough that the cap was never reached, with no post date window, Exclude pinned posts or ranked Post sorting trimming the account's video list, and only when Emit expired is on. A comment is only reported REAPPEARED once it was previously tombstoned EXPIRED and is then seen again. Because the source can return a slightly different comment list from one request to the next, a schedule may legitimately report a few new rows every run.

Why does turning on Fetch replies usually add nothing?

The source rarely returns reply rows to automated requests, even with Fetch replies on. The actor still tries, since some accounts and windows do return them, but gives up on a video after three attempts in a row come back empty. Every attempt is billed once, whether or not it returns a row, because the request itself has a real cost; any reply rows that do come back are billed separately as ordinary results.

Why did my run fail instead of returning an empty dataset?

A run that collects zero comments is reported as failed, not as a quiet empty success, whenever at least one video could not be read or returned no comments at all from the source. If every video was read and returned comments, but none were written because your filters removed them, a resumed run had already collected them, or incremental mode found nothing changed, the run finishes successfully with a message saying the result is genuinely empty.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.

Ready to collect with TikTok Comments Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.