Answers

How much does it cost to collect 1,000 comments from TikTok, YouTube or Douyin?

Short answer

On okdata, 1,000 TikTok comments cost $0.04, Douyin $0.10, Bilibili $0.10, YouTube $0.20 and Xiaohongshu $2.00. You pay per page of comments, not per comment, so the page size matters as much as the price: a TikTok page holds about 50 comments for $0.002, a Xiaohongshu page about 10 for $0.02.

A thousand comments is roughly what it takes to see patterns in how people talk about a product: the complaints that repeat, the questions nobody answers, the words buyers use. Collecting them costs $0.04 on TikTok and $2.00 on Xiaohongshu, with the other platforms in between or close to it.

Price per 1,000 comments

Each comment endpoint charges per call, and one call returns one page. Platforms put different numbers of comments on a page, which is why the cost per comment varies more than the call price suggests.

Platform Endpoint Per call Comments per call 1,000 comments
TikTok TikTok video comments $0.002 50 $0.04
Douyin Douyin video comments $0.002 20 $0.10
Bilibili Bilibili video comments $0.002 20 $0.10
YouTube YouTube video comments $0.004 20 $0.20
Xiaohongshu Xiaohongshu note comments $0.02 10 $2.00

A realistic Douyin job, one keyword search and then 250 comments from each of 20 videos (5,000 comments), comes to {{cost:douyin.videos.search1+douyin.videos.comments.list250}}.

Stop at exactly what you need

import os, requests
from decimal import Decimal

URL = "https://api.okdata.online/v1/douyin/videos/comments/list"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

def collect(video_id, target=1000):
    comments, cursor, spent = [], None, Decimal("0")
    while len(comments) < target:
        params = {"id": video_id, "sort": "hot", **({"cursor": cursor} if cursor else {})}
        body = requests.get(URL, headers=H, params=params, timeout=60).json()
        if body["code"] != "ok":
            raise RuntimeError(f"{body['code']}: {body['message']}")
        comments += body["data"]["items"]
        spent += Decimal(body["meta"]["billing"]["amount"])
        if not body["page"]["has_more"]:
            break
        cursor = body["page"]["next_cursor"]
    return comments[:target], spent

Things that change the bill

  • A video with 120 comments stops after a few pages and costs less than the table says.
  • These endpoints return top-level comments with a reply count; replies are not fetched separately.
  • Only public comments come back. A deleted video returns not_found, which is free.

Other routes

For YouTube alone, the official YouTube Data API is free within its default daily quota, and listing comments is a cheap read there; if you already have a Google Cloud project, start with it. Open-source crawlers such as MediaCrawler can collect Douyin, Bilibili and Xiaohongshu comments with your own logged-in account, at no cost per call but with your time and account at stake. For the analysis side, see word-of-mouth research; every price lives on the pricing page.

Updated