# YouTube Comments Scraper & Pain Point Analyzer (`lsso/youtube-comments-pain-points`) Actor

Scrape YouTube comments and replies by video URL or keyword, and find what people complain about. Every comment labelled complaint, request, question or praise, plus top pain points and feature requests in an HTML report. No API key. $0.50 per 1,000 comments.

- **URL**: https://apify.com/lsso/youtube-comments-pain-points.md
- **Developed by:** [Haidong Nan](https://apify.com/lsso) (community)
- **Categories:** Videos, Social media, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 comments

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Scraper & Pain Point Analyzer

**Get every comment, and find out what people actually complain about.** Paste video links or just type a keyword like `iphone 17 problems` or `notion review`. The Actor reads the comments (with replies, likes, pinned and creator-hearted flags), labels each one as a **complaint, request, question or praise**, and builds an insights report with the **top pain points**, **what people ask for** and the **most-liked complaints and questions**.

- ✅ **Comments + replies** with likes, reply count, verified badge, pinned, ❤️ by creator, approximate date
- ✅ **Keyword search**: no links needed. Research a product, a competitor or a niche across the top videos in one run
- ✅ **Every comment labelled**: complaint, request, question, praise, other (English, Chinese, Spanish, Portuguese)
- ✅ **Pain points and requests**: recurring phrases in complaints and requests, weighted by likes, with example comments. Topic words (the product name, the video title) are filtered out automatically
- ✅ **Top / Newest sort** and **last N days** filter: cheap daily monitoring of new comments
- ✅ **HTML insights report + clean JSON / CSV / Excel**
- ✅ **No API key, no login, no quota**. $0.50 per 1,000 comments

### 🎯 Who is it for?

- **Product managers and founders**: what users hate and wish for, straight from review videos about your product or your competitors.
- **YouTubers and content teams**: the questions your audience keeps asking = your next videos.
- **Marketers and agencies**: real customer language for ads, landing pages and FAQs.
- **Researchers and analysts**: labelled comment datasets for sentiment and topic studies.

### 🚀 Quick start

1. Paste one or more **video URLs**, or type **search keywords** (e.g. `iphone 17 problems`).
2. Keep **Pain point analysis** on.
3. Click **Start**. Open the **REPORT** in the Storage tab for the insights, or download all comments as JSON, CSV or Excel.

### ⬇️ Input examples

What people complain about in iPhone 17 review videos:

```json
{ "searchQueries": ["iphone 17 review problems"], "videosPerSearch": 5, "maxCommentsPerVideo": 300 }
```

Every comment and reply on one video:

```json
{ "videoUrls": ["https://www.youtube.com/watch?v=MFgpi8IvMB8"], "maxCommentsPerVideo": 5000, "includeReplies": true, "maxRepliesPerComment": 50 }
```

Daily monitoring of new comments on your videos (schedule it):

```json
{ "videoUrls": ["https://youtu.be/VIDEO_ID_1", "https://youtu.be/VIDEO_ID_2"], "sort": "newest", "onlyNewerThanDays": 1 }
```

### ⬆️ Output

One row per comment (replies are their own rows with `parentId`):

```json
{
  "videoId": "MFgpi8IvMB8",
  "videoTitle": "iPhone 17 - Long Term, REAL WORLD Review!",
  "channel": "Arran Brown",
  "commentId": "UgzXvO...",
  "text": "Saw a lot of threads in reddit regarding the battery drain issues and heating 😐",
  "label": "complaint",
  "likes": 2,
  "replyCount": 1,
  "authorIsVerified": false,
  "authorIsChannelOwner": false,
  "isPinned": false,
  "isHeartedByCreator": false,
  "publishedTimeText": "3 months ago",
  "publishedAt": "2026-06-24T10:00:00.000Z",
  "parentId": null,
  "videoUrl": "https://www.youtube.com/watch?v=MFgpi8IvMB8&lc=UgzXvO..."
}
```

The key-value store has **OUTPUT** (the insights as JSON) and **REPORT** (HTML):

```json
{
  "comments": 452,
  "mix": { "complaint": { "count": 17, "share": 0.038 }, "question": { "count": 37, "share": 0.082 }, "praise": { "count": 47, "share": 0.104 } },
  "painPoints": [
    { "theme": "battery drain", "comments": 3, "totalLikes": 2, "examples": [{ "text": "Saw a lot of threads in reddit regarding the battery drain issues and heating 😐", "likes": 2 }] },
    { "theme": "heating", "comments": 3, "totalLikes": 3 }
  ],
  "featureRequests": [],
  "topComplaints": [],
  "topQuestions": []
}
```

`publishedAt` is approximate: YouTube only shows "3 months ago".

### 💵 Pricing

| Event | Price |
|---|---|
| Comment or reply returned | **$0.0005** ($0.50 per 1,000) |
| Insights report (labels, pain points, requests), once per run with 20+ comments | **$0.10** |

**Example:** 1,000 comments from 5 review videos + the insights report = **$0.60**. Turn the analysis off and you pay for comments only.

### 🤖 Use it from AI agents (MCP)

Add this URL as an MCP server in Claude, Cursor or any MCP client and ask *"What do people complain about in Notion review videos?"*:

```
https://mcp.apify.com?tools=lsso/youtube-comments-pain-points
```

### ❓ FAQ

**Do I need a YouTube API key?** No. The Actor reads comments the way the YouTube website does. No key, no quota, no login.

**How is a comment labelled?** Multilingual keyword rules with negation handling ("no issues at all" is praise, not a complaint). They are fast, free and consistent. A comment needs a clear negative signal to count as a complaint.

**What if comments are turned off?** The video is listed in OUTPUT with status `COMMENTS_DISABLED` and nothing is charged for it.

**Can I get all comments of a huge video?** Yes, up to 20,000 top-level comments per video, plus replies. Large runs take a few minutes.

**Is it legal? What about privacy?** The Actor reads only public comments that anyone can see without logging in, and it does **not** output usernames or channel IDs of commenters. Use the results for research and analysis, not to contact or track individual people, and respect YouTube's Terms of Service and privacy laws such as GDPR.

### 📝 Changelog

- **1.2** (2026-09-25): Commenter usernames and channel IDs are no longer included in the output (privacy); the proxy is now opt-in only, so you never pay for proxy traffic you did not ask for; if YouTube rate-limits the run, it stops cleanly and you are charged only for comments delivered; the insights report is created only when there are at least 20 comments.

- **1.1** (2026-09-24): "Newest first" sorting works again after a YouTube layout change (daily monitoring with *last N days* returns the new comments); replies stop at your max-cost limit; large runs analyse the 5,000 most-liked comments to stay within memory; "no proxy" really means no proxy; videos with comments turned off no longer fail the run.

- **1.0** (2026-09-24): First release: comments and replies, keyword search, Top / Newest, last-N-days filter, complaint / request / question / praise labels, pain point and request themes, HTML insights report.

# Actor input Schema

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

YouTube videos or Shorts: full URLs, youtu.be links or 11-character video IDs.

## `searchQueries` (type: `array`):

Optional. Find videos by keyword and read their comments, e.g. `notion review`, `iphone 17 problems`. Great for product and competitor research.

## `videosPerSearch` (type: `integer`):

How many top search results to read for each keyword.

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

Top-level comments to read per video. Replies (if enabled) come on top.

## `sort` (type: `string`):

Same as the sort button under a YouTube video.

## `includeReplies` (type: `boolean`):

Also read replies to each comment. Replies are returned as their own rows with parentId.

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

Only used when replies are included.

## `onlyNewerThanDays` (type: `integer`):

0 = no limit. With 'Newest first' the Actor stops as soon as it reaches older comments, which is fast and cheap for daily monitoring.

## `analysis` (type: `boolean`):

Label every comment (complaint, request, question, praise) and build the insights report: top pain points, what people ask for, most-liked complaints and questions.

## `proxyConfiguration` (type: `object`):

Optional. By default the Actor connects directly and uses no proxy. Turn on a proxy here only if your runs get rate-limited by YouTube; proxy traffic is billed to your Apify account.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.youtube.com/watch?v=MFgpi8IvMB8"
  ],
  "searchQueries": [],
  "videosPerSearch": 5,
  "maxCommentsPerVideo": 200,
  "sort": "top",
  "includeReplies": false,
  "maxRepliesPerComment": 10,
  "onlyNewerThanDays": 0,
  "analysis": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "videoUrls": [
        "https://www.youtube.com/watch?v=MFgpi8IvMB8"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lsso/youtube-comments-pain-points").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 = { "videoUrls": ["https://www.youtube.com/watch?v=MFgpi8IvMB8"] }

# Run the Actor and wait for it to finish
run = client.actor("lsso/youtube-comments-pain-points").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 '{
  "videoUrls": [
    "https://www.youtube.com/watch?v=MFgpi8IvMB8"
  ]
}' |
apify call lsso/youtube-comments-pain-points --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lsso/youtube-comments-pain-points"
        }
    }
}
```

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/YVbAbU3V7cFndUGeo/builds/tQEakFRU6OZLEzSfq/openapi.json
