# Instagram Comment Scraper (`data_wiki/instagram-comment-scraper`) Actor

Turn Instagram comments into insight. Paste any public post or reel link and instantly see who commented, what they said, how many likes it got and when. Spot loyal fans, pick giveaway winners and gauge audience mood in minutes. No Instagram login, no coding, no hassle.

- **URL**: https://apify.com/data_wiki/instagram-comment-scraper.md
- **Developed by:** [Data WiKi](https://apify.com/data_wiki) (community)
- **Stats:** 7 total users, 0 monthly users, 96.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

### 🚀 What is Instagram Comment Scraper?

Instagram Comment Scraper is an Apify Actor that collects the public comments of Instagram posts and reels: comment text, commenter, likes, exact date and a direct link to each comment. Paste post or reel links, press Start and download the comments as JSON, CSV or Excel. No Instagram account is needed.

- **Every public comment, newest first:** set a limit per post, or 0 to collect everything Instagram shows a logged-out visitor.
- **Text insights included:** mentions, hashtags, emails, links, emojis and writing script are pulled out of each comment for you.
- **Many links per run:** as an Instagram comments scraper it takes as many posts and reels as you like and returns one dataset.
- **Filters that save time:** keep comments by date, by word or @mention, or keep one comment per user.
- **Live results:** every page of comments is saved as it arrives, so the Output tab fills during the run.

Click **Try for free**, paste a link and press **Start**.

### 📊 What data can you extract from Instagram?

This Instagram comment extractor returns one row per comment and repeats the details of the post on every row. Every row combines Instagram comments and likes with the post's own counters, and you can export them as JSON, CSV, Excel, XML or HTML.

| Field | Description | Example |
|---|---|---|
| `id` | Comment ID | `17900000000000001` |
| `text` | Full comment text | `Entering the giveaway! @example_brand ...` |
| `ownerUsername` | Commenter username, the base of an Instagram commenters list | `example_user` |
| `ownerId` | Commenter ID | `1000000001` |
| `ownerProfilePicUrl` | Commenter profile picture link | `https://example.com/profile.jpg` |
| `ownerIsVerified` | Whether the commenter has a verified badge | `false` |
| `isPostOwner` | True when the post's own author wrote the comment | `false` |
| `timestamp` | When the comment was posted (UTC) | `2026-10-20T09:30:00.000Z` |
| `likesCount` | Likes on the comment, a base for Instagram engagement analysis | `3` |
| `position` | Reading position, newest first, counted before your filters | `1` |
| `commentUrl` | Direct link to the comment | `https://www.instagram.com/p/Cx1AbCdEfGh/c/17900000000000001/` |
| `textLength` | Length of the text in characters | `62` |
| `script` | Main writing script (latin, arabic, cyrillic, devanagari and more), useful for Instagram audience research | `latin` |
| `mentions`, `mentionsCount` | Accounts tagged in the comment and how many; use them to find mentions and hashtags in Instagram comments | `["example_brand", "example_friend"]`, `2` |
| `hashtags` | Hashtags in the comment | `["weekend"]` |
| `emails` | Email addresses that people wrote in the comment; use them to extract emails from Instagram comments | `[]` |
| `urls` | Links written in the comment | `[]` |
| `emojis`, `emojiCount` | Emojis in the comment and how many, a start for Instagram emoji analysis | `[]`, `0` |
| `gifUrl` | GIF link when the comment is a GIF, otherwise `null` | `null` |
| `postUrl`, `postId`, `postShortcode` | Which post the comment belongs to | `Cx1AbCdEfGh` |
| `postType` | reel, carousel, image or video when known | `image` |
| `postOwnerUsername`, `postOwnerId` | Who published the post | `example_brand` |
| `postCaption`, `postTimestamp` | Post caption and date | `Weekend vibes` |
| `postLikesCount`, `postCommentsCount` | The post's own counters | `250`, `40` |

The Posts summary table has one extra row per input link; see the Output section. The example values above are made up and only show the shape of the data.

### 💡 Use cases for Instagram comment data

- **Giveaway entries:** collect Instagram giveaway comments under a post and keep one comment per user. The Actor exports the entries; it does not choose a winner.
- **Comment analysis:** clean fields such as `text`, `textLength` and `script` prepare your data for Instagram comment analysis in a tool of your choice.
- **Sentiment work:** feed the `text` field into your own model for Instagram comment sentiment analysis.
- **Competitor research:** compare the comments under rival posts for Instagram competitor analysis.
- **Brand monitoring:** read what people write under your own posts for Instagram brand monitoring.
- **Influencer vetting:** check who comments and whether `ownerIsVerified` or `isPostOwner` is set for Instagram influencer vetting.
- **Lead research:** the `emails` and `urls` fields can support Instagram lead generation from comments, within the rules that apply to you.
- **AI and analytics:** each row is structured data, so it works as an Instagram comments dataset for AI projects and dashboards.

### 🛠️ How to scrape Instagram comments

1. Create an Apify account and open **Instagram Comment Scraper** in the Apify Store.
2. Paste your post or reel links into **Instagram post & reel URLs**.
3. Set **Max comments per post**, or 0 to scrape all Instagram comments the post shows publicly.
4. Add optional filters: date, words, or one comment per user.
5. Click **Start** and watch the log; each page of comments is saved as it arrives.
6. Open the **Output** tab, pick a table and download Instagram comments to Excel, CSV or JSON.

The Actor runs in Apify Console, so you can use this Instagram comment scraper online with nothing to install. Not sure which reel to read? You can [find reels by hashtag](https://apify.com/data_wiki/instagram-hashtag-scraper) first, then paste their links here.

#### How to scrape Instagram post comments and reel comments

Paste links like `https://www.instagram.com/p/...` to scrape Instagram post comments. Use links like `https://www.instagram.com/reel/...` to scrape Instagram reel comments. Photo posts, carousels and reels can be mixed in one run, so the Actor also works as an Instagram reel comments scraper.

#### How to filter Instagram comments by keyword

Put your words in **Comment must contain** (`containsText`), separated by commas. A word that starts with `@` keeps comments that mention that account.

#### How to get Instagram comments by date

Fill **Only comments newer than** (`commentsSince`) with a date such as `2025-06-01` or a period such as `7d`. Then you get Instagram comments by date without sorting afterwards.

### 💰 How much does it cost to scrape Instagram comments?

Instagram Comment Scraper uses pay per event pricing. You pay per comment saved to the results, plus a small fee when the Actor starts. Rows of the Posts summary table are not charged.

- **Result** (`main_result`): charged once for every comment saved to the dataset.
- **Actor start** (`apify-actor-start`): $0.00005 per run. The Actor is set to 1024 MB of memory, which is one start event.

Apify platform usage (compute) is billed on top of the events above.

| Plan tier | Price per 1,000 comments (`main_result`) |
|---|---|
| Free | $1.50 (1,000 x $0.0015) |
| Bronze | $1.35 (1,000 x $0.00135) |
| Silver | $1.20 (1,000 x $0.0012) |
| Gold and above | $1.00 (1,000 x $0.001) |

Example: 5 posts with 100 comments each is 500 comments. On the Free tier that is 500 x $0.0015 = $0.75, and on Gold 500 x $0.001 = $0.50, plus the start fee of $0.00005 and platform usage.

You can set a maximum cost per run in Apify. When it is reached, the run stops cleanly and keeps every comment already saved. See the Pricing tab for current rates.

### ⬇️ Input

The only required field is **Instagram post & reel URLs** (`urls`). Everything else is optional. Open the Input tab for every option.

> 💡 Keep **Max comments per post** low for a first test run.

This example takes up to 100 comments per post that are newer than 2026-10-01 and contain "giveaway" or mention @example_brand, one comment per user:

```json
{
  "urls": ["https://www.instagram.com/p/Cx1AbCdEfGh/"],
  "resultsLimit": 100,
  "commentsSince": "2026-10-01",
  "containsText": "giveaway, @example_brand",
  "uniqueCommenters": true
}
```

- `urls`: post links, reel links, links with a username in front, or bare shortcodes. Profile pages, hashtag pages and private posts are not supported. A link listed twice is scraped once and marked `duplicate`; an invalid link gets the status `invalid link`.
- `resultsLimit`: maximum comments kept per post, newest first. The form pre-fills 100 and `0` means all. With 2 posts and a limit of 50 you get up to 100 comments. When you start the Actor from code, send the number you want.
- `commentsSince`: a date, a date and time (`2025-06-01T10:00:00Z`) or a period (`12h`, `7d`, `2w`, `3m`, `1y`). A month counts as 30 days and a year as 365. Leave it empty for all dates.
- `containsText`: words separated by commas; a comment is kept when it contains any of them, ignoring upper and lower case.
- `uniqueCommenters`: keeps only the newest comment of each user on each post.
- `proxyConfiguration`: off by default. If Instagram blocks the requests, the Actor retries and switches to a proxy automatically. You can also choose a proxy yourself.

> ⚠️ If many comments are read and none match `containsText`, the post stops early and the Posts summary says why.

### ⬆️ Output

The scraped results are shown as a dataset in the **Storage** tab, and the Output tab groups them into six tables: Comments, Commenters, Text insights, Post details, All fields and Posts summary. The table view doesn't show **all the fields**. The Instagram comments export is available as JSON, CSV, Excel, XML and HTML, and you can pick the fields to include before you download. Through the API, the dataset also serves Instagram comments JSON.

One comment row for the input above (example values, not real data):

```json
{
  "id": "17900000000000001",
  "text": "Entering the giveaway! @example_brand @example_friend #weekend",
  "ownerUsername": "example_user",
  "ownerProfilePicUrl": "https://example.com/profile.jpg",
  "timestamp": "2026-10-20T09:30:00.000Z",
  "likesCount": 3,
  "ownerId": "1000000001",
  "ownerIsVerified": false,
  "isPostOwner": false,
  "position": 1,
  "commentUrl": "https://www.instagram.com/p/Cx1AbCdEfGh/c/17900000000000001/",
  "textLength": 62,
  "script": "latin",
  "mentions": ["example_brand", "example_friend"],
  "mentionsCount": 2,
  "hashtags": ["weekend"],
  "emails": [],
  "urls": [],
  "emojis": [],
  "emojiCount": 0,
  "gifUrl": null,
  "postUrl": "https://www.instagram.com/p/Cx1AbCdEfGh/",
  "postId": "1000000000000000001",
  "postShortcode": "Cx1AbCdEfGh",
  "postType": "image",
  "postOwnerUsername": "example_brand",
  "postOwnerId": "2000000002",
  "postCaption": "Weekend vibes",
  "postTimestamp": "2026-10-19T18:00:00.000Z",
  "postLikesCount": 250,
  "postCommentsCount": 40
}
```

#### Posts summary output

Each input link also gets one row in the Posts summary table, with `commentsCollected`, `commentsRead`, `status` and a plain-words `message`:

```json
{
  "inputUrl": "https://www.instagram.com/p/Cx1AbCdEfGh/",
  "postUrl": "https://www.instagram.com/p/Cx1AbCdEfGh/",
  "postShortcode": "Cx1AbCdEfGh",
  "postType": "image",
  "postOwnerUsername": "example_brand",
  "postCaption": "Weekend vibes",
  "postTimestamp": "2026-10-19T18:00:00.000Z",
  "postLikesCount": 250,
  "postCommentsCount": 40,
  "commentsCollected": 1,
  "commentsRead": 40,
  "status": "done",
  "message": null,
  "scrapedAt": "2026-10-26T10:00:00.000Z"
}
```

### ⚠️ Limitations and error handling

- Replies to comments are not collected. Instagram shows them only to logged-in users, so you get top-level comments.
- Private accounts, removed posts and anything a logged-out visitor cannot open are not returned.
- The number of comments returned can be lower than the counter on the post (`postCommentsCount`), and your filters remove comments too.
- `position` counts the comments read before your filters, so with filters on it can skip numbers.
- Up to 6 posts are read at the same time; a very large post takes longer.
- Links inside comment text are found with a fixed list of web address endings, so some unusual links may be missed.

| `status` in the Posts summary | Meaning | What to do |
|---|---|---|
| `done` | All requested comments were saved | Nothing |
| `no comments` | The post has no comments you can see | Check the post in a browser |
| `partial` | The post stopped early; the reason is in `message` | Try again later or lower the limit |
| `failed` | No comments could be saved for this link | Read `message`, check the link, try again later |
| `invalid link` | The input is not a post or reel link | Use links like `instagram.com/p/...` |
| `duplicate` | The link was listed more than once | Nothing, it was scraped once |
| `stopped (spending limit)` | Your maximum cost per run was reached | Raise the limit and run again |

If every link fails, the run ends as failed with a message; if only some fail, the run still finishes and keeps the comments already saved.

### 🔌 Integrating Instagram Comment Scraper with other apps

As an Apify Instagram comment scraper it runs on the Apify platform, so you can start runs from code, schedule them and trigger webhooks when a run finishes. This makes the Actor an Instagram comments API for your own tools. The API tab shows ready-made JavaScript, Python and CLI snippets for the Instagram comment scraper API, and the run URL is `https://api.apify.com/v2/actors/data_wiki~instagram-comment-scraper/runs`. Read the results from the run's dataset.

- **Schedules:** run the Actor daily or weekly with [Apify schedules](https://docs.apify.com/actors/running/schedules) and use `commentsSince` to follow new comments for Instagram social listening.
- **Apps:** connect results to Google Sheets, Make, Zapier, Slack or Airbyte through the [Apify integrations](https://docs.apify.com/integrations).
- **API reference:** the [Apify API documentation](https://docs.apify.com/api/v2) covers starting runs and reading datasets from code.
- **AI agents:** the hosted [Apify MCP server](https://docs.apify.com/mcp) at `https://mcp.apify.com` lets an agent find the Actor with `search-actors`, check it with `fetch-actor-details` and start it with `call-actor`.

### 🔗 Other social media scrapers by data_wiki

These Actors come from the same account. Only the first is about Instagram; the others cover Facebook and Douyin.

| Actor | What it extracts | When to use it |
|---|---|---|
| [Instagram Hashtag Scraper](https://apify.com/data_wiki/instagram-hashtag-scraper) | Reels found by hashtag or keyword | Find reels first, then paste their links here |
| [Facebook Comment Scraper](https://apify.com/data_wiki/facebook-comment-scraper) | Comments and replies from public Facebook posts | Your comments are on Facebook |
| [Facebook Group Scraper](https://apify.com/data_wiki/facebook-group-scraper) | Posts and comments from public groups | Community feedback sits in groups |
| [Douyin Search Scraper](https://apify.com/data_wiki/douyin-search-scraper) | Douyin videos found by keyword | You research short video trends on Douyin |
| [Export Tripadvisor reviews](https://apify.com/data_wiki/tripadvisor-review-scraper) | Reviews of hotels, restaurants, attractions and tours with ratings and owner replies | When you also want the reviews guests left on Tripadvisor |

For the source of the data see [Instagram](https://www.instagram.com).

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

The Actor only collects data that people have made publicly available on Instagram and does not extract private data. Comments can still contain personal details such as usernames or emails, so collect them only with a legitimate reason and consider GDPR and CCPA. Check Instagram's terms and consult a lawyer if you are unsure. Read more about [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) and [ethical web scraping](https://blog.apify.com/what-is-ethical-web-scraping-and-how-do-you-do-it/).

### ❓ FAQ

#### How much does a run cost?

You pay $0.00005 per run start plus a price per comment saved: $1.50 per 1,000 on the Free tier down to $1.00 per 1,000 on Gold and above. Platform usage is billed on top.

#### Can you scrape Instagram comments without a login?

Yes. The Actor reads public posts the way a logged-out visitor sees them, so no Instagram account is needed. That makes it an Instagram comment scraper without login for any public post or reel.

#### How many comments can I get from one post?

As many as Instagram shows publicly. Set `resultsLimit` to `0` to collect all of them; the form default is 100. The Posts summary tells you when Instagram stopped returning comments early.

#### Can Instagram Comment Scraper collect replies?

No. Replies are visible only to logged-in users, so only top-level comments are returned.

#### Can I scrape private accounts?

No. Only public posts and reels work.

#### How do I export Instagram comments to Excel?

Open the Output tab after the run, choose a table, click Export and select Excel. Select CSV in the same menu to export Instagram comments to CSV, or pick JSON, XML or HTML.

#### How do I export Instagram comments for giveaway entries?

Switch on **One comment per user** (`uniqueCommenters`), add your required word or @account to **Comment must contain**, and export the Comments table. You then have the entries to review yourself.

#### Can I download comments from a reel?

Yes. Paste the reel link and the Actor works as an Instagram reel comment downloader for that reel.

#### How do I get Instagram comments from a post in code?

Start a run with the Apify API and pass the post link in `urls`. You can then get Instagram comments from post links by reading the run's dataset, with the `apify-client` packages for Node.js or Python.

#### What happens if Instagram blocks the requests?

The Actor retries and switches to a proxy automatically, and the log says when it does. If a post still cannot be loaded, its Posts summary row shows `failed` or `partial` with a reason, and the comments already saved are kept.

#### Can I use Instagram Comment Scraper through MCP?

Yes. Add the Actor to an AI agent through the hosted Apify MCP server (`https://mcp.apify.com`) and let the agent call it with your post links.

### 💬 Your feedback

Found a bug or need another field? Open an issue on the Actor's Issues tab. Need a custom solution? Contact hello.datawiki@gmail.com.

# Actor input Schema

## `urls` (type: `array`):

Add one or more public Instagram post or reel links, for example https://www.instagram.com/p/DN8-GjPkgjS/ or https://www.instagram.com/reel/DDIJAfeyemG/. Bare shortcodes such as DN8-GjPkgjS also work. Use Bulk edit to paste many links at once (one per line).

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

How many comments to collect from each post, newest first. With 2 posts and 50 here you get up to 100 comments. Set 0 to collect every comment Instagram shows publicly.

## `commentsSince` (type: `string`):

Keep only comments posted after this point. Use a date (2025-06-01), a date and time (2025-06-01T10:00:00Z) or a relative period: 12h, 7d, 2w, 3m or 1y. Leave empty for all dates.

## `containsText` (type: `string`):

Keep only comments that contain ANY of these words, separated by commas (for example: giveaway, win, price). A word starting with @ keeps comments that mention that account (for example: @nike). Matching ignores upper and lower case. Leave empty to keep all comments.

## `uniqueCommenters` (type: `boolean`):

Keep only the newest comment of each user on each post. Handy for counting giveaway entries.

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

By default the Actor connects without a proxy. If Instagram blocks the requests, it switches to a datacenter proxy and then to a residential proxy automatically, and keeps the stronger proxy for the rest of the run. You can also pick a proxy yourself here.

## Actor input object example

```json
{
  "urls": [
    "https://www.instagram.com/reel/DDIJAfeyemG/"
  ],
  "resultsLimit": 100,
  "uniqueCommenters": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Every comment with its author, likes and date.

## `commenters` (type: `string`):

Who commented: profile, verification and whether it was the post author.

## `insights` (type: `string`):

Mentions, hashtags, emails, links, emojis and writing script of each comment.

## `postDetails` (type: `string`):

The post each comment belongs to.

## `allFields` (type: `string`):

Every field of every comment.

## `postsSummary` (type: `string`):

One row per input link: comments saved, status and the reason when a post stopped early.

# 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 = {
    "urls": [
        "https://www.instagram.com/reel/DDIJAfeyemG/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_wiki/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 = {
    "urls": ["https://www.instagram.com/reel/DDIJAfeyemG/"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("data_wiki/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 '{
  "urls": [
    "https://www.instagram.com/reel/DDIJAfeyemG/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call data_wiki/instagram-comment-scraper --silent --output-dataset

```

## MCP server setup

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