Instagram Comments Scraper — Top-Level Comments, No Login
Pricing
$0.50 / 1,000 comments
Instagram Comments Scraper — Top-Level Comments, No Login
The top-level comments Instagram lists under public posts and reels, newest first, down to the first one: text, exact time, likes, GIF mark. Authors as codes, or with user names on request. Only-new mode for monitoring. No login, no cookies. Replies need a login and are not included.
Pricing
$0.50 / 1,000 comments
Rating
0.0
(0)
Developer
Berkan Kaplan
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
13 days ago
Last modified
Categories
Share
Instagram Comments Scraper — Top-Level Comments, No Login 🚀
foXLabs Instagram series: Bulk Profile · Profile Posts · Post Details · Reels
🎉 Give the addresses of public Instagram posts or reels and get the comments under them — the top-level comments Instagram lists for a signed-out visitor, newest first, down to the post's first comment or your limit: text, time, like count, GIF flag, and the post it stands under. Authors come as a stable code by default, or as user names on request. No login, no cookies, no account of anyone.
Not affiliated with Instagram or Meta.
🔍 What is the Instagram Comments Scraper — and when should you use it?
Give this Actor post/reel URLs and it returns their top-level comments as clean rows — for reading comment sections in bulk: community/brand teams, campaign reports, launch-reaction research.
Use it when you need: the comments under a set of posts (sentiment, topics, volume); privacy-safe comment exports (author codes); or an only-new comment feed.
Use something else when: you want the post's own metrics → Post Details; a whole profile's posts → Profile Posts.
🤖 Use with AI agents
Already on the Apify MCP server? Ask for this Actor by name: foxlabs/instagram-comments-scraper. An agent can discover it, run it and read the dataset over MCP; the Actor is built to run in Standby for on-demand lookups.
Otherwise paste this into Claude, ChatGPT, Cursor or any MCP-enabled assistant:
I want Instagram post comments using the Apify Actor`foxlabs/instagram-comments-scraper`.Input: `postUrls` is a list of post/reel URLs; `maxCommentsPerPost` caps per post; `includeAuthorNames`adds usernames (off = codes). Each row has text, createdAt, likeCount, isGif, postOwnerUsername andauthorCode.Start with:{ "postUrls": ["https://www.instagram.com/p/DeJ28eTxo4s/"], "maxCommentsPerPost": 60 }Ask me which posts to read, run the Actor, then summarise sentiment and top comments.
The machine-readable API, MCP config and OpenAPI definition live at apify.com/foxlabs/instagram-comments-scraper.md.
📋 Overview
Everything you need to turn a post's comment section into clean, structured data — text, time, likes and a privacy-safe author code — in one Actor, with no login, cookies or account.
Why teams pick this Actor:
- ✅ Top-level comments to the end — newest first, down to the post's first comment or your cap.
- 🕵️ Privacy by default — authors are a stable per-account code; names only with
includeAuthorNames. - 🎯 Honest — rows are fewer than Instagram's comment number (it counts replies + unlisted); the README says exactly why.
- 🔁 Only-new monitoring — schedule a post and get only new comments (oldest first).
- 💰 Pay only for results — one
commentevent per delivered row; status rows and remembered comments free. - 🤖 Agent-ready — MCP + Standby.
✨ Features
- 🔍 Comments by post/reel — any address form, short code or id; up to 10,000 lines a run.
- 💬 Per comment — text, exact time, like count,
isGif, position, verified-author flag. - 🔐 Author code — HMAC code stable within your account;
includeAuthorNamesadds username + id. - 📊 Post context —
postOwnerUsername,postCommentCount(Instagram's number, larger than the rows). - 🔁 Only-new lists for monitoring.
🎬 Quick Start
curl -X POST "https://api.apify.com/v2/acts/foxlabs~instagram-comments-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"postUrls": ["https://www.instagram.com/p/DeJ28eTxo4s/"], "maxCommentsPerPost": 60}'
🚀 Getting Started (3 steps)
- Paste your posts — one per line: a post/reel URL, short code or id.
- Set the cap & authors —
maxCommentsPerPost;includeAuthorNamesif you need names (else codes). - Run and export — get a clean dataset as JSON, CSV or Excel.
📥 Input
| Field | Default | What it does |
|---|---|---|
postUrls | required | Post/reel addresses, one per line (up to 10,000); a line that is no post gets a free status row. |
maxCommentsPerPost | 1000 | Comments per post, newest first (1–1,000,000). |
maxComments | 100000 | Comments in total. |
includeAuthorNames | false | Off = authorCode only; on = also authorUsername + authorUserId. |
onlyNewComments, listName | false, default | Deliver only new comments (oldest first). |
proxyConfiguration | auto | Nothing to change for normal use. |
{ "postUrls": ["https://www.instagram.com/p/DeMw7vrDPS3/", "https://www.instagram.com/reel/DeCNJEyOkpq/"], "maxCommentsPerPost": 30, "includeAuthorNames": true }
📤 Output
One row per comment (type: "comment"); a free type: "status" row for a line that can't be delivered.
| Field | What it is |
|---|---|
postId, postShortCode, postUrl, postOwnerUsername, postCommentCount | the post (Instagram's count is larger than the rows) |
commentId, positionInPost | unique id; place in the list (1 = newest) |
text, createdAt, likeCount, isGif, isHidden | the comment |
authorCode | a stable per-account code for the author |
authorUsername, authorUserId | with includeAuthorNames |
authorIsVerified, scrapedAt, input, error | verified flag; when read; your line; reason on status rows |
{ "type": "comment", "postShortCode": "DeJ28eTxo4s", "postOwnerUsername": "nasawebb", "postCommentCount": 500, "commentId": "179…", "positionInPost": 12, "text": "…", "createdAt": "2026-10-09T01:21:07.000Z", "likeCount": 3, "isGif": false, "authorCode": "0123456789abcdef", "authorIsVerified": false }
Honest: no replies (neither texts nor counts — Instagram doesn't give them to a signed-out visitor); rows are fewer than postCommentCount (which counts replies + unlisted — the posts we read listed 25–86% of it); newest-first only (sort by likeCount yourself).
💼 Use cases
1. Campaign / launch reaction — read the comment sections of a set of posts. Input: the campaign URLs. Output: comments + likes + time. Use: sentiment and themes in aggregate.
2. Privacy-safe research — study reactions without storing names.
Input: posts, authors as codes (default). Output: comments with authorCode. Use: analysis within policy.
3. Comment monitoring — collect only-new comments as they arrive.
Input: a post, onlyNewComments, scheduled. Output: new comments each run. Use: a live comment feed.
🔗 Integration
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_TOKEN' });const run = await client.actor('foxlabs/instagram-comments-scraper').call({ postUrls: ['https://www.instagram.com/p/DeJ28eTxo4s/'], maxCommentsPerPost: 60 });const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0]);
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_TOKEN')run = client.actor('foxlabs/instagram-comments-scraper').call(run_input={'postUrls': ['https://www.instagram.com/p/DeJ28eTxo4s/'], 'maxCommentsPerPost': 60})for item in client.dataset(run.default_dataset_id).iterate_items():print(item)
Written for apify-client 3 for Python, where call() returns a run object; with version 1 or 2 it returns a dict — write run['defaultDatasetId'] there.
Automation (n8n / Zapier / Make): schedule → HTTP request to the Actor API with your postUrls → handle the JSON dataset → push to a sheet, CRM or dashboard.
📊 Pricing
Pay per event: one comment per delivered comment row (also a row whose post query Instagram didn't answer). Status rows are free, and so are comments an only-new list still remembers. A run's spending limit is honoured. View current pricing.
❓ FAQ
Do I need an Instagram login or cookies? No — only the top-level comments a signed-out visitor sees.
Why are there fewer rows than the comment count? postCommentCount counts replies (not shown to a visitor) and unlisted comments; the rows are the top-level comments Instagram lists.
Do I get replies? No — neither their texts nor their number reach a signed-out visitor.
Can I keep authors anonymous? By default authors are a stable per-account code (a pseudonym, not anonymisation); turn on includeAuthorNames only when you need names and have a lawful reason.
Can I export to CSV / Excel / JSON? Yes — directly from the Apify dataset.
🐛 Troubleshooting / What it does NOT do
- No replies, no reply counts — not available to a signed-out visitor.
- Fewer rows than the comment number — expected (replies + unlisted counted in it).
- Newest-first only — there's no "most liked" order; sort by
likeCountyourself. - A list can differ between readings — a comment can be missing from one reading and back in the next; to be sure, read a post whole once more without the list and merge by
commentId. - A line returns a status row — not a post, no such post, comments off/limited, no comments yet, or unanswered (free, not charged).
- A changed Instagram query fails the run at its start-up check, before anything is read/charged.
⚠️ Trademark
Independent, third-party tool. Not affiliated with, endorsed by or connected to Instagram or Meta Platforms, Inc. "Instagram" and related marks belong to their owners and are used here for identification only.
⚖️ Is it legal to scrape this data?
The Actor reads only what a signed-out visitor sees. Comment texts are other people's words — they can contain sensitive information, and authors can be minors. By default the author is a per-account code (HMAC, kept in your account; a pseudonym, not anonymisation); includeAuthorNames adds the name/id. You are the controller: collect personal data only with a lawful reason, and prefer aggregate analysis (sentiment, topics, volume) over profiling individuals. The Actor writes only to your own run's storage. See Apify's blog post on the legality of web scraping.
🤝 Support & contact
- 🌐 Website: data.foxlabs.com.tr
- 📧 Email: info@foxlabs.com.tr
- 🐛 Issues: open a ticket in the Actor's Issues tab — the run's
SOURCE_REPORTrecord lists per-post counts and why the run stopped. - 🧰 More clean data actors: Fox Labs on Apify
Changelog
0.1.3 — 2026-10-10
- After an independent README review:
authorCodeis a keyed per-account code (same author → same code within your account; another account gets other codes; not reversible without the key); the start-up check asks the comments query itself; an only-new list handed back in circles counts as stopped;listNamechecked only whenonlyNewCommentsis on;postUrlsrequired; a proxy set in the input is the road of every request.
0.1 — 2026-10-09
- First version: top-level comments of posts and reels, newest first, to the end; authors as codes unless names are asked for; only-new lists; free status rows; the
replyCountcolumn dropped (Instagram sent none); requests leave from the run's own address with Apify Proxy as the second road. Standby mode prepared.