TikTok Video Comments Scraper — Replies & Authors
Pricing
from $1.00 / 1,000 comments
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
Maintained by CommunityActor stats
0
Bookmarked
19
Total users
3
Monthly active users
4 days ago
Last modified
Categories
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
| Field | Type | Default | Description |
|---|---|---|---|
postURLs | array of string | example URL | Public TikTok video URLs to scrape for comments and replies |
maxCommentsPerPost | integer | 100 | Maximum top-level comments saved and charged per video |
maxTotalComments | integer | 10000 | Run-wide cap across all input videos |
includeReplies | boolean | true | Fetch nested replies under each top-level comment |
maxRepliesPerComment | integer | 20 | Maximum nested replies attached to each top-level comment |
maxPagesPerPost | integer | 25 | Safety cap for top-level comment pagination per video |
maxReplyPagesPerComment | integer | 10 | Safety cap for reply pagination under one comment |
providerOrder | string | scrapecreators-first | Managed public-data provider routing |
trim | boolean | false | Ask providers for a smaller payload where supported |
includeRawData | boolean | false | Attach 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
| Field | Type | Description |
|---|---|---|
comment_id | string | Unique TikTok comment identifier |
video_id | string | TikTok video or aweme ID for the comment |
video_url | string | Public TikTok video URL used for scraping |
text | string | Top-level comment text |
author_username | string | TikTok username without the @ sign |
author_nickname | string | Commenter's display name |
author_id | string | Numeric TikTok user ID |
author_sec_uid | string | Stable secUid when returned by the provider |
author_avatar_url | string | Profile picture thumbnail URL |
like_count | integer | Likes on the comment |
reply_count | integer | Replies reported for the comment |
is_pinned | boolean | Whether the video author pinned the comment |
language | string | Detected language code |
created_at | string | ISO 8601 comment timestamp |
replies | array | Nested reply objects under the top-level comment |
provider | string | Provider that returned the row |
provider_page | integer | 1-based provider page number |
result_position | integer | 1-based position within the input video |
scraped_at | string | ISO 8601 timestamp when the row was produced |
source_url | string | Original 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
- Then use TikTok Video Scraper - Details & Creator Feeds to extend TikTok Comments Scraper - Replies & Authors research with a complementary content contract.
- Then use TikTok Video Search Scraper - Metrics & Filters to extend TikTok Comments Scraper - Replies & Authors research with a complementary discovery contract.
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.