Answers

How do I mine competitors' product reviews to find what buyers complain about?

Short answer

Pick 10 to 20 competing products, pull a few hundred of their buyer reviews, separate the low stars from the five stars and let an LLM group the complaints by theme and count them. On TikTok Shop, 2,400 reviews across 15 products cost $0.244; adding 20 Xiaohongshu shop products costs $0.80 more.

A founder is designing a better pet water fountain. The bestsellers average well over four stars, so the ratings say little. The useful question is what the one- to three-star reviews have in common: leaks, pump noise, a filter that is hard to clean? Those complaints become the spec for the next version, and the words buyers use in five-star reviews become the listing copy. A few thousand reviews, sorted by an LLM, answer it in an evening.

Collect the reviews

  1. Pick the products. TikTok Shop product search returns 20 products per call with their review counts. Keep the 15 with the most reviews.
  2. Pull reviews. TikTok Shop product reviews gives 20 reviews a page: stars, text, the variant bought, photos and whether the purchase is verified. Eight pages give about 160 per product.
  3. Add China if it matters. Xiaohongshu shop product reviews serves only the first page, about 12 reviews. Ask once by relevance and once by latest, and cover more products instead of going deeper.
Job Calls Cost
Find 15 TikTok Shop products 1 $0.004
8 review pages for each, about 2,400 reviews 120 $0.24
20 Xiaohongshu shop products, two sort orders 40 $0.80
Any 1,000 TikTok Shop reviews 50 $0.10

The LLM is billed separately by your model provider. Ask only for rating,text,variant with fields and the prompt shrinks by half.

Code

import os, requests

API = "https://api.okdata.online"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

def call(path, **params):
    body = requests.get(API + path, headers=H, params=params, timeout=60).json()
    if body["code"] != "ok":
        raise RuntimeError(f"{body['code']}: {body['message']}")
    return body

found = call("/v1/tiktok/shop/products/search", query="pet water fountain")["data"]["items"]
top = sorted(found, key=lambda p: p["reviews"] or 0, reverse=True)[:15]

low, high = [], []
for p in top:
    cursor = None
    for _ in range(8):
        params = {"id": p["id"], "fields": "rating,text,variant"}
        if cursor:
            params["cursor"] = cursor
        body = call("/v1/tiktok/shop/products/reviews/list", **params)
        for r in body["data"]["items"]:
            (low if (r["rating"] or 5) <= 3 else high).append(f"[{p['id']}] {r['variant']}: {r['text']}")
        cursor = body["page"]["next_cursor"]
        if not cursor:
            break
# Prompt: "Group these low-star reviews into themes. For each: a name, how many reviews,
# which products and variants, two short quotes. Then list phrases buyers repeat in `high`."

Where review mining goes wrong

  • Five stars drown everything. Analyse low stars as their own set, and count each theme per product so one bad listing does not set the agenda.
  • Variants tell you where it breaks. A leak that only shows up in the large size points at the supplier before the design.
  • Not every review is equal. Weight verified purchases; free-product reviews tend to be kinder.
  • You see the shop's order. TikTok reviews have no sort parameter and Xiaohongshu gives one page, so treat the set as a sample.
  • Keep markets apart. US buyers in English and Xiaohongshu buyers in Chinese often complain about different things. Group them separately, then compare.
  • Public reviews only, with names masked by the shop. Quote themes and short phrases; keep whole reviews out of anything you publish.

Other ways

For physical products sold on Amazon, Amazon reviews are usually the deepest pool; this catalog does not cover them, and tools such as Helium 10 or Jungle Scout do. For a single product, reading 50 reviews yourself finds most of the themes. Complaints also live under videos and notes: TikTok video comments and using an LLM on Douyin and Xiaohongshu comments cover that side. The complete workflow is in product research and word of mouth.

Updated