TikTok Comments Scraper: TikTok Comment Replies avatar

TikTok Comments Scraper: TikTok Comment Replies

Pricing

from $0.40 / 1,000 tiktok comment results

Go to Apify Store
TikTok Comments Scraper: TikTok Comment Replies

TikTok Comments Scraper: TikTok Comment Replies

Scrape TikTok comments and comment replies (full reply threads) from any video URL. Get comment text, likes, reply counts, timestamps, mentions and commenter profiles (handle, nickname, avatar, verified). No login or cookies. Export JSON, CSV or Excel, or use the API. Pay only per result.

Pricing

from $0.40 / 1,000 tiktok comment results

Rating

0.0

(0)

Developer

Yevhenii Molodtsov

Yevhenii Molodtsov

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

18 hours ago

Last modified

Share

TikTok Comments Scraper: TikTok Comment Replies logo

What does TikTok Comments Scraper do?

TikTok Comments Scraper collects the comments and comment replies (full reply threads) from any public TikTok video. Paste one or more video URLs and get each comment TikTok serves as a clean row: the text, like count, reply count, timestamps, mentions, and the commenter's handle, nickname, avatar and verified badge. It is built for brand and social media teams tracking audience reactions, marketers running sentiment analysis, researchers building comment datasets, and developers who need TikTok comments in their own pipeline. No TikTok account, login or cookies are needed.

  • Comments and replies: choose how many replies to fetch per comment. Each reply is its own row, linked to its parent comment by repliesToId.
  • Commenter profiles: handle, nickname, user ID, secUid, avatar, profile URL and verified badge on every row.
  • Creator signals: see which comments the video's creator liked or pinned.
  • Fast and light: plain HTTP requests, no browser. About 1,500 comments in a minute.
  • Any TikTok URL form: full video and photo URLs, plus the app's short links.
  • Clear errors: a deleted, private or mistyped video produces an error row instead of disappearing silently.
  • Familiar output: field names follow the most common TikTok comment dataset format, so existing integrations keep working.
  • Pay per result: no monthly rental and no separate compute bill.

Use cases

  • Brand and social media teams re-scrape a campaign video's comments and replies every day on a schedule, run sentiment analysis on text, and flag complaints by diggCount.
  • Product and market researchers find the top videos in a niche with TikTok Search Scraper, pass each postPage here, and mine the comments for questions, objections and feature requests.
  • Researchers build comment datasets with commentLanguage, createTimeISO and reply threads (repliesToId) for discourse and community analysis.
  • Creators and community managers see which comments the creator liked or pinned (likedByAuthor, pinnedByAuthor) and collect the most-liked questions for FAQ videos.

What data can you scrape from TikTok comments?

Every comment or reply is one dataset row with these fields:

FieldDescription
cidComment ID (string)
textComment text
createTime / createTimeISOWhen the comment was posted (Unix seconds / ISO 8601)
diggCountLikes on the comment
replyCommentTotalTikTok's reply counter (top-level comments only, null on replies)
repliesToIdParent comment ID on replies, null on top-level comments
uid / uniqueId / nickName / secUidCommenter's user ID, handle, nickname and secUid
avatarThumbnail / profileUrl / verifiedCommenter's avatar, profile URL and verified badge
likedByAuthor / pinnedByAuthorWhether the video's creator liked or pinned the comment
mentions / detailedMentionsUsers mentioned in the comment
videoWebUrl / videoIdThe video the comment belongs to
submittedVideoUrl / inputThe URL exactly as you entered it
commentLanguageLanguage TikTok detected for the comment

How to scrape TikTok comments

In Apify Console

  1. Open the Actor in Apify Console and paste one or more TikTok video URLs into TikTok video URLs.
  2. Set Maximum comments per video (replies count toward it) and, if you want replies, Maximum replies per comment.
  3. Click Start. When the run finishes, download the results as JSON, CSV, Excel or HTML, or read them from the dataset.

Via the API

Run the Actor and get the comments back in one call:

curl -X POST "https://api.apify.com/v2/acts/xmolodtsov~tiktok-comments-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"postURLs": ["https://www.tiktok.com/@duolingo/video/7514320905909194030"], "commentsPerPost": 50}'

JavaScript, Python and MCP examples are under "Integrations, API and MCP" below. You can also schedule recurring runs and send the results to other tools with Apify integrations.

How much does it cost to scrape TikTok comments?

You pay per result: each comment, reply or error row in the dataset is one result. The price depends on your Apify subscription plan:

Apify plan (pricing tier)Price per 1,000 results
Free (FREE)$1.00
Starter (BRONZE)$0.80
Scale (SILVER)$0.60
Business (GOLD), PLATINUM and DIAMOND$0.40

Platform usage is included in the price. This Actor uses pay-per-event pricing, so there are no extra compute or proxy charges on top of the per-result price. For example, 10,000 comments cost $8.00 on Starter and $4.00 on Business. Set a maximum charge for the run in Console or the API and the Actor stops cleanly when it reaches it, keeping everything scraped so far.

Is it free?

You can try the Actor on the Apify free plan. On the free plan it returns up to 10 results per run and allows 5 runs per calendar month. These limits are set by the developer of this Actor, not by Apify. A free-plan run that hits the cap still ends as Succeeded, with a status message explaining the limit, and the monthly run count resets on the 1st. Any paid Apify plan removes the limits.

Input

FieldTypeDescription
postURLsarray of stringsTikTok video URLs, required. Accepts https://www.tiktok.com/@user/video/<id>, /photo/<id> posts and short links (vm.tiktok.com/…, vt.tiktok.com/…, www.tiktok.com/t/…).
commentsPerPostintegerMaximum rows per video, replies included. Default 100.
maxRepliesPerCommentintegerReplies fetched for each top-level comment that has any. 0 (default) = no replies.
proxyConfigurationobjectApify Proxy is used by default. Change it only to route through your own proxies.

Example input:

{
"postURLs": ["https://www.tiktok.com/@duolingo/video/7514320905909194030"],
"commentsPerPost": 100,
"maxRepliesPerComment": 5
}

Output

Results land in the run's dataset. The Overview view shows the most useful columns at a glance; this preview comes from a real run on a Duolingo video:

TikTok Comments Scraper output table with comment text, likes, reply counts, dates and commenter handles

Each comment or reply is one dataset item. Example:

{
"cid": "7514900488613020462",
"text": "oh my god",
"createTime": 1749699140,
"createTimeISO": "2025-06-12T03:32:20.000Z",
"diggCount": 60,
"replyCommentTotal": 3,
"uid": "6846647293535536133",
"uniqueId": "ducarebeauty",
"repliesToId": null,
"avatarThumbnail": "https://p16-common-sign.tiktokcdn-eu.com/tos-maliva-avt-0068/3aab3da1...jpg",
"likedByAuthor": false,
"pinnedByAuthor": false,
"mentions": [],
"detailedMentions": [],
"videoWebUrl": "https://www.tiktok.com/@duolingo/video/7514320905909194030",
"submittedVideoUrl": "https://www.tiktok.com/@duolingo/video/7514320905909194030",
"input": "https://www.tiktok.com/@duolingo/video/7514320905909194030",
"videoId": "7514320905909194030",
"nickName": "DUcare beauty",
"secUid": "MS4wLjABAAAAIN0eDLdy4oXJ-7MrWvp3zUCJIcBseE2Rn6uqBbl7gBLSgqY_8bpoCaMB6OKZDOJm",
"profileUrl": "https://www.tiktok.com/@ducarebeauty",
"verified": true,
"commentLanguage": "en"
}

A video that is deleted, private or region-blocked produces one error row instead:

{
"url": "https://www.tiktok.com/@duolingo/video/7000000000000000001",
"input": "https://www.tiktok.com/@duolingo/video/7000000000000000001",
"error": "Video not found, private, region-blocked or has comments disabled",
"errorCode": "POST_NOT_FOUND_OR_PRIVATE"
}

Guarantees and run status

When does a run fail?

A run that TikTok blocks is marked Failed instead of succeeding with an empty or partial dataset, so your retry logic can catch it. A video counts as hard-failed when TikTok refused it (HTTP 403, 429 or an API error), when it ended with an error or throttling before any comment was collected, or when replies were requested and every reply thread for it was refused. The run fails when:

  • no comments were collected and at least one video hard-failed, or
  • more videos hard-failed than the larger of 2 and 20% of the videos in the run.

The status message of a failed run starts with the reason code (for example blocked: 3/10 videos failed - …), so you can read it from the API. Input without a single video URL fails immediately.

These cases are your data, not a block, and never fail the run:

  • deleted, private or region-blocked videos (POST_NOT_FOUND_OR_PRIVATE row) and URLs that are not TikTok videos (INVALID_URL row);
  • the same video submitted twice, for example as a full URL and a short link: it is scraped once;
  • reaching your maximum charge: the run ends as Succeeded with "Stopped at your max charge after N comments";
  • the free-plan caps described under "Is it free?".

Limits and tips

  • Speed: about 1,500 top-level comments in a minute. Replies need one extra request per thread, so a run with replies is slower (about 900 rows in two minutes). Up to five videos are scraped in parallel.
  • Depth: we found no hard ceiling. Videos with tens of thousands of comments page through fine.
  • Replies count toward the limit: commentsPerPost counts top-level comments and replies together. Raise it if you want many replies per comment.
  • Order: TikTok returns comments in its own order, not by date or likes, so two capped runs on the same video can return different sets. Sort or filter the dataset afterwards.
  • Error rows are billed: error rows are dataset items and cost the same as results, so double-check your URL list.
  • Run summary: the STATISTICS record in the run's key-value store shows each video's outcome, such as COMPLETE, LIMIT_REACHED (hit your limit) or THROTTLED (TikTok stopped serving pages), plus the reason of a failed run.

Integrations, API and MCP

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('xmolodtsov/tiktok-comments-scraper').call({
postURLs: ['https://www.tiktok.com/@duolingo/video/7514320905909194030'],
commentsPerPost: 200,
maxRepliesPerComment: 3,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(token=os.environ["APIFY_TOKEN"])
run = client.actor("xmolodtsov/tiktok-comments-scraper").call(run_input={
"postURLs": ["https://www.tiktok.com/@duolingo/video/7514320905909194030"],
"commentsPerPost": 200,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use with AI agents (MCP)

The Actor is available through Apify's MCP server at https://mcp.apify.com under the name xmolodtsov/tiktok-comments-scraper. Connect an MCP-capable agent (Claude, Cursor or any other MCP client) to https://mcp.apify.com?tools=xmolodtsov/tiktok-comments-scraper and it can call the Actor as a tool with the input and output described on this page, for example "collect 200 comments of this TikTok video and summarise what viewers complain about".

Exports, schedules and webhooks

Datasets export to JSON, CSV, Excel, XML, JSONL, RSS and HTML from Console or the API. Use Apify Schedules to re-scrape the same videos daily, and webhooks to push finished runs into your pipeline. Make, Zapier, n8n and other tools connect through Apify integrations.

More scrapers from this developer

TikTok: TikTok Search Scraper: videos and creators for any keyword, pay per result · TikTok Profile Scraper (Pay Per Result): profiles, followers and latest posts by username · TikTok Hashtag Scraper: videos for any hashtag, with views, likes and music · TikTok Sound & Music Scraper: videos that use a sound or song

Social & news: Reddit Search Scraper: posts by keyword, subreddit or author · Google News Scraper: Google News results as clean full-text articles

E-commerce: Prom.ua Product Search Scraper: Prom.ua product search results, no browser needed · Amazon Product Search & Bestsellers Scraper: search results, Best Sellers and product details from Amazon

Maps & leads: Google Maps Scraper: places, leads and emails from Google Maps

Ads: Facebook Ad Library Scraper (Meta Ads Library): ads from the Meta Ad Library, with EU reach and payers

Video: YouTube Transcript Scraper: transcripts, subtitles and captions from YouTube videos

FAQ

How can I export TikTok comments to Excel or CSV?

Every run stores its results in an Apify dataset, which you can download as JSON, CSV, Excel, XML or HTML from Console, or read page by page through the API.

Can I use it with the API, Make, Zapier or n8n?

Yes. Start runs and fetch results through the Apify API or its JavaScript and Python clients, or connect the Actor to Make, Zapier, n8n and other tools through Apify integrations.

How many comments can I get per video?

As many as TikTok serves. Set Maximum comments per video to the number you need; we found no hard depth limit, even on videos with tens of thousands of comments.

Why did I get fewer comments than the video shows?

TikTok's comment count includes comments it no longer serves (deleted, filtered or hidden), so the visible counter can be higher than what can be collected. replyCommentTotal is TikTok's own counter too and can differ by region. Check the STATISTICS record to see whether each video finished or was throttled.

What happens with private or deleted videos?

You get one error row with errorCode: "POST_NOT_FOUND_OR_PRIVATE" for that video, and the rest of the run continues.

Do I need a TikTok account or my own proxies?

No. The Actor never logs in and uses Apify Proxy by default, which is included in the price.

How long does a run take?

About a minute per 1,500 comments without replies, and roughly two minutes per 900 rows with replies. Up to five videos are scraped in parallel.

Can I scrape comments from a user's profile?

The Actor takes video URLs. Collect a creator's latest video URLs with TikTok Profile Scraper first, then pass them here.

How do I find videos to scrape comments from?

Search by keyword with TikTok Search Scraper and pass each item's postPage here, or take webVideoUrl from TikTok Hashtag Scraper for a hashtag's videos.

This Actor collects only data that TikTok shows publicly to any visitor, without logging in, and never accesses private content. Comments and commenter profiles can still contain personal data, which is protected by regulations such as the GDPR in the EU and the CCPA in California. Only collect personal data when you have a legitimate reason, keep only what you need, and if you are unsure whether your use case is lawful, consult a lawyer. This is not legal advice.

Support

Report bugs or request features through the Issues tab on this Actor's page. Include the run ID when you report a problem, so the run's log and STATISTICS record can be checked.