# TikTok Comments Analyzer (AI) (`signalsift/tiktok-comments-analyzer`) Actor

Turn TikTok comments into a creator-ready report: audience mood weighted by likes, top questions as a ready FAQ, unanswered questions, buying intent, complaints, spam share and reply drafts. Use a TikTok Comments Scraper dataset or video URLs. $0.80 per 1,000 comments, $0.05 per report. Free demo.

- **URL**: https://apify.com/signalsift/tiktok-comments-analyzer.md
- **Developed by:** [SignalSift](https://apify.com/signalsift) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 analyzed comments

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## TikTok Comments Analyzer (AI)

Turn the comments under TikTok videos into a report a creator, brand or TikTok Shop seller can act on: how viewers feel (weighted by likes, so the comments people agree with count more), the questions they keep asking as a ready FAQ, which questions the creator has not answered yet, what viewers want next, who wants to buy, what they complain about, what needs attention right now, and reply drafts that fit TikTok's 150 characters. Every quote is copied word for word from a real comment.

**No setup and no AI account needed.** Run it with no input to get a free demo report on sample comments.

[![Sample report: audience mood by likes, comments that need attention and the ready FAQ](https://api.apify.com/v2/key-value-stores/sPoeiS9NLJKW813gE/records/tiktok-comments-analyzer-report.png?signature=1ubHB1nfIN6SNpIuTq1c7)](https://api.apify.com/v2/key-value-stores/sPoeiS9NLJKW813gE/records/tiktok-comments-analyzer-report.html?signature=SHSvf94V1JAaTeZFQW4)

[Open the full sample report](https://api.apify.com/v2/key-value-stores/sPoeiS9NLJKW813gE/records/tiktok-comments-analyzer-report.html?signature=SHSvf94V1JAaTeZFQW4): 40 fictional comments on two videos of a demo cooking creator in four languages, with the FAQ, requests, buying intent, themes, creator engagement, a daily trend, a video comparison and reply drafts.

### What you get

| | |
|---|---|
| 💬 **Audience mood by likes** | Positive, neutral, mixed and negative shares, weighted by likes: one complaint with 2,000 likes counts for more than ten with none |
| 🚨 **Needs attention now** | Harassment, threats, self-harm, product safety, legal threats and scams, with the reason and a link to the video |
| ❓ **Top questions as a ready FAQ** | The questions viewers ask most, merged across languages, with counts, likes and quotes |
| ⏳ **Unanswered questions** | Which questions the creator liked, pinned or replied to, and the most liked ones still waiting |
| 💡 **Requests and content ideas** | "Part 2?", "do this with chicken", "restock the big jar": what viewers ask for next |
| 🛒 **Buying intent** | Comments that ask for the link or price, say they added to cart or ordered on TikTok Shop |
| 👍👎 **Praise and complaint themes** | Top themes with counts, likes, share of comments and up to 3 verbatim quotes each |
| 🧹 **Spam share** | How much of the thread is "follow for follow", "check my bio" and crypto offers; spam is left out of the mood and themes |
| ✍️ **Reply drafts** | Short, friendly drafts in the commenter's language for the most liked questions and complaints the creator hasn't answered, within TikTok's 150 characters, with placeholders like \[price] or \[link] instead of invented facts |
| 📈 **Comments by day** | Comment volume and the share of negative comments per day (per week for long threads) |
| 📊 **Video comparison** | Side-by-side table when you analyze several videos, for example a launch against your usual videos, or yours against a competitor's |
| 📄 **Three outputs** | An HTML report, a short JSON summary for code and AI agents, and one dataset row per comment |

### How to use it

1. **With video URLs:** paste TikTok video links (open the video, choose Share → Copy link; short vm.tiktok.com links work too) and click Start. We scrape their comments with [TikTok Comments Scraper](https://apify.com/clockworks/tiktok-comments-scraper) on your account first, then analyze them.
2. **With a dataset you already have:** put the dataset ID from a [TikTok Comments Scraper](https://apify.com/clockworks/tiktok-comments-scraper) run in **Dataset ID**.
3. **Automatically after every scrape:** open the scraper (or its saved task), go to **Integrations**, add **TikTok Comments Analyzer (AI)**. The scraper's dataset is passed in automatically, so each scheduled scrape produces a fresh report.

The video's creator is recognised from the video link: their own comments and replies are left out of the numbers, the drafts and the charges, and questions they already replied to get no draft. If you also comment from another account, add it under **Your other TikTok accounts**.

Then open the **Report** tab of the run for the HTML report, or the **Summary** tab for JSON.

### How much does it cost

You pay per result. Running the Actor itself costs you nothing extra: no compute or proxy charges.

| Event | Free & Starter | Scale | Business and up |
|---|---|---|---|
| Analyzed comments (per 1,000) | $0.80 | $0.65 | $0.50 |
| Report (per run) | $0.05 | $0.05 | $0.05 |
| Reply draft (each) | $0.01 | $0.01 | $0.01 |

**Never charged:** the demo run, reactions (comments made only of emoji, stickers, images or @tags; they still count in the totals and the daily trend), the creator's own comments, comments we could not analyze, and runs that find no comments. Spam is analyzed and charged, so you can see how much of it there is.

**Examples on the Free and Starter plans:**

- One video with 1,000 comments, about 700 of them with words: $0.56 + $0.05 report + up to $0.25 of reply drafts = **up to $0.86**.
- An agency reporting on 20 videos a month with 500 comments each, about 350 with words: $5.60 + $1.00 for 20 reports = **about $6.60** a month, plus up to $5 for reply drafts ($0.25 per video).

**Reply drafts are on by default.** Each run drafts replies to up to 25 unanswered questions and complaints (10 on the Free plan) at $0.01 each: up to **+$0.25** per run on paid plans and up to **+$0.10** on Free. Drafts are written to fit TikTok's 150 characters. To skip that cost, turn off **Draft replies** (`draftReplies: false`) or lower **Max reply drafts** (`maxReplyDrafts`).

**Scraping is billed separately.** If you give video URLs, TikTok Comments Scraper charges for the scrape on your account: $1.25 per 1,000 comments on the Free plan, down to $0.50 on Business. Deleted or private videos still cost one result each there. Replies (`maxRepliesPerComment`, 0 by default) count toward the comments per video.

Free-plan runs analyze up to 1,000 comments and draft up to 10 replies each. Your run's spending limit is always respected, for the scrape too: if it is lower than the full job, we analyze what fits and tell you in the status message.

### Output

**JSON summary** (the `OUTPUT` record), shortened, from the free demo run on 40 fictional comments on two videos of a cooking creator who sells a spice blend:

```json
{
  "coverage": { "comments": 38, "analyzed": 30, "reactions": 8, "own": 2, "spam": 2, "skipped": 0 },
  "overall": {
    "mood": { "positive": 0.53, "neutral": 0.21, "negative": 0.26, "mixed": 0 },
    "spamShare": 0.07,
    "questions": [
      { "name": "Are the noodles gluten free?", "count": 3, "likes": 271, "quote": "Are these noodles gluten free?" },
      { "name": "How spicy is the dish?", "count": 2, "likes": 107, "quote": "How spicy is this actually?" }
    ],
    "requests": [{ "name": "Part 2 with tofu", "count": 1, "likes": 230, "quote": "part 2 with tofu please!!" }],
    "topComplaints": [{ "name": "Delivery takes forever", "count": 3, "likes": 227, "quote": "Ordered 3 weeks ago and still no tracking update" }],
    "buyingIntent": { "count": 4, "share": 0.14 },
    "urgentCount": 2
  },
  "replies": [{ "commentId": "demo-03", "draft": "Thanks for asking! Our ingredient details are on the product page, [link]. Please check the label or DM us for celiac-safe confirmation." }],
  "creator": {
    "liked": 4, "pinned": 1, "replied": 1, "questions": 7, "questionsEngaged": 3,
    "unansweredQuestions": [{ "commentId": "demo-09", "text": "Where's the full recipe? The video goes so fast", "likes": 77, "url": null }]
  }
}
```

**Dataset**, one row per comment: video, reply or not, likes, date, text (with tagged people replaced by `@user`), whether the creator liked, pinned or replied to it, whether the creator wrote it, analysis status (`analyzed`, `reaction`, `creator_comment` or `skipped`), sentiment and score, topics, intents, phrases with verified excerpts, urgent flag and reason. Export it to Excel, CSV or JSON from the Storage tab.

### How accurate is it

On a hand-labeled test set of 60 TikTok comments about food, beauty, fashion, tech and comedy in 6 languages, with slang, "😭" as laughter, "part 2?" and one-word comments (2026-10-18):

| Check | Result |
|---|---|
| Overall sentiment matches the label | 98.3% |
| Topics found (F1) | 0.91 |
| Intents found (F1): question, request, praise, complaint, buying intent, spam | 0.97 |
| Questions found | 93% |
| Spam found | 100%, no false alarms |
| Comments that need attention caught | 100%, no false alarms in 60 comments |
| Quotes that are word for word from the comment | 100% (enforced by code: anything else is dropped) |

The AI only labels comments. Every count, share, ranking and trend is computed by code from those labels, so the numbers add up.

**What it does not do:** it does not watch the video or read its caption. TikTok has no links to single comments, so quotes link to the video. It analyzes the replies TikTok Comments Scraper returns, which may not be all of them. It does not detect bought followers or likes, and it never posts anything: reply drafts are for you to edit and post. AI labels can be wrong on sarcasm, slang or one-word comments, which is why every theme shows its quotes.

### For AI agents and automations

- **Free demo:** call it with `{}` to get a full sample report and JSON summary at no cost.
- **Minimal input:** `{ "videoUrls": ["https://www.tiktok.com/@creator/video/..."] }` or `{ "datasetId": "<dataset id>" }`.
- **Read the result:** the `OUTPUT` record is a short JSON summary designed to fit in one tool call (under 20,000 characters; with many videos, per-video detail is shortened first, and with many reply drafts only the first ones are kept): coverage, mood by likes, spam share, top questions, requests, praise and complaints with one quote each, buying intent, the daily trend, reply drafts, the creator's likes, pins and unanswered questions, and a link to the HTML report.
- **Never charged:** no comments found, reactions, the creator's own comments, and comments that could not be analyzed. The status message says why.
- Works through [Apify's MCP server](https://mcp.apify.com), the Apify API and SDKs, and Make, Zapier or n8n.

### FAQ

**Which languages does it support?** Comments in any language. Theme names are in the language you choose (`reportLanguage`, default English) and report headings are in English. Questions asked in several languages are merged into one FAQ entry. Quotes stay in each comment's own language.

**Can I analyze several videos, or a competitor's videos?** Yes. Give several video URLs (or a dataset with several videos) and the report adds a video comparison table, with a summary per video in the JSON. Each video's creator is recognised from its link, so on a competitor's video their own replies are left out too.

**Does it collect usernames?** No. Usernames, user IDs, avatars and the names of tagged people are removed from the data before anything else happens, and tagged people inside comments are replaced by `@user`, also when TikTok shows them by display name without "@". The creator is matched only from the video link, and accounts you add under **Your other TikTok accounts** are only matched, never saved in the results.

**What counts as a reaction?** A comment with no words: only emoji, a sticker, an image, punctuation or @tags, such as "😍😍" or "@user". Reactions are counted, shown in the daily trend, and never charged.

**How does it know what the creator answered?** TikTok marks comments the creator liked or pinned, and the creator's own replies sit under the comment they answer. Scrape replies (`maxRepliesPerComment` above 0) to see which questions the creator replied to; likes and pins come with every comment.

**Where is comment text processed?** By the Anthropic API (Claude). SignalSift keeps nothing after the run; your results stay in your Apify storage.

**Is it legal?** It analyzes publicly available comments. You are responsible for how you use the results and for complying with the laws that apply to you, including GDPR when you handle personal data.

**Something is wrong or missing?** Open an issue on the Issues tab. We read every one.

### Changelog

- **0.1 (2026-10-18):** First release. Video URLs (short links too), datasets and integrations; audience mood weighted by likes; comments that need attention now; top questions as a ready FAQ; creator engagement with liked, pinned and unanswered questions; requests and content ideas; buying intent; praise and complaint themes with verified quotes; spam share; reply drafts within 150 characters; daily trend; video comparison; the creator's own comments left out; HTML report and JSON summary; free demo.

***

SignalSift is not affiliated with or endorsed by Google, Amazon, TikTok, Meta or YouTube. Their logos only show which platform each Actor works with.

# Actor input Schema

## `videoUrls` (type: `array`):

TikTok video links (Share → Copy link). Short vm.tiktok.com links work too. We scrape their comments with TikTok Comments Scraper on your account first (billed by that Actor), then analyze them. Leave empty if you give a dataset ID instead.

## `maxCommentsPerVideo` (type: `integer`):

Comments to scrape per video, replies included. 1 to 20,000.

## `maxRepliesPerComment` (type: `integer`):

Replies to scrape under each comment. They count toward the per-video limit, and TikTok may return fewer. 0 to 50.

## `yourUsername` (type: `string`):

The video's creator is recognised from the video link, and their comments are left out of the audience numbers, reply drafts and charges. Add other accounts of yours here, separated by commas. Used only for matching; never saved in the results.

## `maxComments` (type: `integer`):

Total cap for this run. Your spending limit can lower it further.

## `commentsSince` (type: `string`):

Analyze only comments posted since this date, for example 2026-01-01. The scraper still scrapes (and bills) the comments per video.

## `draftReplies` (type: `boolean`):

Write a short, friendly reply draft (within TikTok's 150 characters) for the most liked questions and complaints the creator has not answered yet.

## `maxReplyDrafts` (type: `integer`):

Most liked unanswered questions and complaints to draft replies for. 0 to 100.

## `reportLanguage` (type: `string`):

Language for theme names, as a code such as en, de or es. Report headings are in English; quotes stay in each comment's own language.

## `datasetId` (type: `string`):

ID of a dataset produced by TikTok Comments Scraper (clockworks/tiktok-comments-scraper). When this Actor runs as an integration after that scraper, the dataset is passed automatically.

## Actor input object example

```json
{
  "videoUrls": [],
  "maxCommentsPerVideo": 500,
  "maxRepliesPerComment": 0,
  "maxComments": 5000,
  "draftReplies": true,
  "maxReplyDrafts": 25,
  "reportLanguage": "en"
}
```

# Actor output Schema

## `report` (type: `string`):

Creator-ready report: audience mood weighted by likes, comments that need attention, top questions as a ready FAQ, requests, buying intent, complaint and praise themes with quotes, creator engagement (liked, pinned and unanswered questions), a daily trend, video comparison and reply drafts.

## `summary` (type: `string`):

Short JSON summary for AI agents and code: coverage, mood by likes, spam share, top questions, requests, praise and complaints with one quote each, buying intent, timeline, reply drafts and the creator's likes, pins and unanswered questions.

## `comments` (type: `string`):

One row per comment: video, likes, date, text with tagged people removed, liked or pinned by the creator, sentiment, topics, intents, phrases with verified excerpts, urgent flag.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("signalsift/tiktok-comments-analyzer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("signalsift/tiktok-comments-analyzer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call signalsift/tiktok-comments-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,signalsift/tiktok-comments-analyzer"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/TegKV4Ituzj4Ef53D/builds/QmAlGGnBCMRUopcgd/openapi.json
