Instagram Comment Scraper avatar

Instagram Comment Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Instagram Comment Scraper

Instagram Comment Scraper

Extract available comments from public Instagram posts and reels: comment text, usernames, user IDs, verified badges, timestamps, like counts, and post links. Without a Session ID, it collects what Instagram shows signed-out visitors, page after page; add one for signed-in collection and replies.

Pricing

from $1.00 / 1,000 results

Rating

5.0

(2)

Developer

Rush

Rush

Maintained by Community

Actor stats

5

Bookmarked

387

Total users

28

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

Extract available comments and replies from public Instagram posts and reels. Get comment text, usernames, timestamps, and post context when Instagram supplies them. Leave Session ID empty to collect the comments Instagram shows to signed-out visitors, page after page, or provide a Session ID for signed-in collection and replies. A supplied session must pass verification before collection starts.

Features

  • Signed-out or signed-in collection — collect the comments Instagram shows to signed-out visitors, page after page, or use your Session ID for signed-in collection and replies
  • Comments and replies — one row per top-level comment, with available replies nested inside it when requested with a Session ID
  • Source-based fields — text, author, verification status, profile picture, timestamp, and counts when available; unknown counts stay null
  • Progressive results — saved comments appear in the dataset during the run
  • Batch processing — up to 50 posts or reels per run
  • Checked progress — saved progress is checked against the dataset before continuing after a restart; an unconfirmed save stops for review

Collection is bounded: Max Comments Per Post defaults to 200 (range: 10–100,000), and the whole run can save at most 100,000 top-level comment rows. Requests, reply collection, and available run resources are also limited. These are upper bounds, not promises to collect every comment or reach a requested count.

What data do you get

For each comment extracted, you receive:

  • Comment text — comment content supplied by Instagram
  • Commenter info — username, user ID, verification status, and profile picture URL when available
  • Timestamp — posting time in ISO 8601 format, or null when unavailable
  • Comment likes — reported like count, or null when unknown
  • Reply comments — available reply content nested inside each parent comment when requested with a Session ID
  • Reply count — reported number of replies, or null when unknown
  • Post context — post URL and shortcode, plus the author username and reported comment total when available

How to use

  1. Go to the Input tab
  2. Add Instagram post or reel URLs, one per line (up to 50 per run)
  3. (Optional) Add your Session ID to request signed-in comments and replies
  4. (Optional, requires Session ID) Enable Include Reply Comments to request available reply content
  5. Click Start and wait for the results
  6. Open Comments Overview or Full Details, then check Run summary and the run log for limits, missing data, or saving issues before using the export

Accepted input formats

FormatExample
Post URLhttps://www.instagram.com/p/ABC123/
Reel URLhttps://www.instagram.com/reel/ABC123/
Link with the author's namehttps://www.instagram.com/username/reel/ABC123/
ShortcodeABC123

Links copied from Instagram also work as /reels/ABC123/, /tv/ABC123/, embed links, comment and reply links, instagr.am and m.instagram.com links, links typed with full-width characters, and links without https://. Duplicate inputs pointing to the same post are combined. Each URL or shortcode can contain at most 512 characters; Session ID has the same limit, checked when the run starts.

An input that cannot be read as an Instagram post or reel link, such as a profile link, a share link, or an entry that names more than one post or holds extra text beside its link, is skipped and the other posts are still collected. The log names the first 10 skipped inputs with the reason, the run summary counts all of them, and the run's status is partial. Blank entries are ignored. When no input can be read as a post or reel, the run stops before collecting and writes no run summary. Some usernames look like shortcodes and are tried as posts; use the post's link instead.

Input example

Illustrative input only. Replace ABC123 with a post you want to collect; it is not a verified example post. This example runs without a Session ID.

{
"postUrls": ["https://www.instagram.com/p/ABC123/"],
"maxComments": 200,
"includeReplies": false
}

Using a Session ID (optional)

With no Session ID, the scraper collects the comments Instagram shows to signed-out visitors, page after page, up to Max Comments Per Post. A post that stays below that limit is reported as not fully collected unless its saved comments reach the total Instagram reports for it: the list Instagram shows to signed-out visitors can end before all of a post's comments. For replies, posts restricted to signed-in viewers, and signed-in comment collection, provide your Instagram Session ID. A session does not guarantee access to a post, complete threads, or known like counts.

What you get with a Session ID

FeatureWithout Session IDWith Session ID
Comments per postComments shown to signed-out visitors, page after page, up to your limit and run limitsAvailable signed-in results, up to your limit and run limits
Reply commentsNot supportedAvailable replies when Include Reply Comments is enabled
Comment like countsReported count, or null if unknownReported count, or null if unknown
Reply countsUsually null: expect repliesCount to be blankReported count, or null if unknown
Posts restricted to signed-in viewersCannot be collected without an allowed sessionAccess depends on Instagram and the account's permissions
Session verificationNot usedRequired; failure stops the run

How to find your Session ID

Method 1 — Browser Developer Tools

  1. Log in to Instagram in your browser
  2. Open Developer Tools (F12)
  3. Go to Application → Cookies → https://www.instagram.com
  4. Find the cookie named sessionid
  5. Copy its value and paste it into the Session ID field. If you paste sessionid=… or a whole cookie line instead, only the sessionid value is used

Method 2 — Cookie Editor extension

  1. Install a cookie editor extension for your browser (e.g., Cookie-Editor for Chrome/Firefox/Edge)
  2. Go to instagram.com and make sure you are logged in
  3. Click the extension icon
  4. Find the cookie named sessionid
  5. Copy its Value and paste it into the Session ID field

Note: Cookie editor extensions are third-party tools not affiliated with this scraper or Apify. Use them at your own discretion and only install extensions from trusted sources.

Important notes

  • The Session ID field is marked as secret in the input form. Treat its value as an account credential and do not put it in shared examples or support messages
  • If a supplied session is invalid, expired, or cannot be verified, the run stops instead of switching to signed-out collection. Signed-out collection is used only when no Session ID is supplied
  • Before each run, confirm the account can open Instagram normally and copy a fresh Session ID. A fresh Session ID does not guarantee access or prevent restrictions
  • Use Max Comments Per Post to limit top-level rows (default: 200, range: 10–100,000). The run-wide cap is 100,000 rows across all posts, including rows already saved before a restart
  • Enable Include Reply Comments with a Session ID to request available replies. Replies are nested in their parent row and do not count as additional top-level rows. Without a Session ID, replies are not collected: the run saves the comments and reports itself partial, and its log and closing status message say that replies need a Session ID
  • Collecting replies takes more requests and time per comment. Comments come first, so some threads may be incomplete. The log says, for each post, how many comments' replies were not all collected

Usage considerations

  • Start small — Begin with 1 post, Max Comments Per Post set to 10, and Include Reply Comments off. Check the saved results and confirm normal account access before increasing the scope. A small result limit does not remove the risk of account restrictions.
  • Using a Session ID means your account is being used for automated data access, which Instagram may flag. This can result in temporary rate limiting, session expiration, or in more serious cases account restrictions. Use a secondary or dedicated account instead of your main account, and avoid frequent or back-to-back runs
  • Comments are saved progressively. When replies are enabled, the scraper requests replies before saving the parent comment
  • Comments may be saved in a different order from Instagram's display. The index field records the saved order within each post
  • A run can make up to 10,000 requests to Instagram, and collecting replies uses them too; available run resources can stop it earlier. Comments already saved are kept
  • When one of these stops a run early, the run summary says so and what to do next:
    • a limit: the request or resource allowance, the time limit, the maximum charge set for the run, or the cap of 100,000 saved comments
    • a sign-in check that did not pass, or Instagram refusing or limiting the signed-in requests
    • a security check on the account
    • an interrupted save
  • The summary can be missing when a run, or a restart of it by the platform, fails or is stopped before it can write one: for example early in startup, close to the time limit, or when saving fails or is very slow, including the save of the summary itself; a missing summary is not evidence of success

Output

Overview fields

FieldDescription
postShortcodeInstagram shortcode identifier
usernameCommenter username
profileUrlLink to the commenter's Instagram profile
textComment text supplied by Instagram
repliesCountReported reply count, or null
commentLikeCountReported like count, or null
timestampPosting time, or null
postUrlLink to the original post

Full detail fields

FieldTypeDescription
postUrlstringDirect URL to the Instagram post or reel
postShortcodestringInstagram shortcode identifier
postOwnerUsernamestring/nullUsername of the post author
postCommentCountinteger/nullComment total reported for the post; not a count of rows saved
commentIdstringInstagram's comment ID
textstringSupplied comment text; empty when unavailable. A GIF URL may be represented as [GIF] <url>
usernamestring/nullCommenter username
profileUrlstring/nullDirect link to the commenter's Instagram profile
userIdstring/nullCommenter user ID
isVerifiedboolean/nullReported verification status, or null when unknown
profilePicUrlstring/nullURL of commenter's profile picture
timestampstring/nullWhen the comment was posted (ISO 8601)
commentLikeCountinteger/nullReported like count, or null when unknown
repliesCountinteger/nullReported reply count, or null when unknown
repliesarrayCollected replies; may be empty or incomplete even when repliesCount is positive
indexintegerSaved row position within this post (1-based), not Instagram's ranking
scrapedAtstringExtraction timestamp (ISO 8601)

Unknown counts stay null; they are never guessed or filled in from the replies collected. 0 means Instagram reported zero. An empty replies array does not prove that no replies exist.

GIF and profile picture links are temporary: Instagram stops serving them within days. Download any you need soon after the run.

Reply comment fields

Each reply in the replies array contains:

FieldTypeDescription
idstringInstagram's reply ID
textstringSupplied reply text; empty when unavailable. A GIF URL may be represented as [GIF] <url>
ownerUsernamestring/nullReply author username
ownerProfileUrlstring/nullDirect link to the reply author's Instagram profile
ownerProfilePicUrlstring/nullURL of reply author's profile picture
timestampstring/nullWhen the reply was posted (ISO 8601)
likesCountinteger/nullReported like count, or null when unknown
repliesCountinteger/nullReported reply count, or null when unknown; not assumed to be zero
repliesarrayEmpty; further nesting is not collected

Run summary

The Run summary output links to the OUTPUT record. Check it together with the run status and log; a successful platform status alone does not establish complete collection.

statusMeaning
completeCollection finished within the configured scope without a recorded shortfall. This does not certify that every Instagram comment or reply was collected
partialSome requested information could not be collected (for example, a post collected without a Session ID stayed below Max Comments Per Post without reaching the total Instagram reports for it), an input was skipped, or collection was interrupted or limited
budget_reachedThe run reached one of its limits: its request or resource allowance, its time limit, the maximum charge set for it, or the run-wide saved-row cap
failedCollection or saving could not be safely completed; review the message, log, and saved results

A resource allowance or time limit that cuts a run short before it saved any comment ends the run as failed, and its message says why.

The record also contains savedComments (saved top-level rows), requestedPosts (distinct valid posts), skippedInputs (inputs skipped because they are not post or reel links), requestCount (requests counted against the run's request allowance), a message, and a posts array with each shortcode, its savedComments, and finished (true when the run is done with that post and its saved progress records it, including a post it skipped). Replies remain inside their parent rows. A missing summary is not evidence of success.

After a run reaches one of its limits (its resource allowance, its time limit, its request allowance, the maximum charge set for it, or the run-wide saved-row cap), start a new run for the posts that were not finished (finished: false in the summary's posts). A new run creates a separate collection, so a post that was cut is collected again from its first comment.

Before the same run continues (after a restart, for example), the scraper checks its saved progress against the dataset. If that cannot be confirmed, or the run has no resources left, it stops before making any request, the saved comments are kept, and its message says how to go on. Progress saved by an earlier version of the scraper is not continued. When saving a comment is interrupted, the run's message says how to go on:

  • "this run cannot be continued" or "this run may not be able to continue": start a new run for the posts that were not finished (finished: false)
  • "check the saved results before continuing": you can continue the run; the continuation checks its saved comments first, and stops before any request if they do not match its saved progress
  • "check the saved results." followed by another step, after a security check on the account, Instagram refusing or limiting the signed-in requests, or a sign-in check that did not pass: follow that step instead of continuing the run, which would send the same Session ID to the same check

This does not guarantee that a run is never interrupted or that every comment is saved exactly once. Review saved results before starting another run.

Sample output

Illustrative only: These examples describe the output structure, not observed Instagram data. All post identifiers, accounts, IDs, text, counts, and timestamps are fictional. The placeholder posts are not verified to exist. null demonstrates an unknown value.

Post URL example (/p/)

{
"postUrl": "https://www.instagram.com/p/ABC123/",
"postShortcode": "ABC123",
"postOwnerUsername": null,
"postCommentCount": null,
"commentId": "18000000000000001",
"text": "Example comment text.",
"username": "example_commenter",
"profileUrl": "https://www.instagram.com/example_commenter",
"userId": "12345678",
"isVerified": null,
"profilePicUrl": null,
"timestamp": "2026-02-15T08:30:22.000Z",
"commentLikeCount": null,
"repliesCount": null,
"replies": [],
"index": 1,
"scrapedAt": "2026-02-23T04:01:31.984Z"
}

Reel URL example (/reel/)

{
"postUrl": "https://www.instagram.com/reel/REEL01/",
"postShortcode": "REEL01",
"postOwnerUsername": "example_post_author",
"postCommentCount": 10,
"commentId": "18000000000000002",
"text": "Example question about the reel.",
"username": "example_commenter",
"profileUrl": "https://www.instagram.com/example_commenter",
"userId": "12345678",
"isVerified": false,
"profilePicUrl": null,
"timestamp": "2026-01-09T14:56:18.000Z",
"commentLikeCount": 0,
"repliesCount": 1,
"replies": [
{
"id": "18000000000000003",
"text": "Example reply to the question.",
"ownerUsername": "example_reply_author",
"ownerProfileUrl": "https://www.instagram.com/example_reply_author",
"ownerProfilePicUrl": null,
"timestamp": "2026-01-09T15:02:45.000Z",
"likesCount": null,
"repliesCount": null,
"replies": []
}
],
"index": 1,
"scrapedAt": "2026-02-23T04:01:31.984Z"
}

Tips and best practices

  • Export formats — Download results as JSON, CSV, or Excel from the dataset. Use JSON to retain nested reply objects
  • Scheduling — Set up automatic runs without a Session ID to track comments on posts over time
  • API access — Integrate with your tools using the Apify API

Integrations

Connect your data to Google Sheets, Slack, Zapier, Make, or any tool via the Apify integrations.

Use cases

  • Social listening — Monitor what people say about brands, products, or topics
  • Sentiment analysis — Analyze comment tone and keywords at scale
  • Competitor research — Track audience reactions to competitor content
  • Content strategy — Understand which posts generate the most engaging discussions
  • Influencer marketing — Evaluate comment quality and engagement authenticity

FAQ

How many comments are extracted per post? Max Comments Per Post is an upper bound on saved top-level rows, not a promised count. The whole run is limited to 100,000 saved rows across all posts and a shared request allowance. What Instagram shows to signed-out visitors, access restrictions, unavailable replies, and collection limits can all reduce the result count. Collecting replies takes more requests and time per comment, and comments come first. Neither reaching your limit nor complete means every comment on Instagram was collected.

Does this scraper need an Instagram account? Not to collect the comments Instagram shows to signed-out visitors. Replies, posts restricted to signed-in viewers, and signed-in collection require a Session ID. Counts can still be unknown in either mode.

What happens if my Session ID expires? If the supplied session cannot be verified, the run stops. It does not silently switch to signed-out collection. Check the account in Instagram and provide a current Session ID. If Instagram refuses the signed-in requests during a run, the run stops there, keeps the comments it saved, and says so. Try again later in a new run, with a fresh Session ID if it keeps happening: continuing the same run would send the same Session ID again. If you deliberately want a run without a Session ID, remove it before starting a new run; replies are not collected without one.

The run says Instagram wants my account to complete a security check — what is that? Open Instagram in a browser, sign in to the account, and follow any verification instructions it shows. Then check the Session ID before another run. This can also happen during a run: the run then stops and keeps the comments it saved. Already saved rows remain available for review. A security-check message alone does not establish whether the session, posts, or later requests will work after verification.

What happens if a post is private or deleted? The scraper reports posts it cannot access. That does not prove they are private or deleted: access restrictions or an unreadable response can also prevent collection. Other posts may still be processed unless a run-wide restriction, limit, or saving issue stops the run.

Why does a post say it can only be viewed while signed in? Instagram indicated that signed-in access is needed. Check that your account can open the post and supply its Session ID for a new run. A Session ID does not guarantee that Instagram will provide the requested comments.

What happens if the scraper is rate limited? Without a Session ID, a post that still cannot be opened is skipped and named by its link in the log, and the run moves on: include that post in a new run. When a post's next comments cannot be requested, the comments already saved for it are kept and the post is reported as not fully collected. When several posts in a row, or the last post, cannot be opened, the run stops: continue it later, or include the unfinished posts in a new run; the summary's posts lists them (finished: false). With a Session ID, collection stops at the first restriction to protect the account. Review the saved rows, run log, and summary; do not assume the remaining comments were collected or that an immediate rerun will succeed.

A post's log line says "some requested information could not be collected" — what does that mean? The scraper could not establish that collection reached the end, and the line names the post by its link. Without a Session ID, a post is reported this way when it stays below Max Comments Per Post and its saved comments do not reach the total Instagram reports for it: the list Instagram shows to signed-out visitors can end before all of a post's comments. A post from which no comment could be collected is skipped instead: the log names it by its link and says "comments could not be collected". A post Instagram reports as having no comments is not skipped; the log says "no comments found", unless part of its collection could not be completed (an answer that could not be read, for example, or a comment that could not be saved): then the line names the post by its link as not fully collected. Review the saved rows and OUTPUT; another run is not guaranteed to return the missing comments.

A post "opened but its comments could not be read" — is it broken? The response identified the post, but the scraper could not read the expected comment information. This does not prove the post is deleted or that the problem is temporary. Check the post in Instagram and review the run log before deciding whether to try again.

Can I scrape reply comments (nested comments)? Enable Include Reply Comments and provide a Session ID. Collected replies appear in the parent's replies array. Replies may be incomplete, and their count and like fields may be null. Further reply nesting is not collected. Without a Session ID, the comments are still saved without replies, the run is partial, and its log and closing status message say that replies need a Session ID.

Why are counts blank or null? Instagram did not provide a value for that field. Unknown is not zero. The number of saved replies is not used to invent repliesCount, and a Session ID does not guarantee known counts.

Why is repliesCount different from the number of saved replies? repliesCount preserves Instagram's reported count, while replies contains the replies actually collected. Instagram can report more replies than it returns. When Instagram stops offering more replies for a comment, every reply it returned is saved, the run is not marked partial for the difference, and the log says for how many comments the counts differ. The mismatch alone does not tell us whether a reply was deleted, hidden, or unavailable for another reason. A very large thread is cut at a reply limit, and replies can stop early so that the remaining posts can still be opened; those cases mark the run partial, as does a thread Instagram does not confirm has ended.

Can a run continue after a restart, an abort or an uncertain save? The scraper can continue unfinished posts when the same run's resources, input, saved progress, and dataset all check out; otherwise it stops and the saved comments remain available. After a run reaches one of its limits, start a new run for the posts that were not finished instead. A temporary connection interruption keeps unfinished posts available for a later continuation; it does not restart collection by itself. When Instagram refuses the signed-in requests or asks for a security check, the run says what to do instead. Check that the account can open Instagram normally before starting the new run its message names (for the posts that were not finished, or, when every post was finished, for the posts the log names as not fully collected), and avoid immediate repeated attempts after a restriction.

To continue a run, open it in Apify Console and use Resurrect. A run you aborted can be continued the same way. A continuation is a new start of the run, and its start is charged again; comments saved before are not saved or charged again. It first checks the comments already saved, and an unfinished post is read again from its first comments, skipping the ones already saved; until new comments appear, its status shows how far it has read back through them. A run that saved many comments can reach its resource allowance on that check before it collects more; it then says so, and a new run for the posts that were not finished is the way on. A continuation uses the original inputs, including the Session ID; to change the inputs, start a new run. Apify counts the time limit again from the moment the run is resurrected. Saved comments and their replies are kept, and posts previously marked finished are not reopened. A run that reached the maximum charge set for it is not continued this way, even with a higher limit: start a new run for the posts that were not finished. If a run whose save was interrupted says that it cannot be continued, or that it may not be able to continue, start a new run for the posts that were not finished, which collects them again from their first comment. Review the dataset and summary so you do not mistake repeated collection for new comments.

Do I have to wait for the whole run to finish? You can inspect already saved comments while the run is in progress. When replies are enabled, reply collection happens before the parent row is saved. Wait for the final run status and review OUTPUT before treating an export as the run's finished result.

More Actors

Looking for other Instagram data? Explore more scrapers by futurizerush.

Disclaimer

This tool is provided for educational and research purposes only. Users are solely responsible for ensuring their use complies with Instagram's Terms of Service and all applicable laws and regulations.

By using this scraper, you acknowledge that:

  • Automated data collection from Instagram carries inherent risks, including potential account restrictions or suspension
  • Providing a Session ID means authorizing this tool to make requests on behalf of your Instagram account. Instagram may classify this activity as automated access
  • The developers of this tool are not responsible for any consequences resulting from its use, including but not limited to account restrictions, data loss, or legal liability
  • You should use this tool ethically and responsibly, respecting the privacy and rights of content creators and commenters
  • Extracted data should be handled in compliance with applicable data protection regulations

Keywords: Instagram comment scraper, Instagram comments export, extract Instagram comments, Instagram reel comments, comment scraper, social media data, audience insights, Claude Code, OpenClaw, Gemini, Antigravity, Codex, ChatGPT

⌂ 换网址