Instagram Comments Scraper: Post and Reel Comments, No Login avatar

Instagram Comments Scraper: Post and Reel Comments, No Login

Pricing

from $1.71 / 1,000 comments

Go to Apify Store
Instagram Comments Scraper: Post and Reel Comments, No Login

Instagram Comments Scraper: Post and Reel Comments, No Login

Instagram comments scraper for public posts and reels: comment text, username, profile link, likes, reply count, time and comment link, newest first, thousands per post. Stop at a date to save time. No login, no cookies. $2.34 per 1,000 comments.

Pricing

from $1.71 / 1,000 comments

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a day ago

Last modified

Share

7,133 Instagram comments from 4 posts in 12 minutes, with username, profile link, likes and time

From The Mine Works, makers of Amazon Product Scraper and B2B Leads Finder, with over 245,000 runs across 280+ public actors.

Updated 23 Oct 2026: first release. Paste post or reel links, get one row per public comment: the text, the commenter's username and profile link, likes, the time and a link to the comment. Bookmark this Actor on its Store page so it is one click away next time.

Why choose this actor?

  • Deep, not a sample. Comments are read newest first, about 14 per request, and the list keeps going. In our test on 23 Oct 2026 the actor read 3,000 comments from each of two posts (one post has 7,300 comments; the 3,000 newest went back 13 days) and the whole visible list of two smaller posts (710 and 989 comments). No Instagram account, cookies or browser.
  • Cheap to run. A page of comments is about 5 KB, so a thousand comments is roughly 70 requests and under 0.5 MB. Our 7,133 comment test run moved 2.4 MB in total and finished with no blocked request.
  • Pay per comment, nothing for errors. Links that are not posts, posts with no visible comments, duplicates and the summary row are never charged.

Run it on Apify

Part of The Mine Works Social media and video family: Threads Scraper, Reddit Scraper, Threads Search Scraper, Instagram Profile Scraper, Instagram Followers & Following, Reddit Search Scraper.

Guide and FAQs: Instagram Comments Scraper on themineworks.com.

Try it in one minute

Paste this into the input (JSON view) and press Start. It returns the 50 newest comments on a public NASA post:

{
"postUrls": ["https://www.instagram.com/p/DeTUk4sDSp-/"],
"maxCommentsPerPost": 50
}

Put several links on separate lines to read several posts in one run. Reels work the same way, and so does a bare shortcode such as DeTUk4sDSp-.

Apify's free plan includes $5 of credit every month, which covers about 2,100 comments at this actor's price.

Copy to your AI assistant

themineworks/instagram-comments-scraper on Apify. Scrapes public Instagram comments from post and reel links with no login and returns one flat row per comment, newest first. Call ApifyClient("TOKEN").actor("themineworks/instagram-comments-scraper").call(run_input={"postUrls": ["https://www.instagram.com/p/DeTUk4sDSp-/"], "maxCommentsPerPost": 200}), then client.dataset(run["defaultDatasetId"]).list_items().items. Required: postUrls (array of post or reel links or 11 character shortcodes, up to 500). Optional: maxCommentsPerPost (default 100, 10 to 10000, per post), newerThan (a date like 2026-10-01 or a period like "7 days"; reading a post stops when its comments get older), proxyConfiguration (Apify datacenter proxy by default). Comment rows have no _type field and carry commentId, postShortcode, postUrl, commentUrl, text, ownerUsername, ownerProfileUrl, ownerId, ownerIsVerified, ownerProfilePicUrl, likesCount, timestamp, position, scrapedAt. Replies are not available to a logged out visitor, so there is no reply data. Skip rows with _type "summary", "info" or "error"; the per post run summary is also the key-value store record OUTPUT. Full spec: GET https://api.apify.com/v2/acts/themineworks~instagram-comments-scraper/builds/default (Bearer TOKEN), which returns inputSchema and readme. Token: https://console.apify.com/account/integrations?fpr=ymnoit&utm_source=apify-readme&utm_medium=referral

Key features

  • Post links, reel links or shortcodes. instagram.com/p/<code>/, instagram.com/reel/<code>/, instagram.com/<user>/p/<code>/ with or without tracking parameters, or the bare 11 character code. Up to 500 posts per run, read three at a time.
  • Commenter profile link on every row. ownerProfileUrl is ready to open or to feed to Instagram Profile Scraper for followers and bio.
  • Stop at a date. newerThan ends a post as soon as its comments get older than your cutoff. Because comments arrive newest first, "everything from the last 7 days" costs only the pages it needs.
  • Per post report. The summary row lists, for every post, how many pages were read, how many comments came back, the oldest and newest comment time, and why it stopped (cap reached, end of list, date reached, rate limit).
  • Rate limit aware. When Instagram answers "rate limit exceeded" the whole run pauses (15, 30, 60 then 90 seconds) and retries on a new IP. A post that is still limited after five tries ends with the rows it has; three such posts in a row end the run. Nothing is charged for what was not delivered.

What Instagram shows a visitor who is not logged in

This actor reads exactly what instagram.com shows to a visitor who has not signed in, so it carries that visitor's limits:

  • Newest first only. There is no "most relevant" or "top comments" order.
  • No replies. Instagram does not send reply threads, reply counts or parent comment ids to a logged out visitor, so the rows are top level comments and there is no reply toggle. If Instagram ever sends repliesCount or parentCommentId, they appear in the row; today they are absent.
  • Hidden comments stay hidden. Comments filtered by the post owner or by Instagram's offensive comment filter are not in the list for anyone.
  • Private accounts and posts with comments turned off return nothing (a row in the summary says so, nothing is charged).

How to use it

Basic: the latest comments on a few posts

{
"postUrls": [
"https://www.instagram.com/p/DeTUk4sDSp-/",
"https://www.instagram.com/reel/Dejxav7l58q/"
],
"maxCommentsPerPost": 200
}

Last week's reaction to a launch

{
"postUrls": ["https://www.instagram.com/p/DeTUk4sDSp-/"],
"maxCommentsPerPost": 5000,
"newerThan": "7 days"
}

The post is read page by page until the comments are older than seven days, or 5,000 are collected.

Find people who asked a question or tagged a friend

Run the post, then filter text for a question mark, a keyword or an @mention in a spreadsheet. Each row has ownerProfileUrl to reach the commenter and commentUrl to open the exact comment.

Giveaway entries

Run the giveaway post with a high maxCommentsPerPost, then count unique ownerUsername values and keep the rows whose text contains the required tag or word. timestamp shows whether a comment was posted before the deadline.

Track how a campaign is received

Schedule the same links daily with newerThan: "1 day". Each run returns only the new comments, and likesCount shows which ones people agreed with.

Input parameters

ParameterTypeDefaultWhat it does
postUrlsarray of stringsrequiredPost or reel links, or 11 character shortcodes. Up to 500.
maxCommentsPerPostinteger100Most comments per post, 10 to 10,000.
newerThanstringemptyStop a post once its comments are older than this: 2026-10-01, 7 days, 2 weeks, 3 months.
proxyConfigurationobjectApify datacenterDatacenter proxy is all it needs. Residential groups are removed if selected.

What data do you get?

One row per comment. Comment rows have no _type field; the summary, info and error rows do, so a filter on _type separates them.

FieldWhat it is
commentIdInstagram's id of the comment, the key to store and join on
postShortcode, postUrlThe post or reel the comment is on
commentUrlLink that opens this comment on Instagram
textComment text with emoji and @mentions as written
ownerUsername, ownerProfileUrl, ownerIdThe commenter
ownerIsVerifiedTrue for a verified commenter
ownerProfilePicUrlSmall profile picture link (Instagram links expire after a few days)
likesCountLikes on the comment
timestampWhen it was posted, ISO 8601 UTC
positionPlace in this post's list for this run, 1 = newest
scrapedAtWhen the row was written
repliesCount, parentCommentIdAbsent today: Instagram does not send them to a logged out visitor

Summary row (_type: "summary", never charged): posts_requested, posts_read, posts_failed, pages_read, comments_found, comments_delivered, charged_for, duplicates_skipped, http_requests, http_rate_limited, http_megabytes, stopped_early, shortfall_reason, and per_post, one entry per post with status, pages, comments_delivered, oldest_comment, newest_comment and why it stopped. The same summary is saved as the OUTPUT record of the run.

Error rows (_type: "error", never charged): one per input that is not a post or reel link, with identifier and reason.

Stable fields for automations

These were present in every comment row of our test runs (7,133 rows from 4 posts), and their names will not change: commentId, postShortcode, postUrl, commentUrl, text, ownerUsername, ownerProfileUrl, ownerId, timestamp, position, scrapedAt. likesCount, ownerIsVerified and ownerProfilePicUrl were present in every row too.

Output example

One comment from a NASA post, 1,823rd newest (test run, 23 Oct 2026, ownerProfilePicUrl left out):

{
"commentId": "18629311897035678",
"postShortcode": "DeTUk4sDSp-",
"postUrl": "https://www.instagram.com/p/DeTUk4sDSp-/",
"commentUrl": "https://www.instagram.com/p/DeTUk4sDSp-/c/18629311897035678/",
"text": "Nice cgi, “nasa” to deceive in Hebrew",
"ownerUsername": "carson.rider",
"ownerProfileUrl": "https://www.instagram.com/carson.rider/",
"ownerId": "37945024684",
"ownerIsVerified": false,
"likesCount": 0,
"timestamp": "2026-10-11T14:33:12.000Z",
"position": 1823,
"scrapedAt": "2026-10-23T18:22:10.472Z"
}

An error row for a link that is not a post (nothing charged):

{ "_type": "error", "error_type": "invalid_input", "identifier": "https://www.instagram.com/nasa/", "reason": "Not used: a profile or other Instagram link, not a post or reel link (use instagram.com/p/<code>/ or instagram.com/reel/<code>/). Not charged." }

Pricing

Pay per event: you pay for the comments you receive, plus a flat $0.003 per run, whatever memory you choose.

EventWhen it is chargedFree planBronze (Starter)Silver (Scale)Gold (Business)
comment-scrapedOnce per comment row stored in your dataset$2.34 per 1,000$2.07 per 1,000$1.89 per 1,000$1.71 per 1,000
run-startOnce per run, after the first page returned comments$0.003$0.003$0.003$0.003

The price of one comment is the price per 1,000 divided by 1,000.

Never charged:

  • inputs that are not post or reel links (each gets an error row);
  • posts that return no comments (private, deleted, comments off, or none yet);
  • a comment seen twice in one post;
  • comments past your maxCommentsPerPost or older than newerThan;
  • the summary, info and error rows;
  • a run with no valid input, or one whose posts return no comments: the start fee is charged only once a page has returned comments;
  • anything past your "Max cost per run". The actor checks the budget before each batch of rows and stops while the total is still below your limit, so the run ends SUCCEEDED with a partial result and a status message saying so.

Run it on a schedule

  1. Open the actor in Apify Console, set your input and click Save as a new task.
  2. In the task, open Schedules, click Add schedule and pick how often (every day, every Monday at 08:00 and so on).
  3. Use newerThan (for example 1 day) so each run returns only the new comments, and join on commentId if you keep a history.
  4. Optional: add an integration (Google Sheets, Slack, a webhook) so each run lands where your team works.

FAQ

What does this actor read?

The comment list Instagram shows to a visitor who is not logged in, on public posts and reels. It does not log in, post, like or follow, and it does not read private accounts.

How many comments can I get per post?

As many as Instagram lists to a visitor who is not logged in, up to the 10,000 you set in maxCommentsPerPost. In our test, two posts with thousands of comments gave the full 3,000 we asked for (the cap), and two posts with 700 and 1,000 visible comments gave all of them, then the list ended. The count shown on Instagram can be higher than the list: it includes replies and comments hidden by the owner or by Instagram's filters. One test post showed 1,255 comments and its visible list ended at 989.

Why are there no replies?

Instagram does not send reply threads to a visitor who is not logged in. The logged out comment list is top level comments only, and the reply count and parent id fields come back empty. We would rather say so than return a column of zeros. If you need replies, you need a logged in session, which this actor does not use.

Why newest first, and can I get the top comments?

The logged out list has one order, newest first. To get the most liked, run the post and sort by likesCount in your spreadsheet.

Why did a post return no comments?

The post may be private, deleted, have comments turned off, or have none yet. The summary row's per_post entry says no_comments for it and nothing is charged. Check the link in a private browser window: if you can see comments there, run it again, because Instagram sometimes answers a first request late.

What happens when Instagram rate limits the run?

Instagram answers "rate limit exceeded" when a very long post is read for a long time. The run pauses all posts for 15 to 90 seconds and retries on a new IP. The rows read so far are always kept and charged, and the summary shows http_rate_limited and the post's status. Splitting a very large list into two runs also helps.

How long does a run take?

About 2 to 3 seconds per page of 14 comments for one post, and three posts are read at once. In our tests 50 comments took 8 seconds, 1,699 comments from two posts took 3.6 minutes, and 7,133 comments from four posts took 12.6 minutes, including pauses after 20 rate limit answers. When Instagram is quiet a single post runs at about 6 comments per second. The default time limit is 3,600 seconds; the actor stops before it and keeps every row.

Do I need an account, cookies or a proxy?

No. The actor uses Apify datacenter proxy, which is included. Nothing to set up.

Which actor should I use for other Instagram data?

Instagram Post Scraper lists a profile's posts (with the post links to paste here), Instagram Reel Scraper does the same for reels, and Instagram Profile Scraper turns a commenter's profile link into followers and bio.

Which formats can I download?

JSON, CSV, Excel, XML, RSS and HTML from the run's Storage tab or through the API. The dataset has two ready views: Comments and Commenters.

Can I use it from Claude, ChatGPT or Cursor (MCP)?

Yes, through Apify's MCP server. Connector URL: https://mcp.apify.com/?tools=themineworks/instagram-comments-scraper

  • Claude: Settings > Connectors > Add custom connector, paste the URL, sign in with Apify.
  • ChatGPT: turn on developer mode, add an MCP connector with the URL, sign in with Apify.
  • Cursor or VS Code: add it as an HTTP MCP server with that URL.
  • Claude Code: claude mcp add -t http instagram-comments-scraper "https://mcp.apify.com/?tools=themineworks/instagram-comments-scraper"

The actor reads only comments that anyone can see without logging in. Comments carry usernames, which are personal data under rules such as GDPR and CCPA. You are responsible for how you use the data, including Instagram's terms and data protection law. This is general information, not legal advice.

Integrations

  • Google Sheets: send each run's comments to a sheet with Apify's Google Sheets integration; one row per comment fits a sheet as is.
  • Make, Zapier and n8n: start a run and read its dataset with the Apify apps and nodes, for example "new comments on our latest post to Slack every morning".
  • Webhooks: have Apify call your URL when a run succeeds, then fetch the dataset.
  • API and SDKs: run it from Python or JavaScript with the Apify client, or with a plain HTTP call (see "Copy to your AI assistant" above).
  • MCP clients: Claude, ChatGPT, Cursor and VS Code can run it as a tool through the connector URL in the FAQ.

More from The Mine Works

Social media and video

Leads and business directories

Marketing, SEO and reviews

LinkedIn

Real estate

Science, health and government data

Jobs and hiring

Company and business data

E-commerce and marketplaces

Food and local services

Developer and AI tools

More tools


Instagram Comments Scraper turns post and reel links into one row per public comment with the commenter, likes and time, with no login and no charge for anything it does not deliver.