Instagram Comment Scraper
Pricing
from $1.00 / 1,000 results
Instagram Comment Scraper
Extract comments and replies from public Instagram posts and reels. Get comment text, usernames, user IDs, verified badges, timestamps, reply threads, and post context. Works without login where Instagram offers a public preview; add a session for deeper access. (Beta)
Pricing
from $1.00 / 1,000 results
Rating
5.0
(2)
Developer
Rush
Maintained by CommunityActor stats
5
Bookmarked
351
Total users
19
Monthly active users
9 days ago
Last modified
Categories
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 for available public previews, or provide a Session ID for signed-in collection. A supplied session must pass verification before collection starts.
Features
- Public preview or signed-in collection — choose available public previews or use your Session ID to request more comments 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 and reply collection 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
nullwhen unavailable - Comment likes — reported like count, or
nullwhen unknown - Reply comments — available reply content nested inside each parent comment when requested with a Session ID
- Reply count — reported number of replies, or
nullwhen unknown - Post context — post URL and shortcode, plus the author username and reported comment total when available
How to use
- Go to the Input tab
- Add Instagram post or reel URLs (up to 50 per run)
- (Optional) Add your Session ID to request signed-in comments and replies
- (Optional, requires Session ID) Enable Include Reply Comments to request available reply content
- Click Start and wait for the results
- 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
| Format | Example |
|---|---|
| Post URL | https://www.instagram.com/p/ABC123/ |
| Reel URL | https://www.instagram.com/reel/ABC123/ |
| Shortcode | ABC123 |
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. Invalid post inputs must be corrected before the run can collect comments.
Input example
Illustrative input only. Replace ABC123 with a post you want to collect; it is not a verified example post. This example uses public-preview mode.
{"postUrls": ["https://www.instagram.com/p/ABC123/"],"maxComments": 200,"includeReplies": false}
Using a Session ID (optional)
With no Session ID, the scraper requests the public comment preview Instagram makes available. For signed-in comment collection and optional reply extraction, 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
| Feature | Without Session ID | With Session ID |
|---|---|---|
| Comments per post | Available public preview, up to your limit | Available signed-in results, up to your limit and run limits |
| Reply comments | Not supported | Available replies when Include Reply Comments is enabled |
| Comment like counts | Reported count, or null if unknown | Reported count, or null if unknown |
| Posts restricted to signed-in viewers | Cannot be collected without an allowed session | Access depends on Instagram and the account's permissions |
| Session verification | Not used | Required; failure stops the run |
How to find your Session ID
Method 1 — Browser Developer Tools
- Log in to Instagram in your browser
- Open Developer Tools (F12)
- Go to Application → Cookies →
https://www.instagram.com - Find the cookie named
sessionid - Copy its value and paste it into the Session ID field
Method 2 — Cookie Editor extension
- Install a cookie editor extension for your browser (e.g., Cookie-Editor for Chrome/Firefox/Edge)
- Go to instagram.com and make sure you are logged in
- Click the extension icon
- Find the cookie named
sessionid - 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 public-preview mode. Public-preview mode is selected 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
Usage considerations
- Start small — Begin with 1 post, Max Comments set to 10, and replies disabled. 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.
- Automated activity may be flagged by Instagram and can lead to temporary limits or, in more serious cases, restrictions on an account — please use this scraper thoughtfully and avoid excessive back-to-back runs
- Using a Session ID means your account is being used for automated data access. 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. Avoid frequent or back-to-back runs; Instagram may identify automated activity and temporarily restrict the account
- Comments are saved progressively. When replies are enabled, the scraper requests replies before saving the parent comment
- A run has a 10,000-request allowance, including retries and redirects. Reply requests share this allowance, and individual comment and reply collections have additional bounds. The run may stop before reaching the requested count
Output
Overview fields
| Field | Description |
|---|---|
postShortcode | Instagram shortcode identifier |
username | Commenter username |
profileUrl | Link to the commenter's Instagram profile |
text | Comment text supplied by Instagram |
repliesCount | Reported reply count, or null |
commentLikeCount | Reported like count, or null |
timestamp | Posting time, or null |
postUrl | Link to the original post |
Full detail fields
| Field | Type | Description |
|---|---|---|
postUrl | string | Direct URL to the Instagram post or reel |
postShortcode | string | Instagram shortcode identifier |
postOwnerUsername | string/null | Username of the post author |
postCommentCount | integer/null | Comment total reported for the post; not a count of rows saved |
commentId | string | Required top-level comment identifier: 1–32 decimal digits. A row without a valid ID cannot be saved |
text | string | Supplied comment text; empty when unavailable. A GIF URL may be represented as [GIF] <url> |
username | string/null | Commenter username |
profileUrl | string/null | Direct link to the commenter's Instagram profile |
userId | string/null | Commenter user ID |
isVerified | boolean/null | Reported verification status, or null when unknown |
profilePicUrl | string/null | URL of commenter's profile picture |
timestamp | string/null | When the comment was posted (ISO 8601) |
commentLikeCount | integer/null | Reported non-negative like count, or null when unknown |
repliesCount | integer/null | Reported non-negative reply count, or null when unknown |
replies | array | Collected replies; may be empty or incomplete even when repliesCount is positive |
index | integer | Saved row position within this post (1-based), not Instagram's ranking |
scrapedAt | string | Extraction timestamp (ISO 8601) |
Reply comment fields
Each reply in the replies array contains:
| Field | Type | Description |
|---|---|---|
id | string | Required reply identifier: 1–32 decimal digits. Replies without a valid ID are not saved |
text | string | Supplied reply text; empty when unavailable. A GIF URL may be represented as [GIF] <url> |
ownerUsername | string/null | Reply author username |
ownerProfileUrl | string/null | Direct link to the reply author's Instagram profile |
ownerProfilePicUrl | string/null | URL of reply author's profile picture |
timestamp | string/null | When the reply was posted (ISO 8601) |
likesCount | integer/null | Reported non-negative like count, or null when unknown |
repliesCount | integer/null | Reported non-negative child count, or null when unknown; not assumed to be zero |
replies | array | Empty; further nesting is not collected |
Unknown or invalid counts remain null. Counts are accepted only as non-negative safe integers; they are not guessed, rounded, or filled from the number of collected replies. 0 means the source supplied zero. An empty replies array does not prove that no replies exist.
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.
status | Meaning |
|---|---|
complete | Collection finished within the configured scope without a recorded shortfall. This does not certify that every Instagram comment or reply was collected |
partial | Some requested information could not be collected, a public preview was used, or collection was interrupted or limited |
budget_reached | The result or request allowance, or the run-wide saved-row cap, was reached |
failed | Collection or saving could not be safely completed; review the message, log, and saved results |
The record also contains savedComments (saved top-level rows), requestedPosts (distinct valid posts), requestCount, a message, and a posts array with each shortcode and its savedComments. Replies remain inside their parent rows. An early startup or storage failure may prevent a summary from being written; a missing summary is not evidence of success.
Saved progress is checked against the dataset when continuing the same run. If a previous append has an uncertain outcome, the scraper checks whether that comment is present. If it cannot confirm the save, it stops for review instead of blindly appending the comment again. This is not a guarantee of uninterrupted or exactly-once delivery. Review saved results before starting another run; a new run creates a separate collection.
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.
nulldemonstrates 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 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. Public previews, access restrictions, unavailable replies, and collection limits can all reduce the result count. Neither reaching your limit nor complete means every comment on Instagram was collected.
Does this scraper need an Instagram account? Not for an available public preview. Signed-in collection and reply extraction 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 public-preview mode. Check the account in Instagram and provide a current Session ID. If you deliberately want a public-preview run, remove the Session ID and disable Include Reply Comments before starting a new run.
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. 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? Collection stops when further requests are restricted. Review the already saved rows, run log, and summary; do not assume the remaining comments were collected or that an immediate rerun will succeed.
The run said a post "has more comments than could be collected" — what does that mean?
The scraper could not establish that collection reached the end. More data may exist, but it could not be requested or read within the run's limits. 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. Enabling this option without a Session ID fails input validation.
Why are counts blank or null?
Instagram did not provide a valid non-negative integer 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. When reply collection is enabled, a known mismatch makes the run summary partial, even if Instagram stops offering more replies. The mismatch alone does not tell us whether a reply was deleted, hidden, or unavailable for another reason. Valid replies already collected are kept; large threads may be shortened to fit the result size allowance.
Can a run continue after a restart or an uncertain save? The scraper can continue when the same run's input, progress, and dataset pass verification. An uncertain append must be confirmed in saved results before collection continues; otherwise the run stops for review. Check the dataset and summary before starting a new run 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