Instagram Comments Scraper
Pricing
from $0.60 / 1,000 comment saveds
Instagram Comments Scraper
Extract public Instagram comments from post and Reel URLs with author usernames, text, timestamps, likes, reply counts, and source URLs.
Pricing
from $0.60 / 1,000 comment saveds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Extract public comments from Instagram posts and Reels. Give the Actor one or more public Instagram post URLs and it exports comment authors, text, relative timestamps, visible like counts, visible reply counts, source post URLs, and scrape timestamps to an Apify dataset.
This Actor is useful when you need comment data in a structured format for research, social listening, creator reporting, campaign QA, moderation workflows, or downstream analysis in spreadsheets, BI tools, and AI agents.
What can you do with this Actor?
- Export public comments from Instagram post, Reel, and TV URLs.
- Collect usernames, comment text, visible timestamps, likes, and reply counts.
- Process multiple post URLs in one run with a shared maximum result limit.
- Send results to Apify datasets, webhooks, integrations, API clients, or MCP tools.
- Schedule repeat checks for a known set of public posts.
Who is it for?
- Social media teams monitoring campaign posts.
- Agencies reporting engagement and audience responses.
- Researchers studying public discussions on specific posts.
- Support and moderation teams reviewing public feedback.
- Developers building Instagram comment data pipelines on Apify.
Input example
{"startUrls": [{ "url": "https://www.instagram.com/p/DN8-GjPkgjS/" }],"maxItems": 20,"maxLoadMoreAttempts": 3}
Input settings
| Field | Type | Description |
|---|---|---|
startUrls | array | Public Instagram post, Reel, or TV URLs to extract comments from. |
maxItems | integer | Maximum comment rows to save across all input URLs. |
maxLoadMoreAttempts | integer | How many times to scroll or use public comment-loading controls per post. |
Output example
{"postUrl": "https://www.instagram.com/p/DN8-GjPkgjS/","postShortcode": "DN8-GjPkgjS","commentId": "RE44LUdqUGtnalN8dXNlcnwxZCBhZ28","commentUrl": null,"ownerUsername": "example_user","text": "Great post!","postedAtText": "1d ago","likesCount": 2,"repliesCount": null,"isReply": false,"scrapedAt": "2026-08-02T20:53:22.000Z"}
Output fields
| Field | Description |
|---|---|
postUrl | Source Instagram post URL from the input. |
postShortcode | Instagram shortcode parsed from the URL. |
commentId | Stable local ID for the scraped post/comment tuple. |
commentUrl | Public comment permalink when available; otherwise null. |
ownerUsername | Comment author username. |
text | Comment text. |
postedAtText | Relative timestamp displayed by Instagram. |
likesCount | Like count shown on the comment when public. |
repliesCount | Reply count shown when public. |
isReply | Whether the row is parsed as a reply. |
scrapedAt | ISO timestamp when the row was saved. |
Ready-to-run examples
Open a public example to inspect its input, run it, or reuse it as a task:
Scrape one public post
{"startUrls": [{ "url": "https://www.instagram.com/p/DN8-GjPkgjS/" }],"maxItems": 20,"maxLoadMoreAttempts": 3}
Scrape several posts with a shared cap
{"startUrls": [{ "url": "https://www.instagram.com/p/DN8-GjPkgjS/" },{ "url": "https://www.instagram.com/instagram/p/DbbY9pdm6Q2/" }],"maxItems": 50,"maxLoadMoreAttempts": 6}
API usage
Apify CLI
$apify call fetch_cat/instagram-comments-scraper --input-file input.json
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/instagram-comments-scraper').call({startUrls: [{ url: 'https://www.instagram.com/p/DN8-GjPkgjS/' }],maxItems: 20,maxLoadMoreAttempts: 3,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient('MY_APIFY_TOKEN')run = client.actor('fetch_cat/instagram-comments-scraper').call(run_input={'startUrls': [{'url': 'https://www.instagram.com/p/DN8-GjPkgjS/'}],'maxItems': 20,'maxLoadMoreAttempts': 3,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items)
cURL
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~instagram-comments-scraper/runs?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"startUrls":[{"url":"https://www.instagram.com/p/DN8-GjPkgjS/"}],"maxItems":20,"maxLoadMoreAttempts":3}'
MCP and agent usage
Use Apify MCP to let AI agents run this Actor as a tool:
https://mcp.apify.com/?tools=fetch_cat/instagram-comments-scraper
Add it to Claude Desktop or Claude Code with:
$claude mcp add apify-instagram-comments "https://mcp.apify.com/?tools=fetch_cat/instagram-comments-scraper"
Example MCP server configuration:
{"mcpServers": {"apify-instagram-comments": {"url": "https://mcp.apify.com/?tools=fetch_cat/instagram-comments-scraper"}}}
Example prompts:
- "Run the Instagram Comments Scraper for these post URLs and return the top recurring themes."
- "Export public comments from this Reel and group them by positive, negative, and question comments."
- "Save the comment dataset and tell me which usernames appear more than once."
Pricing
This Actor uses pay-per-event pricing: a small start event plus one result event for each comment saved. See the live Pricing tab for current rates in your plan tier.
Tips for better results
- Use direct post or Reel URLs, not profile URLs.
- Keep the first run small, then raise
maxItemsafter confirming the target post is public. - Increase
maxLoadMoreAttemptsonly when you expect many comments on a single post. - Use several smaller runs instead of one very large run when monitoring unrelated posts.
Limitations
- Only public comments visible on public Instagram post pages can be exported.
- Private posts, deleted posts, login-only comments, and account-specific views are not supported.
- Instagram may hide some likes, replies, timestamps, or comment permalinks from public views; missing values are saved as
nullinstead of guessed. - Very large comment threads may expose fewer rows publicly than the visible in-app count.
Data exports and integrations
Results are saved to the default Apify dataset. You can export the dataset as JSON, CSV, XLSX, XML, HTML, or RSS, or connect it to webhooks, Make, Zapier, Google Sheets, S3, data warehouses, and custom API consumers.
FAQ
Do I need Instagram login cookies?
No. This build is designed for public post URLs and does not require personal Instagram accounts, cookies, or private credentials.
Can it scrape private posts?
No. Private, deleted, restricted, or login-only posts are outside the supported public-data scope.
Why are some counts null?
Instagram does not display every like, reply, or permalink value for every public comment. Missing public values are saved as null.
Can I scrape replies?
The output schema includes reply-related fields. Publicly visible reply counts are captured when shown; individual nested replies depend on what Instagram exposes in the public post view.
Can I run it on a schedule?
Yes. Create an Apify task with your saved input and schedule it from the Apify Console, or trigger runs through the API.
How do I avoid duplicate analysis downstream?
Use commentId together with postUrl as a stable key for deduplicating repeated exports of the same public post.
Related Actors
- Instagram Post Details Scraper
- Instagram Profile Posts Scraper
- Instagram Reel Scraper
- Instagram Hashtag Scraper
- Instagram Search Scraper
Support
Questions or bug reports? Open an Apify issue from the Actor page and include the run ID, input URL, expected result, and a short description of what looked wrong.