TikTok Comments Scraper | CommentScout avatar

TikTok Comments Scraper | CommentScout

Pricing

from $0.25 / 1,000 tiktok comments

Go to Apify Store
TikTok Comments Scraper | CommentScout

TikTok Comments Scraper | CommentScout

Scrape TikTok comments and replies from public video URLs. Export comment text, authors, likes and timestamps to CSV, Excel or JSON. Includes deduplication, collection limits and optional comment-export analysis.

Pricing

from $0.25 / 1,000 tiktok comments

Rating

0.0

(0)

Developer

Inus Grobler

Inus Grobler

Maintained by Community

Actor stats

0

Bookmarked

35

Total users

9

Monthly active users

4 days ago

Last modified

Share

TikTok Comments Scraper — CommentScout

Collect TikTok comments and replies from public video URLs, then download the results as CSV, Excel or JSON. CommentScout returns comment text, usernames, likes, reply counts and timestamps in a dataset you can use for audience research, brand monitoring and content planning.

Example input and quick start

  1. Open the Input tab and paste one or more public TikTok video URLs or video IDs.
  2. Set Max top-level comments per video. Enable Include replies if you need conversation threads; the Console starter allows up to three replies per comment.
  3. Click Start. Open the run's dataset to inspect the comments or export them as CSV, Excel or JSON.

The form has three controls: video URLs, maximum top-level comments per video, and Include replies. The prefilled example collects one comment from one public video. Increase the comment limit for your own collection. You can supply up to 100 videos per run. Technical settings and existing-export processing are available through JSON/API.

{
"videoUrls": [
"https://www.tiktok.com/@khaby.lame/video/7623088450576633119"
],
"maxCommentsPerVideo": 100,
"includeReplies": false
}

What you get

DataFields
Comment contentText, comment ID, creation time and language when available
EngagementLike count and reported reply count
AuthorUsername, display name, profile URL and other fields returned by TikTok
Reply threadsReply ID, parent comment ID and the user being replied to when available
Video referenceVideo ID, video URL and collection time
Collection statusA separate video status row and a run summary

The dataset contains comment, reply and video_status rows. Filter by record_type when you need comments only. Status rows describe coverage and errors; they are not billed as comments. Genuine image comments are retained even when their text is empty. Entries with no native ID or no usable text, image or sticker content are skipped without a comment charge. A video returning no usable comments is reported as empty or unavailable and has no video-processing charge. Missing engagement counts and flags are returned as null, rather than invented zero or false values. Real 0 counts and false flags are preserved. Other fields that TikTok does not return may be empty.

Example output

Illustrative comment row:

{
"record_type": "comment",
"video_id": "7623088450576633119",
"comment_id": "EXAMPLE_COMMENT_ID",
"text": "Could you show how this works?",
"author_unique_id": "example_user",
"like_count": 12,
"reply_count": 2,
"create_time": "2026-10-20T12:00:00Z",
"is_reply": false,
"dataInputSource": "web",
"sourceVerified": true
}

sourceVerified means the row was collected from TikTok during this run; it does not verify a comment's claims. The run's key-value store contains OUTPUT_SUMMARY with per-video counts, errors and completion status.

Use cases

  • Find questions to answer in your next video.
  • Track feedback on a product, launch or campaign.
  • Review audience reactions across selected creators or competitor videos.
  • Prepare comment datasets for research, moderation or sentiment analysis in your own tools.

Main inputs

SettingHow to use it
videoUrlsPublic video URLs, short TikTok links or numeric video IDs
maxCommentsPerVideoLimit top-level comments per video, from 1 to 10,000
includeRepliesCollect replies under the top-level comments you retrieve

The Console starter uses a hidden limit of three replies per top-level comment. Comment and reply limits are separate: 100 top-level comments with this reply preset can return up to 400 comment/reply rows. Time limits, TikTok restrictions and available replies may reduce that number.

Existing JSON/API options

Existing input names, types, limits and defaults remain accepted. To request replies through the API, supply both includeReplies: true and a positive maxRepliesPerComment, such as 3. Its existing API default remains 0. The following fields are hidden from the form:

SettingHow to use it
maxRepliesPerCommentReply limit per comment; set above zero to retrieve replies
maxSecondsPerVideoTime available per video; defaults to 90 seconds
useResidentialProxyOptional residential routing for videos blocked on standard routing
cookieHeaderInactive compatibility field; supplied account cookies are ignored
jobNameReuse with the same collection settings to continue a retained collection job

The per-video time limit remains 90 seconds by default. Residential routing remains off unless explicitly selected in JSON/API. Resumable jobs retain storage; use one active run per job name.

Pricing

Comments and replies cost $0.25 per 1,000 delivered rows, plus $0.005 per successfully processed video. Both comment types use the same price. Video status rows have no result charge. The optional uploaded-data mode has a separate processing fee described below.

CollectionActor event charges
10 comments from 1 video$0.0075
100 comments from 1 video$0.03
1,000 comments from 1 video$0.255
1,000 comments across 10 videos$0.30

These examples assume one successful collection without retries or resumptions. Check the Pricing tab for the effective rates before running. Residential routing uses more expensive traffic and can affect available run capacity.

Analyze an existing comment export through JSON/API

These options are hidden from the form. You can supply providedRecords or providedDatasetId in JSON/API to validate, deduplicate and analyze comments you already have. Supplied data takes precedence over video URLs. Use one supplied source at a time; leave providedRecords empty when using a dataset ID. The optional analysisQuery finds literal phrase matches in supplied records; it does not filter live comments.

{
"providedRecords": [
{"text": "Could you show the packaging?", "like_count": 3},
{"text": "Please make a video about the packaging.", "like_count": 1}
],
"maxCommentsPerVideo": 100,
"analysisQuery": "packaging"
}

In this mode, maxCommentsPerVideo limits records scanned across the run. Accepted records are billed at the comment rate; there is no video-processing event. A $0.003 processing fee per uploaded-data run is scheduled to start on 2026-11-11 (UTC) after Apify’s notice period. It applies only when supplied records and their analysis are delivered, and is never charged for live video scraping or zero-result uploads. Before that date, uploaded-data runs keep the existing per-record price. After that date, one accepted uploaded comment costs $0.00325; ten cost $0.0055. The Pricing tab shows the effective rate. EVIDENCE_ANALYSIS contains recurring terms, repeated text, question excerpts and optional literal phrase matches. PROVIDED_DATA_SUMMARY records accepted, rejected, duplicate and delivered counts. Supplied records are labeled dataInputSource: provided and sourceVerified: false.

For uploaded exports, combine related records in one run to avoid repeated startup work. The run memory setting can be reduced to 512 MB for this mode; the recommended live-scraping setting remains 1 GB.

Python API example

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("thescrapelab/tiktok-comments-scraper").call(
run_input={
"videoUrls": [
"https://www.tiktok.com/@khaby.lame/video/7623088450576633119"
],
"maxCommentsPerVideo": 100,
"includeReplies": False,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item.get("record_type") in {"comment", "reply"}:
print(item)

Public access and troubleshooting

Collection uses TikTok’s public web endpoints and a local open-source signing utility. No paid scraping API, external signing service, child Actor or AI API is used. Only anonymous sessions are supported. Standard Apify hosting, storage and proxy costs still apply; residential routing is opt-in.

The per-video stop_reason in OUTPUT_SUMMARY explains comment limits, time or budget limits, pagination stalls and unavailable sources. Limits do not establish complete coverage.

Coverage and troubleshooting

TikTok can restrict anonymous requests, change comment availability or return fewer comments than the video's displayed count. Private, removed, age-restricted and region-restricted videos may be unavailable. Reply collection covers the top-level comments retrieved in the run, and the ordering follows TikTok's response. This is a bounded collection, not a guarantee of every comment or chronological order.

If a video fails, inspect OUTPUT_SUMMARY or try another public video. Optional paid residential routing can be selected with useResidentialProxy: true in JSON/API. A blocked request does not produce a fabricated comment. The Actor does not infer sentiment or demographic information.

For help, open the Issues tab with your run ID and a sanitized input example. Never post session cookies or API tokens.

Frequently asked questions

Can I scrape TikTok comments without logging in?

Yes. Provide public video links; the Actor uses anonymous sessions. Account cookies, private videos and login-required content are unsupported. TikTok can still restrict anonymous requests.

How do I export TikTok comments to CSV or Excel?

Open a completed run, select its dataset and choose Export. CSV, Excel and JSON are available. Keep rows with record_type equal to comment or reply when you need comment data only. Image-only comments keep their image links even when the text column is empty.

Why are fewer replies returned than TikTok displays?

The Actor collects replies only under the top-level comments retrieved in the run. Enable Include replies in the form, or set a positive maxRepliesPerComment with includeReplies: true through JSON/API. Allow enough time per video. Deleted, unavailable and restricted replies cannot be collected.

Does a small result limit mean the whole video was collected?

No. A configured limit produces a sample. Inspect stop_reason in OUTPUT_SUMMARY for comment, time or budget limits. no_public_comments means the source returned no usable public comment content.

Do I need a paid TikTok API subscription?

No. This Actor collects directly from TikTok’s public web endpoints. It uses no paid data-provider API. Actor event charges and normal Apify infrastructure costs still apply.

CommentScout is an independent tool and is not affiliated with or endorsed by TikTok.