# Instagram Comments Scraper - Fast & No Login (`chronometrica/instagram-comments-scraper`) Actor

Fast Instagram comments scraper for public posts and Reels. Get clean, unique rows with text, dates, likes, reply counts, authors, and IDs—no login or cookies.

- **URL**: https://apify.com/chronometrica/instagram-comments-scraper.md
- **Developed by:** [Chronometrica](https://apify.com/chronometrica) (community)
- **Categories:** Social media, Agents, Automation
- **Features:** Limited permissions
- **Stats:** 62 total users, 6 monthly users, 94.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.30 / 1,000 instagram 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 Scraper — Fast, Clean & No Login

### 💬 What does Instagram Comments Scraper do?

Paste one or more public Instagram post or Reel URLs. Get fast, clean, unique,
and structured comment rows with text, public author details, dates, likes, and
stable IDs. Turn on **Include replies** to collect replies with parent links.

Skip manual copy-and-paste. Choose a clear per-post limit or collect until the
public feed ends, sort the sample, add optional dates, and export organized rows.

Use it for social listening, brand monitoring, creator research, customer
feedback, academic research, spreadsheets, AI work, and data pipelines. Each
saved result is one public comment or reply. Empty or unavailable posts do not
make fake dataset rows.

The Actor uses logged-out public Instagram pages. It does not need your
Instagram account, cookies, API key, or copied browser session. It does not
open private posts or bypass access controls.

With Instagram Comments Scraper, you can:

- 💬 Collect public comments and optional replies from posts, Reels, and old TV URLs.
- 👤 Save public usernames, verification flags, and stable author IDs.
- ❤️ Collect public comment likes and reply totals when Instagram shows them.
- 🆔 Join data with stable post, short code, and comment IDs.
- 🎯 Set a positive comment limit for each post, or remove it.
- ↕️ Keep Instagram's default order, or sort the collected sample by date.
- 📅 Save only comments inside an optional date range.
- 🧹 Get unique rows with one stable field shape.
- 📦 Export JSON, JSONL, CSV, Excel, XML, RSS, or HTML.
- 🔁 Use the Apify API, SDKs, webhooks, schedules, and integrations.

Each paid result is one unique public comment or reply saved to the default
dataset. Invalid, unavailable, empty, and duplicate results do not create paid
comment rows.

### ✨ Why use this Actor?

- 🪄 **Easy setup:** paste public post URLs, choose a limit, an order, and optional dates.
- 🔓 **No login:** no Instagram account, cookie, or browser session is needed.
- 🧹 **Clean, structured rows:** one unique comment or reply per result.
- 🆔 **Strict identity:** each row stays tied to the requested post short code.
- 🎛️ **Visible limits:** choose a positive row limit per post or collect until the public feed ends.
- 🚦 **Honest results:** the public feed may return fewer rows, and `OUTPUT` gives a clear reason.
- 💸 **Clear billing:** pay only for unique comments and replies saved to the dataset.

### 📦 What data do I get?

Each dataset row is one public Instagram comment or reply.

| Data group         | Main fields                                         |
| ------------------ | --------------------------------------------------- |
| 🔗 Post identity   | `postId`, `postShortCode`, `postUrl`                |
| 💬 Comment         | `commentId`, `text`, `createdAt`                    |
| ↩️ Reply link      | `isReply`, `parentCommentId`                         |
| ❤️ Public signals  | `likesCount`, `repliesCount`                        |
| 👤 Public author   | `ownerId`, `ownerUsername`, `ownerVerified`         |
| 🕒 Collection time | `collectedAt`                                       |

Optional values that Instagram does not expose stay `null`. They are not
guessed and are not replaced with fake zeros.

`repliesCount` is the public reply total shown for a top-level comment when it
is available. `isReply` is true for replies. `parentCommentId` links a reply
to its saved parent and is null for top-level comments.

### ⚙️ Can I use this Actor through an API?

Yes. You can use:

- 🔌 Apify API
- 🐍 Python SDK
- 🟢 JavaScript SDK
- 🪝 Webhooks
- ⏰ Scheduled runs
- 🧩 Apify integrations

This makes it easy to send comments into spreadsheets, databases, dashboards,
AI analysis tools, customer-feedback systems, and research pipelines.

#### 🔌 API example

Keep your Apify token in an environment variable or secret store.

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/chronometrica~instagram-comments-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "postUrls": ["https://www.instagram.com/reel/DZu6dkVyImf/"],
    "maxCommentsPerPost": 100,
    "collectAllAvailable": false,
    "commentSortMode": "default",
    "includeReplies": false,
    "maxRepliesPerComment": 10
  }'
```

### 🎯 Why scrape Instagram comments?

| Use case                  | How comment data helps                                           |
| ------------------------- | ---------------------------------------------------------------- |
| 📣 Brand monitoring       | Find public praise, complaints, questions, and product feedback. |
| 🧑‍🎨 Creator research       | Review the public words around known creator posts.              |
| 🚀 Campaign research      | Study public response to a launch, ad, event, or partnership.    |
| 🔎 Social listening       | Track common topics and language in public discussions.          |
| 🧑‍🔬 Academic research      | Build structured public text samples for analysis.               |
| 🤖 AI and NLP             | Feed clean comment text into topic or sentiment tools.           |
| 🧱 Data pipeline building | Load stable rows into a spreadsheet, app, database, or warehouse. |

The Actor gives you public source data. It does not add sentiment labels or
guess a person's intent.

### 💵 Pricing

The price depends on your Apify pricing tier. Each result charge represents one
unique comment or reply saved to the default dataset. Empty, unavailable, and
duplicate comments do not create comment result charges.

| Apify tier | Price per comment | Price per 1,000 comments |
| --- | ---: | ---: |
| Free | `$0.0020` | $2.00 |
| Bronze | `$0.0015` | $1.50 |
| Silver | `$0.0014` | $1.40 |
| Gold, Platinum, or Diamond | `$0.0013` | $1.30 |

There is no start fee or minimum run charge.

Use `maxCommentsPerPost` to limit top-level comments and `maxRepliesPerComment`
to limit replies under each saved parent. Replies are extra paid rows. Begin with 20 to 100 comments while testing a new workflow. Turn on
`collectAllAvailable` only when you accept a larger and less predictable bill.

### 🚀 How do I use Instagram Comments Scraper?

1. Open **Instagram Comments Scraper** in Apify Console.
2. Paste one or more public Instagram post or Reel URLs.
3. Choose the maximum comments to save for each post.
4. Keep the default order or choose newest-first or oldest-first with optional dates.
5. Click **Start**.
6. Open **Output** to inspect the rows and run summary.
7. Download the dataset or send it to another tool.

### ⬇️ Input

```json
{
  "postUrls": ["https://www.instagram.com/reel/DZu6dkVyImf/"],
  "maxCommentsPerPost": 100,
  "collectAllAvailable": false,
  "commentSortMode": "default",
  "includeReplies": false,
  "maxRepliesPerComment": 10
}
```

#### 🔗 Supported URLs

- 🖼️ `https://www.instagram.com/p/SHORT_CODE/`
- 🎬 `https://www.instagram.com/reel/SHORT_CODE/`
- 📺 `https://www.instagram.com/tv/SHORT_CODE/`

Query strings are removed. Duplicate versions of the same URL are collected
once. Profile, hashtag, search, Story, and Explore URLs are not supported.

#### 🎛️ Input settings

| Setting | What it controls |
| --- | --- |
| `postUrls` | Add one or more public Instagram post, Reel, or old TV URLs. |
| `maxCommentsPerPost` | Save at most this many unique top-level comments for each URL. Use a positive whole number. Default: 100. Ignored when the limit is removed. |
| `includeReplies` | Save replies under saved top-level comments. Default: false. Each reply is a separate paid result. |
| `maxRepliesPerComment` | Maximum replies under each saved parent. Any positive whole number. Default: 10. Used only when replies are on. |
| `collectAllAvailable` | Remove the top-level limit and stream comments until the public feed ends, time runs out, or the source fails. The reply limit still applies. Use Default order. Off by default and may cost much more. |
| `commentSortMode` | Keep Instagram's order, or sort the collected public sample with newest or oldest comments first. Default: Instagram's order. |
| `commentsFrom` | Only save comments on or after this date. Optional. |
| `commentsUntil` | Only save comments on or before this date. Optional. |

Dates are inclusive. A comment without a public date is skipped when either
date setting is used. Instagram chooses the public sample. Default keeps the
source order. The date options sort that sample; they do not ask Instagram for
a different comment feed. Replies are collected only under saved parents and
must also pass the date filters. The remove-limit switch removes the top-level
limit; the separate reply limit still applies.

To include replies:

```json
{
  "postUrls": ["https://www.instagram.com/p/CfhVcINpHiY/"],
  "maxCommentsPerPost": 20,
  "includeReplies": true,
  "maxRepliesPerComment": 10
}
```

### ⬆️ Output sample

```json
{
  "postUrl": "https://www.instagram.com/reel/DZu6dkVyImf/",
  "postId": "3922329444068919711",
  "postShortCode": "DZu6dkVyImf",
  "commentId": "18000000000000000",
  "isReply": false,
  "parentCommentId": null,
  "text": "Example public comment",
  "createdAt": "2026-07-14T12:00:00.000Z",
  "likesCount": 12,
  "repliesCount": 3,
  "ownerId": "123456789",
  "ownerUsername": "example_user",
  "ownerVerified": false,
  "collectedAt": "2026-07-14T16:00:00.000Z"
}
```

#### 📊 Run summary

The `OUTPUT` record includes:

- 🎯 Posts requested, successful, empty, and failed;
- 💬 Total rows, top-level comments, and replies saved;
- ↩️ Reply threads that failed or were skipped after a source error;
- 🧢 Posts that reached the chosen limit;
- 🎛️ The chosen per-post limit, remove-limit switch, order, and optional dates;
- 🚦 A clear result and stop reason for each input URL.

Common target results are:

| Result | Meaning |
| --- | --- |
| `capped` | The Actor saved the chosen per-post limit. |
| `sample` | The Actor saved a useful sample below the limit. |
| `source_exhausted` | The public feed ended before the limit. |
| `unavailable_or_no_public_data` | Instagram did not expose a public comment feed for that view. |
| `failed` | A temporary target error stopped that URL. |

An empty dataset does not always mean the post has no comments. Instagram may
show a page but leave the logged-out comment feed empty. Check `OUTPUT`, then
retry later if the post is public and comments are visible in your browser.

### 🔒 Source boundary

Instagram Comments Scraper uses logged-out public Instagram data only.

It does not:

- 🔑 Ask for your Instagram username or password;
- 🍪 Use your account, cookies, or copied session;
- 🔒 Collect private, followers-only, or login-only posts;
- 🧩 Solve access challenges or bypass access controls;
- 🔎 Discover posts from profiles, hashtags, search, or Explore;
- ♾️ Promise every comment in Instagram's displayed total.

### ⚠️ Limits and interpretation

- Instagram controls which comments are visible to a logged-out viewer.
- The same post can return a different public sample on another run.
- A displayed comment total can be higher than the public rows available.
- `maxCommentsPerPost` is a maximum, not a promise.
- Date filters and oldest-first order inspect at most 250 public comments per post unless the result limit is removed.
- Comment order applies to the collected sample, not every comment on Instagram.
- Deleted, hidden, filtered, region-limited, or moderated comments may be absent.
- Comment text, likes, reply totals, and author details can change.
- This Actor is not affiliated with Instagram or Meta.

### ❓ FAQ

#### Does this Actor need an Instagram login, cookie, or API key?

No. It uses public logged-out Instagram pages.

#### Why did I get fewer comments than the displayed total?

Instagram's displayed total and logged-out public feed can differ. The public
feed may end early or change between runs. Check each target in `OUTPUT`.

#### Can I collect replies?

Yes. Turn on `includeReplies` and choose `maxRepliesPerComment`. Replies do not
use the top-level comment limit. Each reply has its own `commentId`, with
`isReply: true` and `parentCommentId` set to its saved parent. Public reply
access can vary. A partial target and reply failure counts identify incomplete
reply collection in `OUTPUT`.

#### How do date filters and comment order work?

The Actor filters and sorts the public sample it collected. Dates include the
whole chosen day. Instagram can expose a different sample on a later run.

#### How are duplicates removed?

Duplicate input URLs are collected once. Saved rows use the post short code and
Instagram comment ID as the run key.

#### What happens when a post returns no public comments?

The target appears in `OUTPUT`. It does not create a fake comment row.

#### Can I remove the comment limit?

Yes. Turn on `collectAllAvailable`. The Actor then ignores the numeric limit
and streams rows until Instagram's public feed ends, the run times out, or the
source fails. Use Default comment order with this switch. This can take longer
and cost much more. It still cannot promise comments that Instagram does not
expose publicly.

#### Can I paste an Instagram profile URL?

No. Use known post, Reel, or old TV URLs. This Actor does not discover posts
from profiles.

### 🏆 Best practices

- 🎯 Start with 20 to 100 comments per post.
- 📚 Batch several known URLs in one run to lower run overhead per row.
- 🧾 Check `OUTPUT` before treating a small or empty dataset as a bug.
- 🆔 Join and deduplicate later work with `postShortCode` and `commentId`.
- 🔁 Use scheduled runs when you want to observe public comment changes.

### 🛟 Support

For help, include the Apify run ID, one public input URL, what you expected, and
the target result shown in `OUTPUT`. Do not send Instagram passwords, cookies,
session data, or private links.

### ⚖️ Responsible use

This Actor collects data that Instagram exposes to logged-out public viewers at
run time. You are responsible for using the data lawfully and for following
privacy, data-protection, research, and platform rules. Do not use public
comments to harass people, infer sensitive traits, or make high-impact choices
about individuals.

### 🔗 Related social media scrapers

Continue the same workflow on this platform or compare public data across
platforms.

#### Continue on Instagram

- [Instagram Profile Scraper](https://apify.com/chronometrica/instagram-channel-scraper)
  — collect public profile details, links, and audience stats.
- [Instagram Search Scraper](https://apify.com/chronometrica/instagram-search-scraper)
  — find public Reels and metrics by keyword.
- [Instagram Metrics Scraper](https://apify.com/chronometrica/instagram-metrics-scraper)
  — collect public post, Reel, carousel, profile, and collaboration metrics.

#### Compare comments across platforms

- [Facebook Comments Scraper](https://apify.com/chronometrica/facebook-comments-scraper)
  — collect public comments, replies, authors, dates, and reactions.
- [TikTok Comments Scraper](https://apify.com/chronometrica/tiktok-comments-scraper)
  — collect public comments, replies, authors, likes, and thread links.
- [YouTube Comments Scraper](https://apify.com/chronometrica/youtube-comments-scraper)
  — collect public comments, replies, authors, likes, pins, and creator
  hearts.
- [Reddit Comments Scraper](https://apify.com/chronometrica/reddit-comments-scraper)
  — collect public thread comments, replies, authors, scores, and dates.
- [Snapchat Comments Scraper](https://apify.com/chronometrica/snapchat-comments-scraper)
  — collect public comments and replies from Snapchat Spotlight posts.
- [LinkedIn Comments Scraper](https://apify.com/chronometrica/linkedin-comments-scraper)
  — collect public comments, replies, authors, dates, and reactions.

# Changelog

This Actor's version history is a separate document: https://apify.com/chronometrica/instagram-comments-scraper/changelog.md

# Actor input Schema

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

Add one or more public Instagram post or Reel URLs.

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

Save at most this many unique top-level comments for each post. Replies do not count toward this limit. Ignored when Remove the result limit is on.

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

Save public replies under the top-level comments saved by this run. Each reply is a separate paid row. Off by default. Replies can increase runtime and cost.

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

Save up to this many unique public replies under each saved top-level comment. Enter a positive whole number. Default: 10. Used only when Include replies is on. Larger values can increase runtime and cost.

## `commentSortMode` (type: `string`):

Keep Instagram's default order, or sort the collected top-level comment sample by date.

## `commentsFrom` (type: `string`):

Only save comments and replies on or after this date. Replies are collected only under saved top-level comments. Leave empty for no start date.

## `commentsUntil` (type: `string`):

Only save comments and replies on or before this date. Replies are collected only under saved top-level comments. Leave empty for no end date.

## `collectAllAvailable` (type: `boolean`):

Ignore the maximum top-level comment limit and save comments as they arrive. Use Default comment order. The separate reply limit still applies. The run stops when the public feed ends, time runs out, or the source fails. This may cost much more.

## Actor input object example

```json
{
  "postUrls": [
    "https://www.instagram.com/reel/DZu6dkVyImf/"
  ],
  "maxCommentsPerPost": 100,
  "includeReplies": false,
  "maxRepliesPerComment": 10,
  "commentSortMode": "default",
  "collectAllAvailable": false
}
```

# Actor output Schema

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

No description

## `comments` (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 = {
    "postUrls": [
        "https://www.instagram.com/reel/DZu6dkVyImf/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("chronometrica/instagram-comments-scraper").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 = { "postUrls": ["https://www.instagram.com/reel/DZu6dkVyImf/"] }

# Run the Actor and wait for it to finish
run = client.actor("chronometrica/instagram-comments-scraper").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 '{
  "postUrls": [
    "https://www.instagram.com/reel/DZu6dkVyImf/"
  ]
}' |
apify call chronometrica/instagram-comments-scraper --silent --output-dataset

```

## MCP server setup

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

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/2LMMaJNlotnjVt3iw/builds/WHJIbn32YSgaUw2nE/openapi.json
