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.

The Display API is not an alternative

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

OptionWhat it gives youPrice
Apify comments scraperComment 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
EnsembleDataPost comments in bulk, including replies, alongside profile, hashtag and music endpointsPaid plans, 7-day free trial without a card
Bright DataA dedicated comments scraper in a set of 13 TikTok datasets, with comment text, dates and reply countsFrom $1.50 per 1,000 records, 5,000 free credits a month
davidteather/TikTok-ApiComments via a Python library you run yourselfFree 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/… and vt.tiktok.com/… redirect. Follow the redirect and read the id off the final URL.
  • From search. search_videos returns each result's id, 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]}')
Using mcp 2.x?

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.

Try this in Claude, ChatGPT or Cursor with TokConnect connected

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.

Sources and data