Instagram Post Engagement Scraper – Commenters & Engagement
Pricing
from $0.06 / 1,000 comments and commenter for a post extracteds
Instagram Post Engagement Scraper – Commenters & Engagement
Analyze who engaged with a set of Instagram posts: extract every comment (id, username, text, likes, timestamp) and report like/comment counts. Public data only by default, no login. Optional Instagram cookies also resolve who liked - which is a unique feature!
Pricing
from $0.06 / 1,000 comments and commenter for a post extracteds
Rating
0.0
(0)
Developer
Egon Maier
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Instagram Comments & Likers Scraper – Post Engagement
See exactly who comments on — and who likes — any set of Instagram posts.
Give this actor a list of Instagram post (or reel) URLs and it returns, for each one, every comment (comment id, username, text, comment likes and timestamp) and the post's like and comment counts. Perfect for analyzing engagement on your own — or competitors' — content.
Works on public data without any login by default. Optionally, paste your own Instagram cookies and the actor also returns the likers of each post — the list of users who actually liked it, which Instagram hides from anonymous requests.
Why this scraper
- 🔓 No login needed for comments — most tools force a cookie just to read comments. This one pulls comments + counts fully anonymously.
- ❤️ Reveals who liked a post — add your
sessionidand get the likers, data Instagram hides from the public. (Only the sessionid — nothing else.) - 🧩 Rich per-comment data — comment ID, author, text, comment-likes, timestamp and reply detection, ready for analysis or exports.
- ⏱️ Date filter —
onlyDataAfterreturns only comments after a date and reports how many older ones were skipped. - ⚡ Fast & cheap — pure HTTP (no browser), so it's a fraction of the cost and runs in seconds per post.
Use it to
- Find your most engaged followers — who comments most across your posts
- See exactly who liked a post (with your cookies) — not just the count
- Competitor & campaign analysis — who's engaging with a brand's content
- Giveaway / contest checking — export everyone who commented (and liked) a post
- Community research — surface the people talking under a topic's posts
Input
| Field | Type | Description |
|---|---|---|
posts | array | Post/reel URLs (https://www.instagram.com/p/SHORTCODE/) or bare shortcodes. |
maxComments | integer | Max comments to fetch per post (default 200). |
includeReplies | boolean | Reserved (top-level comments only for now). |
onlyDataAfter | string, optional | Keep only comments posted after this date/time (older ones are skipped and counted). Comments only — likers have no timestamp. |
cookies | string, optional | Your Instagram login (secret) to also get the likers of each post. Accepts a Cookie-Editor JSON export, a cookie string, or just your sessionid. Empty = public-only. |
commentsDocId | string, optional | Advanced. Override the GraphQL comments doc_id if Instagram rotates it (see "Reliability"). |
proxyConfiguration | object | Apify proxy — Residential recommended (Instagram blocks datacenter IPs). |
maxConcurrency | integer | How many posts to scrape in parallel (default 3). |
maxRequestRetries | integer | Retries per post on a transient block/error (default 3). |
debug | boolean | Log every request URL + response status (or run with APIFY_LOG_LEVEL=DEBUG). |
Example:
{"posts": ["https://www.instagram.com/p/Bt3gFWMhoO2/"],"maxComments": 300,"includeReplies": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Getting the likers (optional, needs your Instagram cookies)
Instagram does not serve the list of users who liked a post to anonymous
requests — publicly you only get the like count. To resolve who liked each
post, put your Instagram login into the cookies field (see the
step-by-step guide below). The field accepts a Cookie-Editor JSON export, a
cookie string, or just your sessionid — the actor only needs the sessionid
and derives the rest.
With cookies, each item gains a likers array (
{ position, username, userId, fullName, isVerified, isPrivate }likersFetchedCount tells you
how many were resolved, likeCount remains the true total. All requests then run
through your account on one pinned proxy IP (an account should not hop IPs).
Output
One dataset item per post:
| Field | Description |
|---|---|
postUrl, shortcode | The analyzed post. |
success, error, attempts | Outcome and how many tries it took. |
ownerUsername | Who posted it. |
likeCount, commentCount | Engagement totals reported by Instagram. |
fetchedCommentCount | How many comments were actually returned (after any onlyDataAfter filter). |
skippedCommentCount | How many comments were skipped for being older than onlyDataAfter (0 when the filter is unset). |
uniqueCommenterCount | Number of distinct commenters across the fetched comments. |
comments | List of { id (comment id), username, userId, fullName, text, likeCount, timestamp, isReply, replyToId }. |
likersAvailable | true only when likers were actually resolved with a valid cookie. |
likersFetchedCount, likers | Number of likers resolved and the list { position, username, userId, fullName, isVerified, isPrivate }. null in public mode. |
likersError | Why likers couldn't be fetched (e.g. cookie invalid/expired, or Instagram restricts this post's likers). null on success. |
caption, takenAt | Post caption and publish time. |
responseTimeMs, postIndex, totalPosts, timestamp | Run metadata. |
What "engagement" this actor can and cannot see
- ✅ Commenters are public — returned in full (up to Instagram's practical cap of ~500 top-level comments per post).
- ✅ Like and comment counts are public —
likeCount/commentCount. - 🔑 Likers (who liked) require a session cookie — paste your
sessionidand each post gains alikerslist. Without it,likersisnulland you only get the like count. Notes:- You only need the
sessionidvalue — nothing else. The cookie is used only for the likers request; comments and counts always come from the public path. - Instagram returns a capped list (~100 likers per post), not every liker — that's a platform limit, not a bug.
- If the cookie is invalid/expired, or Instagram restricts a post's likers, you
get a clear
likersErrorand the rest of the data is unaffected.
- You only need the
How to get your Instagram cookies (for likers)
You only need this if you want the likers list. It takes about a minute.
Put the result into the actor's cookies field.
Easiest: the Cookie-Editor extension (recommended)
Install Cookie-Editor — a free, open-source extension for Chrome, Edge and Firefox that shows a page's cookies in one click, no developer tools needed.
- Install Cookie-Editor and log in to instagram.com (ideally a secondary/throwaway account).
- While on instagram.com, click the Cookie-Editor icon in your toolbar.
- Click Export (top of the popup) → Export as JSON — this copies all instagram.com cookies to your clipboard.
- Paste that JSON straight into the actor's
cookiesfield. Done — the actor picks out what it needs (sessionid, and derives the rest).
Prefer the JSON export: it includes
sessionid(which ishttpOnly, sodocument.cookiecan't see it) plus everything else in one paste. Only install reputable extensions — a cookie extension can read all your cookies. Cookie-Editor is widely used and open source.
Manual: browser developer tools (no extension)
- Open instagram.com and log in.
- Open developer tools: F12, or right-click the page → Inspect.
- Go to the Application tab (Chrome/Edge) or Storage tab (Firefox). In
the left sidebar open Cookies →
https://www.instagram.com. - Copy the value of
sessionid(a long string like12345%3Aabcd...). - Paste it into the actor's
cookiesfield — the baresessionidvalue is enough.
Good to know
- 🔒 The field is secret — Apify stores it encrypted and never shows it in the run input, logs or output.
- 🔑 This cookie can act as your account, like a password. Keep it private; to revoke it, log out of that browser session or change your password.
- 🌍 In cookie mode the actor sends all requests over one fixed Residential IP (no IP hopping) so the session isn't flagged. Residential proxy is recommended.
- ⏳ The cookie expires when you log out or after a while — if
likerssuddenly come back empty, grab a freshsessionid.
Pricing
Pay per event — you pay per result, so cost scales with what you get:
post-comments-analyzed— charged per returned comment (minimum 1 per successfully analyzed post). A post with 200 comments costs more than one with 5. Always applies.post-likes-analyzed— charged per returned liker (minimum 1), only when you providecookiesand likers come back. No cookie, or likers unavailable → not charged.
Failed or unavailable posts are never charged. Apify platform usage (compute + Residential proxy traffic) is billed separately by the platform.
Notes & reliability
- How comments are fetched: the actor loads the public post page, which already contains the like/comment counts, the owner, and the first page of comments — so the basics work with no special query. To fetch more than the first page it pages through Instagram's logged-out GraphQL endpoint. No browser — fast and cheap.
- Each comment includes its
id(the Instagram comment id) plususername,userId,text,likeCount,timestamp, and reply info (isReply,replyToId). - The GraphQL
doc_idrotates every few weeks and is only used for paging beyond the first page. If deep pagination stops working (you get roughly the first 15 comments while the total is higher), grab a fresh one: open a public post in a logged-out browser, find the Network request whosex-fb-friendly-nameisPolarisLoggedOutDesktopWWWPostCommentsPaginationQuery, copy itsdoc_id, and set thecommentsDocIdinput. The counts and first page keep working regardless. - Scraping a protected UI is a cat-and-mouse game: Instagram rate-limits and can block requests. Retries + proxy rotation are built in; occasional failures are expected. Use Residential proxies for volume.
- Only public accounts/posts can be analyzed. Private accounts return an error.
- Turn on
debug(orAPIFY_LOG_LEVEL=DEBUG) to see every request URL and its response status — handy for spotting exactly where a block happens.
Legal
Scraping publicly available data is widely considered permissible, but this usage runs against Instagram's Terms of Service and reliability is not guaranteed. Respect applicable law (e.g. GDPR) and only process data you have a lawful basis to process. You are responsible for how you use the output.