Skip to main content
instagram_comments collects the comments on Instagram posts and reels, and their replies if you ask. One result is one comment or one reply.

Run it

Inputs

Send directUrls, handles, or both, in config.
Always set maxComments. It is your cost ceiling. Without it, credit is reserved for maxPosts × maxCommentsPerPost comments (twice that with replies) when the job is created.

Output

One row per comment, and one per reply when includeReplies is on. Every field is always present. Real rows from a job on a NASA post; the commenters’ handles, ids and pictures are replaced with placeholders here:
A post that delivered no comments returns a post_error row (type: "post_error", postUrl, error, status: error, throttled or unavailable). It is not billed. The job’s error_message then names up to five such posts, even when the job completed.

What logged-out means here

You get: comments and replies on public posts and reels, with the commenter’s handle, picture and verified badge. Not available:
  • Comments on private, deleted or region-blocked posts (a post_error row with status: "unavailable").
  • Reply counts, until the replies are collected.
  • A commenter’s full name and privacy, unless you turn on enrichCommenterProfiles.
  • Posts of private, age-restricted or unavailable accounts given as handles. They are skipped without a per-handle report; if no post is found at all, the job fails.

Completeness

scraper_metadata.coverage compares what was collected with the comment count each post shows: With replies on, scraper_metadata.replies adds replies_collected, parents_probed, parents_with_replies and parents_truncated. With enrichment on, scraper_metadata.enrichment adds requests, uniqueCommenters and failures.