There is exactly one official TikTok comments API: /v2/research/video/comment/list/ in the Research API. It is free to call and closed to almost everyone, because you have to be an approved researcher at a non-profit academic institution in the US or Europe. The Display API, which any developer can use, only reaches the logged-in user's own videos and never returns other people's comments.
That leaves commercial builders with two routes: pay a vendor who scrapes comments for you, or call a tool layer that does the same work and hands you JSON. Both are covered below, with a real response and the cursor contract that trips people up.
The official endpoint
The Research API's comment query takes a video_id, a max_count and a cursor, and returns comment text with like count, reply count and creation time. Paging is a cursor plus a has_more flag, and TikTok's own Python and R wrapper exposes it as query_video_comments() with a fetch_all_pages option. The daily quota across the Research API is 1,000 requests, up to 100,000 records.
Eligibility is the whole story. You need academic employment, a research proposal, no conflicts of interest and a commitment to non-commercial use. Product teams do not qualify. Our Research API guide walks through the application.
It is the API behind "connect your TikTok account" buttons. It returns the authenticated user's profile and video list. There is no comment read in it, not even for your own videos.
The vendors
| Option | What it gives you | Price |
|---|---|---|
| Apify comments scraper | Comment text, author, timestamp, likes, reply count and reply content, from video URLs or a username. Caps per post and per comment are inputs | $0.005 per result, so about $5 per 1,000. $5 of free credit a month on the basic plan |
| EnsembleData | Post comments in bulk, including replies, alongside profile, hashtag and music endpoints | Paid plans, 7-day free trial without a card |
| Bright Data | A dedicated comments scraper in a set of 13 TikTok datasets, with comment text, dates and reply counts | From $1.50 per 1,000 records, 5,000 free credits a month |
| davidteather/TikTok-Api | Comments via a Python library you run yourself | Free and MIT, but you supply Playwright, an ms_token cookie and proxies |
Apify's own documentation is honest that full reply extraction is not guaranteed, which is worth knowing before you build a thread-reconstruction feature on top of it.
A TikTok comments API you can call today
The MCP route gives an agent or a script two tools: video_comments and comment_replies. The endpoint is https://mcp.tokconnect.com/mcp over Streamable HTTP with Authorization: Bearer YOUR_TOKCONNECT_KEY. Keys come from app.tokconnect.com, the free tier is 100 credits, and one tool call is one credit. Client setup is in the TikTok MCP guide.
video_comments takes aweme_id, count (1 to 50) and cursor. We searched learn to code by most liked on 19 September 2026, took the top video (a 470-comment HTML guide from @codevibes_1 with 697,600 views), and asked for ten comments:
{
"comments": [
{
"id": "7571850576905454347",
"text": "Can use HTML,CSS & JS to create a whole working system?",
"createTime": 1762958989,
"diggCount": 74,
"replyTotal": 2,
"authorUniqueId": "dj.kingster.thebaddest",
"authorNickname": "DJ KINGSTER",
"isAuthor": false,
"awemeId": "7556520311135407382"
}
],
"count": 10,
"hasMore": true,
"nextCursor": 10,
"total": 470,
"awemeId": "7556520311135407382"
}
TikTok comments via TokConnect, pulled 19 September 2026. Open the snapshot, which has both pages and the replies below.
Three fields do most of the work. total is the comment count TikTok reports for the whole video, so you know up front how many pages you are in for. diggCount is likes on the comment. isAuthor marks the video creator's own replies, which is how you separate the conversation from the host.
The cursor contract
Comment paging is a cursor, not a page number. Send cursor: 0 first, then send back whatever nextCursor you were given. Our second call used cursor: 10 and returned ten more with nextCursor: 20. Stop when hasMore is false, not when you hit total: deleted and hidden comments mean the two rarely line up exactly.
There is no separate "top comments" tool, and you do not need one. Results come back in TikTok's own order, which is not a like ranking. On page one the second comment had 823 likes and the third had 2. Pull two or three pages and sort by diggCount yourself.
Replies
comment_replies takes the aweme_id, a comment_id from the list above, a count and a cursor. The most-replied comment on that video was a complaint about being taught in Notepad first, with 823 likes and 14 replies. The thread under it:
[{"text": "notepad isn't bad😁", "diggCount": 18},
{"text": "it asss brr😂🤝 writing every single code and debugging
the whole shi not knowing u made a mistake with just spacing",
"diggCount": 55},
{"text": "we learn in vscode", "diggCount": 9}]
That is the reason to read replies rather than just top-level comments. The parent is a joke. The replies are three beginners telling you which editor they were actually taught in, which is the kind of thing you cannot get from view counts.
Getting an aweme_id from a URL
Every comments call needs a video id. TikTok calls it an aweme_id and it is sitting in the URL.
- Standard link.
https://www.tiktok.com/@codevibes_1/video/7556520311135407382. The digits after/video/are the id. - Short link.
vm.tiktok.com/…andvt.tiktok.com/…redirect. Follow the redirect and read the id off the final URL. - From search.
search_videosreturns each result'sid, which is the same value. That is how you go from a keyword to a set of videos to their comments without touching a browser.
Calling it from Python
With the official mcp package (pip install mcp), paging every comment on a video is short:
import asyncio, json, os
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
URL, AUTH = "https://mcp.tokconnect.com/mcp", {
"Authorization": f"Bearer {os.environ['TOKCONNECT_KEY']}"}
async def comments(aweme_id, max_pages=10):
async with streamablehttp_client(URL, headers=AUTH) as (r, w, _):
async with ClientSession(r, w) as s:
await s.initialize()
out, cursor = [], 0
for _ in range(max_pages):
page = json.loads((await s.call_tool("video_comments", {
"aweme_id": aweme_id, "count": 50,
"cursor": cursor})).content[0].text)
out += page["comments"]
if not page.get("hasMore"):
break
cursor = page["nextCursor"]
return sorted(out, key=lambda c: -c["diggCount"])
for c in asyncio.run(comments("7556520311135407382"))[:20]:
print(f'{c["diggCount"]:>6} {c["replyTotal"]:>3} replies {c["text"][:70]}')
The example above uses the Python SDK's 1.x line. In mcp 2.0 and later, which is what pip install mcp gives you today, the helper is streamable_http_client, the headers move onto an httpx2.AsyncClient passed as http_client, and the context manager yields two streams:
import httpx2
from mcp.client.streamable_http import streamable_http_client
async with streamable_http_client(URL, http_client=httpx2.AsyncClient(headers={"Authorization": f"Bearer {KEY}"})) as (read, write):
async with ClientSession(read, write) as session:
...Both forms return the same 26 tools. We ran both against the server on 19 September 2026.
Ten pages of 50 is 500 comments for ten credits. Write the list to CSV and you have the export TikTok does not give you; the comment export guide covers what to do with it, and the search guide covers finding the videos in the first place.
Find the three most-liked TikTok videos for "learn to code", pull 50 comments from each, and group them into the questions people ask, the complaints, and the requests. Quote the five comments with the most likes and say how many replies each one got.
One limit worth stating plainly: comments are written by real people. Whichever route you pick, how you store and republish them is a privacy question as much as an engineering one, and TikTok's Terms of Service restrict automated extraction. Nothing here is legal advice.
Frequently asked questions
Is it possible to scrape TikTok comments?
Technically yes, and people do it every day with browser extensions, Apify actors and vendor APIs. Legally it is a different question: TikTok's Terms of Service prohibit using robots, spiders or other automated means not provided by TikTok to access the service or extract data. Comments are also personal data about real people in most jurisdictions, so how you store and publish them matters as much as how you get them. This is not legal advice.
Is there a way to export TikTok comments?
Not from inside the app. TikTok gives you no export button for the comments on your own videos, and TikTok Studio does not have one either. The practical routes are a browser extension, an Apify actor at about $5 per 1,000 results, or an API call that returns JSON you can write straight to CSV. Our export guide walks through all three.
Is TikTok's API free?
The Research API charges nothing per request, but you must be employed by a non-profit academic institution in the US or Europe and have an approved research proposal. If you are building a product rather than publishing a paper, you will not qualify. Commercial options are all paid: Apify's comments actor is $0.005 per result, Bright Data starts at $1.50 per 1,000 records, and TokConnect gives you 100 free credits at one credit per tool call.