# Instagram Comments Scraper - Posts & Reels, No Login (`scrapewise/instagram-comments-scraper`) Actor

Get comments from Instagram posts and reels by post URL: text, date, likes, reply count, username and verified badge, plus the post caption, author, likes and comment count on every row. Bulk links, 19 fields, no login or cookies.

- **URL**: https://apify.com/scrapewise/instagram-comments-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 7 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.43 / 1,000 comment delivereds

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: comments of posts and reels, no login

Scrape the **comments of public Instagram posts and reels** into clean JSON, CSV or Excel, **without login, cookies or an Instagram account**. Paste post or reel links and get every comment's text, date, likes, reply count, the commenter's username and verified badge, plus **the post's caption, author, date, likes and comment count on every row**, so each row makes sense on its own in a spreadsheet. Several posts are read in parallel.

It is used by social media managers and agencies for brand and campaign monitoring, by marketers vetting influencers, by giveaway hosts picking winners, and by researchers and AI teams building comment datasets for sentiment analysis.

### Instagram comments scraper pricing at a glance

| Event | Free plan | Bronze | Silver | Gold and above |
|---|---|---|---|---|
| Comment delivered, per 1,000 | US$ 0.50 | US$ 0.475 | US$ 0.45 | US$ 0.425 |

- **19 fields per comment**, listed in the [field reference](#field-reference): 9 about the comment and its author, 7 about the post, and the source link and time.
- **No login, no cookies:** your Instagram account is never used, so it is never at risk.
- **Inputs:** post links, reel links or just the shortcode, as many as you want in one run.
- **Speed:** 3 posts in parallel; about 3,400 comments in 3 minutes in our test.
- **No monthly fee, no start fee.** 10,000 comments cost US$ 5.00. Error rows and duplicates are free, each error with an `errorCode`.

### What you can do with Instagram comments

- **Sentiment and brand monitoring:** what people say under your posts, your competitors' posts and influencer campaigns.
- **Giveaways and contests:** export every comment of a giveaway post and pick winners from the list.
- **Influencer vetting:** read the real comments under a creator's posts before you pay for a campaign; `ownerIsVerified` and `likeCount` show who drives the conversation.
- **Customer research:** questions, complaints and product requests left under ads and launch posts.
- **Datasets for AI and research:** clean text, date and likes on every row, ready for sentiment or topic models.

### Instagram comments scraper input

Up to 2,000 comments from one reel and one carousel post:

```json
{ "postUrls": ["https://www.instagram.com/reel/DdwXSSkMvJz/", "https://www.instagram.com/p/C3a0xOnLSCx/"], "maxComments": 2000 }
```

Shortcodes work too, and the limit applies to each post:

```json
{ "postUrls": ["DdwXSSkMvJz", "C3a0xOnLSCx"], "maxComments": 300 }
```

| Field | What it does |
|---|---|
| `postUrls` | Links to public posts or reels (`instagram.com/p/CODE`, `/reel/CODE`, `/reels/CODE`, `/tv/CODE`) or just the code |
| `maxComments` | Default 100, per post |

An empty input reads an example post, so you can see the output before you set anything.

#### Coming from another Instagram comments actor? Your input works

| Your field | Read as |
|---|---|
| `directUrls`, `urls`, `startUrls` (strings or `{"url": ...}`) | `postUrls` |
| `resultsLimit`, `maxItems` | `maxComments` |

Links with a username in the path (`instagram.com/username/p/CODE`) are read too. Fields with no meaning here are ignored instead of failing the run.

### What data the Instagram comments scraper returns

#### One real row

Reel `DdwXSSkMvJz`, top comment by likes (collected on 2026-09-30):

```json
{
  "type": "comment",
  "id": "18630364897057825",
  "text": "You're the best, Ronaldo.👑🇵🇹",
  "createdAt": "2026-09-29T06:21:48Z",
  "likeCount": 64,
  "replyCount": 0,
  "ownerUsername": "narin_rstmi",
  "ownerIsVerified": false,
  "postUrl": "https://www.instagram.com/p/DdwXSSkMvJz/",
  "postShortcode": "DdwXSSkMvJz",
  "postType": "reel",
  "postOwnerUsername": "portugal",
  "postTakenAt": "2026-09-26T15:33:36Z",
  "postLikeCount": 2319330,
  "postCommentCount": 22510
}
```

Every row also carries `hasGif`, `postCaption` (the full caption of the post), `source` and `scrapedAt`.

<a id="field-reference"></a>

#### Field reference

| Field | What it is |
|---|---|
| `type` | `comment` (or `error` for a free error row) |
| `id` | Comment id, unique per comment; duplicates are dropped and not charged |
| `text` | Comment text, emojis and mentions included |
| `createdAt` | When the comment was posted (ISO 8601, UTC) |
| `likeCount` | Likes on the comment |
| `replyCount` | How many replies the comment has |
| `hasGif` | `true` when the comment is a GIF |
| `ownerUsername`, `ownerIsVerified` | Commenter's username and verified badge |
| `postUrl`, `postShortcode` | The post the comment belongs to |
| `postType` | `image`, `video`, `carousel` or `reel` |
| `postCaption` | The post caption |
| `postOwnerUsername` | Who published the post |
| `postTakenAt` | When the post was published |
| `postLikeCount`, `postCommentCount` | Likes and comments of the post (the comment count includes replies) |
| `source`, `scrapedAt` | The link you gave, and when the row was collected |

Only what Instagram shows publicly about the commenter: username and verified badge. Never user ids or profile photos.

#### Error codes (never charged)

| errorCode | Meaning |
|---|---|
| `POST_NOT_FOUND` | The post was deleted, is private or the link is wrong |
| `NO_COMMENTS`, `NO_RESULTS` | The post has no public comments, or none could be read |
| `INVALID_URL`, `INVALID_INPUT` | A value the Actor does not understand |
| `BLOCKED` | Instagram did not answer after retries; run again |
| `NOT_REACHED`, `UNEXPECTED` | The run timeout arrived, or something unforeseen broke; only that post is lost |

### Integrations, scheduling and AI agents

Video guides from Apify: [how to schedule an Actor](https://www.youtube.com/watch?v=1jI7WcVQmwM) and [how to connect it to other apps](https://www.youtube.com/watch?v=bNACk1_S_6w).

- **Schedule** the same posts daily in [Apify schedules](https://docs.apify.com/platform/schedules) to follow a campaign or a giveaway as comments arrive.
- **Export** as JSON, CSV, Excel or XML, or read the dataset from the [Apify API](https://docs.apify.com/api/v2).
- **Connect** it to Make, n8n, Zapier, Google Sheets, Slack or a webhook through [Apify integrations](https://docs.apify.com/platform/integrations).
- **AI agents:** the Actor works as a tool through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) in Claude, ChatGPT, Cursor and other MCP clients, for example "summarize the complaints under this reel".

Through the API:

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapewise~instagram-comments-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"postUrls":["https://www.instagram.com/reel/DdwXSSkMvJz/"],"maxComments":500}'
```

### Instagram comments scraper limitations

- **Top-level comments only.** Instagram does not show replies to logged-out visitors, so `replyCount` tells how many replies a comment has, but the replies themselves are not returned. That is also why `postCommentCount` (which counts replies) can be higher than the number of rows.
- **Posts and reels only.** It does not list the posts of a profile or a hashtag; give it the post links.
- Only public posts and reels. This Actor reads public pages only and respects the site's terms.

### Instagram comments scraper FAQ

**Do I need an Instagram account or cookies?**
No. Nothing is logged in, so no account can be flagged or banned.

**Why not the official Instagram API?**
Instagram's official API (the Graph API) covers accounts you manage through a Meta developer app; it does not give the comments of other people's public posts. This Actor reads any public post or reel with no account and adds the post's caption, author, likes and comment count to every row.

**How many comments can I get from one post?**
As many as Instagram shows to a logged-out visitor, up to `maxComments` per post. Set it high (for example 10,000) for a giveaway.

**What does a run cost?**
Only the comments delivered: US$ 0.50 per 1,000 on the Free plan. There is no Apify compute bill on top.

**Can I scrape comments from a private account?**
No. Only public posts and reels; a private or deleted post comes back as a free `POST_NOT_FOUND` row.

**How do I export the comments to Excel or Google Sheets?**
Open the run's dataset and pick Excel or CSV, or connect Google Sheets through Apify integrations so new comments land in a sheet after each scheduled run.

**Can I get the replies too?**
Not yet: Instagram hides them from logged-out visitors. `replyCount` shows which comments have replies.

### Related scrapers

- [Instagram Reels Transcript Scraper](https://apify.com/scrapewise/instagram-reels-transcript): turn Instagram reels and videos into text.
- [Threads Scraper](https://apify.com/scrapewise/threads-scraper): Threads profile posts, search and hashtags, no login.
- [Facebook Page Posts Scraper](https://apify.com/scrapewise/facebook-page-posts-scraper): Facebook page posts with text, reactions and media.
- [YouTube Comments Scraper](https://apify.com/scrapewise/youtube-comments-scraper): YouTube comments, replies and likes.
- [X (Twitter) Tweet Scraper](https://apify.com/scrapewise/x-tweet-scraper): tweets by URL with media and video, no login.

### Changelog

- **16 Oct 2026:** field reference, input names from other Instagram comments actors, integrations section and FAQ in this page.
- **2026-09-30, 0.1:** first release. Comments of posts and reels without login, post data on every row, 3 posts in parallel, free error rows.

Independent tool, not affiliated with Instagram or Meta Platforms.

# Actor input Schema

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

Links to public posts or reels (instagram.com/p/CODE, /reel/CODE) or just the code.

## `maxComments` (type: `integer`):

Upper limit per post.

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

Apify Proxy is recommended.

## Actor input object example

```json
{
  "postUrls": [
    "https://www.instagram.com/p/C3a0xOnLSCx/"
  ],
  "maxComments": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `resultsCsv` (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/p/C3a0xOnLSCx/"
    ],
    "maxComments": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/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/p/C3a0xOnLSCx/"],
    "maxComments": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/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/p/C3a0xOnLSCx/"
  ],
  "maxComments": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/instagram-comments-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/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/6jkJK6nKJaATc9D4U/builds/8cnOhLvvct3FNZ7kE/openapi.json
