TikTok Comments Scraper avatar

TikTok Comments Scraper

Pricing

from $0.30 / 1,000 results

Go to Apify Store
TikTok Comments Scraper

TikTok Comments Scraper

Scrape TikTok comments for one video: text, likes, reply counts, timestamps and commenter profiles. Optional replies.

Pricing

from $0.30 / 1,000 results

Rating

0.0

(0)

Developer

Grow Media

Grow Media

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

8 days ago

Last modified

Categories

Share

TikTok Comments Scraper (Apify Actor)

Scrape the comments of one or many TikTok videos — text, likes, reply counts, timestamps and commenter profiles — with optional replies.

Input

{
"startUrls": [
"https://www.tiktok.com/@billieeilish/video/7050551461734042926",
"https://www.tiktok.com/@gordonramsayofficial/video/7229884545150061851"
],
"maxCommentsPerVideo": 100,
"maxComments": 200,
"includeReplies": false
}
FieldTypeDefaultDescription
startUrlsarray of strings, required—1–50 video URLs. The list uses Apify's Bulk edit button, so you can paste one URL per line instead of adding them one at a time. Also accepts photo URLs, vm.tiktok.com short links, tiktok.com/t/... share links and bare numeric ids.
maxCommentsPerVideointeger100Items each URL may contribute, 1–10000. Replies count towards it. This is what stops a 190,000-comment video from swallowing the whole run.
maxCommentsinteger1000Items to collect across every URL, 1–100000. Replies count towards it too.
includeRepliesbooleanfalseAlso scrape replies. They arrive as their own items with parentId and isReply: true.

Two caps, and whichever is reached first wins. With

{"startUrls": [A, B], "maxCommentsPerVideo": 100, "maxComments": 150}

the run takes 100 from A, then 50 from B and stops: no single video can hog the budget, and the total can never overshoot what you asked for. A URL with a huge comment section no longer starves the next one — it is cut at its own cap and the run moves on.

URLs are scraped in the order given. A URL that fails mid-way — a deleted video, a transient 5xx — is logged and skipped, and the comments already collected are kept. A URL that cannot be parsed at all fails the run before the first request, so a typo costs nothing. Two URLs pointing at the same video (a short link plus the canonical one) are scraped once.

Output

One dataset item per comment or reply. Field names follow the leading TikTok comment scraper so the two datasets line up column for column:

{
"inputSource": "https://www.tiktok.com/@tiktok/video/7698318115607825672",
"type": "comment",
"id": "7698455070791303967",
"parentId": null,
"isReply": false,
"replyToCommentId": null,
"text": "I'm in the wrong servers 😭✌️",
"createdAt": "2026-10-19T18:58:11.000Z",
"likeCount": 75,
"replyCount": 3,
"commentLanguage": "en",
"awemeId": "7698318115607825672",
"isAuthorLiked": false,
"isPinned": false,
"user": {
"id": "7327046934728148010",
"secUid": "MS4wLjABAAAA...",
"username": "gotthis87",
"displayName": "Marcus",
"url": "https://www.tiktok.com/@gotthis87",
"avatarUrl": "https://p16-common-sign.tiktokcdn.com/...",
"verified": false
}
}
FieldNotes
inputSourcethe URL from startUrls that produced this item
typecomment or reply
id, parentIdcomment id; parentId is the thread a reply belongs to
replyToCommentIdfor a reply inside a thread, the specific comment answered
createdAtISO-8601 UTC with milliseconds
likeCount, replyCountreplyCount is 0 on replies
awemeIdvideo id
isPinnedthe creator pinned this comment
user.secUidstable profile id, for joining to profile data
user.avatarUrlTikTok CDN URL, expiring
user.verifiedderived from the profile's verification label

Not included: user.bio, user.region, user.language, hasEmail, hasPhone, coverImage, follower counts. user.secUid is emitted instead, so you can join to that data from another source if you need it.

Ordering is whatever TikTok returns, which is neither newest-first nor like-sorted. If you need the top comments by likes, sort the dataset after collection.