TikTok Comments Scraper by Profile / Account
Pricing
from $0.35 / 1,000 comment scrapeds
TikTok Comments Scraper by Profile / Account
Extract comments from TikTok profiles or videos. Enter a @username to automatically discover all videos and scrape comments, or provide direct video URLs. Includes reply threads, engagement metrics, and commenter metadata.
Pricing
from $0.35 / 1,000 comment scrapeds
Rating
0.0
(0)
Developer
Thodor
Actor stats
0
Bookmarked
9
Total users
4
Monthly active users
6 days ago
Last modified
Categories
Share
TikTok Comments Scraper by Profile
Provide a TikTok username and get every comment across all their videos.
- You input a profile (or direct video URLs)
- All videos are discovered automatically
- Every comment and reply is extracted — no cap
What makes this different
Most TikTok comment scrapers only accept video URLs as input, meaning you need to find each video URL yourself. This actor accepts a profile username and handles the rest — it discovers all videos from the profile and scrapes comments across all of them in one run.
| Feature | This actor | Typical alternatives |
|---|---|---|
| Input a profile username | Yes | No (video URLs only) |
| Auto-discover all videos | Yes | Manual |
| Comment limit | None | Often capped at 5,000 |
| Reply threads | Full depth | Varies |
| Image comments | Extracted | Often skipped |
Input
| Field | Type | Default | Description |
|---|---|---|---|
profileUrls | string[] | [] | TikTok profile URLs or usernames (e.g. @kingconnah or https://www.tiktok.com/@kingconnah) |
videoUrls | string[] | [] | Direct video URLs — combined with any videos discovered from profiles |
maxCommentsPerVideo | integer | 0 (all) | Maximum comments per video. 0 = no limit |
includeReplies | boolean | false | Fetch reply threads for each comment |
Scrape all comments from a profile
{"profileUrls": ["kingconnah"],"includeReplies": true}
Scrape specific videos
{"videoUrls": ["https://www.tiktok.com/@username/video/7622233769231142165"],"maxCommentsPerVideo": 1000,"includeReplies": true}
Both — profile + extra videos
{"profileUrls": ["kingconnah"],"videoUrls": ["https://www.tiktok.com/@other/video/7622233769231142165"]}
Output
Each comment is one flat row in the dataset. Replies are separate rows linked to their parent via parent_comment_id.
Output fields
| Field | Type | Description |
|---|---|---|
video_url | string | The video this comment belongs to |
comment_id | string | Unique comment ID |
parent_comment_id | string | Parent comment ID (empty for top-level) |
reply_to_reply_id | string | ID of the specific reply being responded to within a thread |
depth | integer | 0 = top-level, 1 = reply |
comment | string | Comment text (empty for image-only comments) |
comment_image_url | string | Image URL for image-only comments |
likes | integer | Like count |
reply_count | integer | Number of replies |
created_at | string | ISO 8601 timestamp (UTC) |
author_username | string | Commenter's @username |
author_display_name | string | Commenter's display name |
author_id | string | TikTok numeric user ID |
reply_to_username | string | Username being replied to |
liked_by_video_creator | boolean | Creator liked this comment |
pinned | boolean | Creator pinned this comment |
purchase_intent | boolean | TikTok's flag for buying intent (e.g. "Where can I buy this?") |
comment_language | string | Language code ("un" = undetermined) |
share_url | string | Direct share link |
Example output
Top-level comment:
{"video_url": "https://www.tiktok.com/@txmfitt/video/7613032455011945748","comment_id": "7616086972566078230","parent_comment_id": "","reply_to_reply_id": "","depth": 0,"comment": "how many did you do in an hour? I once did 500","comment_image_url": "","likes": 62,"reply_count": 3,"created_at": "2026-03-11T19:47:22+00:00","author_username": "alanas698","author_display_name": "2027","author_id": "6765931488842613766","reply_to_username": "","liked_by_video_creator": true,"pinned": false,"purchase_intent": false,"comment_language": "en","share_url": "https://m.tiktok.com/v/7613032455011945748.html?..."}
Reply:
{"video_url": "https://www.tiktok.com/@txmfitt/video/7613032455011945748","comment_id": "7617031854978024193","parent_comment_id": "7616086972566078230","reply_to_reply_id": "","depth": 1,"comment": "i did 1,017","comment_image_url": "","likes": 45,"reply_count": 0,"created_at": "2026-03-14T08:54:01+00:00","author_username": "txmfitt","author_display_name": "Toby","author_id": "7193948041925403654","reply_to_username": "","liked_by_video_creator": false,"pinned": false,"purchase_intent": false,"comment_language": "en","share_url": ""}
Image-only comment:
{"video_url": "https://www.tiktok.com/@txmfitt/video/7613032455011945748","comment_id": "7615909607940588310","parent_comment_id": "7614996613496390408","reply_to_reply_id": "","depth": 1,"comment": "","comment_image_url": "https://p16-comment-sign-no.tiktokcdn-eu.com/tos-no1a-i-jj85edgx6n-no/b5efb28ad8934663aa1831ef422142d7~tplv-jj85edgx6n-image-origin.image?...","likes": 4,"reply_count": 0,"created_at": "2026-03-11T08:19:24+00:00","author_username": "unicukornis","author_display_name": "Unicukornis","author_id": "6845319934780654598","reply_to_username": "","liked_by_video_creator": false,"pinned": false,"purchase_intent": false,"comment_language": "un","share_url": "https://m.tiktok.com/v/7613032455011945748.html?..."}
Understanding threading
For most use cases, parent_comment_id + depth is all you need:
- Top-level comments:
depth == 0 - Find replies: filter by
parent_comment_id - Full threads: group by
parent_comment_id, sort bycreated_at
The reply_to_reply_id field shows which specific reply within a thread someone responded to — useful for conversation analysis.
FAQ
How does the comment limit work with replies enabled?
When includeReplies is on, both comments and replies count toward maxCommentsPerVideo. The actor processes comments page by page — for each page, it first extracts the top-level comments, then fetches their replies before moving to the next page. This means the final output is a mix of comments and replies. If you need all top-level comments first, run once without replies, then run again with replies enabled.
What happens if a proxy gets blocked?
The actor automatically retries with a fresh proxy. You'll see a "rotating proxy" warning in the logs but scraping continues from where it left off. No data is lost.
Are there duplicate comments in the output?
No. Every comment and reply is deduplicated by ID before being added to the dataset. You only pay for unique results.