Instagram Comments Scraper

Extract public Instagram comments from post and Reel URLs with author usernames, text, timestamps, likes, reply counts, and source URLs.

Data fields

FieldTypeDescription
postUrlstringValue exported as postUrl.
postShortcodestring | nullValue exported as postShortcode.
commentIdstringValue exported as commentId.
commentUrlstring | nullValue exported as commentUrl.
ownerUsernamestringValue exported as ownerUsername.
textstringValue exported as text.
postedAtTextstring | nullValue exported as postedAtText.
likesCountinteger | nullValue exported as likesCount.

Input preview

startUrlsPost or Reel URLs *
maxItemsMaximum comments
maxLoadMoreAttemptsLoad-more attempts per post

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

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"
}

Input recipes

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."

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.

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.

Common questions

Questions and answers reused from the canonical actor README.

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.