TikTok Comments Scraper avatar

TikTok Comments Scraper

Pricing

from $0.40 / 1,000 comments

Go to Apify Store
TikTok Comments Scraper

TikTok Comments Scraper

Scrape TikTok comments and replies from any video, search or hashtag. Exports text, likes, reply counts, timestamps and commenter profiles to JSON, CSV or Excel.

Pricing

from $0.40 / 1,000 comments

Rating

0.0

(0)

Developer

Corvuslab

Corvuslab

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

What does TikTok Comments Scraper do?

It reads the comment section of TikTok videos and turns it into structured data you can actually work with.

Point it at videos and it collects their comments. Point it at a search query or a hashtag and it finds matching videos first, then collects the comments on those. Video links can be full URLs, the short share links the TikTok app's Share button produces, or a list loaded straight from a spreadsheet — you do not have to clean your URLs before you start.

Every comment comes back as one flat record: the comment text, the commenter's handle and display name, their avatar and verification badge, the like count, the reply count, the exact time it was posted, and a direct link back to the comment on TikTok. Replies are collected as records of their own, carrying both the top-level comment they sit under and, when someone answers another reply, the exact reply they were talking to — so threads rebuild in their real shape rather than as one flat list.

Runs are small and quick — a few hundred comments arrive in well under a minute.

  • TikTok Profile Scraper — the natural next step after this actor. A comment tells you what someone said and gives you their uniqueId, but not who they are: TikTok does not serve follower counts, bios or contact details on the comment endpoint. Feed those handles into the profile scraper and you get follower and following counts, the bio, bio links and any email or phone found in it. Both actors use the same field conventions, so uniqueId joins one dataset straight onto the other — comments tell you what an audience says, profiles tell you who it is. Pair it with purchaseIntent and a product video's comment section becomes a qualified lead list with contact details attached.

What data can you extract from TikTok comments?

Each record is one comment or one reply:

FieldDescription
idThe comment's own ID
textThe comment itself
imageUrlImage or sticker attached to the comment, when there is one
languageDetected language of the comment
diggCountLikes on the comment
replyCountHow many replies it has
createTime / createTimeISOWhen it was posted, as a timestamp and as ISO 8601
isReplyWhether this record is a reply
parentCommentIdThe top-level comment this record belongs to
replyToReplyIdThe specific reply being answered, when a reply answers another reply
urlDeep link straight to the comment
uniqueIdCommenter's @handle
nicknameCommenter's display name
userId / secUidCommenter's internal identifiers
avatarThumbCommenter's profile picture URL
verifiedWhether the commenter has a verification badge
userUrlLink to the commenter's profile
likedByAuthorThe video's creator liked this comment
pinnedByAuthorThe video's creator pinned this comment
isCreatorThe video's creator wrote this comment themselves
purchaseIntentTikTok's own signal that the comment shows buying intent — asking the price, where to buy, or whether it ships
ageGroupTikTok's predicted age bracket for the commenter (1–5). Null for most commenters, since TikTok only predicts one sometimes
videoId / videoUrlThe video the comment belongs to
videoCommentCountTotal comments on that video, so you can see what share you captured

Three of these are worth calling out. likedByAuthor, pinnedByAuthor and isCreator tell you which comments the creator engaged with and which ones they wrote — usually a far better signal of what mattered in a thread than raw like counts, and the thing brand-partnership and community teams look for first.

purchaseIntent is TikTok's own read on whether a comment is someone asking to buy — price, availability, shipping. It is the fastest way to pull the commercially interesting comments out of a thread of thousands: filter on it and a product video's comment section becomes a lead list. Measured on live runs: it fires on 31% of comments under TikTok Shop and haul videos, and on 0% under a non-commercial announcement video — so it discriminates rather than firing everywhere.

Key features

  • Two ways in — name the videos, or find them by keyword or hashtag.
  • Messy URLs welcome. Full links, app share links (vm.tiktok.com/…), photo posts and bare video IDs all work, and bulk lists can be loaded from a file rather than pasted.
  • Replies are full records, not a nested blob — same fields as any comment, linked by parentCommentId and replyToReplyId.
  • No duplicate comments. TikTok's paging overlaps and returns the same comment on consecutive pages; this de-duplicates as it reads, so a request for 200 comments returns 200 distinct ones.
  • Failed URLs are reported, not swallowed. Anything that could not be read comes back as an error row in the same dataset, with the input and a reason.
  • Buying-intent flag on every comment — TikTok’s own signal for "where do I get this / how much", so a product video’s comments can be filtered straight down to the people asking to buy.
  • Incremental monitoring — run it on a schedule and get only the comments that appeared or changed since last time.
  • Alerts to Telegram, Slack, Discord or any webhook when new comments land.
  • Filter and sort by post date or by likes, and cap comments per video so one viral clip cannot eat the whole run.
  • Custom map function to reshape records before they are saved.

How to scrape TikTok comments

  1. Paste one or more TikTok video links into Video URLs. A link looks like https://www.tiktok.com/@username/video/7231338487075638570, or https://vm.tiktok.com/ZGxxxxxxx/ if you copied it from the app.
  2. Leave Proxy configuration exactly as it comes — it is already set correctly, and the FAQ below explains why it matters.
  3. Set Max comments per video if you want a tighter cap than the default.
  4. Turn on Include replies for full threads rather than top-level comments only.
  5. Click Start.

To collect by topic instead, leave Video URLs empty and put your keywords into Search queries or tag names into Hashtags, then use Videos per query or hashtag to control how many videos each one contributes. This path takes longer, because finding videos and reading comments happen in different TikTok regions and the run has to open a second connection for the search step.

Input

The only required setting is the proxy, and it is prefilled. Everything else has a sensible default.

{
"videoUrls": ["https://www.tiktok.com/@tiktok/video/7231338487075638570"],
"includeReplies": true,
"maxRepliesPerComment": 10,
"maxCommentsPerVideo": 100,
"maxResults": 500,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "DE"
}
}

Collecting by keyword instead, newest comments first:

{
"searchQueries": ["air fryer recipes"],
"hashtags": ["airfryer"],
"videosPerSource": 10,
"maxCommentsPerVideo": 50,
"maxResults": 500,
"dateRange": "THIS_MONTH",
"sortType": "DATE_POSTED",
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "DE"
}
}

The remaining options:

OptionWhat it does
maxResultsTotal records for the run. 0 means as many as possible, up to 20,000.
dateRangeDrop comments older than a window — last 24 hours through last 6 months.
sortTypeReturn comments in TikTok's order, most-liked first, or newest first.
startUrlsBulk input, including a CSV or text file of links held in Google Sheets or S3.
compactEmit only the core fields — ideal for AI agents and MCP clients.
excludeEmptyFieldsStrip null and empty fields from every record.
stateKeyName the tracked set yourself when using incremental mode.
maxRequestRetriesHow hard to retry a request before giving up on it.

Output

One record per comment. A top-level comment:

{
"id": "7231519685253677830",
"dataType": "comment",
"videoId": "7231338487075638570",
"videoUrl": "https://www.tiktok.com/@tiktok/video/7231338487075638570",
"videoCommentCount": 4137,
"parentCommentId": null,
"replyToReplyId": null,
"isReply": false,
"text": "thank you so much",
"language": "en",
"diggCount": 11,
"replyCount": 2,
"createTime": 1683719395,
"createTimeISO": "2023-05-10T11:49:55+00:00",
"likedByAuthor": true,
"pinnedByAuthor": false,
"isCreator": false,
"purchaseIntent": false,
"ageGroup": null,
"uniqueId": "someone",
"nickname": "Some One",
"userId": "6817000000000000000",
"secUid": "MS4wLjABAAAA",
"avatarThumb": "https://p16-sign.tiktokcdn-us.com/...",
"verified": false,
"userUrl": "https://www.tiktok.com/@someone",
"url": "https://www.tiktok.com/@tiktok/video/7231338487075638570?comment_id=7231519685253677830",
"source": "tiktok.com",
"scrapedAt": "2026-09-15T12:24:45+00:00"
}

Replies have the same shape, with isReply set to true and parentCommentId pointing at their parent.

Anything that could not be read appears in the same dataset as an error row, so a run over hundreds of links tells you exactly which ones came back empty:

{
"dataType": "error",
"input": "https://www.tiktok.com/@someone/video/7000000000000000000",
"errorCode": "NO_COMMENTS",
"error": "No comments returned — the video may be private, deleted, geo-restricted, or have comments disabled.",
"videoId": "7000000000000000000",
"scrapedAt": "2026-09-15T12:24:45+00:00"
}

Filter them out with dataType == "comment", or open the Failed inputs view in the dataset tab.

What are the limits of this TikTok comments scraper?

Worth knowing before you plan a job around it:

  • Up to 1,000 top-level comments per video, plus their replies. Very large threads are paginated automatically up to that ceiling, so on a video with 40,000 comments you get the first 1,000 — use videoCommentCount to see what share that was.
  • 20,000 records per run. Split larger jobs across runs or schedule them.
  • There is no way to list an account's own videos. TikTok stopped publishing that list, so "give me every comment on this creator's back catalogue" is not something any tool can do reliably right now without a video list. Give it the video links, or find them by keyword.
  • Hashtags are served as a keyword search, not the tag feed itself, so results are close to but not identical to the tag page.
  • Sorting and date filters apply to what the run harvested, not to all of TikTok — they trim and order your results rather than querying TikTok's index.
  • TikTok sometimes stops serving a long thread part-way. When that happens the run says so in the log and reports the thread as partial rather than pretending it reached the end — and in incremental mode it keeps what it already knew instead of reporting those comments as gone. Re-run to pick up the rest.
  • Private, deleted and geo-restricted videos return nothing. They are logged and reported as error rows, and the run moves on.

How can you monitor a TikTok comment section over time?

Turn on Incremental mode. The actor remembers what it saw last time and tags each record with a changeTypeNEW, UPDATED, UNCHANGED or EXPIRED. A comment counts as changed when its text, its likes or its reply count move, so a thread that catches fire overnight shows up as updated rather than sitting silently in the dataset. EXPIRED means a comment you had seen before is no longer in the thread — deleted by its author or removed by moderation — which is the signal to watch if you are tracking what disappears from a campaign.

On a schedule this becomes a comment watcher: run it hourly or daily against the videos you care about and each run surfaces only what actually changed. That is far cheaper than re-scraping everything and diffing it yourself, and it is the natural way to follow a campaign hashtag or a product launch as reaction comes in.

Unchanged records are suppressed by default, which keeps scheduled runs lean. Give the run a State key if you want to name the tracked set yourself rather than have it derived from your inputs.

What alerts and notifications are available?

Any run can push its findings straight to you:

  • Telegram — set a bot token and chat ID
  • Slack — set an incoming webhook URL
  • Discord — set a webhook URL
  • Any HTTP endpoint — set a webhook URL and optional headers

Each channel stays off until you fill in its fields, and a delivery failure never breaks the run. Paired with incremental mode, this gives you a live feed of new comments without anyone having to open a dataset.

What can you do with TikTok comment data?

  • Audience research. Read what people actually say under your videos or a competitor's, at a scale nobody can match by hand.
  • Sentiment and theme analysis. Feed the text into your own model and find the recurring complaints, questions and requests.
  • Campaign measurement. Track reaction to a launch or a hashtag as it unfolds, rather than reading a summary afterwards.
  • Lead generation. Comment threads under buying-intent videos are full of people asking where to get something.
  • Community management. Catch questions and complaints across a creator's back catalogue, not just the latest post.
  • Creator vetting. Before a partnership, check whether the comments are real engagement or noise — and whether the creator replies.
  • Moderation and brand safety. Spot spam, scam links and abuse under your own content.
  • Training data. Build labelled datasets of informal, real-world text.

How much does it cost to scrape TikTok comments?

The actor is billed per result, so you pay for the comments you get and nothing else. A reply is an ordinary comment record and is billed the same way. Error rows are free — you are never charged for a URL that returned nothing.

Compute is a small part of the bill, and traffic per comment is a few kilobytes. Use Max comments per video and Max results to put a hard ceiling on any run.

How do you export TikTok comments or use the API?

Results land in an Apify dataset. From there you can:

  • Download as JSON, CSV, Excel, XML, JSONL or HTML
  • Pull them through the Apify API from any language
  • Route them into Make, Zapier, n8n, Airbyte, Google Sheets or Slack
  • Push into your own database or webhook as the run proceeds

To start a run and get its results back in one call:

curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~tiktok-comments-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"videoUrls": ["https://www.tiktok.com/@tiktok/video/7231338487075638570"],
"maxCommentsPerVideo": 100,
"proxyConfiguration": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "DE"}
}'

Official clients exist for Python and JavaScript, and every input field above maps directly to a JSON key. Schedule the actor hourly, daily or weekly and combine it with incremental mode for a pipeline that maintains itself.

FAQ

Why does this actor need a proxy? TikTok serves its comment endpoint only to European visitors. Requests from elsewhere come back empty — not as an error, just with nothing in them. The proxy settings are preset to a European exit, so you should not have to think about it. Change the country if you like; DE, GB, FR and NL all work.

Will TikTok block me or my account? Nothing here touches your account — no login, no cookies, nothing tied to you. It reads what any logged-out visitor can see.

Why did I get fewer comments than the video shows? Three usual reasons: you hit Max comments per video, the run hit Max results, or the creator has limited who can comment. Compare videoCommentCount against what you received, and check the log — it reports the count per video.

How far back do comments go? As far as TikTok paginates, up to the 1,000-per-video ceiling. There is no way to jump to the oldest comments on a huge thread; you get them from the top down.

Can I get comments from a video I do not own? Yes, provided the video is public. This reads publicly visible comments only.

Can I collect every comment a creator has ever received? Only if you supply their video links. TikTok no longer publishes an account's video list, so there is no reliable way to go from a handle to its catalogue.

Does it work on private or deleted videos? No — there are no comments to read. The run logs it, writes an error row, and carries on.

Is scraping TikTok comments legal? This reads publicly visible comments — the same ones anyone sees without logging in. Public data collection is broadly lawful in most jurisdictions, but comments are written by people, so if you store or publish them, handle them in line with GDPR, CCPA and TikTok's own terms. If you are unsure how that applies to your case, take legal advice.

Can I reshape the output? Yes. Custom map function applies a JavaScript function to every record before it is saved, so you can rename fields, drop the ones you do not need, or compute your own. Compact records is the one-click version.


Keywords: TikTok comments scraper · scrape TikTok comments · TikTok comment API · TikTok replies scraper · TikTok comment extractor · export TikTok comments CSV · TikTok comment data · TikTok sentiment analysis · TikTok audience research · TikTok comment monitoring · TikTok engagement data · scrape TikTok replies · TikTok thread scraper · TikTok commenter profiles · TikTok social listening · TikTok comment tracker · bulk TikTok comments · no-code TikTok scraper