# Instagram Post & Reel Comments Scraper (`monknwarriors/instagram-comment-scraper`) Actor

Scrape every comment from any public Instagram post or reel — comment text, likes, timestamps, reply counts, and each commenter's username, ID, verified badge and profile picture. No login required.

- **URL**: https://apify.com/monknwarriors/instagram-comment-scraper.md
- **Developed by:** [Monk N Warriors](https://apify.com/monknwarriors) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Instagram Post & Reel Comments Scraper

Scrape every comment from any public Instagram **post or reel** — the full
comment text, like count, timestamp, reply count, and each commenter's
username, user ID, verified badge and profile-picture URL. Paste one link
or a thousand.

No Instagram login, no cookies, no account needed. Comments come back
**newest-first**, the same order Instagram shows them.

### How to use it

1. Paste one or more Instagram post/reel URLs into **Instagram post or reel
   URLs** — `https://www.instagram.com/p/XXXXXXXXX/`,
   `.../reel/XXXXXXXXX/`, a `.../{username}/p/XXXXXXXXX/` link, or just the
   shortcode. Use **Bulk edit** to paste a long list.
2. Set **Max comments per post** — or leave it empty to take every comment.
3. Run it.

### What you get

One row per comment:

| Field | Example |
|---|---|
| `text` | `This looks amazing 🔥` |
| `ownerUsername` | `dharshanrdx` |
| `ownerId` | `52138895624` |
| `ownerProfilePicUrl` | `https://scontent.cdninstagram.com/…/n.jpg` |
| `ownerIsVerified` | `false` |
| `likesCount` | `12` |
| `repliesCount` | `3` |
| `timestamp` | `2026-09-06T16:49:36Z` (ISO 8601, UTC) |
| `commentUrl` | `https://www.instagram.com/p/…/c/17887789908454163/` |
| `postUrl` / `postShortcode` | the post the comment is on |
| `id` | `17887789908454163` |

Every row has the exact same columns, so the CSV export is clean — no empty
or `undefined` cells.

Migrating from another Instagram comments scraper? The column names
`postUrl`, `commentUrl`, `id`, `text`, `ownerUsername`,
`ownerProfilePicUrl`, `timestamp` and `likesCount` match one-for-one, so
existing spreadsheets and scripts keep working.

#### Run report

The key-value store record **`RUN_REPORT`** lists, per input URL: how many
comments were scraped, how many pages were fetched, whether a limit was
hit, the post's own like/comment counts, and a clear reason for any post
that couldn't be scraped (removed, private, comments disabled).

### Which comments

- **Top-level comments only** in this version. Reply threads (the comments
  *under* a comment) are counted in `repliesCount` but not scraped as their
  own rows yet.
- Comments are read in Instagram's own newest-first order. "Max comments
  per post" takes the first N of that order.
- A post with comments turned off, or that's been removed or made private,
  is reported in `RUN_REPORT` and costs you nothing.

### Pricing

**Pay per result.** You're charged per comment written to the dataset. A
post with no comments, or one that can't be reached, costs nothing. See the
Pricing tab for the current per-comment rate.

### Good to know

- Uses only Instagram's public, logged-out web data — no login, so nothing
  here can touch or risk an Instagram account.
- Instagram rate-limits aggressively by IP. The default **residential
  proxy** setting is strongly recommended; turning it off will cause runs
  to fail on all but the smallest jobs.
- Figures are a snapshot at scrape time — like counts and reply counts move
  after you capture them.
- This Actor is independently built and is not affiliated with Instagram or
  Meta. You're responsible for using the data in line with the law in your
  jurisdiction.

### Questions or issues?

Use the **Issues** tab on this Actor's page, and share your run when you do
— it's the fastest way to get a fix.

# Actor input Schema

## `directUrls` (type: `array`):

One or more Instagram post or reel links to scrape comments from. Accepts https://www.instagram.com/p/CODE/, /reel/CODE/, /tv/CODE/, a /{username}/p/CODE/ link, or a bare shortcode. Use Bulk edit to paste a long list.

## `resultsLimit` (type: `integer`):

Stop after this many comments for each post/reel. Leave empty to scrape every comment. Comments come newest-first, the same order Instagram shows them.

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

Instagram rate-limits datacenter and un-proxied IPs quickly. Residential proxy is strongly recommended and is the default. This actor only fetches small JSON/HTML responses, so residential data usage stays low.

## Actor input object example

```json
{
  "directUrls": [
    "https://www.instagram.com/p/BsOGulcndj-/"
  ],
  "resultsLimit": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

The default dataset — one row per comment: text, likes, timestamp, reply count, and the commenter's username, ID, verified badge and profile picture, plus the post URL and a direct link to the comment.

## `commentsCsv` (type: `string`):

The same data as a spreadsheet-friendly CSV file.

## `runReport` (type: `string`):

Per-post outcome: comments scraped, pages fetched, whether a limit was hit, and any errors.

# 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 = {
    "directUrls": [
        "https://www.instagram.com/p/BsOGulcndj-/"
    ],
    "resultsLimit": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("monknwarriors/instagram-comment-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 = {
    "directUrls": ["https://www.instagram.com/p/BsOGulcndj-/"],
    "resultsLimit": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("monknwarriors/instagram-comment-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 '{
  "directUrls": [
    "https://www.instagram.com/p/BsOGulcndj-/"
  ],
  "resultsLimit": 100
}' |
apify call monknwarriors/instagram-comment-scraper --silent --output-dataset

```

## MCP server setup

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