Instagram Comments Scraper avatar

Instagram Comments Scraper

Pricing

from $0.60 / 1,000 comment saveds

Go to Apify Store
Instagram Comments Scraper

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

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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

FieldTypeDescription
startUrlsarrayPublic Instagram post, Reel, or TV URLs to extract comments from.
maxItemsintegerMaximum comment rows to save across all input URLs.
maxLoadMoreAttemptsintegerHow 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

FieldDescription
postUrlSource Instagram post URL from the input.
postShortcodeInstagram shortcode parsed from the URL.
commentIdStable local ID for the scraped post/comment tuple.
commentUrlPublic comment permalink when available; otherwise null.
ownerUsernameComment author username.
textComment text.
postedAtTextRelative timestamp displayed by Instagram.
likesCountLike count shown on the comment when public.
repliesCountReply count shown when public.
isReplyWhether the row is parsed as a reply.
scrapedAtISO 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 ApifyClient
client = 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().items
print(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 maxItems after confirming the target post is public.
  • Increase maxLoadMoreAttempts only 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 null instead 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.

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.