TikTok Video Comments Scraper — Replies & Authors avatar

TikTok Video Comments Scraper — Replies & Authors

Pricing

from $1.00 / 1,000 comments

Go to Apify Store
TikTok Video Comments Scraper — Replies & Authors

TikTok Video Comments Scraper — Replies & Authors

Scrape public TikTok video comments with replies, authors, likes, timestamps, pinned status, language, and source video URL. Provider-backed, no login or cookies required. MCP-ready and priced at $0.001 per top-level comment.

Pricing

from $1.00 / 1,000 comments

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

19

Total users

3

Monthly active users

4 days ago

Last modified

Share

TikTok Comments Scraper - Replies & Authors

This Apify Actor is for people working from public TikTok video URLs who need one record per top-level comment. It accepts one or many video URLs in postURLs, and each saved dataset item represents one charged top-level comment with its text, author fields, likes, reply count, language, pinned status, timestamps, source video URL, and nested replies when enabled. The output is built for review, analysis, and agent workflows that need a clean conversation record tied to a source video.

Best fit and connected workflows

This Actor fits workflows that begin with a public TikTok video URL and need comment-level conversation data. It routes well into:

  • sentiment review for a single video or a batch of public video URLs
  • brand monitoring and creator research based on audience comments
  • reply-thread analysis where parent comments and nested replies stay together
  • AI and BI pipelines that read normalized comment rows from the default dataset
  • Apify MCP agents that need a focused TikTok comments extraction tool

If your workflow starts with a creator profile, hashtag discovery, transcripts, or video metadata, those tasks belong in other TikTok Actors in the same portfolio.

Practical scenario

Maya, a social analyst, receives one public TikTok video URL from a campaign team. She runs this Actor with that URL, keeps includeReplies enabled, and sets a comment cap that matches the review scope. The dataset returns rows with author_username, text, like_count, reply_count, language, is_pinned, created_at, provider, and video_url. Maya uses reply_count and the nested replies array to identify which top comments started discussion, then shares the source video link with the campaign team for follow-up.

Input

Use postURLs for public TikTok video links. One run can include one URL or many URLs. One top-level comment becomes one charged output row. Replies are nested inside that parent row.

Input fields

FieldTypeDefaultDescription
postURLsarray of stringexample URLPublic TikTok video URLs to scrape for comments and replies
maxCommentsPerPostinteger100Maximum top-level comments saved and charged per video
maxTotalCommentsinteger10000Run-wide cap across all input videos
includeRepliesbooleantrueFetch nested replies under each top-level comment
maxRepliesPerCommentinteger20Maximum nested replies attached to each top-level comment
maxPagesPerPostinteger25Safety cap for top-level comment pagination per video
maxReplyPagesPerCommentinteger10Safety cap for reply pagination under one comment
providerOrderstringscrapecreators-firstManaged public-data provider routing
trimbooleanfalseAsk providers for a smaller payload where supported
includeRawDatabooleanfalseAttach raw provider payloads for debugging

Focused JSON example

{
"postURLs": [
"https://www.tiktok.com/@stoolpresidente/video/7623818255903329566"
],
"maxCommentsPerPost": 50,
"maxTotalComments": 200,
"includeReplies": true,
"maxRepliesPerComment": 20,
"maxPagesPerPost": 25,
"maxReplyPagesPerComment": 10,
"providerOrder": "scrapecreators-first",
"trim": false,
"includeRawData": false
}

Output

The default dataset stores normalized top-level comment rows. When replies are enabled, each row can include a nested replies array. The key-value store also holds RUN_SUMMARY, which contains provider usage, counts, spend estimate, stop reason, and diagnostics.

Output fields

FieldTypeDescription
comment_idstringUnique TikTok comment identifier
video_idstringTikTok video or aweme ID for the comment
video_urlstringPublic TikTok video URL used for scraping
textstringTop-level comment text
author_usernamestringTikTok username without the @ sign
author_nicknamestringCommenter's display name
author_idstringNumeric TikTok user ID
author_sec_uidstringStable secUid when returned by the provider
author_avatar_urlstringProfile picture thumbnail URL
like_countintegerLikes on the comment
reply_countintegerReplies reported for the comment
is_pinnedbooleanWhether the video author pinned the comment
languagestringDetected language code
created_atstringISO 8601 comment timestamp
repliesarrayNested reply objects under the top-level comment
providerstringProvider that returned the row
provider_pageinteger1-based provider page number
result_positioninteger1-based position within the input video
scraped_atstringISO 8601 timestamp when the row was produced
source_urlstringOriginal input TikTok URL

Illustrative JSON record

{
"comment_id": "7623874021293212447",
"video_id": "7623818255903329566",
"video_url": "https://www.tiktok.com/@stoolpresidente/video/7623818255903329566",
"text": "This is exactly what I was thinking",
"author_username": "katylynnm",
"author_nickname": "Katy",
"author_id": "6813803505255154693",
"author_sec_uid": "MS4wLjABAAAAGQCGrZCPx6snYndsBtuAIif17vTOTEfDZ9qd",
"author_avatar_url": "https://p16-common-sign.tiktokcdn-us.com/avatar.jpg",
"like_count": 3322,
"reply_count": 14,
"is_pinned": false,
"language": "en",
"created_at": "2026-04-02T21:25:25.000Z",
"replies": [
{
"reply_id": "7626007039458755350",
"parent_comment_id": "7623874021293212447",
"text": "oh, I liked it",
"author_username": "kryptobuddy2",
"author_nickname": "Carl Gauss",
"like_count": 0,
"created_at": "2026-04-09T07:35:45.000Z",
"provider": "scrapecreators"
}
],
"provider": "scrapecreators",
"provider_page": 1,
"result_position": 1,
"scraped_at": "2026-07-09T12:00:00.000Z",
"source_url": "https://www.tiktok.com/@stoolpresidente/video/7623818255903329566"
}

How it works

This Actor uses managed public-data providers and is built for public TikTok video comments. The live contract defines ScrapeCreators as the primary route and SociaVault as fallback, with provider-only routing options for diagnostics. The Actor writes normalized comment rows to the default dataset and stores a RUN_SUMMARY record in the key-value store. Reply threads stay nested under the parent comment row, and provider telemetry is preserved in the run summary.

Pricing

This Actor uses Pay per event pricing plus Apify platform usage. Open the live Pricing tab for the current pricing details that apply to your run.

The charged events are:

  • Actor start
  • TikTok Comment

Each top-level comment saved to the dataset is charged as one TikTok Comment event. Nested replies are included inside each top-level comment row and are not charged as separate comment events. For example, if a run saves twenty top-level comments, the charged event count includes twenty TikTok Comment events plus one actor start event.

Use with AI agents (MCP)

This Actor is available through Apify MCP as a focused tool for public TikTok comment extraction from known video URLs. The exact Actor identity is khadinakbar/tiktok-video-comments-scraper.

Read comments from this public TikTok video URL, include replies, and return normalized rows with author, likes, timestamps, language, pinned status, and source URL. Then summarize which comments have the most replies and identify the provider used.

The tool returns structured comment rows in the default dataset and a RUN_SUMMARY record in the key-value store. Provenance is preserved in source_url, provider, and scraped_at. Pagination and spend are shaped by maxCommentsPerPost, maxTotalComments, maxPagesPerPost, maxRepliesPerComment, and maxReplyPagesPerComment, so agents can request a narrower or broader comment window and interpret the output volume accordingly. Cost is driven by top-level comments saved, while replies remain nested in the same parent rows.

API example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('khadinakbar/tiktok-video-comments-scraper').call({
postURLs: ['https://www.tiktok.com/@stoolpresidente/video/7623818255903329566'],
maxCommentsPerPost: 50,
includeReplies: true,
maxRepliesPerComment: 20,
providerOrder: 'scrapecreators-first',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Best results and outcome guidance

Use full public TikTok video URLs in postURLs so each comment row stays traceable to its source video. If you want a tighter run, set maxCommentsPerPost and maxTotalComments together. Keep includeReplies enabled when conversation context matters, and lower maxRepliesPerComment when you want shorter reply threads. Leave trim off when you need stable parent comment IDs for reply analysis.

Continue the workflow

Design note

I found that the dataset schema keeps comment_id, video_id, video_url, scraped_at, and source_url as required fields, which makes every saved row traceable to the exact input video and run time.

FAQ

Can this Actor start from a TikTok profile or hashtag?

This Actor is built for public TikTok video URLs in postURLs. Profile feeds and hashtag discovery belong to other TikTok Actors.

Does one dataset row represent one reply?

One dataset row represents one top-level comment. Replies are nested in the replies array under that parent row.

What provider routing is available?

The live contract supports scrapecreators-first, sociavault-first, scrapecreators-only, and sociavault-only.

When should I use includeRawData?

Use it when you want provider payloads attached for debugging or model inspection. The standard normalized rows already cover the main analysis fields.

How can I connect this to another workflow?

A common next step is to analyze the output dataset in a spreadsheet, notebook, or AI agent, using text, reply_count, like_count, language, and is_pinned as the main review fields.

Responsible use

Use this Actor only for public TikTok content you are allowed to access and process. Follow TikTok's terms, privacy rules, and applicable laws when storing or analyzing comment data. Keep maxCommentsPerPost, maxTotalComments, and reply caps aligned with the amount of data you need.