Instagram comments scraper: export Instagram comments to CSV, JSON or Excel from any public post or reel — comment text, author, likes, reply threads, @mentions and #hashtags, optional comment likers, no duplicates, no login. Filter by comment date; only new comments on repeat runs.
All notable changes to this actor are documented here.
[0.0.31] - 2026-11-01
Changed
Free plan: when a run is reduced because many new free accounts are running this Actor at once, the run's status line now says so first, so tools and AI agents calling it see the reason.
[0.0.29] - 2026-10-30
Changed
Free plan: clearer wording of the temporary reduced-run notice.
[0.0.28] - 2026-10-30
Changed
Free plan: the 15 runs a month are now counted exactly, even when several runs start at once. If the count cannot be read, the free run stops before any work, charges nothing and says so — run it again in a minute. Paid plans are not affected.
Free plan: a reduced run for new accounts during a surge. While an unusually large number of newly created accounts run this Actor at once, free runs from new accounts are reduced for a short while to one post and up to 10 comments, without replies or comment likers. The run says so and counts as one of the 15. Paid plans are never affected.
Maintenance: the end-of-run bookkeeping is more reliable. Results, columns and price are unchanged.
[0.0.27] - 2026-10-29
Added
Only comments from a date range. Two new optional fields, Only comments posted on or after and Only comments posted on or before (postedAfter, postedBefore). Each takes a date such as 2026-10-01 or a span back from the run's start such as 7 days or 3 weeks, in UTC; a date means the whole day. The range is about the comment's own time, replies included. Comments outside it are not charged and do not count toward Max comments per post. Once a post's comments are older than the start of the range, reading that post stops, so a short range on a busy post costs little. A value that is not a date stops the run before anything is read, so it never reads comments you did not ask for.
Only new comments since your last run. A new option, Skip comments already delivered to you (skipDelivered), off by default. Set it to the last 7, 30, 90, 180 or 365 days, or to "ever" (forever; from the API also any number of days). Comments and replies this Actor already gave you are skipped before the charge and do not use up Max comments per post, so the run reads on for new ones. A new reply under a comment you already have still comes back.
Every run now keeps a record of the comments it gave you in a key-value store named ig-delivered-… in your own Storage, with the option on or off, so the option works from the first day you turn it on. Delete the store to start over.
A run where every comment was outside your date range, or already delivered to you, costs nothing and says so in USER_MESSAGE.
Changed
With either option on, a post is left after 20 pages in a row (400 on a paid plan) that held only comments outside your range or already delivered to you; its summary row says cap, and the run says why.
Saved tasks and existing inputs work exactly as before: without the new fields nothing is skipped and nothing new is charged.
[0.0.26] - 2026-10-26
Changed
The run's messages now speak about comments. Some messages had been written for our post-likers Actor: a failed run said "0 profiles saved", an empty input asked you to "run Post Engagement Discovery" and promised "the accounts that liked or commented on it". They now say "0 comments saved", ask you to add a post link to read its comments, and say what you get back — the comments on the post, with their reply threads. Results, columns and price are unchanged.
[0.0.25] - 2026-10-26
Changed
The live and finished-run screens have a new look. What the run did — the result, its numbers, time and cost — sits on the left; the one thing to do next sits on the right: where to find your results, the upgrade, or what to fix when a run returns nothing. The screen also fits the smaller Output panel in Console. Links, results, columns and price are unchanged.
The run screen now names this Actor and counts what it saves. It used to call itself "Instagram Post Likers Scraper" and to count "profiles saved" and "accounts analyzed"; it now shows this Actor's name, "comments saved" and "posts analyzed". The numbers themselves are unchanged.
[0.0.24] - 2026-10-26
Changed
Security update. The Actor now runs on Node.js 22 with the latest Node.js and certificate security fixes. Inputs, results, columns and price are unchanged; saved tasks keep working.
[0.0.23] - 2026-10-25
Changed
The rating request now appears from your first successful run. After a successful run you may see a short note asking for a star rating — stars only, no text needed — with a button that opens the rating dialog. Later successful runs started in Console show a small "Rate this Actor" button on the finished-run screen until you leave a written review; API and scheduled runs show the note at most twice. It is never shown on demo, failed or empty runs, and never to runs started by an AI agent. Results, columns and price are unchanged.
New rating card on the finished-run screen. The run's numbers move to the left; the right side shows five stars — hover one to see what it means — and the two steps that follow a click.
[0.0.22] - 2026-10-24
Changed
A one-time request to rate the Actor. After your second successful run you may see a short note asking for a star rating, with a button that opens the rating dialog. It appears once, and at most once more a month later if you keep using the Actor; it is never shown on demo, failed or empty runs, and never to runs started by an AI agent. Results, columns and price are unchanged. The always-on "Leave a review" link on the finished-run screen is removed.
[0.0.21] - 2026-10-24
Fixed
The Upgrade and "Leave a review" buttons on the finished-run screen work again. The screen you see in the Output tab after a run linked through the run itself, which had already ended, so these buttons opened an error page. They now open the Apify pricing page and the review page directly. Results, columns and price are unchanged.
[0.0.20] - 2026-10-21
Fixed
The demo run (Start with the Post Links field empty) works again. Since 14 October it could not find the
example post and ended asking for a post link, with no comments returned. It now finds the example post
the same way as before, with a second way to find it if the first one does not answer. Results, columns
and price are unchanged.
[0.0.19] - 2026-10-14
Maintenance
Internal maintenance. Results, columns and price are unchanged.
[0.0.18] - 2026-10-11
Changed
Maintenance: internal improvements. No change to inputs, results, run time or price.
[0.0.17] - 2026-10-11
Changed
Maintenance: groundwork for faster, better-targeted searches. No change to inputs, results, run time or price.
[0.0.16] - 2026-10-11
Changed
The upgrade hint now shows Apify's current starting price for paid plans: $19/month with $19 in platform credits (it said $29).
[0.0.15] - 2026-10-08
Fixed
A post with no comments now says so, instead of asking you to re-run. A post that opened fine but had no comments yet ended the run with "Couldn't finish reading — please re-run", and running it again gave the same answer every time. It now ends with "This post has no comments". Nothing is charged, as before.
"Comments are switched off" now reaches you. A run whose posts all had comments switched off by their owner, or a mix of such posts and posts with no comments, finished with a general "nothing could be collected" message instead of the specific one. It now names the reason.
[0.0.14] - 2026-10-08
Fixed
A temporary error from Instagram data is waited out instead of ending the post after a few seconds. When a post link, comment replies or a commenter's profile answered with a temporary error, the request was asked three times over about nine seconds and then given up — so a run with one post link could finish with no comments while the same post opened fine a few minutes later. A request now keeps asking, spread out, for up to about two minutes of waiting — never past the run's own timeout. If two requests in a row still fail, the run stops asking and names what it could not read this time. Nothing is charged for anything not read.
[0.0.13] - 2026-10-02
Fixed
Post links that could not be opened in time no longer end the run as your input error. When none of your post links opened and at least one failed only because Instagram data could not be reached in time, the run stopped with "Posts that are deleted, or that belong to a private account, cannot be read" — about posts it had not been able to read. Now the run finishes and names the links a re-run can open, separately from any that really are deleted or private, or are not post links at all. Nothing is charged.
A busy moment no longer ends a read after a few seconds. When many runs ask for Instagram data at once, a request used to be given up after about 7 seconds. It now waits its turn, never past the run's own timeout, and a dropped connection or a temporary error is asked again before anything is given up. A post whose comments still could not be read to the end keeps everything already read, as before.
[0.0.12] - 2026-09-23
Fixed
A run that restarts on the platform no longer charges again for comments it already delivered. Comments and likers are billed once, after they reach your results.
Comments that could not be saved to your results are no longer charged.
After a restart, "Max comments per post" still holds, each comment arrives once, and each post's summary row describes the whole run.
The run now stops at the maximum cost per run you set instead of reading on past it.
The closing message names the limit that actually stopped reading. On the free plan with "Max comments per post" below 50, it said raising it would not help; it does, up to the 50 comments a free run reads.
[0.0.11] - 2026-09-23
Fixed
Each comment now carries its own likers, and you pay only for likers in your results. With replies on, a comment's likers could land on the last reply under it, and a comment could come back with an empty "Comment Likers" list while its likers were charged.
The comment count on each row is the one the post shows today. It could be an older, lower number.
Posts with comment likes switched off are now detected before any lookup, as the option describes. Comments with no likes are no longer looked up, so liker runs are faster.
The closing message now says when a liker list came back short — some likers could not be read this time, the list stopped at "Max likers per comment", or comment likes are switched off on the post. RUN_SUMMARY has matching likerLists counts. API_USAGE counts liker lookups under fetch.
[0.0.10] - 2026-09-15
Unchecking "Start a Fresh Run" now picks up from your previous run. The form says it resumes the previous run, but for some accounts the run could not find it and read every post again. It now skips the posts your last finished run read to the end. Runs that finished before this update cannot be picked up this way, so the first such run after it reads everything once.
The free plan's monthly run count is now kept for this actor on its own. Free runs of this actor count toward its own allowance of 15 runs a month, separately from any other actor you use, starting from this build.
The welcome box on your first paid run now fits inside its border. Long tips wrap onto the next line instead of running past the right-hand edge.
Wording. When a single post was read to the end and still came back short of the count it shows, the note said "One post were read to the very end". It now reads "One post was read to the very end", and its title speaks of one post too.
[0.0.9] - 2026-09-15
Wording only, in the README and the storage record descriptions: the API_USAGE record is now described simply as the request count for this run. Nothing changed in how the actor runs, what it returns or what it costs.
[0.0.8] - 2026-09-15
Wording only. On the free plan, the note under a capped post no longer suggests raising
"Max comments per post" — that setting cannot lift the free plan's ceiling of 50 comments per
run, so a bigger number on the same post returned the same 50 comments. The note now says so
plainly, next to the upgrade link that was already there. Nothing changed for paying customers.
[0.0.7] - 2026-09-04
Wording only, from the first run on a real free account. When several links are pasted, the
run reads them in turn and can spend its allowance before the last one gets a turn — that post
now says "not reached — the run ran out of comments before its turn" instead of "stopped
early — 0 comments read", which described it as a failure of the post. Its share now reads
0%; a rounding floor meant to stop a real-but-tiny share showing as 0% was printing 1% for
a post that returned nothing.
[0.0.6] - 2026-09-04
Changed
The free plan is now 50 comments per run, from up to 3 post links (was 500 comments from
up to 50 links). The monthly allowance of 15 runs is unchanged, and it is now the limit you
will actually meet: all fifteen runs together cost $1.95 of the $5 monthly credit Apify gives
a free account, where three of the old runs used $3.90 of it. Links past the third come back
as their own free rows and cost nothing.
When a free run stops at the ceiling it now says what it held back and where to lift it —
how many of your posts were still being read, how many links were not opened, and a link to
your plan page. It never guesses a number of missing comments: a post's counter includes
replies, hidden and deleted comments, so that subtraction would not mean what it looks like.
The demo run on empty input quotes the cap that will actually apply to your account, and its
cost estimate matches it.
Fixed
The monthly-limit message offered "unlimited profiles per run" — this actor reads comments.
The completed-run panel had a "Skipped (free limit)" line that could never appear. It now
reports how many posts were cut short, which is a number a run can produce.
A paid run no longer sees "the free plan still applies" on a demo run.
Nothing changed for paying customers: prices, columns, both views, replies, likers, the 50-link
ceiling and resume all behave exactly as before.
[0.0.5] - 2026-09-04
README wording only, no code change. Two lines now say exactly what the actor does: a run you
abort still uses up a free-plan slot, and replies count toward the per-post cap, so a post with
200 top-level comments and busy threads is closer to 400 rows. Five long sentences shortened.
[0.0.4] - 2026-09-04
Changed
Prices. Comments now cost $2.60 per 1,000 on the Free plan (was $3.00), $2.34 on Bronze,
$2.08 on Silver and $1.82 on Gold, Platinum and Diamond. Comment likers $0.43 per 1,000 (was
$0.50), stepping down the same way. The plan-tier text on each event now says exactly what is
charged.
Name. The actor is now called Instagram Comments Scraper with Replies — CSV Export, No Login.
Same actor, same link.
README rewritten in plain language: what you give, what you get, what you won't get. The
output section lists the columns by group and shows both dataset views.
The Commenters view is described truthfully. It shows the same rows trimmed to the person and
who they tagged; someone who commented twice appears twice — dedupe by handle in your sheet.
Earlier text described it as a list with a single line for each author, which a view cannot
produce.
Sample row corrected. The coverage columns (Delivered Top-Level, Delivered Replies,
Stop Reason) are null on comment rows and filled on the post's post_summary row; the
README sample now shows that.
Input-form help shortened; the run's Output tab now links to COMMENT_COVERAGE.
No change to defaults, columns or limits.
[0.0.3] - 2026-09-03
A post read to its last page is now marked end, not reported as an error.
Per-post totals moved to one free post_summary row per post.
[0.0.2] - 2026-09-03
Prices recorded on the platform. Gold, Platinum and Diamond share one rate.
[0.0.1] - 2026-09-03
First release.
What it does
Paste an Instagram post or reel link and get its comments as rows — text, author, timestamp,
like count — with reply threads returned as their own rows, and optionally the accounts that
liked each individual comment. @mentions and #hashtags are pulled out of the text into their
own columns, so a tag-a-friend giveaway reads as an entrant list without any parsing on your
side. A second output view, Commenters, shows the same rows trimmed to the person and who
they tagged.
Two things worth knowing before your first run
Instagram serves fewer comments than a post says it has. The number on the post counts
replies, hidden comments and deleted comments, so it is normally higher than anything that can
be read back. Across eight posts read to the very end of Instagram's cursor, the share
delivered ranged from 39% to 75%, median 44% — with nothing capping those runs.
Rather than promise a total that cannot be met, every comment row carries the count its post
declares, and each post gets one extra free row with what was actually delivered and why reading
stopped: the list ran out, a cap was reached, the source stopped answering, or comments are
switched off on that post. The run says the same thing in plain words when it finishes, and
writes it to COMMENT_COVERAGE for anything reading programmatically.
Duplicates are removed before you are charged. Instagram occasionally serves the same
comment on two different pages. This actor recognises the repeat by Instagram's own comment id
and drops it, so you are billed once per comment and never receive one twice — including
across a restart, where the ids already delivered are read back from your own results rather
than assumed.
Included
Comments from any public post or reel, up to 50 links per run.
Reply threads, on by default; each reply carries the comment it answers.
Comment likers, off by default and priced as a separate, cheaper event.
Private accounts are included. Roughly six commenters in ten on a busy post have a
private profile; their comment is public and it is in your results.
A per-post cost ceiling, counted in comments — a reply is a comment and spends from the same
allowance, so the cap bounds what you pay either way.
Posts read in turn, a page at a time, so one viral link cannot consume a whole run and leave
the others empty.
Every link that could not be read comes back as its own free row naming the link and the
reason — a mistyped address, a deleted post, or a post inside a private account are told
apart, because only two of the three are worth retrying.
Resume: uncheck Start a Fresh Run to continue from where the last finished run stopped.
Not included, on purpose
There is no sort order. Instagram exposes no ordering control on this data, so no tool can
offer one honestly. Comments arrive in the order Instagram serves them, with each reply
directly behind the comment it answers — which is the only order a thread reads correctly in.