TikTok Comments Scraper | CommentScout
Pricing
from $0.25 / 1,000 tiktok comments
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
Maintained by CommunityActor stats
0
Bookmarked
35
Total users
9
Monthly active users
4 days ago
Last modified
Categories
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
- Open the Input tab and paste one or more public TikTok video URLs or video IDs.
- 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.
- 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
| Data | Fields |
|---|---|
| Comment content | Text, comment ID, creation time and language when available |
| Engagement | Like count and reported reply count |
| Author | Username, display name, profile URL and other fields returned by TikTok |
| Reply threads | Reply ID, parent comment ID and the user being replied to when available |
| Video reference | Video ID, video URL and collection time |
| Collection status | A 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
| Setting | How to use it |
|---|---|
videoUrls | Public video URLs, short TikTok links or numeric video IDs |
maxCommentsPerVideo | Limit top-level comments per video, from 1 to 10,000 |
includeReplies | Collect 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:
| Setting | How to use it |
|---|---|
maxRepliesPerComment | Reply limit per comment; set above zero to retrieve replies |
maxSecondsPerVideo | Time available per video; defaults to 90 seconds |
useResidentialProxy | Optional residential routing for videos blocked on standard routing |
cookieHeader | Inactive compatibility field; supplied account cookies are ignored |
jobName | Reuse 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.
| Collection | Actor 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 osfrom apify_client import ApifyClientclient = 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.