TikTok Comment Scraper API
Our TikTok comment scraper takes a video URL or numeric id and is built to return each comment as JSON: the text, like count, reply count, timestamp, and the author, paged with a cursor. Read the note below on TikTok's signature wall before you rely on it.
Why TikTok Comment data fights back
TikTok's comment feed is served by a web XHR (api/comment/list) that requires a browser-minted X-Bogus and msToken signature tied to session cookies. Logged-out residential egress without that signature returns an empty 200, which is why a plain request gets no comments back.
Fire your first TikTok Comment Scraper API call
curl "https://api.tiktokscraperapi.com/api/v1/tiktok/comments?url=https://www.tiktok.com/@scout2015/video/6718335390845095173&count=20&api_key=$API_KEY" import requests
BASE = "https://api.tiktokscraperapi.com/api/v1"
API_KEY = "YOUR_API_KEY"
# Pass the video url (or aweme_id), how many comments, and a cursor to page.
resp = requests.get(
f"{BASE}/tiktok/comments",
params={
"url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
"count": 20,
"cursor": 0,
"api_key": API_KEY,
},
timeout=30,
)
data = resp.json()
# When the signed feed is available, iterate the comments array.
for c in data.get("comments", []):
print(c["likes"], "|", c["author"]["uniqueId"], "|", c["text"]) Parameters
| Parameter | Required | Default | Notes |
|---|---|---|---|
url | optional | - | The full TikTok video permalink whose comments you want. Required unless you pass aweme_id or id. |
aweme_id | optional | - | The numeric video (aweme) id, an alternative to url. id is accepted as an alias. |
count | optional | 20 | How many comments to request this call. TikTok caps a page at about 50. |
cursor | optional | 0 | The offset cursor for the next page. Pass the next_cursor from a prior response to page deeper. |
country | optional | us | Two-letter country code for the exit region the request is routed through. Defaults to US. |
api_key | required | - | Your API key, passed as a query parameter. Get one free at signup. |
What the TikTok Comment Scraper API hands back
{
"aweme_id": "6718335390845095173",
"url": "https://www.tiktok.com/@scout2015/video/6718335390845095173",
"socialPlatform": "tiktok",
"comments": [
{
"position": 1,
"id": "7361000000000000000",
"text": "this is the cutest thing i have seen all week",
"likes": 1240,
"reply_count": 12,
"create_time": 1564240000,
"author": {
"id": "6700000000000000000",
"uniqueId": "exampleuser",
"nickname": "Example User",
"avatar": "https://p16-common-sign.tiktokcdn-us.com/...",
"url": "https://www.tiktok.com/@exampleuser"
}
}
],
"comments_count": 20,
"total": 5756,
"has_more": true,
"next_cursor": 20
} | Field | Type | Description |
|---|---|---|
aweme_id | string | The numeric video id the comments belong to. |
url | string | The canonical video URL. |
comments | array | The comments on this page. Each has position, id, text, likes, reply_count, create_time, and an author object. |
comments[].text | string | The comment body. |
comments[].likes | integer | Number of likes on the comment. |
comments[].reply_count | integer | Number of replies to the comment. |
comments[].author | object | The commenter: id, uniqueId, nickname, avatar, and url. |
comments_count | integer | Number of comments returned on this page. |
total | integer | Total comment count reported for the video. |
has_more | boolean | True when another page is available. |
next_cursor | integer | The cursor to pass on the next call to page deeper. |
Where teams put TikTok Comment data to work
Sentiment analysis
Community management
Trend and feedback mining
Spam and brand-safety checks
Engagement research
Audience discovery
Why build on our TikTok Comment Scraper API
The endpoint builds the comment-list hop correctly: it resolves the numeric id, sends the full web-app parameter block, pages with a cursor, and maps each comment into a clean row. We are honest that TikTok gates this feed behind a browser-minted signature, so on a logged-out tier it returns a classifiable comments_gated_needs_signature rather than pretending to have data. It runs on residential proxies with retries and success-only billing.
URL or aweme_id input
Cursor pagination
Structured comment rows
Honest signature reporting
Residential routing
Pay for success
TikTok Comment Scraper API vs rolling your own
| Our API | DIY (requests / headless) | TikTok official API | |
|---|---|---|---|
| Input by video URL | Yes, url or aweme_id | Manual XHR with signed params | Not exposed to general devs |
| Comment text and likes | Mapped rows when authorised | You mint the signature yourself | No public comment endpoint |
| Signature wall | Reported honestly, not faked | You solve X-Bogus / msToken | Not applicable |
| Pagination | Cursor built in | Hand-managed cursors | Not applicable |
| Anti-bot and proxies | Built in, US residential | You build and maintain it | Not applicable |
| Output | Flat JSON, stable schema | Raw XHR JSON you parse | Not available |
Start free, then pay per call
| Plan | Price | Best for |
|---|---|---|
| Free | 1,000 requests | Testing and small jobs |
| Pro | $0.60 / 1k | Production workloads |
| Pay-as-you-go | $0.90 / 1k | Spiky or one-off volume |
Median response 2.6s. You only pay for successful requests.
FAQ
A TikTok comment scraper is a tool that reads the comments on a public video and returns them in a structured format. Our TikTok comment scraper API is built to take a video URL or numeric id and return each comment as JSON, with the text, like count, reply count, timestamp, and author, paged with a cursor.
Not reliably, and we are upfront about it. TikTok serves comments through a web XHR that requires a browser-minted X-Bogus and msToken signature tied to session cookies. Logged-out residential egress without that signature receives an empty 200, so the endpoint returns a classifiable comments_gated_needs_signature response in that case rather than pretending to have comments.
It returns an honest error state, comments_gated_needs_signature, with detail noting that TikTok's comment/list XHR needs a browser-minted signature and that a render or browser tier is required to mint it. The hop itself (id resolution, the full web-app parameter block, pagination, and response mapping) is implemented correctly, so it returns populated rows wherever the signed response is available.
When authorised, each comment returns position, id, text, likes, reply_count, create_time, and an author object with id, uniqueId, nickname, avatar, and url. The top-level response adds comments_count, total, has_more, and next_cursor for pagination.
Set count for the page size and pass cursor starting at 0. Each response returns next_cursor and has_more; pass next_cursor back as cursor on the following call and stop when has_more is false. This is the same cursor model TikTok's own feed uses.
Comments on a public video are public content, but you remain responsible for using the data lawfully, including any personal data in usernames or comment text under GDPR and similar laws, and for following TikTok's terms. This is general information rather than legal advice, so check your specific use case with counsel.