# Instagram Comments Analyzer (AI) (`signalsift/instagram-comments-analyzer`) Actor

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

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

## Instagram Comments Analyzer (AI)

Turn the comments under your Instagram posts and reels into a report you can act on: how your audience feels (weighted by likes, so the comments people agree with count more), the questions they keep asking as a ready FAQ, what they want you to make next, who wants to buy, 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/instagram-comments-analyzer-report.png?signature=4A55bawCaJpn4fOfu74F)](https://api.apify.com/v2/key-value-stores/sPoeiS9NLJKW813gE/records/instagram-comments-analyzer-report.html?signature=eDtZ1X1mvjhW2FNecUeZ)

[Open the full sample report](https://api.apify.com/v2/key-value-stores/sPoeiS9NLJKW813gE/records/instagram-comments-analyzer-report.html?signature=eDtZ1X1mvjhW2FNecUeZ): 40 fictional comments on two posts of a demo skincare brand in four languages, with the FAQ, requests, buying intent, themes, a daily trend, a post 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 each comment |
| ❓ **Top questions as a ready FAQ** | The questions your audience asks most, merged across languages, with counts, likes and quotes |
| 💡 **Requests and content ideas** | What people ask you to make, restock or show next |
| 🛒 **Buying intent** | Comments that want to buy, ask for the price or a link, or say they ordered |
| 👍👎 **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 spam; 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 you haven't answered, 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) |
| 📊 **Post comparison** | Side-by-side table when you analyze several posts, for example a launch against your usual posts, 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 post URLs:** paste links to Instagram posts or reels (open the post, choose Share → Copy link) and click Start. We scrape their comments with [Instagram Comments Scraper](https://apify.com/apify/instagram-comment-scraper) on your account first, then analyze them.
2. **With a dataset you already have:** put the dataset ID from an [Instagram Comments Scraper](https://apify.com/apify/instagram-comment-scraper) run in **Dataset ID**.
3. **Automatically after every scrape:** open the scraper (or its saved task), go to **Integrations**, add **Instagram Comments Analyzer (AI)**. The scraper's dataset is passed in automatically, so each scheduled scrape produces a fresh report.

Add **Your Instagram username** to leave your own comments out of the numbers, the drafts and the charges, and to skip drafts for questions you already answered.

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 or @tags, often a third to half of a thread; they still count in the totals and the daily trend), your 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 post with 500 comments, about 300 of them with words: $0.24 + $0.05 report = **$0.29**, plus up to $0.25 for reply drafts ($0.10 on Free).
- 1,000 analyzed comments: $0.80 + $0.05 = **$0.85**, plus up to $0.25 for reply drafts. Apify's free $5 monthly credit covers about **5,000 analyzed comments a month** with reply drafts off.
- An agency reporting on 20 posts a month with 300 analyzed comments each: about **$5.80** a month, plus up to $5 for reply drafts ($0.25 per post).

**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 post URLs, Instagram Comments Scraper charges for the scrape on your account: $2.60 per 1,000 comments on the Free plan, less on paid plans. On Apify's Free plan it returns only the 15 newest comments per post, without replies, so for real volumes use a paid plan or give us a dataset you already have.

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.

### Output

**JSON summary** (the `OUTPUT` record), shortened, from the free demo run on 40 fictional comments on two posts of a skincare brand:

```json
{
  "coverage": { "comments": 38, "analyzed": 30, "reactions": 8, "own": 2, "spam": 2, "skipped": 0 },
  "overall": {
    "mood": { "positive": 0.55, "neutral": 0.2, "negative": 0.25, "mixed": 0 },
    "spamShare": 0.07,
    "questions": [
      { "name": "Is it suitable for sensitive skin?", "count": 3, "likes": 132, "quote": "Does this work on sensitive skin?" },
      { "name": "What is the price?", "count": 2, "likes": 93, "quote": "How much is it?" }
    ],
    "requests": [{ "name": "Full night routine video", "count": 1, "likes": 230, "quote": "Please do a full night routine video with this!" }],
    "topComplaints": [{ "name": "Orders arrive too slowly", "count": 3, "likes": 424, "quote": "Ordered 3 weeks ago and it still hasn't arrived" }],
    "buyingIntent": { "count": 5, "share": 0.18 },
    "urgentCount": 2
  },
  "replies": [{ "commentId": "demo-09", "draft": "Thanks for asking! The Night Serum is [price]. You can find more details at [link]. 😊" }]
}
```

**Dataset**, one row per comment: post, comment link, reply or not, likes, date, text (with tagged usernames replaced by `@user`), whether it is yours or you 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 Instagram comments about food, travel, fitness, fashion, tech and music in 6 languages (2026-10-18):

| Check | Result |
|---|---|
| Overall sentiment matches the label | 98.3% |
| Topics found (F1) | 0.85 |
| Intents found (F1): question, request, praise, complaint, buying intent, spam | 0.94 |
| 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 trend is computed by code from those labels, so the numbers add up.

**What it does not do:** it does not read images, videos, captions or stories, and it sees only the comments Instagram shows to visitors who are not logged in. 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:** `{ "postUrls": ["https://www.instagram.com/p/..."] }` 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 posts, per-post 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 and a link to the HTML report.
- **Never charged:** no comments found, reactions, your 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 compare posts, or my account with a competitor's?** Yes. Give several post URLs (or a dataset with several posts) and the report adds a post comparison table, with a summary per post in the JSON.

**Does it collect usernames?** No. Usernames, profile pictures and names of commenters are removed from the data before anything else happens, and tagged usernames inside comments are replaced by `@user`. If you fill in **Your Instagram username**, it is only matched against the comments and never saved in the results.

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

**Why are replies off by default?** Instagram Comments Scraper returns replies only on paid Apify plans, and replies add to the scraping cost. Turn on **Include replies** to analyze whole threads; replies from your own account also tell us which questions you already answered.

**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.4 (2026-10-18):** With replies on, the scraper's share of your run's spending limit now leaves room for every comment this run may analyze, so the scrape plus the analysis stays within your limit. A post given as both /p/ and /reel/ counts once in the budget. Reply drafts never greet someone by a name taken from their comment (such a draft is dropped and not charged). The creator's replies are linked to their questions even when they sit just past the run's comment limit. Catch-all themes read "Other complaints" instead of "Other other complaints". The JSON summary always stays under 20,000 characters.
- **0.1 (2026-10-18):** First release. Post and reel URLs, datasets and integrations; audience mood weighted by likes; comments that need attention now; top questions as a ready FAQ; requests and content ideas; buying intent; praise and complaint themes with verified quotes; spam share; reply drafts with placeholders; daily trend; post comparison; your 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

## `postUrls` (type: `array`):

Posts and reels to analyze, as links (open the post, choose Share → Copy link). We scrape their comments with Instagram Comments Scraper on your account first (billed by that Actor), then analyze them. Leave empty if you give a dataset ID instead.

## `maxCommentsPerPost` (type: `integer`):

Newest top-level comments to scrape per post when you give post URLs. Replies come on top. 1 to 20,000.

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

Also scrape replies to comments. Needs a paid Apify plan (an Instagram Comments Scraper limit).

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

Optional. Your account's comments are left out of the audience numbers, reply drafts and charges, and questions you already answered get no draft. Several accounts: separate them with 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 newest comments per post.

## `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 Instagram Comments Scraper (apify/instagram-comment-scraper). When this Actor runs as an integration after that scraper, the dataset is passed automatically.

## Actor input object example

```json
{
  "postUrls": [],
  "maxCommentsPerPost": 500,
  "includeReplies": false,
  "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 linked quotes, a daily trend, post 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 and reply drafts.

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

One row per comment: post, likes, date, text with tagged usernames removed, 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/instagram-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/instagram-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/instagram-comments-analyzer --silent --output-dataset

```

## MCP server setup

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