# Instagram Comments Scraper: comments and reply threads

Instagram Comments Scraper collects comments and reply threads from any public post or reel, each with the commenter’s profile attached.

[Run this scraper free](https://apify.com/apidojo/instagram-comments-scraper-api)

[See the three jobs](#jobs)

apidojo/instagram-comments-scraper-api

**Posts**

**Comments each**

Estimated run cost

$0.00

Free Apify plan: 5 runs a month, 10 items a run. No credit card.

**$0.0075** per post, first 15 comments in

**$0.0005** per comment after the first 15

**1.67M** runs all time · 2,305 users

**99.97%** run success, last 30 days

Read on 21 September 2026.

## Which inputs and switches decide the bill?

A post costs $0.0075 to open, whichever of the two inputs you use, and 15 comments come inside that fee. Depth is set by two switches, and one of them is the only way on this actor to be billed for data you already hold.

-   `startUrls`

    $0.0075per post

    15 comments included

    You have the links. Post, reel and video URLs all work.

    `instagram.com/p/DC7Q4z5JPMX/`

-   `postIds`

    $0.0075per post

    15 comments included

    You have shortcodes in a database. Same price, one less thing to parse.

    `DCKDRSpiy3b`

-   `fetchReplies`

    +$0.0075per comment with replies

    15 replies free per run

    Off by default. On, every comment that has replies fires another query before its thread is read.

    `fetchReplies: true`

-   The switch that costs money

    `continueOnDuplicates`

    offleave it that way

    Duplicates bill at $0.0005

    Instagram tends to re-serve the same page of comments. Off, the run stops there. On, it keeps paying for what it already has.

    `continueOnDuplicates: false`

Every comment past the first 15 of a post costs $0.0005. maxItems is the hard spending limit, and the actor’s own formula for it is (budget − query cost) ÷ $0.0005.

**Apify actor:** apidojo/instagram-comments-scraper-api

**Inputs:** startUrls · postIds · fetchReplies · continueOnDuplicates · maxItems · customMapFunction

**Returns:** One record per comment or reply, with the commenter’s profile

**Accepts:** Post, reel and video URLs, or the shortcode out of the URL

**Speed:** 100 to 200 comments per second, per the actor listing

**Login or proxy:** Neither. Public posts only

**Reliability:** 99.97% of 246,367 runs succeeded in the last 30 days

**Free plan:** 5 runs a month, 10 items per run

Listed on Apify as Fast Instagram Comments Scraper API. Apidojo uses the short name.

## Three ways to pull comments

There are 3 ways to run Instagram Comments Scraper: read one post’s comments, follow the reply threads underneath them, or watch many posts at once inside the free fifteen each one includes.

**01 Read a post $0.0075 / post · 15 free**

**02 Follow the threads +$0.0075 per threaded comment**

**03 Watch many posts 15 free comments per post**

### How do you scrape the comments on an Instagram post?

Paste the post URL into startUrls, or its shortcode into postIds. Each post costs $0.0075 with the first 15 comments included, then $0.0005 per comment. A 1,000-comment post costs $0.50.

Input

```
{
  "startUrls": ["https://www.instagram.com/p/DC7Q4z5JPMX/"],
  "fetchReplies": false,
  "maxItems": 1000
}
```

$0.0075 + 985 × $0.0005 \= **$0.50**

What comes back

The **comment record**, The comment, its engagement, and the commenter’s profile on every one.

```
{
  "type": "comment",
  "id": "17919079491232885",
  "postId": "DS5IfIWDTHk",
  "message": "😍",
  "createdAt": "2025-12-30T15:37:46.000Z",
  "likeCount": 3,
  "replyCount": 0,
  "isRanked": true,
  "user": {
    "username": "beah_us",
    "fullName": "Beatriz Macedo",
    "isVerified": true,
    "isPrivate": false
  }
}
```

replyCount tells you what a thread run would cost

Every comment carries replyCount, so a cheap first pass with fetchReplies off shows you exactly how many comments have threads. Multiply that count by $0.0075 before deciding whether the second pass is worth it.

### How do you get Instagram comment replies?

Set fetchReplies to true. Every comment that has replies fires an additional $0.0075 query before its thread is read, and the first 15 replies in the whole run are included. One post with two threaded comments and 40 replies costs $0.035.

Input

```
{
  "startUrls": ["https://www.instagram.com/reel/DZIh4qTIURK/"],
  "fetchReplies": true,
  "maxItems": 500
}
```

$0.0075 + 2 × $0.0075 + 25 × $0.0005 \= **$0.035**

What comes back

The **reply record**, Same fields, but tied to a commentId rather than a postId, and carrying hasReply.

```
{
  "type": "reply",
  "id": "18093151901211540",
  "commentId": "18088658141574216",
  "message": "Link please",
  "createdAt": "2026-06-20T11:17:17.000Z",
  "likeCount": 0,
  "hasReply": false,
  "user": {
    "username": "ncruse1",
    "fullName": "Kita",
    "isVerified": false,
    "isPrivate": true
  }
}
```

The free fifteen is per run, not per thread

The actor’s event table prints "15 replies FREE" against the reply query, which reads as fifteen each. Its own worked example bills 25 of 40 replies across two reply queries, so fifteen are free across the whole run. Budget for the per-run reading, which is the one the example and the prose agree on.

### How do you monitor comments across many Instagram posts?

Batch the posts into one run. Every post carries its own 15 included comments, so ten posts bring 150 free comments with them. Ten posts with 150 comments between them cost $0.075 and nothing more.

Input

```
{
  "postIds": [
    "DCKDRSpiy3b", "DC7Q4z5JPMX", "DS5IfIWDTHk"
  ],
  "fetchReplies": false,
  "maxItems": 45
}
```

3 × $0.0075 \= **$0.022**

What comes back

The **comment record**, inputSource names the post each comment came from, so one dataset splits cleanly.

```
{
  "inputSource": "https://www.instagram.com/p/DS5IfIWDTHk",
  "postId": "DS5IfIWDTHk",
  "type": "comment",
  "message": "when is the restock",
  "likeCount": 3,
  "replyCount": 2
}
```

Batch, do not loop

Ten posts in one run cost the same in query fees as ten separate runs and save the overhead of nine of them. Cap the whole thing with maxItems: at 15 comments a post you stay inside the included quota entirely.

## What is in a comment record?

Two record types come back, and they differ by two fields. A comment hangs off a postId; a reply hangs off a commentId and carries hasReply. Everything else, the message, the engagement and the commenter, is identical.

-   7

    The comment

    type: "comment"

    -   id, postId
    -   message
    -   createdAt
    -   likeCount, replyCount
    -   isRanked
    -   inputSource, which post
-   8

    The reply

    type: "reply", with fetchReplies on

    -   id, commentId
    -   message
    -   createdAt
    -   likeCount, replyCount
    -   hasReply
    -   isRanked, inputSource
-   6

    The commenter

    user, on both types

    -   user.username, user.id
    -   user.fullName
    -   user.profilePicUrl
    -   user.isVerified
    -   user.isPrivate

**type:** "comment" or "reply", how to tell the two shapes apart

**id:** The comment or reply’s own Instagram ID

**postId:** Shortcode of the post, on comments

**commentId:** The parent comment, on replies

**inputSource:** The URL or ID you supplied, carried onto every record

**message:** The comment text, emoji included

**createdAt:** When it was posted, ISO 8601

**likeCount:** Likes on the comment itself

**replyCount:** How many replies it has. What a thread run would cost

**hasReply:** On replies: whether this one has replies of its own

**isRanked:** Whether Instagram surfaced it as a top comment

**user.username · user.id:** The commenter’s handle and numeric ID

**user.fullName:** Display name on their profile

**user.isVerified · isPrivate:** Blue check, and whether their account is private

**user.profilePicUrl:** Avatar URL

Reshape any of these with customMapFunction, a JavaScript function that receives one object and returns one object. Rename, compute, drop a field, but never use it to discard records, which triggers automatic bans.

## What decides the size of the bill?

Six rules decide what a run returns and what it costs. Two are switches you set, and the rest come from Instagram.

-   01

    Leave continueOnDuplicates off

    Instagram tends to serve the same page of comments repeatedly after the first. The actor detects that and stops, which is what keeps the dataset clean. Turned on, it keeps paginating and you pay $0.0005 for each redundant comment. It is a last-resort fallback, not a completeness setting.

-   02

    Replies cost a query each, and the free fifteen is per run

    Every comment with replies fires another $0.0075 query. Fifteen replies are included across the whole run, not fifteen per thread, the event table reads the other way, but the actor’s own worked example bills 25 of 40.

-   03

    Fifteen free comments is per post, not per run

    Ten posts carry 150 included comments between them. That is what makes wide, shallow monitoring nearly free and deep single-post extraction the thing you budget for.

-   04

    Public posts only

    No login and no cookies, so private accounts and restricted posts return nothing. Check the post in a logged-out window first.

-   05

    Both inputs cost the same

    startUrls and postIds are $0.0075 either way. Choose on what your data already looks like: links or shortcodes.

-   06

    customMapFunction must not filter

    It transforms each record. Using it to drop records can trigger automatic bans.

Free Apify accounts get 5 runs a month, capped at 10 items each.

## What does a comments run cost?

A run costs $0.0075 per post plus $0.0005 for every comment past the 15 that post includes. A 1,000-comment post costs $0.50; ten posts with 150 comments between them cost $0.075 and nothing more.

| Run | Method | Calculation | Cost |
| --- | --- | --- | --- |
| 15 comments | 1 post | $0.0075 | $0.0075 |
| 100 comments | 1 post | $0.0075 + 85 × $0.0005 | $0.05 |
| 500 comments | 1 post | $0.0075 + 485 × $0.0005 | $0.25 |
| 1,000 comments | 1 post | $0.0075 + 985 × $0.0005 | $0.50 |
| 150 comments | 10 posts | 10 × $0.0075 | $0.075 |
| 2,000 comments | 50 posts | 50 × $0.0075 + 1,250 × $0.0005 | $1.00 |
| 40 replies on 2 threads | 1 post, replies on | $0.0075 + 2 × $0.0075 + 25 × $0.0005 | $0.035 |

Computed from the query fee and per-comment price the Apify Store API reports. All six of the actor’s own cost-table rows reproduce exactly, and so does its replies example, which is the row that shows the free fifteen replies applying once per run.

## Who reads Instagram comments at scale?

Instagram Comments Scraper is used by 6 kinds of team: community managers, brand monitors, product teams, influencer marketers, researchers and support. The job each one reaches for is what sets their cost.

-   Community managers

    Watch many posts, daily

    See what is being asked under every recent post without reading each one by hand

    $0.075 per 10 posts

-   Brand monitoring

    Read a post, on launch content

    Pull the full comment thread on a launch and read sentiment where it actually happens

    $0.50 per 1,000 comments

-   Product teams

    Follow the threads

    Mine recurring questions and complaints, where the detail sits in the replies rather than the comment

    From $0.035 a post

-   Influencer marketing

    Read a post, on creator content

    Check whether engagement is real, isVerified, isPrivate and likeCount per commenter tell you fast

    $0.05 per 100 comments

-   Researchers

    Watch many posts, batched

    Build comment corpora across many posts for sentiment and discourse analysis

    $1.00 per 2,000 comments

-   Support teams

    Read a post, on the current pinned post

    Catch the questions people ask in comments instead of the inbox

    $0.0075 per post at 15 comments

## How do you drive it from code?

The actor is apidojo/instagram-comments-scraper-api. The REST API and both official clients accept exactly the JSON the web form builds, so a tested run copies straight over.

**Python**

**JavaScript**

**cURL**

```
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

# Cheap first pass: no replies, so replyCount tells you what a
# thread run would cost before you commit to one.
run = client.actor("apidojo/instagram-comments-scraper-api").call(run_input={
    "startUrls": ["https://www.instagram.com/p/DC7Q4z5JPMX/"],
    "fetchReplies": False,
    "maxItems": 1000,
})

rows = list(client.dataset(run.default_dataset_id).iterate_items())
threaded = [c for c in rows if c["replyCount"] > 0]
print(len(rows), "comments,", len(threaded), "with threads")
print("a replies pass would add", f"${len(threaded) * 0.0075:.3f}")
```

```
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

// Ten posts in one run: ten query fees, 150 comments included between them
const run = await client.actor('apidojo/instagram-comments-scraper-api').call({
  postIds: ['DCKDRSpiy3b', 'DC7Q4z5JPMX', 'DS5IfIWDTHk'],
  fetchReplies: false,
  maxItems: 45,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
// inputSource carries the post onto every record, so one dataset splits
const byPost = Object.groupBy(items, (c) => c.postId);
console.log(Object.entries(byPost).map(([p, c]) => [p, c.length]));
```

```
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~instagram-comments-scraper-api/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"postIds":["DCKDRSpiy3b"],"fetchReplies":true,"maxItems":500}'
```

Every run writes to an Apify dataset, exportable as CSV or readable over the API. The keys in these snippets all come from the actor’s input schema.

## Instagram Comments Scraper FAQ

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

One post costs $0.0075 and includes the first 15 comments. Comments past 15 cost $0.0005 each, so a 1,000-comment post costs $0.50 and ten posts with 150 comments between them cost $0.075.

### Does it get comment replies?

With fetchReplies on, yes. Every comment that has replies fires an additional $0.0075 query before its thread is read, and the first 15 replies in the run are included.

### What is continueOnDuplicates, and should I turn it on?

Instagram tends to re-serve the same page of comments after the first. The actor stops when it sees that, which is why the switch is off by default. Turned on, it keeps paginating and bills $0.0005 for each redundant comment. Treat it as a last resort.

### Can I use post IDs instead of URLs?

Yes. postIds takes the shortcode out of the URL, and costs the same $0.0075 per post. Pick whichever matches the data you already hold.

### Does it work on reels?

Yes. Post, reel and video URLs are all accepted, and the output shape is the same for all three.

### How do I know which post a comment came from?

Every record carries inputSource, the URL or ID you supplied, and comments also carry postId. One batched dataset splits cleanly by either.

### Can I scrape comments on a private account?

No. The scraper uses no login and no cookies, so only public posts return data.

### Can I test Instagram Comments Scraper before paying?

Yes. The free Apify plan runs 5 demo runs a month at 10 items each without a card, which is enough to see the comment shape and check replyCount on a real post.

## Where Instagram Comments Scraper fits

[Parent scraper Instagram Scraper The general Instagram scraper, at $0.49 per 1,000 posts across six URL types. It is how you find the posts worth reading; this one reads what people said underneath them.](/scrapers/instagram-scraper/)

Sibling scrapers

-   [Instagram Profile Scraper](/scrapers/instagram-user-scraper/)
-   [Instagram Hashtag Scraper](/scrapers/instagram-hashtag-scraper/)
-   [Instagram Location Scraper](/scrapers/instagram-location-scraper/)

Guides

-   Reading a launch through its comments, not its likes*Coming soon*
-   Spotting fake engagement from the commenter list*Coming soon*
-   What replyCount tells you before you pay for threads*Coming soon*

## Run it on one post

$0.0075, and the first 15 comments are in the price.

`startUrls: ["instagram.com/p/DC7Q4z5JPMX/"]`

[Run this scraper free](https://apify.com/apidojo/instagram-comments-scraper-api)

Apidojo is not affiliated with Meta Platforms, Inc.

## Guides for this scraper

-   [Instagram scraping guides Profiles, hashtags, comments and locations on Instagram: what each scraper returns, what it costs per run, and where the free allowances change the maths.](/blog/instagram/)
-   [What replyCount tells you before you pay Instagram comments are billed per post plus per comment, and reply threads are comments too. The top-level replyCount is your estimate, free.](/blog/instagram/instagram-reply-threads-cost/)
