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.
Use it for
Sentiment analysis
Community management
Trend and feedback mining
Spam and brand-safety checks
Quickstart
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"]) Response
{
"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. |
How it works
- Send a GET request with your target and API key.
- We route through residential proxies, handle anti-bot, and parse the response.
- You get validated JSON back, ready to use.
How it compares
| 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 |
Pricing
| 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
What is a TikTok comment scraper?
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.
Can it always return TikTok comments logged out?
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.
What does the endpoint return when comments are gated?
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.
What fields come back for each comment?
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.
How do I page through all the comments on a video?
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.
Is scraping TikTok comments legal?
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.