TikTok Comments Scraper - Replies, Likes & Commenters
Eimantas V · @amethyst
Scrape TikTok comments and replies from video links or profiles: text, likes, reply counts, dates and commenter IDs. No login, no browser, flat monthly price.

About
TikTok Comments Scraper extracts comments and replies from TikTok videos: the comment text, likes, reply count, date, language, whether the creator liked or pinned it, mentions, hashtags, images, and the commenter's username, name and IDs. Paste video URLs, short links, video IDs or profiles, and get one row per comment. No login, no API key, no browser.
{
"text": "no but seriously, where the hell have you been, loca?!?",
"likeCount": 238445,
"replyCount": 910,
"createdAt": "2022-01-07T21:24:00.000Z",
"authorUsername": "lionsgate",
"authorVerified": true,
"language": "en",
"videoUrl": "https://www.tiktok.com/@billieeilish/video/7050551461734042926",
"videoCommentCount": 196967
}
Measured: 100 comments from one video in 2.6 seconds; 20,371 comments and replies from 8 videos in under 3 minutes.
What does TikTok Comments Scraper do?
It reads TikTok's public comment lists the way TikTok's own web player does, one page of 50 comments at a time, and turns every comment into a clean row. Turn on replies and each comment's thread follows it, with the parent's ID on every reply, so whole conversations can be rebuilt from one flat table.
- Every input you have. Video URLs (
/video/and/photo/posts),vm.tiktok.comandvt.tiktok.comshort links, bare video IDs, and profiles (@usernameor the profile URL) for comments on their latest videos. - Comments and replies. Up to the number you choose per video and per comment; replies carry
parentCommentId, and a reply to a reply also names the reply it answers. - Creator signals.
likedByCreator,pinnedandisByCreatorshow which comments the creator engaged with or wrote. - Commenter identity. Username, display name, numeric user ID, secUid, profile link, avatar and verified badge on every row.
- Clear errors, no duplicates. Videos that are deleted or private and profiles that do not exist return an error row instead of failing the run; duplicates and comments your date filter leaves out are skipped.
- Built for automation. Run it on a schedule, call it from the API, or connect it to an AI agent through the Bytewells MCP server.
Why it is fast and cheap
There is no browser and no login. Each request is one small JSON call to TikTok's public comment endpoint that returns 50 comments, so 1,000 comments take about 20 requests and a few seconds. That is why a run needs so little compute. If TikTok rate-limits the run's own address, the request is repeated through the platform's datacenter proxy.
What data can you extract from TikTok comments?
| Field | Example | What it is |
|---|---|---|
text | no but seriously, where the hell have you been | The comment as written, with emoji |
likeCount | 238445 | Likes on the comment |
replyCount | 910 | Replies under it (null on replies) |
createdAt | 2022-01-07T21:24:00.000Z | When it was posted, ISO 8601 UTC |
language | en | The language TikTok detected |
authorUsername / authorNickname | lionsgate / Lionsgate | The commenter's handle and display name |
authorId / authorSecUid | 106956873395757056 | The commenter's stable TikTok IDs |
authorProfileUrl / authorAvatarUrl | https://www.tiktok.com/@lionsgate | Profile link and picture |
authorVerified | true | TikTok's verified badge |
isReply / parentCommentId / replyToCommentId | true / 7050578069283963694 | Thread structure |
position | 41 | Rank in TikTok's order of the video's comments |
likedByCreator / pinned / isByCreator | true / false / false | What the creator did with it |
labels | ["Liked by creator"] | Badges TikTok shows on the comment |
mentions / mentionedUserIds / hashtags | ["@nasa"] | Mentions with user IDs, and hashtags |
imageUrls | ["https://p16-comment-sign..."] | Images posted in the comment |
videoId / videoUrl / videoAuthorUsername / videoCaption | 7050551461734042926 | The video the comment is on |
videoCommentCount | 196967 | All comments TikTok counts on the video |
input | https://www.tiktok.com/@billieeilish/video/7050551461734042926 | What you entered, so rows join back to your list |
How to scrape TikTok comments
- Click Try for free and paste video URLs, short links, video IDs or profiles into Videos or profiles, one per line.
- Set Comments per video, and Replies per comment if you want threads. Max comments in total caps the whole run.
- Click Start. A video's top 100 comments take about 2 seconds.
- Read the results from the run's dataset as JSON.
How much does it cost to scrape TikTok comments?
One flat monthly rental, shown on this page, with a free trial. There is no per-comment fee: scrape as many comments as you need.
Runs use your credits for compute and any proxy traffic, as every Actor does. TikTok's comment API answers without a proxy, so compute is the whole cost. Measured on Bytewells: 100 comments in 8 seconds at 512 MB for $0.0002 of credits: well under $0.01 per 1,000 comments.
Input
{
"targets": [
"https://www.tiktok.com/@billieeilish/video/7050551461734042926",
"https://vm.tiktok.com/ZMhvqjqjq/",
"@nasa"
],
"maxCommentsPerVideo": 100,
"maxRepliesPerComment": 10,
"videosPerProfile": 3,
"maxItems": 5000
}
| Field | Default | Notes |
|---|---|---|
| Videos or profiles | (example video) | Video URLs, short links, video IDs, @username or profile URLs, one per line |
| Start URLs | empty | The same, in the URL-list shape other Actors output |
| Max comments in total | 1,000 | Comments and replies across the run |
| Comments per video | 100 | Top-level comments per video, top comments first |
| Replies per comment | 0 | 0 = no replies |
| Only comments posted after | empty | A date (2026-01-31) or a period ("7 days"); older comments are skipped |
| Videos per profile | 3 | Latest videos per profile, newest first (at most ~12) |
| Profile videos posted after / before | empty | Date range for the videos picked from profiles |
| Proxy | off | Not needed; turn on the platform's proxy only if a run reports BLOCKED |
Output
Each comment or reply is one row. The Overview view shows the key columns; Threads shows the reply structure; Commenters lists who commented; every export includes all fields.
{
"recordType": "comment",
"input": "https://www.tiktok.com/@billieeilish/video/7050551461734042926",
"commentId": "7050578069283963694",
"text": "no but seriously, where the hell have you been, loca?!?",
"likeCount": 238445,
"replyCount": 910,
"createdAt": "2022-01-07T21:24:00.000Z",
"authorUsername": "lionsgate",
"authorNickname": "Lionsgate",
"authorId": "106956873395757056",
"authorSecUid": "MS4wLjABAAAAw08PMPDgEvNH0P4Sncmei7N46SQY9ZqUP7kVxFJXoyWNcpC-peauxtjk0dfYQcfd",
"authorProfileUrl": "https://www.tiktok.com/@lionsgate",
"authorAvatarUrl": "https://p19-common-sign.tiktokcdn-us.com/tos-maliva-avt-0068/7311142789058674693~tplv-tiktokx-cropcenter:100:100.jpg",
"authorVerified": true,
"isReply": false,
"parentCommentId": null,
"replyToCommentId": null,
"position": 41,
"language": "en",
"likedByCreator": false,
"pinned": false,
"isByCreator": false,
"labels": [],
"mentions": [],
"mentionedUserIds": [],
"hashtags": [],
"imageUrls": [],
"videoId": "7050551461734042926",
"videoUrl": "https://www.tiktok.com/@billieeilish/video/7050551461734042926",
"videoAuthorUsername": "billieeilish",
"videoCaption": "can’t be good at everything",
"videoCommentCount": 196967,
"scrapedAt": "2026-10-29T06:30:56.593Z"
}
A video or profile that cannot be read becomes a row with "recordType": "error" and an errorCode instead of failing the whole run:
errorCode | Meaning |
|---|---|
NOT_FOUND | The video was deleted, is private, has comments turned off, or the link is wrong; or the profile does not exist |
NO_VIDEOS | The profile has no public videos, or none in your date range |
BLOCKED / RATE_LIMITED | TikTok refused the request; run again later, or enable the proxy |
Tips and limits
- About 400 comments per video. TikTok shows logged-out visitors roughly the top 330-470 comments of a video, however many it has. The Actor returns all of those, and the log says how many videos had more. Replies are not affected: a popular comment's thread pages normally.
- Profiles give their latest ~12 videos. A profile's public video list is short; for older videos, paste their URLs.
- Comment order is TikTok's. Comments come top-first, the way TikTok ranks them, not by date. "Only comments posted after" still reads every page of a video, so use it to keep only fresh comments, not to save time.
- Need commenter bios, followers or emails? Feed this dataset's
authorUsernamecolumn into TikTok Creator & Profile Scraper.
FAQ
Is it legal to scrape TikTok comments?
This Actor collects only data that TikTok shows publicly, without logging in. Comments and usernames are personal data, which laws such as the GDPR protect. Scrape personal data only for a legitimate purpose, and ask a lawyer if you are unsure. TikTok is a trademark of its owner; this Actor is not affiliated with or endorsed by TikTok.
Can I use it through the API?
Yes. Every run can be started through the API and its dataset read as JSON. Runs can also be scheduled and can trigger webhooks.
Can AI agents use it?
Yes. Agents connected to the Bytewells MCP server can find and run this Actor as a tool.
Why did I get fewer comments than I asked for?
The video has fewer comments than your limit, TikTok stopped showing comments (about 400 per video for logged-out visitors), or TikTok hides some comments it filters. The log says which, and nothing collected before that is lost.
Can I monitor new comments on my videos?
Yes. Schedule a run with "Only comments posted after" set to "1 day" (or the gap between runs), and deduplicate on commentId.
Related scrapers
- TikTok Video Scraper: views, likes, shares and saves of the same videos.
- TikTok Creator & Profile Scraper: followers, bio, links and emails of the commenters or creators.
Support
Missing a field, or found a video that does not work? Report it with the input you used, and it will be looked at quickly.
FAQ
- Do I need a TikTok account, login or API key?
- No. It reads the comments TikTok shows to visitors who are not logged in, with no cookies, no browser and no proxy. Nothing is logged in, so no account can be banned.
- How much does it cost to scrape TikTok comments?
- One flat monthly rental, shown on this page, with a free trial and no per-comment fee. Runs use your Bytewells credits for compute only, because TikTok's comment API needs no proxy. Measured on Bytewells: 100 comments in 8 seconds for $0.0002, well under $0.01 per 1,000 comments.
- How many comments can I get per video?
- About 400. TikTok shows logged-out visitors roughly the top 330-470 comments of a video, however many it has, and the Actor returns all of them. Reply threads are not capped this way. The log says which videos had more comments than TikTok showed.
- Can I scrape the comments of a whole profile?
- Yes. A profile link gives the comments of its latest videos, about 12, which is what TikTok lists publicly. For older videos, paste their URLs.
- Can I monitor new comments on my videos?
- Yes. Schedule a run with "Only comments posted after" set to 1 day (or the gap between your runs) and deduplicate on commentId. Comments come in TikTok's ranking order, not by date.
- Can I use it through the API or from AI agents?
- Yes. Start runs through the Bytewells API (bytewells.com/docs/api), schedule them and read the dataset as JSON; webhooks work too. The API is Apify-compatible, so apify-client works with the Bytewells base URL. AI agents can run it as a tool through the Bytewells MCP server (bytewells.com/docs/mcp).
- Is it legal to scrape TikTok comments?
- It collects only data TikTok shows publicly, without logging in. Comments and usernames are personal data under laws such as the GDPR, so scrape them only for a legitimate purpose and ask a lawyer if you are unsure. This Actor is not affiliated with or endorsed by TikTok.
Input
Preview of the input form. Rent the Actor to fill it in and start runs from the console.
targetsOne per line. Videos: tiktok.com/@user/video/123... or /photo/ URLs, vm.tiktok.com or vt.tiktok.com short links, or bare video ids. Profiles: tiktok.com/@user, @user or user, for comments on that profile's latest videos (see "Videos per profile").
startUrlsThe same videos or profiles in the URL-list shape other Actors output, so a previous Actor's results can be fed straight in. Use this or the field above.
maxItemsStop after this many comments and replies across all videos. You pay per comment, so this is also your cost cap for the run.
maxCommentsPerVideoTop-level comments to collect from each video, in TikTok's own order (top comments first). TikTok shows logged-out visitors about 400 comments per video, so higher values return what TikTok shows and no more.
maxRepliesPerCommentReplies to collect under each comment. 0 = no replies. Replies are charged as comments and carry their parent's ID; each comment with replies takes one more request, so runs with replies are slower.
commentsAfterOptional. Keep only comments (and replies) posted on or after this date, e.g. 2026-01-31 or "7 days" for the last week. Older comments are skipped and not charged. TikTok orders comments by relevance, not date, so every page of a video is still read.
Applies only to profiles in the list. Video URLs are always scraped.
videosPerProfileFor each profile, how many of its latest videos to take comments from, newest first. TikTok's public profile embed lists the latest ~12 videos, so profiles give at most that many.
postedAfterOptional. Only take profile videos posted on or after this date, e.g. 2026-01-31 or "30 days".
postedBeforeOptional. Only take profile videos posted on or before this date, e.g. 2026-06-30.
The defaults are tuned for speed and cost. Change them only if runs are blocked or rate-limited.
proxyConfigurationNot needed: TikTok's comment pages answer Apify's own addresses. Turn on Apify Proxy (datacenter) only if a run reports BLOCKED errors. Residential proxy is never needed and only adds cost.
maxConcurrencyHow many videos or profiles are processed at the same time.
requestTimeoutSecsHow long to wait for one response before giving up on it.
maxRetriesRetries for blocked, rate-limited or failed connections. Timeouts are not retried.
API
Bytewells speaks the Apify API. Existing integrations keep working: point apify-client at https://bytewells.com/api and use your Bytewells API token (Console → Settings → API access). The Actor ID is amethyst/tiktok-comments-scraper (or amethyst~tiktok-comments-scraper in URLs).
JavaScript · apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.BYTEWELLS_TOKEN,
baseUrl: 'https://bytewells.com/api',
});
const input = {
"targets": [
"https://www.tiktok.com/@scout2015/video/6718335390845095173"
],
"maxItems": 1000,
"maxCommentsPerVideo": 100,
"maxRepliesPerComment": 0,
"videosPerProfile": 3,
"proxyConfiguration": {
"useApifyProxy": false
},
"maxConcurrency": 5,
"requestTimeoutSecs": 30,
"maxRetries": 2
};
const run = await client.actor('amethyst/tiktok-comments-scraper').call(input);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Python · apify-client
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["BYTEWELLS_TOKEN"], api_url="https://bytewells.com/api")
run_input = {
"targets": [
"https://www.tiktok.com/@scout2015/video/6718335390845095173"
],
"maxItems": 1000,
"maxCommentsPerVideo": 100,
"maxRepliesPerComment": 0,
"videosPerProfile": 3,
"proxyConfiguration": {
"useApifyProxy": False
},
"maxConcurrency": 5,
"requestTimeoutSecs": 30,
"maxRetries": 2
}
run = client.actor("amethyst/tiktok-comments-scraper").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)HTTP · curl
curl -X POST "https://bytewells.com/api/v2/acts/amethyst~tiktok-comments-scraper/runs" \
-H "Authorization: Bearer $BYTEWELLS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"targets":["https://www.tiktok.com/@scout2015/video/6718335390845095173"],"maxItems":1000,"maxCommentsPerVideo":100,"maxRepliesPerComment":0,"videosPerProfile":3,"proxyConfiguration":{"useApifyProxy":false},"maxConcurrency":5,"requestTimeoutSecs":30,"maxRetries":2}'Runs are billed as compute from your credit balance. Paid Actors need an active rental or trial; otherwise the API answers 402 rental-required.
Related
More Actors from the same publisher.

TikTok Video Scraper - Views, Likes & Hashtags
Eimantas V · @amethyst
Scrape TikTok video stats from a list of URLs: views, likes, comments, shares, saves, hashtags, sound, post date and creator followers. No login or API key.
Social mediaVideosMarketing$19/mo7-day free trial
YouTube Search Scraper - Videos, Shorts & Channels
Eimantas V · @amethyst
Scrape YouTube search results: videos, Shorts, channels and playlists with exact views, likes, dates and tags. Every filter, date ranges, deep search. No login.
Social mediaVideosMarketing$19/mo7-day free trial
Facebook Ads Library Scraper - Meta Ads, All Countries
Eimantas V · @amethyst
Scrape the Facebook Ads Library in any country: ad copy, images, videos, landing pages, CTAs, run dates and advertiser Pages. No login, no token needed.
MarketingSocial mediaBusiness$29/mo7-day free trial
Facebook Pages Scraper - Emails, Phones & Followers
Eimantas V · @amethyst
Scrape Facebook Pages by link, username or ID: email, phone, website, address, exact followers, category, rating and social links. No login or cookies.
Lead generationSocial mediaMarketing$19/mo7-day free trial
Facebook Posts Scraper - Pages, Profiles & Reactions
Eimantas V · @amethyst
Scrape posts from public Facebook Pages and profiles: text, date, reactions by type, comments, shares, video views and media. Date filters and new-post alerts.
Social mediaMarketingLead generation$19/mo7-day free trial
Instagram Profile Scraper - Followers, Posts & Emails
Eimantas V · @amethyst
Scrape Instagram profiles by username or URL: exact followers, following and posts, bio, links, emails and phones from bios, engagement rate, latest posts.
Social mediaLead generationMarketing$19/mo7-day free trial