Instagram Post Engagement Scraper – Commenters & Engagement avatar

Instagram Post Engagement Scraper – Commenters & Engagement

Pricing

from $0.06 / 1,000 comments and commenter for a post extracteds

Go to Apify Store
Instagram Post Engagement Scraper – Commenters & Engagement

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

Egon Maier

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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 sessionid and 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 filteronlyDataAfter returns 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

FieldTypeDescription
postsarrayPost/reel URLs (https://www.instagram.com/p/SHORTCODE/) or bare shortcodes.
maxCommentsintegerMax comments to fetch per post (default 200).
includeRepliesbooleanReserved (top-level comments only for now).
onlyDataAfterstring, optionalKeep only comments posted after this date/time (older ones are skipped and counted). Comments only — likers have no timestamp.
cookiesstring, optionalYour 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.
commentsDocIdstring, optionalAdvanced. Override the GraphQL comments doc_id if Instagram rotates it (see "Reliability").
proxyConfigurationobjectApify proxy — Residential recommended (Instagram blocks datacenter IPs).
maxConcurrencyintegerHow many posts to scrape in parallel (default 3).
maxRequestRetriesintegerRetries per post on a transient block/error (default 3).
debugbooleanLog 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 }
). Instagram's web likers endpoint returns a single, capped list (~100, not full pagination) — 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:

FieldDescription
postUrl, shortcodeThe analyzed post.
success, error, attemptsOutcome and how many tries it took.
ownerUsernameWho posted it.
likeCount, commentCountEngagement totals reported by Instagram.
fetchedCommentCountHow many comments were actually returned (after any onlyDataAfter filter).
skippedCommentCountHow many comments were skipped for being older than onlyDataAfter (0 when the filter is unset).
uniqueCommenterCountNumber of distinct commenters across the fetched comments.
commentsList of { id (comment id), username, userId, fullName, text, likeCount, timestamp, isReply, replyToId }.
likersAvailabletrue only when likers were actually resolved with a valid cookie.
likersFetchedCount, likersNumber of likers resolved and the list { position, username, userId, fullName, isVerified, isPrivate }. null in public mode.
likersErrorWhy likers couldn't be fetched (e.g. cookie invalid/expired, or Instagram restricts this post's likers). null on success.
caption, takenAtPost caption and publish time.
responseTimeMs, postIndex, totalPosts, timestampRun 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 publiclikeCount / commentCount.
  • 🔑 Likers (who liked) require a session cookie — paste your sessionid and each post gains a likers list. Without it, likers is null and you only get the like count. Notes:
    • You only need the sessionid value — 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 likersError and the rest of the data is unaffected.

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.

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.

  1. Install Cookie-Editor and log in to instagram.com (ideally a secondary/throwaway account).
  2. While on instagram.com, click the Cookie-Editor icon in your toolbar.
  3. Click Export (top of the popup) → Export as JSON — this copies all instagram.com cookies to your clipboard.
  4. Paste that JSON straight into the actor's cookies field. Done — the actor picks out what it needs (sessionid, and derives the rest).

Prefer the JSON export: it includes sessionid (which is httpOnly, so document.cookie can'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)

  1. Open instagram.com and log in.
  2. Open developer tools: F12, or right-click the page → Inspect.
  3. Go to the Application tab (Chrome/Edge) or Storage tab (Firefox). In the left sidebar open Cookies → https://www.instagram.com.
  4. Copy the value of sessionid (a long string like 12345%3Aabcd...).
  5. Paste it into the actor's cookies field — the bare sessionid value 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 likers suddenly come back empty, grab a fresh sessionid.

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 provide cookies and 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) plus username, userId, text, likeCount, timestamp, and reply info (isReply, replyToId).
  • The GraphQL doc_id rotates 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 whose x-fb-friendly-name is PolarisLoggedOutDesktopWWWPostCommentsPaginationQuery, copy its doc_id, and set the commentsDocId input. 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 (or APIFY_LOG_LEVEL=DEBUG) to see every request URL and its response status — handy for spotting exactly where a block happens.

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.