Tiktok Comment Scraper
Pricing
from $2.40 / 1,000 result scrapeds
Tiktok Comment Scraper
TikTok Comment Scraper extracts comments from TikTok videos, including text, author details, likes, reply counts, mentions, hashtags, and timestamps. Ideal for audience research, sentiment analysis, moderation, trend tracking, and AI-powered comment insights.
Pricing
from $2.40 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Delowar Munna
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Extract comments, replies, and author metadata from any TikTok video — ~38 structured fields including comment text, engagement metrics, author profiles, reply threads, and AI-ready analytics. Export in JSON, CSV, or Excel.

Key Features
- ~38 Structured Fields per record — comments, replies, authors, analytics
- Reply Threads — full reply chains linked to parent comments via
parentCommentId - Replies After Parent — in the dataset, each comment's replies appear right after it
- Author Metadata — username, nickname, verified status, private account flag, avatar
- Comment Analytics — language detection, word/emoji counts, hashtag/mention extraction
- Video Context (optional) — video caption, views, likes, shares, duration, music info
- Sorting — top comments or newest first
- 3 Dataset Views — Overview, Authors, Replies on Apify
- Proxy Support — Apify residential proxy integration for reliable scraping
- Pay-Per-Result — only pay for results you get
Best for: Sentiment analysis, brand monitoring, content research, AI training data, moderation analysis
At a Glance
| Feature | Details |
|---|---|
| Output Fields | ~38 structured fields per record |
| Dataset Views | 3 tabs (Overview, Authors, Replies) |
| Input | One or more TikTok video URLs |
| Max Comments | Up to 10,000 per video |
| Reply Threads | Enabled by default, linked via parentCommentId / replyId |
| Proxy | Optional (residential recommended for large runs) |
How It Works
- Provide Video URLs — enter one or more TikTok video URLs
- Session Warm-up — browser visits TikTok to establish session cookies
- Fetch Comments — calls TikTok's internal comment API with cursor-based pagination
- Fetch Replies — fetches reply threads for each comment via the reply API
- Normalize & Export — structures data into ~38 fields and pushes to dataset
Output
Comment Record
{"commentId": "7482114472766325535","videoId": "7481695035033980190","videoUrl": "https://www.tiktok.com/@aaron.vankampen/video/7481695035033980190","commentText": "\u201cShe DIED\u201d \ud83e\udd19\ud83c\udffc\ud83e\udd19\ud83c\udffc\ud83e\udd19\ud83c\udffc\ud83d\ude02\ud83d\ude2d","createTime": "2025-03-15T19:05:59.000Z","likeCount": 1507,"replyCount": 4,"isPinned": false,"commentPermalink": "https://www.tiktok.com/@aaron.vankampen/video/7481695035033980190?comment=7482114472766325535","scrapedAt": "2026-03-14T13:29:33.073Z","commentLanguage": "en","wordCount": 3,"charCount": 27,"emojiCount": 8,"hashtags": [],"mentions": [],"authorId": "2904724","authorUsername": "nellyyybaby","authorNickname": "baby J\ud83d\udc8b","authorVerified": false,"authorPrivateAccount": false,"authorAvatar": "https://p16-common-sign.tiktokcdn-us.com/..."}
Reply Record (appears right after its parent comment)
{"parentCommentId": "7482114472766325535","replyId": "7482124949542011655","videoId": "7481695035033980190","videoUrl": "https://www.tiktok.com/@aaron.vankampen/video/7481695035033980190","replyText": "\"So now aiiii got da crib!!\" \ud83d\ude03","replyLikeCount": 32,"replyCreateTime": "2025-03-15T19:46:40.000Z","replyAuthorId": "6812290091522016262","replyAuthorUsername": "tony6ixx","replyAuthorVerified": false,"commentLanguage": "en","wordCount": 7,"charCount": 31,"emojiCount": 1,"hashtags": [],"mentions": [],"scrapedAt": "2026-03-14T13:29:33.329Z","replyAuthorNickname": "Tony \ud83c\udde6\ud83c\uddf1","replyAuthorAvatar": "https://p19-common-sign.tiktokcdn-us.com/..."}

Output Schema (~38 Fields)
Core Comment (10 fields)
| Field | Type | Description |
|---|---|---|
| commentId | String | Unique comment ID |
| videoId | String | Video identifier |
| videoUrl | String | TikTok video URL |
| commentText | String | Full comment text |
| createTime | String | ISO 8601 timestamp |
| likeCount | Integer | Number of likes |
| replyCount | Integer | Number of replies |
| isPinned | Boolean | Pinned by creator |
| commentPermalink | String | Direct link to comment |
| scrapedAt | String | Scraping timestamp |
Comment Analytics (6 fields)
| Field | Type | Description |
|---|---|---|
| commentLanguage | String | Detected language code (e.g. en, zh, ja) |
| wordCount | Integer | Word count |
| charCount | Integer | Character count |
| emojiCount | Integer | Number of emojis |
| hashtags | Array | Extracted #hashtags |
| mentions | Array | Extracted @mentions |
Author Metadata (6 fields)
Included when Include Author Info is enabled (default: on).
| Field | Type | Description |
|---|---|---|
| authorId | String | Author's TikTok user ID |
| authorUsername | String | Author's @username |
| authorNickname | String | Display name |
| authorVerified | Boolean | Verified badge |
| authorPrivateAccount | Boolean | Private account |
| authorAvatar | String | Profile image URL |
Reply Fields (10 fields)
Included when Include Replies is enabled (default: on). Each reply is a separate dataset row linked to its parent via parentCommentId.
| Field | Type | Description |
|---|---|---|
| parentCommentId | String | Parent comment's ID |
| replyId | String | Reply's unique ID |
| replyText | String | Reply text |
| replyLikeCount | Integer | Reply likes |
| replyCreateTime | String | ISO 8601 timestamp |
| replyAuthorId | String | Reply author's user ID |
| replyAuthorUsername | String | Reply author's username |
| replyAuthorVerified | Boolean | Reply author verified |
| replyAuthorNickname | String | Reply author's display name |
| replyAuthorAvatar | String | Reply author's avatar URL |
Reply records also include analytics fields (commentLanguage, wordCount, charCount, emojiCount, hashtags, mentions) computed on the reply text, plus videoId, videoUrl, and scrapedAt.
Video Metadata (10 fields, optional)
Included when Include Video Info is enabled (default: off). Extracted from TikTok's embedded page data.
| Field | Type | Description |
|---|---|---|
| videoDescription | String | Video caption |
| videoCreateTime | String | Publish timestamp |
| videoLikeCount | Integer | Video likes |
| videoCommentCount | Integer | Video comment count |
| videoShareCount | Integer | Video shares |
| videoViewCount | Integer | Video views |
| videoDuration | Integer | Duration in seconds |
| videoRegion | String | Region code |
| musicTitle | String | Background music title |
| musicAuthor | String | Music creator |
Input Parameters
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
| videoUrls | Array | — | Yes | TikTok video URLs to scrape |
| maxComments | Integer | 100 | No | Max comments per video (1–10,000) |
| includeReplies | Boolean | true | No | Include reply threads |
| maxRepliesPerComment | Integer | 50 | No | Max replies per comment (1–500) |
| sort | String | "top" | No | Sort order: top or new |
| includeAuthorInfo | Boolean | true | No | Include author metadata |
| includeVideoInfo | Boolean | false | No | Include video metadata |
| proxyConfiguration | Object | — | No | Apify proxy settings |
Quick Start
Example 1: Single video with replies
{"videoUrls": ["https://www.tiktok.com/@aaron.vankampen/video/7481695035033980190"],"maxComments": 100,"includeReplies": true,"maxRepliesPerComment": 50,"sort": "top","includeAuthorInfo": true}
Example 2: Multiple videos, comments only
{"videoUrls": ["https://www.tiktok.com/@aaron.vankampen/video/7481695035033980190","https://www.tiktok.com/@aaron.vankampen/video/7546661132002413854"],"maxComments": 100,"includeReplies": false,"sort": "top","includeAuthorInfo": true}
Example 3: Full extraction with proxy
{"videoUrls": ["https://www.tiktok.com/@creator/video/7234567890123456789"],"maxComments": 1000,"includeReplies": true,"includeAuthorInfo": true,"includeVideoInfo": true,"sort": "new","proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Dataset Views
The output is organized into 3 focused tabs on the Apify platform:
Overview
Shows comments and replies together with key fields.
{"commentId": "7481802613793686318","videoId": "7481695035033980190","commentText": "YOU FOUND CODY!!!","authorUsername": "duncanstanko","likeCount": 489,"replyCount": 1,"isPinned": false,"createTime": "2025-03-14T22:55:34.000Z","scrapedAt": "2026-03-14T13:29:31.670Z"}
Authors
Focused view on commenter profiles.
{"commentId": "7481802613793686318","authorId": "7158470338833777710","authorUsername": "duncanstanko","authorNickname": "Duncan Stanko","authorVerified": false,"authorPrivateAccount": false,"authorAvatar": "https://p16-common-sign.tiktokcdn-us.com/..."}
Replies
Focused view on reply threads with parent-child linking.
{"parentCommentId": "7482422764545753902","replyId": "7482493179494253342","replyText": "He is a comedian. Calm down lol","replyAuthorUsername": "wizrd.618","replyLikeCount": 107,"replyCreateTime": "2025-03-16T19:35:28.000Z"}
Use Cases
Sentiment Analysis
Export comments for sentiment scoring and reaction analysis. Use commentLanguage, wordCount, and emojiCount for NLP preprocessing.
Brand Monitoring
Track public feedback on brand campaigns. Filter by video URL and analyze comment engagement patterns.
Content Research
Study audience reactions to viral content. Compare top comments vs. newest to understand engagement dynamics.
AI Training Data
Collect structured comment datasets for training text classification, sentiment, or moderation models.
Moderation Analysis
Identify patterns in toxic comments, spam, or abuse. Use author metadata to detect bot-like accounts.
Performance
| Metric | Value |
|---|---|
| Concurrency | 1 request at a time |
| Request timeout | 120 seconds |
| Navigation timeout | 60 seconds |
| Retries | Up to 4 per request (exponential backoff) |
| Session pooling | 5 sessions, 20 uses each |
Data Export
Supported formats via Apify platform:
- JSON
- CSV
- Excel
- HTML
Tips
- Residential proxy recommended for reliable scraping at scale. Use
{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }. - Replies appear after their parent in the dataset output — look for
parentCommentIdto match them. - Each reply is its own row with a flat structure, making it easy to filter comments vs. replies.
commentPermalinklinks directly to the comment on TikTok.- Language detection uses Unicode script analysis — returns
nullfor ambiguous text.
Pricing
This actor uses Apify's Pay-Per-Event model — you only pay for results you get.
| Event | Trigger | Description |
|---|---|---|
result-scraped | Each comment or reply extracted | Charged once per record pushed to dataset |
Event price is configured in the Apify Console. Platform compute and proxy costs (if enabled) are billed separately to your Apify account.
Compliance
- Collects only publicly available TikTok comment data
- Does not bypass CAPTCHAs or access gated content
- Does not collect private account data
- Intended for legitimate research, analytics, and business intelligence
- Users are responsible for compliance with applicable laws in their jurisdiction
Support
- Issues: Report via GitHub or Apify support
- Feature requests: Open an issue with your use case
Built by Coregent Digital Studio — Production-ready TikTok comment extraction