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.

apidojo/instagram-comments-scraper-api

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.

Instagram Comments Scraper specificationsapidojo/instagram-comments-scraper-api
Apify actorapidojo/instagram-comments-scraper-api
InputsstartUrls · postIds · fetchReplies · continueOnDuplicates · maxItems · customMapFunction
ReturnsOne record per comment or reply, with the commenter’s profile
AcceptsPost, reel and video URLs, or the shortcode out of the URL
Speed100 to 200 comments per second, per the actor listing
Login or proxyNeither. Public posts only
Reliability99.97% of 246,367 runs succeeded in the last 30 days
Free plan5 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.

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
Field referenceDocumented in the actor README
type"comment" or "reply", how to tell the two shapes apart
idThe comment or reply’s own Instagram ID
postIdShortcode of the post, on comments
commentIdThe parent comment, on replies
inputSourceThe URL or ID you supplied, carried onto every record
messageThe comment text, emoji included
createdAtWhen it was posted, ISO 8601
likeCountLikes on the comment itself
replyCountHow many replies it has. What a thread run would cost
hasReplyOn replies: whether this one has replies of its own
isRankedWhether Instagram surfaced it as a top comment
user.username · user.idThe commenter’s handle and numeric ID
user.fullNameDisplay name on their profile
user.isVerified · isPrivateBlue check, and whether their account is private
user.profilePicUrlAvatar 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.

What a run costsQuery fee + $0.0005 × billable items
RunMethodCalculationCost
15 comments1 post$0.0075$0.0075
100 comments1 post$0.0075 + 85 × $0.0005$0.05
500 comments1 post$0.0075 + 485 × $0.0005$0.25
1,000 comments1 post$0.0075 + 985 × $0.0005$0.50
150 comments10 posts10 × $0.0075$0.075
2,000 comments50 posts50 × $0.0075 + 1,250 × $0.0005$1.00
40 replies on 2 threads1 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.

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.

Sibling scrapers

Guides

  • Reading a launch through its comments, not its likesComing soon
  • Spotting fake engagement from the commenter listComing soon
  • What replyCount tells you before you pay for threadsComing 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

Apidojo is not affiliated with Meta Platforms, Inc.