TikTok Comments Scraper
Scrape TikTok comments from any public video: text, likes, reply count, author and timestamp. No login. $0.25 per 1,000 comments.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
videoUrls,videoIds,maxComments(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00025 per comment = $0.25 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Comment returned | Charged per comment returned. Failed/empty runs not charged. | $0.00025 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-19, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
videoUrls | TikTok video URLs to scrape comments from. | array |
videoIds | Or bare numeric video IDs. | array |
maxComments | Max comments across all videos. Charged per comment. | integer |
notionConnector | Optional. Deliver results to your connected Notion via Apify MCP connectors. | string |
notionParentId | Optional Notion database/data-source id. | string |
sessionCookies | Optional, leave empty and the run works as normal. Supply your own TikTok account cookie here, and the run uses it where an account is needed. In Chrome, on a logged-in tiktok.com tab: F12 → Application → Cookies → copy the `sessionid` value. Paste one per line; several are rotated. | array |
What you get
A structured dataset — each result includes fields like:
textlikeCountreplyCountvideoIdExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
1 ready-to-run use cases
TikTok Video Comments Scraper
Get the comments under any TikTok video: text, author, likes and time. Paste the video URLs and run. No login.
Related tools in Social Media Scrapers
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
TikTok Hashtag Scraper
Scrape TikTok hashtag videos: plays, likes, comments, shares, author and sound. No login or API key. $0.25 per 1,000 videos.
TikTok Sound Scraper
Scrape the TikTok videos using a sound: views, likes, comments, shares, caption, author and MP4 links. $0.25 per 1,000 videos.
TikTok Followers and Following Scraper
Get a public TikTok account's following list with no login. Followers need your own cookie. Handles, bios, avatars, regions. $0.35 per 1,000 profiles.
Instagram Comments Scraper
Scrape comments from any public Instagram post or reel: text, author, likes, replies and timestamp. Nothing to log into. $0.40 per 1,000 rows.
Twitter (X) Search Scraper
Scrape X (Twitter) search by keyword or advanced query. Get the full text, engagement, media and author. No login needed from you. $0.40 per 1,000 tweets.
Twitter (X) List Scraper
Scrape every tweet from an X (Twitter) list. Get full text, likes, retweets, views, hashtags, media and author. No login. $0.40 per 1,000 tweets.
Where this tool sits
- Categories
- Social Media Scrapers
- Platforms
- TikTok
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
1. Open TikTok Comments Scraper and click Try for free. 2. Paste links into Video URLs, one per line, or ids into Video IDs. 3. Set Max comments. It is the total for the run, so start at 100 while you look at the output shape. 4. Click Start. 5. 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.