# YouTube Comments Analyzer (AI) (`signalsift/youtube-comments-analyzer`) Actor

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

- **URL**: https://apify.com/signalsift/youtube-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

## YouTube Comments Analyzer (AI)

Turn the comments under your YouTube videos and Shorts into a report you 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, the videos they want you to make next, the moments in the video they talk about most, who wants to buy the gear you show, what they complain about, what needs your attention right now, and reply drafts for the most liked questions and complaints. 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/youtube-comments-analyzer-report.png?signature=RozF3Hf2HoPJMwnCfs1W)](https://api.apify.com/v2/key-value-stores/sPoeiS9NLJKW813gE/records/youtube-comments-analyzer-report.html?signature=1PGuowC3Zztt2F4DxwQwI)

[Open the full sample report](https://api.apify.com/v2/key-value-stores/sPoeiS9NLJKW813gE/records/youtube-comments-analyzer-report.html?signature=1PGuowC3Zztt2F4DxwQwI): 40 fictional comments on two videos of a demo home-studio channel in four languages, with the FAQ, video ideas, buying intent, themes, the most discussed moments, comment age, 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, safety hazards, legal threats and scams, with the reason and a link to each comment |
| ❓ **Top questions as a ready FAQ** | The questions viewers ask most ("Which microphone is used?"), merged across languages, with counts, likes and quotes |
| 💡 **Video ideas** | What viewers ask you to make next, named as a video idea ("A video on acoustic treatment") |
| ⏱️ **Most discussed moments** | Timestamps viewers mention ("the drop at 2:31"), grouped and ranked by likes, each linked to that second of the video. Viewers' chapter lists are left out |
| 🛒 **Buying intent** | Comments that ask where to buy the gear or products you show, ask for the price or a link, or say they bought it |
| 👍👎 **Praise and complaint themes** | Top themes with counts, likes, share of comments and up to 3 verbatim quotes each, such as "Sponsor segment too long" |
| 🧹 **Spam share** | How much of the thread is spam ("check my channel", crypto, fake giveaways); spam is left out of the mood and themes |
| ✍️ **Reply drafts** | Short, friendly drafts in the viewer's language for the most liked questions and complaints you haven't answered, with placeholders like \[link] or \[timestamp] instead of invented facts |
| 🕒 **When people commented** | Comments by age (last 24 hours, days, weeks, months, years) with the share of negative comments in each band |
| 📊 **Video comparison** | Side-by-side table when you analyze several videos, for example your latest upload against your usual ones, 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 links to YouTube videos or Shorts (Share → Copy link), or just the video IDs, and click Start. We scrape their comments with [YouTube Comments Scraper](https://apify.com/streamers/youtube-comments-scraper) on your account first, then analyze them. Top comments come first; choose **Newest first** to see what people say right now.
2. **With a dataset you already have:** put the dataset ID from a [YouTube Comments Scraper](https://apify.com/streamers/youtube-comments-scraper) or [YouTube Comments Scraper API](https://apify.com/apidojo/youtube-comments-scraper) run in **Dataset ID**.
3. **Automatically after every scrape:** open the scraper (or its saved task), go to **Integrations**, add **YouTube Comments Analyzer (AI)**. The scraper's dataset is passed in automatically, so each scheduled scrape produces a fresh report.

Your own comments as the channel owner are left out of the numbers, the drafts and the charges, and questions you already answered get no draft. YouTube Comments Scraper marks them for us. Datasets from apidojo's scraper don't, so with those, add **Your channel handle** (such as `@yourchannel`).

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, such as "🔥🔥"; they still count in the totals), your own comments as the channel owner, comments we could not analyze, and runs that find no comments. The most discussed moments are found by code and are free. 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 500 comments, about 400 of them with words: $0.32 + $0.05 report + up to $0.25 for reply drafts = **up to $0.62** ($0.47 on Free, where a run drafts up to 10 replies).
- 1,000 analyzed comments: $0.80 + $0.05 = **$0.85**, plus up to $0.25 for reply drafts.
- A channel analyzing 8 videos a month with 1,000 comments each, about 800 of them with words: $5.12 + $0.40 for 8 reports = **about $5.52** a month, plus up to $2 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. 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, YouTube Comments Scraper charges for the scrape on your account: $2.00 per 1,000 comments on the Free plan, $1.50 on Starter, $1.20 on Scale and $0.90 on Business. **Max comments per video** counts replies too, so it caps the scrape. Apify's free $5 monthly credit covers about 5,800 analyzed comments a month from datasets you already have (reply drafts off), or about 1,700 when we scrape them for you.

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

**Dates are approximate.** YouTube shows only how long ago a comment was posted ("2 weeks ago"), so dates are worked out from that at the time of the scrape, also for a dataset you analyze days later. **Comments since** filters on these approximate dates, and the report groups comments into age bands instead of a day-by-day chart.

### Output

**JSON summary** (the `OUTPUT` record), shortened, from the free demo run on 40 fictional comments on two videos of a home-studio channel:

```json
{
  "coverage": { "comments": 38, "analyzed": 32, "reactions": 6, "own": 2, "spam": 2, "skipped": 0 },
  "overall": {
    "mood": { "positive": 0.59, "neutral": 0.21, "negative": 0.16, "mixed": 0.03 },
    "spamShare": 0.06,
    "questions": [
      { "name": "Which mic is used?", "count": 3, "likes": 498, "quote": "Which mic is that at 2:31?" },
      { "name": "Where to buy the mic arm?", "count": 2, "likes": 83, "quote": "Where is the mic arm from?" }
    ],
    "requests": [{ "name": "A video on acoustic treatment", "count": 1, "likes": 210, "quote": "Please do a video on acoustic treatment for small rooms" }],
    "topComplaints": [{ "name": "Sponsor segment too long", "count": 2, "likes": 2035, "quote": "The sponsor segment was longer than the actual setup tour" }],
    "buyingIntent": { "count": 3, "share": 0.1 },
    "urgentCount": 3
  },
  "replies": [{ "commentId": "demo-07", "draft": "Good question! The mic arm is the [arm model] and more details are in the description: [link]. Hope it helps with the sagging!" }],
  "moments": [
    { "videoId": "DEMOvideo01", "time": "2:31", "second": 151, "mentions": 3, "likes": 548, "quote": "Which mic is that at 2:31? It sounds so clean" },
    { "videoId": "DEMOvideo01", "time": "7:40", "second": 460, "mentions": 2, "likes": 505, "quote": "Careful at 7:40: daisy-chaining power strips like that is a real fire hazard" }
  ],
  "commentAge": [
    { "band": "Last 24 hours", "count": 4, "negativeShare": 0 },
    { "band": "1–7 days ago", "count": 18, "negativeShare": 0.07 },
    { "band": "1–4 weeks ago", "count": 16, "negativeShare": 0.25 }
  ],
  "datesApproximate": true
}
```

**Dataset**, one row per comment: video, comment link, reply or not, likes, creator heart, how long ago it was posted and the approximate date, text (with tagged handles replaced by `@user`), the timestamps it mentions (in seconds), whether it is the channel owner's or the owner answered it, analysis status (`analyzed`, `reaction`, `own_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 YouTube comments about tech, gear, cooking, fitness, music and gaming in 6 languages, including Hinglish (2026-10-18):

| Check | Result |
|---|---|
| Overall sentiment matches the label | 100% |
| Topics found (F1) | 0.91 |
| Intents found (F1): question, request, praise, complaint, buying intent, spam | 0.92 |
| Questions found | 94% |
| Spam found | 100% |
| Comments that need attention caught | 100%, with 1 false alarm 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 moment is computed by code from those labels and the comment text, so the numbers add up.

**What it does not do:** it does not watch the video or read its captions or description, and it sees only the comments YouTube shows publicly, not those held for review or hidden. It does not detect bought views or likes, it cannot tell exact posting dates, 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://youtu.be/..."] }` 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, video ideas, praise and complaints with one quote each, buying intent, the most discussed moments with links, comment age, reply drafts and a link to the HTML report.
- **Never charged:** no comments found, reactions, the channel owner's 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, Hinglish included. 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. Any public video works, not only your own.

**Does it collect usernames?** No. Author names, channel IDs and avatars are dropped before anything else happens, and tagged @handles inside comments are replaced by `@user`. If you fill in **Your channel handle**, it is only matched against the comments and never saved in the results.

**Does it work with Shorts?** Yes. Paste the Shorts link (youtube.com/shorts/...) like any other video link.

**What counts as a reaction?** A comment with no words or numbers: only emoji, punctuation, links or @tags, such as "🔥🔥" or "❤️". Reactions are counted and never charged.

**How are the most discussed moments found?** By code, not by the AI: we read timestamps such as "2:31" or "1:02:03" in the comments, ignore times of day ("10:30 pm") and ratios ("16:9"), group mentions within 5 seconds of each other, and keep moments at least two viewers mention. A comment that lists 4 or more timestamps is a chapter list and is left out, so it doesn't add a mention to every moment.

**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 and Shorts URLs, datasets from two YouTube comment scrapers, and integrations; audience mood weighted by likes; comments that need attention now; top questions as a ready FAQ; video ideas; most discussed moments linked to the video; buying intent; praise and complaint themes with verified quotes; spam share; reply drafts with placeholders; comment age bands; video comparison; the channel owner's 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`):

YouTube video or Shorts links (Share → Copy link), or video IDs. We scrape their comments with YouTube 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.

## `sortCommentsBy` (type: `string`):

Top comments carry the most likes; newest shows what people say right now. A date in 'Comments since' always scrapes newest first.

## `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. YouTube shows only '2 weeks ago', so the cut-off is approximate.

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

Write a short, friendly reply draft for the most liked questions and complaints you have 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 YouTube Comments Scraper (streamers/youtube-comments-scraper) or YouTube Comments Scraper API (apidojo/youtube-comments-scraper). When this Actor runs as an integration after the scraper, the dataset is passed automatically.

## `yourChannel` (type: `string`):

YouTube Comments Scraper marks the channel owner's comments, and they are left out automatically. Datasets from apidojo's scraper don't, so give your handle (such as @yourchannel) to leave your own comments out. Used only for matching; never saved in the results.

## Actor input object example

```json
{
  "videoUrls": [],
  "maxCommentsPerVideo": 500,
  "sortCommentsBy": "top",
  "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, video ideas, buying intent, complaint and praise themes with linked quotes, most discussed moments, comment age, video comparison and reply drafts.

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

Short JSON summary for AI agents and code: coverage, mood by likes, spam share, top questions, video ideas, praise and complaints with one quote each, buying intent, most discussed moments, comment age and reply drafts.

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

One row per comment: video, likes, approximate date, text with tagged handles removed, timestamps it mentions, 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/youtube-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/youtube-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/youtube-comments-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,signalsift/youtube-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/pJU637tq0koC43BJ8/builds/UDeiwOp5Y5M0FXNjk/openapi.json
