Instagram Comments Scraper avatar

Instagram Comments Scraper

Pricing

from $1.71 / 1,000 comments

Go to Apify Store
Instagram Comments Scraper

Instagram Comments Scraper

Scrape Instagram comments from public posts and reels. Exact total comment count on every result, nested replies included, honest guest-visibility reporting.

Pricing

from $1.71 / 1,000 comments

Rating

0.0

(0)

Developer

Cravl

Cravl

Maintained by Community

Actor stats

0

Bookmarked

13

Total users

4

Monthly active users

20 days ago

Last modified

Categories

Share

Scrape comments from public Instagram posts and reels: with the exact total comment count stated on every result, not just the subset that could be fetched.

What you get

Per post/reel: one header item:

FieldMeaning
commentCountExactThe post's true total comment count (from Instagram's own counter)
guestVisibleCountHow many comments are visible without login (what this run fetched)
guestHasMoretrue when the exact total exceeds the guest-visible count: stated honestly, never silently truncated
owner, likes, postDate, caption, kindPost context

Per comment: one item each: pk, user, verified, text, createdAt (unix timestamp), likes, childCount (nested reply count), plus url and postOwner for joining.

Features

  • Nested replies included by default: every comment carries its childCount.
  • Exact totals on every post: know what you're getting, including on viral threads with tens of thousands of comments.
  • Guest-mode extraction: no login, no cookies, no account. Comments are those visible to logged-out users (we tell you when the remainder is login-only instead of pretending).
  • Cheap runs: the engine is a ~30 MB native binary, not a full browser.

Input

FieldTypeDefaultDescription
directUrlsarray:Post or reel URLs (/p/CODE/, /reel/CODE/, or username-prefixed forms; /reels/ is normalized automatically)
apiPagesinteger5Guest pagination pages per post (12 comments/page). Higher = deeper threads.
resultsLimitinteger0Max comments per post. 0 = all guest-visible comments.
proxyConfigurationobject:Residential proxies strongly recommended. Instagram guest access requires an exit IP with guest reputation.

Output

One header item per URL (post metadata + exact/guest-visible counts), followed by one item per comment. Error items carry an honest error field (e.g. login wall on that exit IP) instead of silent truncation.

Notes

  • Only public posts/reels are supported. Login-walled or deleted posts produce an explicit error item.
  • Comment counts drift live (Instagram counts in real time); commentCountExact is the count at fetch time.
  • Requires a proxy exit IP with Instagram guest reputation: residential proxies recommended.

Pricing

Pay-per-event: you are charged per comment item delivered. The post header (with the exact total) is not charged.

Migrating from other Apify Actors

Cravl Actors accept Apify-style inputs and emit familiar field names alongside Cravl-specific fields, so most pipelines migrate with minimal changes.

Input compatibility

  • startUrls (array of URLs, or objects with a url key) is accepted as an alias for directUrls.
  • maxItems is accepted as an alias for resultsLimit.
  • includeHeader (boolean, default true) controls the header item. Set false to emit only comment items.

Output compatibility

Cravl fieldCompatible aliasNotes
header ownerownerUsername
header commentCountExactcommentsCount
header likeslikesCountnumeric when parseable
(new)shortCodederived from the post URL
comment pkcommentId
comment userownerUsername
comment createdAt (unix)timestampISO 8601
comment likeslikesCount
comment childCountrepliesCount
comment urlpostUrl

Structure: one header item per URL (record post) followed by one item per comment (record comment). Every item carries inputUrl.

Limitations

  • Extraction runs in guest mode: results reflect what the source displays to logged-out visitors. Where the source reports a total (for example, a comment count), results state both the returned count and the source total, so partial visibility is always explicit.
  • Extraction depends on the reputation of the exit IP with the source. A run may occasionally return an explicit error item for a URL; re-running typically succeeds.
  • Instagram rate-limits per IP. For very large runs (hundreds of URLs), split the input into batches for best throughput.

Changelog

  • 0.1.24 — Every header record now carries commentsApiStatus and commentsApiStatusReason (also added to the dataset schema), so the dataset itself proves the distinction between a confirmed empty and a failed fetch: ok = guest comments collected; empty = pagination ran and the source confirmed zero guest-visible comments; unavailable = pagination failed or could not run, always paired with an error item. Callers reading only guestVisibleCount: 0 can now check commentsApiStatus instead of inferring.
  • 0.1.23 — Dataset schema fix: guestHasMore in the post summary is nullable (null = source did not confirm pagination state). Previously a non-nullable schema rejected the fixed wrapper's indeterminate records.
  • 0.1.22 — Silent-zero fix. The engine now reports comment pagination status for every post/reel fetch and reports guestHasMore: false only when the source confirmed it; the wrapper classifies every fetch as ok / confirmed-empty / indeterminate / wall and emits an explicit error item for anything not confirmed. Before this build, a failed or indeterminate fetch could surface as a zero-comment header with no error. Confirmed empties (including posts whose page-level count includes deleted or hidden comments the guest API never returns) remain a distinct, non-error outcome.