Instagram Comments Scraper avatar

Instagram Comments Scraper

Pricing

from $2.00 / 1,000 comment scrapeds

Go to Apify Store
Instagram Comments Scraper

Instagram Comments Scraper

Scrape the full comment thread of any public Instagram post or reel without a login. Give a list of post links and get back every comment as a clean row: text, author (username, name, verified), like and reply counts, and comment date. Paginated automatically to your chosen limit.

Pricing

from $2.00 / 1,000 comment scrapeds

Rating

0.0

(0)

Developer

Goutam Soni

Goutam Soni

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Instagram Comments Scraper - Export All Comments From Posts & Reels

Scrape every comment on any public Instagram post or reel. Get the comment text, the author (username, display name, numeric ID, verified badge), like and reply counts, and the exact date it was posted, without an Instagram API key, login, or cookies.

What this Instagram comments scraper does

Pass a list of post links, reel links, or bare shortcodes (mixed freely) and the actor returns one clean JSON row per comment. Pagination is walked automatically page after page until it hits the cap you set or the thread runs out, so a request for 2,000 comments really does walk the whole thread rather than stopping at the first page Instagram shows.

Perfect for sentiment research, giveaway entry collection, audience discovery, moderation and brand-safety checks, and content analysis on Instagram at scale.

Why use this Instagram comments scraper

  • No API key, no login, no cookies. Works on any public Instagram post or reel. You never hand over an Instagram account or a password.
  • Deep pagination. Ask for 50 comments or 50,000 and the scraper keeps fetching until your cap is reached.
  • Flexible input. Post links, reel links, and bare shortcodes all work in the same list, so you can paste whatever you already have.
  • Author details on every row, including the numeric user ID and verified badge, so a comment thread doubles as a list of genuinely engaged accounts.
  • Reply counts included, which makes it easy to find the comments that actually started a conversation.
  • Several posts at once, processed in parallel, each row tagged with its post shortcode.
  • Residential proxies built in with rotating IPs.
  • Clean, flat JSON. Every field is always present, with null where a value genuinely does not exist, so CSV exports never shift columns.

What data you get per comment

FieldTypeDescription
typestringRecord type, always "comment"
postShortcodestringShortcode of the post the comment belongs to
commentIdstringThe comment's numeric ID
textstringFull comment text, with mentions and emojis
ownerUsernamestringThe comment author's handle
ownerFullNamestringThe comment author's display name
ownerIdstringThe comment author's numeric Instagram user ID
ownerIsVerifiedbooleanWhether the author has a verified badge
likeCountintegerNumber of likes on the comment
replyCountintegerNumber of replies to the comment
createdAtstringWhen the comment was posted (ISO 8601 UTC)
scrapedAtstringWhen the row was scraped (ISO 8601 UTC)

How to use the Instagram Comments Scraper

  1. Click Try for free on the actor page.
  2. Enter post or reel links in the posts input. Bare shortcodes work too, and entries are deduplicated.
  3. Set maxCommentsPerPost (default 500, up to 50,000) to cap how many comments come back per post.
  4. Tune concurrency (default 5, up to 15) if you are scraping many posts at once.
  5. Click Save & start. Download in JSON, CSV, Excel, XML or HTML, or stream via API.

Example input

{
"posts": [
"https://www.instagram.com/p/CabcdEFghij/",
"https://www.instagram.com/reel/CklmnOPqrst/",
"CuvwxYZabcd"
],
"maxCommentsPerPost": 2000,
"concurrency": 5
}

Example output

{
"type": "comment",
"postShortcode": "CabcdEFghij",
"commentId": "17900000000000001",
"text": "This is exactly what I needed, thank you!",
"ownerUsername": "example_user",
"ownerFullName": "Jane Doe",
"ownerId": "100000001",
"ownerIsVerified": false,
"likeCount": 4,
"replyCount": 1,
"createdAt": "2026-07-20T18:00:00.000Z",
"scrapedAt": "2026-07-21T09:00:00.000Z"
}

Top use cases

  • Sentiment and audience research. Read what people actually say under a post instead of inferring it from a like count.
  • Giveaway and contest entry collection. Export every comment on an entry post, complete with author handles and timestamps.
  • Audience discovery. People who comment are far more engaged than people who scroll past. Their handles make a strong prospect list.
  • Moderation and brand-safety checks. Sweep the comments on your own posts for spam, abuse, or impersonation attempts.
  • Competitor research. Read the objections and questions in a competitor's comment section to find gaps in your own messaging.
  • Content analysis. Rank comments by likeCount and replyCount to see which reactions drove the conversation.
  • Customer feedback mining. Product complaints and feature requests routinely land in comments before they reach support.

Integrations

Apify API

$curl "https://api.apify.com/v2/datasets/{DATASET_ID}/items?format=json"

Python

from apify_client import ApifyClient
from collections import Counter
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("goat255/instagram-comments-scraper").call(run_input={
"posts": ["https://www.instagram.com/p/CabcdEFghij/"],
"maxCommentsPerPost": 2000,
})
comments = list(client.dataset(run["defaultDatasetId"]).iterate_items())
# Most engaged commenters and the top comment by likes
top_voices = Counter(c["ownerUsername"] for c in comments if c.get("ownerUsername"))
print(top_voices.most_common(10))
best = max(comments, key=lambda c: c.get("likeCount") or 0)
print(f"Top comment ({best['likeCount']} likes): {best['text']}")

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('goat255/instagram-comments-scraper').call({
posts: ['https://www.instagram.com/p/CabcdEFghij/'],
maxCommentsPerPost: 2000,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const questions = items.filter((c) => (c.text || '').includes('?'));
console.log(`${questions.length} of ${items.length} comments asked a question`);

No-code integrations

Stream results to Google Sheets, Slack, Zapier, Make, Amazon S3, HubSpot, or any webhook via Apify Integrations.

Pricing

Pay per result. No subscription. No per-run start fee. You only pay for the comments you actually receive.

EventPrice
Comment scraped (primary)$0.002

Apify's $5 platform free credit applies on first use, which is roughly 2,500 free comments to start.

FAQ

Do I need an Instagram account or API key?

No. The scraper works on any public Instagram post or reel without a login, cookies, or the Instagram Graph API.

What input formats does it accept?

Post links, reel links, and bare shortcodes, all in the same list. https://www.instagram.com/p/CabcdEFghij/, https://www.instagram.com/reel/CabcdEFghij/, and CabcdEFghij are all valid and refer to the same post.

Can it scrape comments on posts from private accounts?

No. Only public posts and reels are accessible. A post that cannot be reached returns a row with ok: false and a generic reason such as not_found.

How many comments can I get per post?

Up to 50,000 per post per run. Pagination is walked automatically, so setting maxCommentsPerPost to 2,000 returns 2,000 comments if the thread has them, not just the first page.

Does it include replies to comments?

Each row is a top-level comment and carries a replyCount telling you how many replies it received. Use that to find the threads worth reading, then rank by likeCount to find the comments the audience endorsed.

Why did I get fewer comments than I asked for?

The thread ran out. Ask for 2,000 on a post with 140 comments and you get 140 real rows rather than 2,000 padded ones. The run log states the count per post.

Can I export to CSV, Google Sheets or Excel?

Yes. JSON, CSV, Excel, XML and HTML are all supported, plus direct integrations to Google Sheets, Zapier, Make, Slack and S3.

What happens if one post in my list fails?

The run does not fail. The actor emits a row with ok: false and a generic reason for that post, then carries on with the rest of your list.

Support

Found a bug or a missing field? Open an issue on the actor page. Reviews are read and replied to.

Privacy

To improve our actors we collect anonymized usage telemetry (run stats and input patterns). No personal account data is collected.