TikTok Comments Scraper - Comments avatar

TikTok Comments Scraper - Comments

Pricing

from $0.24 / 1,000 comments

Go to Apify Store
TikTok Comments Scraper - Comments

TikTok Comments Scraper - Comments

Scrape comments from public TikTok videos, by link or numeric id. Each row has the text, like count, reply count, commenter handle and avatar, timestamp and any attached images. Top-level comments only, not the replies under them. $0.25 per 1,000 comments.

Pricing

from $0.24 / 1,000 comments

Rating

5.0

(1)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

40

Total users

18

Monthly active users

6 days ago

Last modified

Categories

Share

Scrape the comments under a public TikTok video: paste video links or bare numeric ids and get one row per comment with the text, like count, reply count, the commenter's handle and avatar, the timestamp, and any image attached to the comment. Nothing to log into.

One thing to be clear about up front: this returns the top-level comments only. It does not walk into the reply threads under them. Every row carries replyCount, so you can see how many replies exist, but those replies are not rows and this is not the actor that fetches them.

InputTikTok video links, or bare numeric video ids
OutputOne row per top-level comment: text, likes, reply count, timestamp, attached images, and the commenter's id, handle, name and avatar
Ceiling5,000 comments per run
Account neededNone
Price$0.25 per 1,000 comments on the Free plan, a little less on paid plans. The free plan's $5 a month covers about 20,000

🔍 What TikTok Comments Scraper does

You give it videos, it pages through each comment section and flattens what it finds. A /video/ link or a bare id both work, and you can mix the two lists in one run.

maxComments is the total for the run and it is split evenly across the videos you passed. Ten videos with maxComments: 500 is roughly 50 from each, not 500 from each. A video that has fewer comments than its share does not hand the remainder to the next one, so if you want one video emptied out, run it on its own.

Comments are deduplicated as the pages are read, so nothing is returned or billed twice. A video with comments turned off, or one that would not answer, gets a row saying so and the run moves on.

📋 What data you get from each TikTok comment

What you getField
Comment id, and the video it sits underid, videoId
The comment as written, emoji includedtext
Likes on the comment, and how many replies are under itlikeCount, replyCount
When it was postedcreateTime
Sticker or image replies, as linksimages
Who wrote it: id, handle, display name, avataruser.id, user.uniqueId, user.nickname, user.avatar

▶️ How to scrape TikTok comments

  1. Open TikTok Comments Scraper and click Try for free.
  2. Paste links into Video URLs, one per line, or ids into Video IDs.
  3. Set Max comments. It is the total for the run, so start at 100 while you look at the output.
  4. Click Start.
  5. Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.

Start it with both boxes empty and you get one labelled sample row that is not charged.

💰 How much does it cost to scrape TikTok comments?

$0.25 per 1,000 comments on the Free plan. Paid plans pay a little less: $0.248 on Starter, $0.246 on Scale and $0.244 on Business. On the free plan, the $5 Apify gives you each month covers about 20,000 comments.

You pay for comments delivered. The sample row, diagnostic rows and duplicates caught inside a run are not charged. maxComments is the ceiling on both the rows and the spend.

📥 What you give it

{
"videoUrls": ["https://www.tiktok.com/@tiktok/video/7654341587425692942"],
"maxComments": 500
}
FieldDefaultWhat it is
videoUrlsnoneFull /video/ links. The form opens with one filled in as an example, which is a starting point rather than a default.
videoIdsnoneOr the bare numeric ids, if you already have them. Mix freely with videoUrls.
maxComments100Comments for the whole run, 1 to 5,000, split across your videos. This is also your spend cap.
sessionCookiesnoneOptional. Your own TikTok sessionid. The field is stored encrypted.
proxyConfigurationoffLeave it off. It is there for people sending traffic through their own servers.
notionConnector, notionParentIdnoneOptional. Write each comment into a Notion database as well as the dataset.

Use the full link from the address bar, or the id. A shortened share link is passed on as it is: it may not resolve, and when it does, videoId holds the link instead of the number.

📤 What you get back

A real row from a real run, with the commenter's name, handle, id and avatar link cut short:

{
"ok": true,
"type": "comment",
"id": "7655213632855294751",
"videoId": "7654341587425692942",
"text": "malcolm todd always brings the energy, love it",
"likeCount": 5,
"replyCount": 2,
"createTime": "2026-06-25T06:19:23.000Z",
"images": [],
"user": {
"id": "...",
"uniqueId": "...",
"nickname": "...",
"avatar": "https://p16-common-sign.tiktokcdn-us.com/musically-maliva-obj/..."
}
}
FieldHow to read it
idUnique per comment. Use it as your dedupe key across runs.
videoIdThe numeric id of the video it came from, or the link itself if you passed a short link.
replyCountHow many replies sit under the comment. The replies themselves are not returned.
createTimeWhen it was posted, as an ISO timestamp.
imagesAn empty array on most comments.
user.avatarSigned, and it stops working after a while.

🧾 Reading the output

Three kinds of row can land in your dataset.

RowHow to spot itBilled
A commentok: true and type: "comment"yes
The sample row_sample: true, only when the input named no videono
A diagnosticok: false and an errorCodeno

Filter on type == "comment" and you have your data. The sample row carries the same type, but it only appears when the input named no video, so a normal run never contains one.

CodeWhat it means
NOT_FOUNDTikTok could not find a video behind that link, which is what a dead short link gives. Check the link.
NO_RESULTSThe video has no comments to read, which usually means they are turned off.
RATE_LIMITEDThat video would not answer this run. Re-running usually clears it.
NOT_SERVEDThis comment was not served this run. Re-run it later. Until 12 October 2026 this code was called BLOCKED.
TIME_LIMITThe run neared its time limit and stopped, keeping every comment it had delivered. If none had come back by then, the run ends as failed.

One quirk of the Overview table: it shows four columns, so the commenter's handle and the timestamp are not in it, and a diagnostic row reads as a nearly blank line. Open the row itself or download the JSON and everything is present.

💡 What people use it for

  • Reading what an audience actually said under a launch video instead of guessing from the like count.
  • Tracking sentiment on a campaign across the videos that carried it.
  • Finding the questions that keep coming up under a how-to video, then answering them in the next one.

From a campaign tag to what people said under it, in two runs:

  1. Run TikTok Hashtag Scraper on the campaign tag and copy the webVideoUrl column.
  2. Paste those links into Video URLs here and read the text column.

🚧 What it does not do

  • No reply threads. Top-level comments only. replyCount tells you what you are not getting.
  • Public videos only. A private or removed video returns a diagnostic row, not comments.
  • The allowance is shared and not redistributed. A quiet video does not pass its leftover share to a busy one.
  • Not the whole comment section on a huge video. There is a paging guard as well as your own limit, so a video with a million comments will not come back complete.
  • The order is TikTok's own, roughly how it ranks them, not strictly newest first.
  • A shortened share link is not expanded. Use the full /video/ link or the numeric id.
  • It is not an official TikTok tool. Dami's Studio is independent and is not affiliated with or endorsed by TikTok, or by any other company named on this page.

🧭 Which TikTok scraper do you need?

If you wantUse
Comments under a videoThis one
A profile plus its newest videos, or a keyword searchTikTok Scraper
Videos posted under a hashtagTikTok Hashtag Scraper
Follower and like counts for a list of handlesTikTok Profile Scraper
The spoken words of a video, as text, SRT and VTTTikTok Transcript Scraper
The hashtags ranking in a country right nowTikTok Trending Hashtags
Comments under a YouTube videoYouTube Comments Scraper
Comments under an Instagram post or reelInstagram Comments Scraper

❓ Questions people ask

Do I need a TikTok account to scrape comments?

No. The cookie field is optional.

Can I get the replies under a comment?

Not from here. This returns the top-level comments, each with its replyCount.

Is maxComments per video or per run?

Per run, split across the videos you passed. Run one video at a time if you want its comment section emptied.

Why are there fewer comments than the count on the video?

TikTok's count includes replies, and this returns top-level comments only. On a very large video the paging guard and your own limit also stop it before the end.

Why did a video return nothing?

Usually comments are turned off, or the video is private or gone. You will see an uncharged row with an errorCode saying which.

Can I call it from code or connect it to an AI assistant?

Yes. The API tab has ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/tiktok-comments-scraper. Either way the run happens on your Apify account at the same price.

This reads comments on public videos only, never private accounts or messages. Results contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.

🆘 If something breaks

Open the Issues tab on the actor page. Include the video links you used and the run ID, and the log is usually enough for us to see what happened.