# Instagram Reels Comment Scraper (`maximedupre/instagram-reels-comments-scraper`) Actor

Collect available top-level comments from public Instagram Reel URLs. Set a per-Reel comment limit and choose popular-first or recent-first order. Save available text, times, likes, commenter details, and Reel context without an Instagram login.

- **URL**: https://apify.com/maximedupre/instagram-reels-comments-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Marketing, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

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

### 💬 Public Instagram Reel comments from known URLs

For developers, researchers, marketers, and teams that need feedback from known public Instagram Reels, this Actor saves one dataset row for each available top-level comment. Each row links the comment to its Reel and includes text, creation time, likes, commenter details, status, media, and Reel context when Instagram provides them. No Instagram login is required.

Use the rows to review audience feedback, compare comments across Reels, or find comments first seen after an earlier run.

**Use cases**

- Collect top-level comments from one known Reel with **[Instagram Reel Comment Scraper](https://apify.com/maximedupre/instagram-reels-comments-scraper/examples/instagram-reel-comment-scraper)**.
- Collect comments from several public Reels in one run with **[Instagram Reels Comment Scraper](https://apify.com/maximedupre/instagram-reels-comments-scraper/examples/instagram-reels-comment-scraper)**.
- Set a per-Reel limit and save comment details with **[Scrape Instagram Reel Comments](https://apify.com/maximedupre/instagram-reels-comments-scraper/examples/scrape-instagram-reel-comments)**.
- Review comments from a list of Reel URLs with **[Instagram Reels Comments Scraper](https://apify.com/maximedupre/instagram-reels-comments-scraper/examples/instagram-reels-comments-scraper)**.
- Find comments first seen after an earlier run with **[Instagram Reel Comments Scraper](https://apify.com/maximedupre/instagram-reels-comments-scraper/examples/instagram-reel-comments-scraper)**.

#### 📦 What each Instagram Reel comment row contains

Results are saved as flat dataset rows. One row is one available top-level comment. A row keeps the source Reel URL and the available comment, commenter, status, media, and Reel details. Replies are not collected as nested threads.

#### ▶️ Run comments from public Reels

1. Add one or more public Instagram Reel URLs under `reels`.
2. Enter a positive `maxComments` value for each Reel.
3. Set `commentOrder` to `popular` or `recent`.
4. Turn `onlyNewComments` on when you want comments first seen since an earlier run with the same Reel URLs.
5. Start the run and open the dataset link in the output.

The Actor saves the first eligible occurrence of a source comment. If the same source comment appears again, later matches are ignored.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `reels` | array of objects | Required list of public Instagram Reel URLs and a comment limit for each Reel. |
| `reels[].url` | string | Public Instagram Reel URL to read. |
| `reels[].maxComments` | integer | Required positive whole number of top-level comments to request for this Reel. This field cannot be left empty, and the schema does not set an upper bound. |
| `commentOrder` | string | Choose `popular` for popular comments first or `recent` for recent comments first. |
| `onlyNewComments` | boolean | When `true`, return only comments first seen since an earlier run with the same Reel URLs. When `false`, return comments found in this run. |

**Default input example**

This is the public input used by a successful current beta run with the prefilled Reel.

```json
{
  "reels": [
    {
      "url": "https://www.instagram.com/reel/DRU4smMj0cu/",
      "maxComments": 5
    }
  ],
  "commentOrder": "popular",
  "onlyNewComments": false
}
```

#### 🧾 Output

The `datasetItems` link opens the default dataset view. Every saved row has `reelUrl`. Other fields are included when Instagram provides them, so optional fields may be absent.

**Run output link**

| Field | Type | What it does |
| --- | --- | --- |
| `datasetItems` | link | Opens the default dataset view with saved Reel comment rows. |

**Dataset rows**

| Field | Type | What it does |
| --- | --- | --- |
| `commentId` | string | Stable ID of the comment when Instagram provides it. |
| `text` | string | Text in the top-level comment. |
| `createdAt` | date-time string | Time when the comment was created, in ISO 8601 format. |
| `reelUrl` | URL string | URL of the Instagram Reel that contains the comment. |
| `likeCount` | integer | Number of likes reported for the comment when available. |
| `reportedCommentCount` | integer | Total comments reported for the Reel when available. |
| `commenter` | object | Available profile details for the person who wrote the comment. |
| `commenter.username` | string | Instagram username of the commenter. |
| `commenter.accountId` | string | Stable Instagram account ID of the commenter when available. |
| `commenter.isVerified` | boolean | Whether Instagram marks the commenter as verified when available. |
| `commenter.profileImageUrl` | URL string | Profile image URL when available. |
| `status` | object | Status details reported for the comment when available. |
| `status.isCovered` | boolean | Whether Instagram marks the comment as covered when available. |
| `media` | array of objects | Media attached to the comment when available. |
| `media[].type` | string | Type of attached comment media when available. |
| `media[].url` | URL string | URL of attached comment media when available. |
| `reel` | object | Available context about the Reel that contains the comment. |
| `reel.caption` | string | Caption text of the Reel when available. |
| `reel.owner` | object | Available profile details for the Reel owner. |
| `reel.owner.username` | string | Instagram username of the Reel owner when available. |
| `reel.owner.accountId` | string | Stable Instagram account ID of the Reel owner when available. |
| `reel.owner.displayName` | string | Display name of the Reel owner when available. |
| `reel.owner.isPrivate` | boolean | Whether Instagram marks the Reel owner's account as private when available. |

**Example row**

This genuine row came from a successful current beta run with the prefilled input. It is shown as returned, so optional fields that were not returned, such as `media`, are not added.

```json
{
  "commentId": "18150067549483569",
  "text": "😂😂😂😂😂😂😂",
  "createdAt": "2026-04-09T13:27:53.000Z",
  "reelUrl": "https://www.instagram.com/reel/DRU4smMj0cu/",
  "likeCount": 0,
  "reportedCommentCount": 479,
  "commenter": {
    "username": "risfankhiyarulmizan",
    "accountId": "9504336818",
    "isVerified": false,
    "profileImageUrl": "https://scontent-lga3-2.cdninstagram.com/v/t51.82787-19/765637505_18237171217312819_4486996020585504070_n.jpg?stp=dst-jpg_s150x150_tt6&_nc_cat=107&ccb=7-5&_nc_sid=f7ccc5&efg=eyJ2ZW5jb2RlX3RhZyI6InByb2ZpbGVfcGljLnd3dy4xMDgwLkMzIn0%3D&_nc_ohc=xQk-uXgSYfcQ7kNvwHtqW8e&_nc_oc=Adpwm2IlWc0Ne3yAj2xl3MBCRmoUcWwYw3Z4NJL96xoT410oCFbx4gEcObgs8EeFkL4&_nc_zt=24&_nc_ht=scontent-lga3-2.cdninstagram.com&_nc_gid=kFl8hndOdueNnBqHh8K3GA&_nc_ss=73689&oh=00_AQLoJcXhzgvOH_0MI5JsZRwNNG00wHvk3h9ZLMfEATPxvA&oe=6A991B30"
  },
  "status": {
    "isCovered": false
  },
  "reel": {
    "caption": ".\n.\n.\n.\n.\n.\n#cat #catsoftheworld #catsoftheday #catsgram #pet #petlovers #petlover #petsofinstagram #funny #funnyvideos #cute #cutecats #kitten #kittenlove #kittycat #reels",
    "owner": {
      "username": "yuumi_cat9",
      "accountId": "17841463300525511",
      "displayName": "Yuumi_cat9",
      "isPrivate": false
    }
  }
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing based on saved top-level comments. One charge event covers one available top-level comment saved from a public Reel. Apify shows the current price tiers before you run the Actor.

#### 🔌 Integrations

**Dataset access**

Open the `datasetItems` link in the run output to view or export the saved rows in Apify.

**Video guide**

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Does this collect replies?

No. The Actor collects available top-level comments. Nested reply bodies and reply threads are outside its scope.

##### Do I need an Instagram login?

No. The Actor reads public Instagram Reel comments without requiring an Instagram login.

##### Can I submit more than one Reel?

Yes. Add several public Reel URLs to `reels`, and set a separate positive `maxComments` value for each one.

##### How do popular and recent order differ?

`popular` requests popular comments first. `recent` requests recent comments first.

##### What does `onlyNewComments` do?

It requests only comments first seen since an earlier run for the same Reel URLs. Keep it `false` to return comments found in the current run.

##### How are duplicate comments handled?

The first eligible occurrence is saved. Later matches for the same source comment are ignored, and the saved row describes the first match.

##### What if a Reel is private, deleted, or unavailable?

Private, deleted, and otherwise inaccessible Reels are outside the supported public source boundary.

##### Can I use a profile, hashtag, or keyword instead of a Reel URL?

No. This Actor works from submitted public Reel URLs. Profile, hashtag, keyword, feed, and other content discovery are outside its scope.

##### What happens when Instagram does not provide an optional field?

That field may be absent from the row. The Actor does not invent missing public values.

##### Is `maxComments` required?

Yes. Enter a positive whole number for each Reel. The schema does not set an upper bound.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~instagram-reels-comments-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Instagram Downloader API](https://apify.com/maximedupre/instagram-downloader-api): Download media links and metadata from the same public Instagram URLs.
- [Instagram User Search](https://apify.com/maximedupre/instagram-user-search-scraper): Find public Instagram accounts by keyword before choosing Reel URLs.
- [Instagram Profile Stats Scraper](https://apify.com/maximedupre/instagram-profile-stats-scraper): Check public profile stats and recent post or Reel previews for known accounts.
- [Instagram Related Users Scraper](https://apify.com/maximedupre/instagram-related-users-scraper): Explore public accounts related to a seed profile after comment review.
- [Instagram Comment Scraper](https://apify.com/dz_omar/instagram-comment-scraper): Collect top-level comments from public Instagram Reels with another Store option.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `reels` (type: `array`):

Add one or more public Instagram Reel URLs. Set a positive maximum for top-level comments on each Reel.

## `commentOrder` (type: `string`):

Choose whether to collect popular comments first or recent comments first.

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

Turn this on to return only comments first seen in an earlier run with the same Reel URLs. Leave it off to return comments found in this run.

## Actor input object example

```json
{
  "reels": [
    {
      "url": "https://www.instagram.com/reel/DRU4smMj0cu/",
      "maxComments": 5
    }
  ],
  "commentOrder": "popular",
  "onlyNewComments": false
}
```

# Actor output Schema

## `datasetItems` (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 = {
    "reels": [
        {
            "url": "https://www.instagram.com/reel/DRU4smMj0cu/",
            "maxComments": 5
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/instagram-reels-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 = { "reels": [{
            "url": "https://www.instagram.com/reel/DRU4smMj0cu/",
            "maxComments": 5,
        }] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/instagram-reels-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/g3dbwwRwHZpSYbPIs/builds/2euXUGZaBUNGPWFdV/openapi.json
