# Instagram Reels & Comments Scraper | Brand Monitor (`ntriqpro/instagram-reels-comments-monitor`) Actor

Collect public Instagram reel metrics and sample comments for brand reports. Compare observed plays and likes across runs, with source IDs and clear coverage limits.

- **URL**: https://apify.com/ntriqpro/instagram-reels-comments-monitor.md
- **Developed by:** [daehwan kim](https://apify.com/ntriqpro) (community)
- **Categories:** Social media, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 reel snapshots

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

## Instagram Reels & Comments Monitor

Track public brand reels, capture available engagement metrics, and read a sample of public comments in one structured dataset. Optional brand summaries surface question examples and hashtags from the observations. Paid-plan monitoring can compare your own earlier snapshots and suppress previously delivered comment IDs.

**Validated in cloud runs (September 28, 2026):** 20 reels and 199 sample comments across two public brands, plus repeated monitoring runs that compared metrics and skipped comments already delivered. These owner runs are not paid-customer invoices or a long-term reliability record; the FREE preview was checked locally with a simulated plan signal.

### FREE preview vs paid plan

| | FREE plan preview | Paid Apify plan |
|---|---|---|
| Profiles per run | 1 | Up to 20 |
| Reels per profile | 2 | Up to 100 |
| Sample comments per reel | 5 | Up to 50 |
| Brand summary | 1 per run | 1 per brand |
| Repeated monitoring (`monitorKey`) | Not available | Included |
| Change vs. your previous run (play, like and comment deltas) | Not available | Included in each reel snapshot |
| Only comments not delivered before (`onlyNewComments`) | Not available | Included |
| End-of-run notice | Shows how many profiles, reels and comments were left out, and the most rows a paid plan could return for your input | None needed |

A FREE run ends normally with a `free_plan_preview` notice row (not charged) and a status message such as `Free preview: 1 of 3 profiles, 2 of 12+ reels, 10 of 40 comments shown.` The reel and comment totals are what the run actually observed on the shown profile; `12+` means the public listing had at least that many. A total that could not be observed is reported as unknown, never estimated.

**FREE-plan preview:** Up to **1 profile, 2 reels, 5 comments per reel and 1 optional summary per run**. Persistent monitoring is available only on paid Apify plans. FREE refers to your Apify subscription plan: runs can consume your available Apify credits under the event prices below; this is not unlimited free access. Preview limits end normally with an explanatory notice.

This independent Actor is not affiliated with, endorsed by, or an official product of Instagram, Meta, or any monitored brand.

### What you receive

- **Profile checks:** Validated public profile observations, including profiles with no available reels, or a recorded target HTTP response.
- **Reel snapshots:** Available captions, publication times, play counts, view counts, likes and comment counts. Available deltas against your monitor's prior observations are included in the snapshot price.
- **Sample comments:** Unique comments with nonempty text from the available public top-level sample.
- **Optional brand summaries:** Observed reel/comment counts, question examples and hashtags from the collected sample.
- **Coverage and notices:** Limits, unavailable fields, blocked responses and partial coverage remain visible.

There are no child Actors, separately purchased collection services, video downloads, or login/cookie inputs in this version.

### Quick start

Enter public usernames and choose collection limits:

```json
{
  "usernames": ["lego", "starbucks"],
  "maxReelsPerProfile": 10,
  "maxCommentsPerReel": 10,
  "includeAnalysis": true,
  "onlyNewComments": true
}
```

These are illustrative public brands, not affiliations or endorsements. On the FREE plan, the first profile is processed with the preview caps. On a paid plan, add a stable `monitorKey` such as `weekly-brand-watch` to retain your observation baseline across runs.

### Inputs and limits

| Input | Default | Meaning |
|---|---|---|
| `usernames` | Required; prefilled with `lego`, `starbucks` | Username array, without URLs, `@`, cookies or credentials. Duplicate handles are processed once. |
| `maxReelsPerProfile` | 10 | Requested ceiling per profile; paid maximum 100, FREE maximum 2. |
| `maxCommentsPerReel` | 10 | Requested sample ceiling per reel; paid maximum 50, FREE maximum 5. Set 0 to skip comments. |
| `includeAnalysis` | true | Include the separately priced observed brand summary when observations exist. |
| `monitorKey` | Not set | Optional paid-plan persistent monitoring scope within your Apify account. |
| `onlyNewComments` | true | In paid monitor mode only, suppress IDs already delivered by the same monitor. |

Paid plans accept at most 20 profiles per run; FREE accepts one. All quantities are ceilings, not guaranteed output. The public comment sample often stops near 15 per reel even when the requested ceiling is higher.

### Pricing

All six Apify tiers initially use the same event rates. Your effective Store pricing and maximum charge setting govern the run.

| Event | USD per event | When charged |
|---|---:|---|
| `apify-actor-start` | $0.005 | Automatically at run start, per allocated GB rounded up, with a minimum of one unit. |
| `profile-checked` | $0.003 | Once per completed validated profile check, including a valid empty profile, or an actual HTTP 3xx, 401, 403, 404 or 429 target response recorded in the output. |
| `reel-snapshot` | $0.004 | Once per unique delivered reel observation, including available comparison deltas. |
| `sample-comment` | $0.001 | Once per unique delivered sample comment with nonempty text. |
| `brand-summary` | $0.005 | Once per brand with a delivered observed summary, when enabled and observations are available. |

**Example:** At 1 GB or less, 10 completed profile checks, 100 reel snapshots, 1,000 delivered sample comments and 10 brand summaries cost:
`$0.005 + $0.030 + $0.400 + $1.000 + $0.050 = $1.485`.
This is a quantity-based example, not a promise that these results will be available.

A valid completed check can be billed even when the profile has no available reels or Instagram returns a disclosed target response. An HTTP block or redirect is reported as such; it is not treated as a successful profile or as evidence that the account does not exist.

Malformed usernames rejected before any query do not incur a profile-check fee. Notices, skipped items, internal parsing/transport failures, empty summaries, previously seen comments suppressed by monitor mode, and duplicate retries do not create additional result fees. Already completed, disclosed work and the automatic startup event can still be charged in a partial run. There is no custom startup fee and no automatic charge for every dataset row.

Processing stops when the remaining event budget cannot fund the next unit. Coverage may therefore be partial. A billing interruption is disclosed; it does not justify charging the same uncertain operation again.

### Output

Results are stored in the default dataset. Export them as JSON or CSV through Apify. The default key-value store's `OUTPUT` record summarizes `status`, `message`, `counts`, `billingMode`, `preview`, `baselineStoreId`, `coverage`, `notices` and `sourceVersion`. Counts are diagnostics for the current execution pass, not an invoice; after a resumed run they can differ from the complete dataset. Apify's charged events determine the bill.

Rows share `rowType`, `brand`, `observedAt`, `source` and `responsibilityNotice`. Other fields depend on row type and available data; they are not all required on every row.

| `rowType` | Main additional fields |
|---|---|
| `profile_check` | `status` (`ok` or `target_response`), `httpStatus`, `followersCount`, `postsCount` |
| `reel_snapshot` | `reelId`, `shortcode`, `url`, `ownerUsername`, `publishedAt`, `caption`, `playCount`, `viewCount`, `likeCount`, `commentCount`, `previousObservedAt`, `playCountDelta`, `likeCountDelta`, `commentCountDelta`, `comparisonStatus` |
| `comment` | `commentId`, `reelId`, `shortcode`, `text`, `createdAt`, `likeCount`, `replyCount`, `ownerUsername`, `coverage` |
| `brand_summary` | `observedReels`, `observedComments`, `questionExamples`, `questionCount`, `topHashtags`, `coverage: "observed_sample"`, `sampleOnly: true` |
| `notice` | `code`, `message`; the FREE end notice (`free_plan_preview`) also has `locked` (shown, observed and left-out counts, `paidRowsUpTo`) and `monitoring` |

Unavailable values are `null`, not invented zeros. `playCount` and `viewCount` remain separate measurements. A zero is a reported value; `null` means unavailable. Deltas require comparable observations of the same reel and available source values. Without a usable baseline they remain `null`.

### Repeated monitoring and privacy

With a paid plan and `monitorKey`, the Actor creates a named key-value store in the account running it. The same customer can reuse that Actor-created store in later runs under Limited permissions. Without a monitor key, or on FREE, `baselineStoreId` is `null` and persistent monitor mode is disabled.

Use a different key for a separate monitoring purpose, and keep the target set stable when comparing runs. Do not put passwords, tokens or personal secrets in the key. Concurrent runs with the same monitor key are not supported and have no guaranteed update order; schedule a given monitor without overlapping runs.

The baseline retains up to the latest 500 reel snapshots and 50,000 comment IDs per brand. “New comments” means IDs absent from that retained baseline, not necessarily comments newly published since the last run. An older ID outside the retained baseline can be delivered again. A comment absent from a later sample has not necessarily been deleted. The Actor does not prove removals, full historical coverage or continuous observation. You control retention of datasets and baseline storage in your Apify account.

If a previous delivery or charge is uncertain after an interruption, the Actor stops without automatic replay to avoid duplicate charges. Existing output remains available for inspection; a completed replay is not promised.

### Coverage and interpretation

This version uses publicly available responses. Profiles can be private, unavailable, blocked or represented only partially. Instagram can change its response format or ordering. Reel selection uses timestamps when available within discovered public results; it does not guarantee the account's newest reels, every reel, or full history. Pinned or reordered items can affect discovery.

Comments are a limited, potentially popularity-biased top-level sample. Requested limits do not force deeper access. Replies may be counted without their text being collected. Duplicate pages or repeated cursors stop pagination. Samples are not representative surveys; question counts and hashtags describe observed material, not all customer opinion or an account-wide sentiment score.

### Responsible use and support

You are responsible for choosing authorized inputs and a lawful purpose, establishing any required legal basis, and respecting privacy, intellectual-property rights, applicable law and relevant platform terms. Public availability does not remove those obligations. Do not use this Actor to harass, spam, profile people unlawfully or redistribute content without appropriate rights.

The [Apify Standard Actor Contract](https://docs.apify.com/legal/standard-actor-contract) governs use. Nothing here excludes non-excludable liability or removes our applicable duties as a Creator or data processor. We provide observed data with explicit limitations, not legal advice or a guarantee of completeness.

For collection problems, open an issue on this Actor's Apify Store page with the run ID and a non-sensitive description. Never include API tokens, cookies or passwords. Dependency notices are in `LICENSE-NOTICE.md`.

# Actor input Schema

## `usernames` (type: `array`):

Public Instagram usernames only, without @, URLs, passwords or cookies. Duplicate handles are processed once. FREE: first 1 profile; paid: at most 20 profiles.

## `maxReelsPerProfile` (type: `integer`):

Upper limit per brand, not a coverage guarantee. FREE is capped at 2; paid allows up to 100. Ordering is limited to timestamps available from public responses and cannot guarantee the account's newest reels.

## `maxCommentsPerReel` (type: `integer`):

Upper limit on available top-level sample comments. FREE is capped at 5; paid allows up to 50. The public endpoint often supplies about 15 regardless of this setting. Replies and full/newest comment coverage are not promised.

## `includeAnalysis` (type: `boolean`):

Create an optional $0.005 summary per brand with observations: question examples and hashtags from the collected sample. This is not a representative sentiment survey. FREE: at most 1 summary.

## `monitorKey` (type: `string`):

Optional stable label for repeated runs in your Apify account. Paid plans only: use the same key and targets to retain comparison baselines in this Actor's named key-value store. Different keys separate monitors. Do not enter tokens or secrets. FREE runs do not persist monitoring state.

## `onlyNewComments` (type: `boolean`):

Only affects paid runs with monitorKey: suppress comment IDs in that monitor's retained baseline of up to 50,000 comment IDs per brand, not full history. An older ID outside the retained baseline can be delivered again. New means newly observed in the sample, not necessarily newly published. Has no effect on ordinary one-off or FREE runs.

## Actor input object example

```json
{
  "usernames": [
    "lego",
    "starbucks"
  ],
  "maxReelsPerProfile": 10,
  "maxCommentsPerReel": 10,
  "includeAnalysis": true,
  "onlyNewComments": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (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 = {
    "usernames": [
        "lego",
        "starbucks"
    ],
    "maxReelsPerProfile": 10,
    "maxCommentsPerReel": 10,
    "includeAnalysis": true,
    "onlyNewComments": true
};

// Run the Actor and wait for it to finish
const run = await client.actor("ntriqpro/instagram-reels-comments-monitor").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 = {
    "usernames": [
        "lego",
        "starbucks",
    ],
    "maxReelsPerProfile": 10,
    "maxCommentsPerReel": 10,
    "includeAnalysis": True,
    "onlyNewComments": True,
}

# Run the Actor and wait for it to finish
run = client.actor("ntriqpro/instagram-reels-comments-monitor").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 '{
  "usernames": [
    "lego",
    "starbucks"
  ],
  "maxReelsPerProfile": 10,
  "maxCommentsPerReel": 10,
  "includeAnalysis": true,
  "onlyNewComments": true
}' |
apify call ntriqpro/instagram-reels-comments-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ntriqpro/instagram-reels-comments-monitor"
        }
    }
}
```

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/REw7ac3kYXbsOwnb1/builds/ngpyFg4i6chs3xicK/openapi.json
