TikTok Comments Scraper - Comments and Replies, No Login
Pricing
from $0.25 / 1,000 comment returneds
TikTok Comments Scraper - Comments and Replies, No Login
Scrape comments from any public TikTok video. Each row has the text, like count, reply count, handle, timestamp and any attached images. Replies under a comment are not returned, only the top-level comments. No login needed from you. $0.25 per 1,000 comments.
Pricing
from $0.25 / 1,000 comment returneds
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
20
Total users
8
Monthly active users
a day ago
Last modified
Categories
Share
TikTok Comments Scraper: the comment section of any public video, as flat rows
Paste TikTok video links, or the bare numeric ids, and you get the comments back one per row: the text, like count, reply count, the commenter's handle and avatar, the timestamp, and any image attached to the comment. Nothing to log into.
One thing to be clear about up front: this returns the top-level comments only. It does not walk
into the reply threads under them. Every row carries replyCount, so you can see how many replies
exist, but those replies are not rows and this is not the actor that fetches them.
| Input | TikTok video links, or bare numeric video ids |
| Output | One row per top-level comment |
| Ceiling | 5,000 comments per run |
| Account needed | None from you |
| Price | $0.25 per 1,000 comments, flat on every plan |
๐ What TikTok Comments Scraper does
You give it videos, it pages through each comment section and flattens what it finds. A /video/
link or a bare id both work, and you can mix the two lists in one run.
maxComments is the total for the run and it is split evenly across the videos you passed. Ten
videos with maxComments: 500 is roughly 50 from each, not 500 from each. A video that has fewer
comments than its share does not hand the remainder to the next one, so if you want one video
emptied out, run it on its own.
Comments are deduplicated as the pages are read, so nothing is returned or billed twice. A video with comments turned off, or one that would not answer, gets a row saying so and the run moves on.
๐ฅ What you give it
{"videoUrls": ["https://www.tiktok.com/@tiktok/video/7654341587425692942"],"maxComments": 500}
| Field | Default | What it is |
|---|---|---|
videoUrls | none | Full /video/ links. The form opens with one filled in as an example, which is a starting point rather than a default. |
videoIds | none | Or the bare numeric ids, if you already have them. Mix freely with videoUrls. |
maxComments | 100 | Comments for the whole run, 1 to 5,000, split across your videos. This is also your spend cap. |
sessionCookies | none | Optional. Your own TikTok sessionid, used only for videos that came back empty. Use a throwaway account: the value sits in the run input, which anyone who can open the run can read. |
proxyConfiguration | off | Leave it off. It exists for people routing through their own servers at high volume. |
notionConnector, notionParentId | none | Optional. Write each comment into a Notion database as well as the dataset. |
Use the full link from the address bar, or the id. A shortened share link is kept as it is and usually will not resolve.
๐ค What you get back
A real row from a real run, with the avatar link cut short:
{"ok": true,"type": "comment","id": "7655213632855294751","videoId": "7654341587425692942","text": "malcolm todd always brings the energy, love it","likeCount": 5,"replyCount": 2,"createTime": "2026-06-25T06:19:23.000Z","images": [],"user": {"id": "7620428780482397197","uniqueId": "steward.franco1","nickname": "Steward Franco","avatar": "https://p16-common-sign.tiktokcdn-us.com/musically-maliva-obj/..."}}
| Field | What it is |
|---|---|
id, videoId | Unique per comment, and the video it sits under. Use id as your dedupe key across runs. |
text | The comment as written, emoji included. |
likeCount, replyCount | How many likes it got, and how many replies are under it. The replies themselves are not returned. |
createTime | When it was posted, as an ISO timestamp. |
images | Sticker or image replies, as links. An empty array on most comments. |
user | Who wrote it: id, handle, display name and avatar. |
๐งพ Reading the output
Two kinds of row land in your dataset.
| Row | How to spot it | Billed |
|---|---|---|
| A comment | ok: true and type: "comment" | yes |
| A diagnostic | ok: false and an errorCode | no |
Filter on ok == true and you have your data. NO_RESULTS means the video has no comments to
read, which usually means they are turned off. RATE_LIMITED and BLOCKED mean that video would
not answer this run, and re-running usually clears it. None of them is charged.
One quirk of the Overview table: it shows four columns, so the commenter's handle and the timestamp are not in it, and a diagnostic row reads as a nearly blank line. Open the row itself or download the JSON and everything is present.
โถ๏ธ How to run it
- Open TikTok Comments Scraper and click Try for free.
- Paste links into Video URLs, one per line, or ids into Video IDs.
- Set Max comments. It is the total for the run, so start at 100 while you look at the output shape.
- Click Start.
- Download the dataset as JSON, CSV or Excel, or pull it from the Apify API.
๐ฐ How much does it cost?
$0.25 per 1,000 comments. Flat on every Apify plan, no volume tiers.
You pay for comments delivered. Diagnostic rows and duplicates caught inside a run are not charged.
maxComments is the ceiling on both the rows and the spend.
๐ก What people use it for
- Reading what an audience actually said under a launch video instead of guessing from the like count.
- Pulling the handles of people commenting on a niche creator, as a starting list for outreach.
- Tracking sentiment on a campaign across the videos that carried it.
- Finding the questions that keep coming up under a how-to video, then answering them in the next one.
๐ง What it does not do
- No reply threads. Top-level comments only.
replyCounttells you what you are not getting. - Public videos only. A private or removed video returns a diagnostic row, not comments.
- The allowance is shared and not redistributed. A quiet video does not pass its leftover share to a busy one.
- Not the whole comment section on a huge video. There is a paging guard as well as your own limit, so a video with a million comments will not come back complete.
- The order is TikTok's own, roughly how it ranks them, not strictly newest first.
- A shortened share link is not resolved. Use the full
/video/link or the numeric id. - An empty input fails the run instead of returning a sample. Give it at least one video.
๐งญ Which TikTok scraper do you need?
| If you want | Use |
|---|---|
| Comments under videos you already have links for | This one |
| A profile plus its videos, or a keyword search | TikTok Scraper |
| Videos under a hashtag | TikTok Hashtag Scraper |
| Follower and likes counts for a list of handles | TikTok Profile Scraper |
| Which hashtags are climbing right now | TikTok Trending Hashtags |
โ Questions people ask
Do I need a TikTok account? No. The cookie field is optional and only comes into play for videos that came back empty without it.
Can I get the replies under a comment? Not from here. This returns the top-level comments.
Is maxComments per video or per run? Per run, split across the videos you passed. Run one
video at a time if you want its comment section emptied.
Why did a video return nothing? Usually comments are turned off, or the video is private or
gone. You will see an uncharged row with an errorCode saying which.
Is scraping TikTok legal? This reads comments on public videos only, never private accounts or messages. Results contain personal data, which GDPR and similar laws cover, so have a reason for collecting it. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
Can I run it on a schedule? Yes. Use Apify's scheduler, or start it from the API and read the dataset when it finishes.
๐ If something breaks
Open the Issues tab on the actor page. Include the video links you used and the run ID, and the log is usually enough for us to see what happened.