# Instagram Audience Insights: Post Ideas from Comments (`afanasenko/instagram-audience-insights`) Actor

Turn Instagram comments into post ideas and audience insights. Paste a post, reel or carousel link, or a creator’s profile: get the questions, pains and debates the audience raises, with quotes, post ideas with hooks, and comment sentiment analysis. Code-word replies are not counted as demand.

- **URL**: https://apify.com/afanasenko/instagram-audience-insights.md
- **Developed by:** [Andrey Afanasenko](https://apify.com/afanasenko) (community)
- **Categories:** Social media, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $790.00 / 1,000 analyzed posts

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 Audience Insights: Post Ideas from Comments

[![Apify Actor](https://apify.com/actor-badge?actor=afanasenko/instagram-audience-insights)](https://apify.com/afanasenko/instagram-audience-insights)

> **Turn Instagram comments into post ideas: find out what an audience wants to hear next.**
> Paste a post, reel or carousel link, or a creator's profile. The actor reads the comments, finds the questions, pains and debates people raise, and turns each one into post ideas with hooks and an outline. Every theme comes with real quotes.

> **🆓 Free to start:** up to 2 analysed posts per run on the free Apify plan · quotes and counts behind every theme · code-word replies counted, not mistaken for demand.

### 🎯 What it does

**You give** Instagram links in one of two modes. Optionally, your own niche, so the ideas are written for you.

| Mode | You paste | You get |
|---|---|---|
| **Mode 1: Analyze Posts** | Post, reel or carousel links (`postUrls`) | One analysis per post |
| **Mode 2: Analyze a Creator's Latest Posts** | Profile links or @usernames (`profiles`) | One analysis per creator: their latest posts read together, so repeating themes stand out |

> ⚠️ **Pick your mode first.** Each mode reads only its own input field. **Example:** you choose Mode 1 but paste `@creator` into the Mode 2 field "Creators" — the run stops at once and tells you to switch modes; nothing is charged. **All mode sections stay visible in the input form**, so fill only the one that matches your mode.

**You get** one row per audience theme: what people ask or argue about, how many people and likes stand behind it, its sentiment, up to three verbatim quotes, and 1–2 post ideas. Each idea has two hooks, a 3–6 point outline, the audience words it answers, what is new compared with the original post, and a call to action. Each link also gets a summary row: who comments, the sentiment of all comments (positive, neutral, negative), how many replied to the author's code word, and any criticism of the author.

**What you won't get** finished captions or scripts. Private accounts and stories are never read. Replies to a "comment GUIDE" call-to-action are counted as a number, not turned into themes.

How a theme is built: the actor removes code-word replies, emoji, tags and the author's own comments. A model groups what is left into themes and names the comments each theme rests on. Counts and quotes are then taken from those exact comments, so a quote is always word for word.

### 📦 Output sample

Every theme is one row. Here is what a row holds:

- **The theme** — `priority`, `title`, `kind`, `signal`, `insight`, `risk`.
- **The evidence** — `commentCount`, `people`, `likes`, `quotes`, `quotesText`, `postUrls`.
- **The sentiment** — `sentimentPositive`, `sentimentNeutral`, `sentimentNegative` (percent) and `sentimentComments` (how many comments they are counted over).
- **The ideas** — `hook`, `ideas` (format, two hooks, outline, answers, new angle, call to action), `ideasText`; with `myNiche`, also `nicheFit` and `nicheNote`.
- **The link** — `analysisNumber`, `rowType`, `source`, `sourceType`, `author`, `language`, `myNiche`, `generatedAt`.

A summary row (`rowType: "summary"`) carries the sentiment of all comments with content and adds `audience`, `reputation`, `reputationQuotes`, `callToActionReplies`, `commentsRead`, `commentsWithContent`, `skippedPosts`, `status` and `note`. On theme rows those columns are `null`.

A real theme row from a recent run (one carousel, 720 comments read, 638 of them replies to the code word "stabilize"):

```json
{
  "analysisNumber": 1,
  "rowType": "theme",
  "source": "https://www.instagram.com/p/DeAXnDXmBsS/",
  "sourceType": "post",
  "author": "@thenervoussystem.ot",
  "postUrls": "https://www.instagram.com/p/DeAXnDXmBsS/",
  "priority": 2,
  "title": "Yoga and hypermobility: why it hurts, and what safe movement looks like",
  "kind": "debate",
  "signal": "strong",
  "insight": "Many people, including former yoga teachers, confirm that yoga overstretched them. Several offer alternatives (yoga therapy, classical Pilates, PT, manual therapy). There is a push-back on megaformer versus real Pilates. People also ask what stability training…",
  "commentCount": 13,
  "people": 13,
  "likes": 5,
  "sentimentPositive": 46,
  "sentimentNeutral": 46,
  "sentimentNegative": 8,
  "sentimentComments": 13,
  "quotes": [
    {
      "text": "Omg. I abhor hot yoga and everyone made me feel like I was nuts for it. This is why!! This whole post makes me feel so seen!! Thank you!!",
      "likes": 1,
      "postUrl": "https://www.instagram.com/p/DeAXnDXmBsS/"
    },
    {
      "text": "Yoga 0/10 tore hip labrum, shoulders pop out and wrist pain for days. PT with the right therapist is 10/10. Deep tissue massage 1000/10 agai…",
      "likes": 1,
      "postUrl": "https://www.instagram.com/p/DeAXnDXmBsS/"
    }
  ],
  "quotesText": "“Omg. I abhor hot yoga and everyone made me feel like I was nuts for it. This is why!! This whole post makes me feel so …",
  "risk": "Health. Do not give an exercise prescription. Advise working with a qualified practitioner who knows hypermobility.",
  "hook": "Yoga for hypermobile bodies: what I'd change",
  "ideas": [
    {
      "format": "carousel",
      "hooks": [
        "Yoga for hypermobile bodies: what I'd change",
        "What is stability training, and who teaches it?"
      ],
      "outline": [
        "Why end range is the problem in hEDS",
        "Which yoga styles and cues are gentler (yoga therapy, yin with modifications)",
        "Classical vs megaformer Pilates: the community correction",
        "What stability training is, with simple examples",
        "How to find a practitioner: questions to ask",
        "Signs to stop: tunnel vision, nausea, rebound pain"
      ],
      "answers": "\"What is stability training? I've not heard of that\" / \"What kind of practitioner does 'Stability' training?\" / \"Hot yoga gave me tunnel vision and severe nausea every time I tried it. Is that a sign?\"",
      "newAngle": "The post only gave ratings. This one explains what to do instead and how to find the right teacher.",
      "cta": "Save this for your next class search and tell us which movement works for you."
    }
  ],
  "ideasText": "Idea 1 (carousel): Yoga for hypermobile bodies: what I'd change\nAlt hook: What is stability training, and who teaches it?\n1. Why end range i…",
  "nicheFit": null,
  "nicheNote": null,
  "audience": null,
  "reputation": null,
  "reputationQuotes": null,
  "callToActionReplies": null,
  "commentsRead": null,
  "commentsWithContent": null,
  "skippedPosts": null,
  "status": null,
  "note": null,
  "language": "en",
  "myNiche": null,
  "generatedAt": "2026-10-23T18:56:02.769Z"
}
```

Long texts are shortened with "…" in this sample only; real rows carry them in full.

**Views** — one view, in the **Storage → Dataset** tab:

| View | What each row is | Best for |
|---|---|---|
| **Audience insights** (default) | The same rows, trimmed to the columns you read first: priority, title, signal, insight, quotes, hook, ideas, counts, positive and negative share, audience and post links | Pasting into a content plan |

The full field list is in [`.actor/dataset_schema.json`](.actor/dataset_schema.json), which is also what AI agents see through Apify's MCP server.

### ⚡ Quick start

1. **Pick your mode first** in the `operationMode` dropdown — this is the single most important decision. **Both mode sections stay visible** in the input form, so fill only the one that matches your mode.
2. Paste your links. A minimal input that works on the **free plan**:

```json
{ "operationMode": "analyzePosts", "postUrls": ["https://www.instagram.com/p/DeAXnDXmBsS/"] }
```

3. Run it, then open the **Insights Report** from the run's Output tab. You'll see who comments, the comment sentiment, the themes with quotes, and the post ideas under each theme.

### 🧭 When to use it

- **Planning the next post** — see what your own audience asked under your last post, ranked by likes and people.
- **Content agencies** — paste a competitor's post, set `myNiche` to your client's niche, and get ideas your client can post.
- **A creator's whole audience** — Mode 2 reads a creator's latest 5 posts together and shows themes that repeat across them.
- **Checking a lead magnet** — see how many people replied to the code word, and what the rest of the comments say.
- **Reputation check** — criticism and distrust of the author are shown as a separate signal, not mixed into post ideas.
- **Comment sentiment analysis** — the share of positive, neutral and negative comments under a post, and under each theme.

### 🛠 Input

The form has a mode picker and three sections.

| Section | Purpose |
|---|---|
| 🎯 Mode 1: Analyze Posts | Post, reel or carousel links |
| 🎯 Mode 2: Analyze a Creator's Latest Posts | Creators, and how many of their posts to read |
| ⚙️ More options | Your niche and the language of the results |

- **`operationMode`** — **set this first.** `analyzePosts` (Mode 1) or `analyzeCreators` (Mode 2). Each mode reads only its own section; values in the other mode's section are ignored. Both mode sections stay visible in the Apify Console regardless of your choice.
- **`postUrls`** (Mode 1) — Instagram post, reel or carousel links, up to 20. Each link is its own analysis. A profile pasted here is skipped and named.
- **`profiles`** (Mode 2) — Instagram profile links or @usernames, up to 20.
- **`postsPerProfile`** (Mode 2) — how many of each creator's latest posts with a discussion to read together, 1–10 (default 5).
- **`myNiche`** — optional. Your niche or your client's, up to 300 characters, any language. The themes are found first, without the niche; then the ideas are written for it. A theme outside your niche gets no forced ideas: `nicheFit` is `outside`, and `nicheNote` says what you can credibly say.
- **`outputLanguage`** — the language of the themes and ideas. By default it is the language most commenters use. Quotes stay word for word.

### 💰 How much will Instagram audience insights cost?

You pay per analysed post, not per comment read. The actor uses Apify's **Pay Per Event** model with one event:

| Event | Price | When it is charged |
|---|---|---|
| **Analyzed post** | **$0.99** Free and Starter · $0.89 Scale · $0.79 Business and up | Once per post that at least one theme or signal rests on |

Reading the comments, the reel or the slides is included. A post without a discussion, a skipped post and a link that cannot be read are not charged.

| You analyse | Plan | Approx cost |
|---|---|---|
| 1 post | Free | $0.99 |
| 5 post links | Starter | $4.95 |
| 1 profile, 5 posts | Scale | $4.45 |
| 4 profiles, 5 posts each | Business | $15.80 |

### 🆓 Free vs paid plan

| | Free plan | Paid plan |
|---|---|---|
| Analysed posts per run | Up to 2 | Up to 20 links; up to 10 posts per profile |
| Code-word filter, quotes, reputation signal | ✓ | ✓ |
| Successful runs per month | 5 | Unlimited |

Upgrade to a paid plan to analyse whole lists of posts and creators in one run.

### 🧪 Recipes

Copy-paste inputs for the most common jobs:

**What did my audience ask under my last posts?**

```json
{ "operationMode": "analyzeCreators", "profiles": ["@your_username"], "postsPerProfile": 5 }
```

Your latest 5 posts with a discussion, read together. Themes that repeat across posts stand out.

**A competitor's post, ideas for your client**

```json
{ "operationMode": "analyzePosts", "postUrls": ["https://www.instagram.com/reel/XXXXXXXXXXX/"], "myNiche": "skincare clinic for women 35+" }
```

The themes are the competitor's audience; the ideas are written for the clinic.

**Several posts, results in Spanish**

```json
{ "operationMode": "analyzePosts", "postUrls": ["https://www.instagram.com/p/AAAAAAAAAAA/", "https://www.instagram.com/p/BBBBBBBBBBB/"], "outputLanguage": "es" }
```

Each post is a separate analysis; quotes stay in the original language.

### 📡 Live status & storage records

While the run works, the actor keeps these records:

| Storage key | Type | What it holds |
|---|---|---|
| `status.html` | HTML page | The Insights Report: live progress, then per link who comments, the reputation signal, the themes and ideas |
| `COMMENT_SENTIMENT` | JSON | Every rated comment: its text, likes, how many people wrote it, and positive, neutral or negative |
| `RUN_SUMMARY` | JSON | Links analysed, themes, charges, comments read, stop reason, timings |
| `USER_MESSAGE` | JSON | What the run delivered and the next step, or why it delivered nothing |
| `FREE_LIMITS_APPLIED` | JSON | Free-plan limits and skipped entries for this run |

### 🤖 Programmatic / API use

**REST API:**

```bash
curl -X POST "https://api.apify.com/v2/acts/afanasenko~instagram-audience-insights/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"operationMode": "analyzePosts", "postUrls": ["https://www.instagram.com/p/DeAXnDXmBsS/"]}'
```

**MCP and AI agents:** the actor is available as a tool through Apify's [MCP server](https://docs.apify.com/platform/integrations/mcp) at `mcp.apify.com`. An agent passes links and reads the themes back as rows; the summary row comes first for each link.

### 💡 Tips & Best Practices

#### Getting maximum results

- Pick posts where people ask or argue, not only praise. 50+ comments with words in them give the richest themes.
- Set `myNiche` when the post is not yours; leave it empty for your own posts.

#### Cost optimization

- You pay only for posts that gave a theme or a signal; posts without a discussion are free.
- `postsPerProfile` is your ceiling per creator: you never pay for more posts than that.

#### Performance

- One post takes about 1–2 minutes; a profile with 5 posts about 3–4 minutes.
- Links run three at a time.

#### Data quality

- Read the quotes before you film: they are the audience's own words.
- `signal` follows the numbers: strong is 5+ people or 100+ likes.
- Check `risk` before posting on health, money, children or grief.
- A `signal` row (instead of `theme`) means the post had too few real comments for themes.

### ❓ FAQ

**Q: How do I find out what my Instagram audience wants?**
A: Use Mode 2 with your profile, or Mode 1 with your latest post, and run the actor. It reads the comments and lists the questions, pains and debates, ranked by how many people raised them.

**Q: Is there a free Instagram comment analysis tool?**
A: Yes. On the free Apify plan the actor analyses up to 2 posts per run, 5 successful runs a month. See [Free vs paid plan](#-free-vs-paid-plan).

**Q: What is a code-word reply, and why is it not a theme?**
A: Many creators write "comment GUIDE and I'll send it". Those replies show interest in the freebie, not a topic. The actor counts them in `callToActionReplies` and leaves them out of the themes.

**Q: Can I analyse a competitor's post for my own account?**
A: Yes. Put your niche in `myNiche`. The themes stay as that audience said them; the ideas are written for you. Themes your niche cannot honestly speak to are marked `outside` instead of getting a forced idea.

**Q: Why did a post give single signals instead of themes?**
A: It had fewer than 12 comments with words in them. Rather than invent themes, the actor shows up to four concrete questions or stories, each with its quote.

**Q: Why was a post skipped for a profile?**
A: It had fewer than 8 comments with content. The next post is read instead; skipped posts are listed and not charged.

**Q: I selected one mode but my run stopped with no results — what went wrong?**
A: The mode and the filled field do not match. Mode 1 reads only `postUrls` (post links); Mode 2 reads only `profiles` (creators). The run stops at once, says which mode to pick, and charges nothing.

**Q: Does it do Instagram comment sentiment analysis?**
A: Yes. Every comment with content is labelled positive, neutral or negative. The summary row has the shares for the whole post or creator, each theme row for its own comments. Code-word replies and emoji are left out.

**Q: Are the quotes real?**
A: Yes. The model only names which comments support a theme. The quotes and counts are copied from those comments by the actor itself.

**Q: What if the run finds nothing?**
A: Nothing is charged, and the User Message says why — usually the comments are only code-word replies and emoji. Try a post with questions, or a profile.

### 🔗 Other Instagram actors (same author)

| You start with… | You want… | Use this actor |
|---|---|---|
| A post or a creator | Audience themes and post ideas from the comments | **This actor** |
| A post or reel link | Every comment and reply as rows | [Instagram Comments Scraper](https://apify.com/afanasenko/instagram-comments-scraper) |
| A niche | Content ideas from posts that beat their author's usual results | [Instagram Content Ideas](https://apify.com/afanasenko/instagram-content-ideas) |
| A reel link or a creator | The reel's script, hook and transcript | [Instagram Reel Script Extractor](https://apify.com/afanasenko/instagram-reel-script-extractor) |
| A carousel link | Slide text, hook and structure formula | [Instagram Carousel Analysis](https://apify.com/afanasenko/instagram-carousel-analyzer) |

Start here for what the audience wants; use Content Ideas for what already worked in the niche.

### 🛟 Support & feedback

1. **Open an issue** on the actor's Issues tab — the fastest way to get a fix.
2. **Request a feature** in the same tab; every request is read.
3. **Rate the actor** on its Apify Store page to help others find it.

### ⚖️ Is it legal to scrape Instagram comments?

The actor reads only **publicly available** posts and comments and does not log in, read private content or act on your behalf. Use the results in line with Instagram's Terms of Use and the laws of your country, including privacy law when you store commenters' words. For more, see Apify's guide on [whether web scraping is legal](https://blog.apify.com/is-web-scraping-legal/).

# Changelog

This Actor's version history is a separate document: https://apify.com/afanasenko/instagram-audience-insights/changelog.md

# Actor input Schema

## `operationMode` (type: `string`):

Pick the mode first. Each mode reads only its own section below.

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

Instagram post, reel or carousel links, up to 20. Example: https://www.instagram.com/p/DeAXnDXmBsS/

## `profiles` (type: `array`):

Instagram profile links or @usernames, up to 20. Example: @natgeo

## `postsPerProfile` (type: `integer`):

How many of each creator’s latest posts with a discussion to read together (1–10). Posts without a discussion are skipped and not counted.

## `myNiche` (type: `string`):

Your niche or your client’s, in a few words, any language. The themes still come from the comments; the post ideas are written for this niche. Example: skincare clinic for women 35+.

## `outputLanguage` (type: `string`):

Quotes stay verbatim; themes and post ideas are written in this language.

## Actor input object example

```json
{
  "operationMode": "analyzePosts",
  "postUrls": [],
  "profiles": [],
  "postsPerProfile": 5,
  "outputLanguage": "auto"
}
```

# Actor output Schema

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

No description

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

No description

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

No description

## `message` (type: `string`):

No description

## `sentiment` (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 = {
    "operationMode": "analyzePosts"
};

// Run the Actor and wait for it to finish
const run = await client.actor("afanasenko/instagram-audience-insights").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 = { "operationMode": "analyzePosts" }

# Run the Actor and wait for it to finish
run = client.actor("afanasenko/instagram-audience-insights").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 '{
  "operationMode": "analyzePosts"
}' |
apify call afanasenko/instagram-audience-insights --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,afanasenko/instagram-audience-insights"
        }
    }
}
```

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/TqoeqWStxAdHfSPEn/builds/QdYnWSGLrqRoLJDFn/openapi.json
