Instagram Comments Scraper With Lead Enrichment avatar

Instagram Comments Scraper With Lead Enrichment

Pricing

$19.99/month + usage

Go to Apify Store
Instagram Comments Scraper With Lead Enrichment

Instagram Comments Scraper With Lead Enrichment

The Instagram Comments Scraper extracts comments from posts or reels, capturing usernames, text, timestamps, and engagement metrics. Ideal for social listening, sentiment analysis, and audience research, it delivers clean, structured data for insights, analytics, or API integration.

Pricing

$19.99/month + usage

Rating

5.0

(3)

Developer

Scraper Engine

Scraper Engine

Maintained by Community

Actor stats

1

Bookmarked

115

Total users

7

Monthly active users

15 days ago

Last modified

Share

Instagram Comment Scraper — Buying Intent, Emails and Lead Flags

Instagram Comments Scraper With Lead Enrichment turns post and reel comment sections into a structured lead list: it flags buyingIntent, priceQuestion and partnershipInterest with a rule-based lexicon, extracts commentEmails and phoneCandidates straight from the text, and can enrich each commenter's profile with commenterFollowersCount and commenterBioEmail. Output is typed JSON, ready for a CRM or spreadsheet. Start a run below to see it on your own posts.

What is Instagram Comments Scraper With Lead Enrichment?

It's an Apify Actor that reads the comment section of any Instagram post or reel, scores each comment against a keyless intent lexicon, pulls out contact clues from the raw text, and optionally fetches each commenter's own public profile for follower counts and bio contact details. A logged-in Instagram session is required to read comments at all — the Actor's own code logs a warning and skips a post if no sessionId cookie is supplied, because Instagram no longer serves comment data to guest requests. It's built for growth marketers, social-selling and community teams, and developers wiring Instagram comment leads into a CRM or AI pipeline.

What Instagram comment data is publicly available to scrape?

Instagram gates comment data behind a login session even on fully public posts — the real restriction here, not a private-account wall.

Data categoryPublicly viewable (no login)Requires a session (sessionid)
Post/reel existing at a URLYes
Comment text, author, timestampYes — session-gated
Reply threadsYes — same gate
Comment like countsYes — bundled with the fetch
Commenter's bio, followers, business flagsYes, via web_profile_infoRate-limited only
Contact info in a bio or commentYes, if published

This Actor only returns data visible once a session can view the page — nothing private is unlocked.

What data can I extract with Instagram Comments Scraper With Lead Enrichment?

Every run returns one row per comment or reply, combining the base comment fields, four lead-intent flags, four contact-clue extractors, and (optionally) an eleven-field commenter enrichment profile.

Comment identity & content fields

FieldDescription
idComment or reply's numeric ID
type"comment" or "reply"
isChildtrue for reply rows
parentIdParent comment's ID (reply rows only, else null)
parentCommentIdSame parent-comment ID, carried from the reply payload (reply rows only)
textThe comment or reply text
ownerUsernameCommenter's username
ownerProfilePicUrlCommenter's profile picture URL, as returned inline with the comment
ownerIdCommenter's numeric user ID
ownerNested snapshot object: fbid_v2, full_name, id, is_mentionable, is_private, is_verified, latest_reel_media, profile_pic_id, profile_pic_url, username
timestampISO-8601 UTC time the comment/reply was posted
commentUrlDeep link to the comment or reply on Instagram
postUrlThe post/reel URL that was scraped
repliesNested array of reply objects (comment rows only, populated when includeReplies is on)
repliesCountNumber of child replies Instagram reports for the comment
scrapedAtISO-8601 UTC time this row was scraped

Lead-intent & engagement fields

FieldDescription
isLeadtrue if commercial intent or a contact clue was found
intentFlagsNested object bundling the four booleans below
buyingIntent / priceQuestion / partnershipInterest / supportRequestOne boolean per rule-based intent lexicon
matchedIntentKeywordsThe exact lexicon phrases (or your customIntentKeywords) that fired
leadIntentScoreCount of distinct intent categories that fired (0–4)
likesCountLike count Instagram reports for the comment/reply
aiIntentOptional AI-generated intent label — null unless aiEnhancement is on with a key

Contact-clue & commenter-enrichment fields

FieldDescription
commentEmailsEmail addresses found in the comment text (obfuscated at/dot patterns normalized)
phoneCandidatesRaw text substrings that look phone-shaped — never validated or reformatted
commentUrlsURLs mentioned in the comment text
mentionedHandles@handles mentioned in the comment text
commenterFullName, commenterBio, commenterBioEmail, commenterExternalUrlFrom the commenter's own profile (enrichment only)
commenterFollowersCount, commenterFollowingCount, commenterPostsCountFrom the commenter's own profile (enrichment only)
commenterIsBusiness, commenterIsProfessional, commenterBusinessCategoryBusiness-account flags (enrichment only)
commenterIsVerified, commenterIsPrivateVerification/privacy flags (enrichment only)

All enrichment fields return null when enrichCommenterProfiles is off, the lookup fails, or the commenter is past the maxProfileLookups cap — never a fabricated value.

🤖 Add-on: Need additional Instagram data?

If you need more than comment sections, pair this Actor with Instagram Profile Scraper for full bio and post depth, or Instagram Followers Scraper With Bio Contact Enrichment to prospect from a profile's follower list instead of its comments. To find the posts to feed into this scraper in the first place, Instagram Hashtag Scraper and Instagram Mentions Scraper surface posts by hashtag or by inbound brand mention.

How does Instagram Comments Scraper With Lead Enrichment differ from the official Instagram API?

Meta's Instagram Graph API requires a Business or Creator account linked to a Facebook Page and can only manage comments on media that account owns — it was never designed to prospect leads from comment sections on other people's public posts.

FeatureInstagram Graph APIInstagram Comments Scraper With Lead Enrichment
Account type requiredBusiness/Creator account linked to a Facebook PageNone of your own — just a session cookie to read comments
Scope of accessible commentsOnly media your linked account/Page ownsAny public post or reel URL you can view
App approvalMeta Developer App + App Review for comment permissionsNone — run directly from the Apify Store
Lead-intent detectionNot provided; raw comment objects onlyBuilt-in rule-based intent flags on every row
Contact-clue extractionNot providedBuilt-in email/URL/handle/phone-candidate extraction
Commenter profile enrichmentSeparate call, still scoped to your own audienceOptional, capped enrichment of any commenter's public profile
Setup timeDeveloper app registration plus review cyclePaste URLs and a session cookie, run

Use the Graph API to moderate or reply to comments on content you manage. Use this Actor to prospect leads from comment sections on any public post, including ones you don't own.

How to use Instagram Comments Scraper With Lead Enrichment

This Actor runs on the Apify platform — no separate signup or API integration is required to try it.

  1. Open the Actor's page on Apify Store and start a new run.
  2. Paste one or more Instagram post/reel URLs into targetPosts.
  3. Paste your Instagram sessionid cookie into sessionId — comments won't load without it.
  4. Optionally turn on leadsOnly or enrichCommenterProfiles to narrow and deepen the results.
  5. Start the run and export the dataset as JSON or CSV once it finishes.

How to scale to bulk Instagram comment extraction

targetPosts is an array — paste as many post or reel URLs as you want mined in a single run, and each is processed in turn with its own comment rows pushed to the same dataset. There is no separate "bulk mode" toggle; adding more URLs to the same list is the scaling mechanism.

What can you do with Instagram comment data?

  • A growth marketer running a giveaway uses buyingIntent and commentEmails to build a warm-lead list without reading every comment by hand.
  • A community manager watching a product launch uses supportRequest and matchedIntentKeywords to triage complaints before they escalate.
  • A sales rep prospecting comment sections uses commenterFollowersCount and commenterIsBusiness to prioritize outreach to business accounts.
  • An agency scouting collabs uses partnershipInterest and mentionedHandles to catch ambassador and reseller pitches directly from comments.
  • An AI engineer wiring an outreach agent uses isLead and leadIntentScore as a pre-filter, then passes the text field to an LLM to draft a personalized reply.

How does Instagram Comments Scraper With Lead Enrichment handle rate limits and blocking?

Every request carries a freshly generated CSRF token and starts on your configured proxy, if any. On a blocked response (HTTP 403/429/503) the Actor escalates to Apify's residential proxy pool and retries up to three times before giving up on that post, logging a warning and moving to the next URL rather than failing the run. Commenter-profile enrichment lookups get their own pool of distinct residential proxy sessions — one per lookup where possible — and each lookup retries up to three times with a short backoff on 429/401/403 before returning null for that commenter. No CAPTCHA solving is implemented; if Instagram serves a login wall the affected post or profile lookup is skipped, not faked.

⬇️ Input

ParameterRequiredTypeDescriptionExample Value
targetPostsNoarrayInstagram post or reel URLs whose comment sections you want to mine for leads.["https://www.instagram.com/p/DN8-GjPkgjS"]
maxCommentsNointegerHow many top-level comments to scan per post (1–1000, default 10).50
includeRepliesNobooleanAlso scan replies under each comment.true
maxRepliesNointegerCap replies fetched per comment when reply threads are included (0–100, default 5).10
detectLeadIntentNobooleanFlag buying-intent, price-question, support-request and partnership-interest comments using a rule-based, keyless lexicon (default true).true
customIntentKeywordsNoarrayExtra phrases that should mark a comment as buying-intent, matched case-insensitively.["où acheter"]
leadsOnlyNobooleanOutput only comments/replies with commercial intent or a contact clue (default false).true
enrichCommenterProfilesNobooleanFetch each unique commenter's public profile — followers, bio, bio email, external link, business flags (default false).true
maxProfileLookupsNointegerHard cap on unique commenter-profile fetches per run (0–500, default 20).50
sessionIdNostring (secret)Your Instagram sessionid cookie. Needed to collect comments at all."6032xxxxxxx%3AaBcDeF..."
proxyConfigurationNoobjectOptional proxy. Residential is recommended when enrichment is on.{"useApifyProxy": true}
aiEnhancementNobooleanAdd an AI lead-intent label on top of the rule engine (default false).false
aiModelNostringAI model/provider for optional intent classification (default "gpt-4o-mini")."claude-haiku-4-5"
aiApiKeyNostring (secret)Provider API key (OpenAI or Anthropic). Only used when AI classification is on.""

Example input

{
"targetPosts": [
"https://www.instagram.com/p/DN8-GjPkgjS",
"https://www.instagram.com/reel/C1a2B3cDefG/"
],
"maxComments": 50,
"includeReplies": true,
"maxReplies": 10,
"detectLeadIntent": true,
"customIntentKeywords": ["où acheter", "shop link"],
"leadsOnly": true,
"enrichCommenterProfiles": true,
"maxProfileLookups": 50,
"sessionId": "6032xxxxxxx%3AaBcDeFgHiJkLmN%3A5%3AAYi...",
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] },
"aiEnhancement": false,
"aiModel": "claude-haiku-4-5",
"aiApiKey": ""
}

⬆️ Output

Results are stored in the Actor's dataset as typed, normalized JSON with a consistent field set across every run, one row per comment or reply. Export as JSON, CSV, Excel or via the Apify API directly from the dataset.

Example output

[
{
"postUrl": "https://www.instagram.com/p/DN8-GjPkgjS",
"commentUrl": "https://www.instagram.com/p/DN8-GjPkgjS/c/17912345678901234",
"id": "17912345678901234",
"text": "How much is this? Do you ship to the UK? contact@shopexample.com",
"ownerUsername": "jane_retail_buyer",
"ownerProfilePicUrl": "https://scontent.cdninstagram.com/v/t51/jane_pic.jpg",
"ownerId": "9988776655",
"owner": {
"fbid_v2": "17891234567890123",
"full_name": "Jane Buyer",
"id": "9988776655",
"is_mentionable": true,
"is_private": false,
"is_verified": false,
"latest_reel_media": 0,
"profile_pic_id": "3201234567890_9988776655",
"profile_pic_url": "https://scontent.cdninstagram.com/v/t51/jane_pic.jpg",
"username": "jane_retail_buyer"
},
"timestamp": "2026-07-20T14:03:11.000Z",
"repliesCount": 1,
"replies": [],
"likesCount": 4,
"type": "comment",
"isChild": false,
"parentId": null,
"isLead": true,
"intentFlags": {
"buyingIntent": false,
"priceQuestion": true,
"supportRequest": false,
"partnershipInterest": false
},
"buyingIntent": false,
"priceQuestion": true,
"supportRequest": false,
"partnershipInterest": false,
"matchedIntentKeywords": ["how much", "do you ship"],
"leadIntentScore": 1,
"commentEmails": ["contact@shopexample.com"],
"phoneCandidates": [],
"commentUrls": [],
"mentionedHandles": [],
"aiIntent": null,
"commenterFullName": "Jane Buyer",
"commenterBio": "Small business owner | UK",
"commenterBioEmail": "jane@buyerbrand.co.uk",
"commenterExternalUrl": "https://buyerbrand.co.uk",
"commenterFollowersCount": 812,
"commenterFollowingCount": 340,
"commenterPostsCount": 96,
"commenterIsBusiness": true,
"commenterIsProfessional": true,
"commenterBusinessCategory": "Retail Company",
"commenterIsVerified": false,
"commenterIsPrivate": false,
"scrapedAt": "2026-07-25T09:12:47.000Z"
},
{
"postUrl": "https://www.instagram.com/p/DN8-GjPkgjS",
"commentUrl": "https://www.instagram.com/p/DN8-GjPkgjS/c/17912345678901234/r/17923456789012345",
"id": "17923456789012345",
"text": "@jane_retail_buyer yes we ship worldwide, DM to order!",
"ownerUsername": "shopexample",
"ownerProfilePicUrl": "https://scontent.cdninstagram.com/v/t51/shop_pic.jpg",
"timestamp": "2026-07-20T15:11:02.000Z",
"repliesCount": 0,
"replies": [],
"likesCount": 1,
"owner": {
"fbid_v2": "17899988877766655",
"full_name": "Shop Example",
"id": "1122334455",
"is_mentionable": true,
"is_private": false,
"is_verified": true,
"latest_reel_media": 0,
"profile_pic_id": "3209988877766_1122334455",
"profile_pic_url": "https://scontent.cdninstagram.com/v/t51/shop_pic.jpg",
"username": "shopexample"
},
"parentCommentId": "17912345678901234",
"type": "reply",
"isChild": true,
"parentId": "17912345678901234",
"ownerId": "1122334455",
"isLead": true,
"buyingIntent": true,
"priceQuestion": false,
"supportRequest": false,
"partnershipInterest": false,
"matchedIntentKeywords": ["dm to order"],
"leadIntentScore": 1,
"commentEmails": [],
"phoneCandidates": [],
"commentUrls": [],
"mentionedHandles": ["@jane_retail_buyer"],
"aiIntent": null,
"commenterFollowersCount": null,
"commenterBioEmail": null,
"commenterExternalUrl": null,
"commenterIsBusiness": null,
"scrapedAt": "2026-07-25T09:12:49.000Z"
}
]

How does it work?

The Actor decodes each post's media_id directly from its URL shortcode, then loads the post page to locate Instagram's current comment and reply GraphQL persisted-query IDs before they change. It calls those GraphQL endpoints using your sessionId cookie and a freshly generated CSRF token, paging through comments and replies with cursor-based pagination. When enrichment is on, each unique commenter's username is looked up against Instagram's web_profile_info endpoint, capped and cached so repeat commenters don't re-count. Every comment and reply's text is then run through a deterministic keyword lexicon and regex-based contact-clue extraction — no browser rendering or JavaScript execution happens on your end. Because fields are normalized in code rather than scraped from rendered HTML, the output schema stays stable even as Instagram's page layout changes.

Integrations

Instagram Comments Scraper With Lead Enrichment runs on Apify, so it works with anything that can call an HTTP API or an Apify client library — no proprietary SDK required.

Calling Instagram Comments Scraper With Lead Enrichment programmatically

from apify_client import ApifyClient
client = ApifyClient("<APIFY_API_TOKEN>")
run = client.actor("scraper-engine/instagram-comments-scraper-with-lead-enrichment").call(run_input={
"targetPosts": ["https://www.instagram.com/p/DN8-GjPkgjS"],
"sessionId": "<YOUR_INSTAGRAM_SESSIONID>",
"leadsOnly": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["ownerUsername"], item["isLead"], item["commentEmails"])

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

MCP integration for AI agents

This Actor is reachable through Apify's Actors MCP Server, which exposes Actors on Apify Store as callable tools for MCP-compatible clients such as Claude Desktop and Claude Code. Register it by connecting from this Actor's page in Apify Console, or by running npx @apify/actors-mcp-server configured with this Actor's store ID.

No-code tools (n8n, Make, LangChain)

In n8n, use the HTTP Request node (or the community Apify node) pointed at this Actor's run endpoint, passing targetPosts and sessionId in the request body. In Make, use the Apify app's "Run Actor and get dataset items" module and map targetPosts from an earlier scenario step. In LangChain, call the same Apify API endpoint from a custom Tool, or load results with the community Apify dataset loader, so an agent can pull fresh comment leads mid-conversation.

Scraping publicly visible comments is generally lawful in most jurisdictions, since this Actor only returns what a viewer with the post's URL and a valid session can already see — nothing behind a private account is accessed. That said, comment text, usernames, emails and enriched profile fields are personal data about identifiable people, so GDPR (EU/UK), CCPA (California) and similar regimes govern how you store and use it — you'll generally need a lawful basis (such as legitimate interest) and a way to honor deletion requests. Instagram's Terms of Service also restrict automated data collection, independent of privacy law. Consult legal counsel if your use case involves bulk storage of personal data.

Frequently asked questions

What Instagram comment fields does Instagram Comments Scraper With Lead Enrichment return?

The top fields are text, isLead, commentEmails, commenterFollowersCount and matchedIntentKeywords, alongside the base comment fields (ownerUsername, timestamp, likesCount). See What data can I extract above for the full field list.

How does the lead enrichment actually work?

It's three real, verifiable mechanisms stacked together, not a single black box: a deterministic keyword lexicon flags buyingIntent, priceQuestion, partnershipInterest and supportRequest in the comment text; regex extraction pulls commentEmails, commentUrls, mentionedHandles and phoneCandidates from that same text; and, only if enrichCommenterProfiles is on, one extra capped HTTP request per unique commenter fetches their own public profile for followers, bio and business flags. An optional fourth layer, aiEnhancement, calls OpenAI or Anthropic to add an aiIntent label, but only when a key is supplied — it is off and unused by default. The rule-based lexicon can miss phrasing outside its list or over-match ambiguous words, and phoneCandidates are raw, unverified text, not confirmed phone numbers.

Does Instagram Comments Scraper With Lead Enrichment require an Instagram account or login?

Yes, functionally: you must paste your own Instagram sessionid cookie into sessionId. Instagram no longer returns comment data to logged-out requests, so a run without a session ID logs a warning and skips every post.

How many Instagram comments can I extract in one run, and can I scrape multiple posts at once?

Up to 1000 top-level comments and 100 replies per comment, per post — and targetPosts accepts multiple post/reel URLs in the same run, each processed in turn into the same dataset.

What happens if a post has no comments, is blocked, or requires login?

The Actor logs a warning for that specific URL and moves on to the next one rather than failing the run; zero rows are pushed for the skipped post. Blocked responses (403/429/503) trigger an automatic residential-proxy retry first, and only fall through to a skip after those retries are exhausted.

Does Instagram Comments Scraper With Lead Enrichment work with Claude, ChatGPT, and other AI agent tools?

Yes. It's reachable through Apify's Actors MCP Server for MCP-compatible clients, and callable as a plain HTTP endpoint by any agent framework that can make API calls. It can also optionally call OpenAI or Anthropic models internally for aiIntent classification when you supply your own key.

What makes this different from scraping raw Instagram comments yourself?

It adds four rule-based intent flags, four contact-clue extractors and optional profile enrichment on top of the standard comment fields (text, likesCount, replies, owner), so leads are pre-filtered instead of requiring manual review of every comment.

Does Instagram Comments Scraper With Lead Enrichment return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with consistent field names across runs — no HTML parsing or CSS selectors. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.

What happens when Instagram changes its layout or anti-bot system?

The Actor is maintained and the output schema stays stable across updates, since fields are normalized in code rather than scraped from rendered HTML. No specific turnaround time is promised for any given change.

Can I use Instagram Comments Scraper With Lead Enrichment without managing proxies or browser infrastructure?

Yes. It makes direct HTTP/GraphQL calls rather than driving a headless browser, and it automatically escalates from your configured proxy to Apify's residential proxy pool on a block — you don't need to run or configure anything yourself beyond an optional proxyConfiguration.

Which Instagram comment fields work best for AI training data and RAG indexing?

For RAG, index text alongside matchedIntentKeywords and commenterBio for retrievable context. For training data, isLead, leadIntentScore, buyingIntent/priceQuestion/partnershipInterest/supportRequest and commenterIsBusiness all return as consistent typed booleans/integers across every record.

ScraperWhat it extracts
Instagram Profile ScraperBio, follower counts, verification and business flags
Instagram Followers Scraper With Bio Contact EnrichmentA profile's followers, optionally enriched with bio and contact fields
Instagram Hashtag ScraperPosts and reels by hashtag or keyword
Instagram Mentions Scraper — Inbound Tagged PostsPosts where other accounts tagged or @-mentioned a handle
Facebook Comments Scraper: Reaction BreakdownFacebook comments with reaction breakdown and engagement metrics

Your feedback

Found a bug or missing a field? Let us know through the Issues tab on this Actor's Apify Console page so we can take a look. Feedback like this directly shapes what gets fixed and added next.