Instagram Comment Leads Extractor avatar

Instagram Comment Leads Extractor

Pricing

from $1.60 / 1,000 comment results

Go to Apify Store
Instagram Comment Leads Extractor

Instagram Comment Leads Extractor

Extract leads from Instagram post and reel comments. Enrich commenter profiles, detect buying intent, score leads, and export flat CSV-friendly rows for outreach, prospecting, and social listening.

Pricing

from $1.60 / 1,000 comment results

Rating

0.0

(0)

Developer

Delowar Munna

Delowar Munna

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Instagram Comment Leads Extractor

Extract leads from Instagram post and reel comments. Enrich commenter profiles, detect buying intent, score leads, and export flat CSV-friendly rows for outreach, prospecting, and social listening.

What does this actor do?

Instagram Comment Leads Extractor is an Apify Actor that turns Instagram post and reel comments into actionable lead records. It identifies who is commenting, detects buying intent and contact signals, optionally enriches commenter profiles, and outputs one clean row per comment or per commenter — ready for CRM import, Google Sheets, or downstream enrichment.

Unlike generic Instagram comment scrapers that focus on raw comment data, this actor is lead-generation-first — built for agencies, brands, and sales teams who need prospect lists, not comment dumps.

Each comment row includes:

  • Post context — source URL, post owner, caption, likes, comment count
  • Comment data — text, timestamp, likes, reply status
  • Commenter identity — username, full name, profile URL, verified status
  • Optional enrichment — follower/following/post counts, bio, external URL, category
  • Intent signals — question detection, buying intent, contact intent, recommendations, complaints
  • Lead scoring — heuristic 0-100 score with transparent reasons
  • Keyword matching — custom keyword tagging

How it works

  1. Input — Accept one or more public Instagram post/reel URLs
  2. Extraction — Fetch post metadata and paginate comments via Instagram API
  3. Filtering — Apply keyword filters, minimum likes, language allowlist
  4. Analysis — Detect intent signals, match keywords, compute lead scores
  5. Enrichment — Optionally fetch commenter public profile data
  6. Aggregation — Optionally aggregate per commenter across multiple posts
  7. Export — Output flat, CSV-friendly rows

Use cases

Extract leads from competitor posts

A skincare brand wants commenters from competitor reels discussing acne, product recommendations, or purchase decisions.

Find high-intent commenters

A local service business wants comments containing phrases like "price?", "where are you located?", "DM me", "need this", "available in Canberra?", or "how can I order?".

Build creator or customer prospect lists

A UGC agency wants to identify active commenters on beauty, travel, or food niche posts, then optionally enrich profile-level details.

Social listening

A brand wants comments grouped by keyword themes like complaints, questions, praise, comparison, or buying intent.

Export clean CSV for outreach

A user needs one row per comment or one row per commenter, ready for Google Sheets, Airtable, CRM import, or downstream enrichment.

Sample input

Example 1 — Quick comment export

{
"startUrls": [
"https://www.instagram.com/p/DXFnCHojbs-/",
"https://www.instagram.com/reel/DXG2abcDEF/"
],
"maxCommentsPerUrl": 200,
"outputMode": "comment_rows",
"detectIntentSignals": true,
"detectQuestionComments": true,
"enableLeadScore": true
}

Example 2 — Lead discovery with enrichment

{
"startUrls": [
"https://www.instagram.com/reel/DXF12abcXYZ/",
"https://www.instagram.com/reel/DXG98defUVW/"
],
"maxCommentsPerUrl": 500,
"outputMode": "both",
"includeReplies": true,
"maxRepliesPerComment": 10,
"enrichCommenterProfile": true,
"includeProfileBio": true,
"includeProfileExternalUrl": true,
"includeProfileCounts": true,
"detectIntentSignals": true,
"enableLeadScore": true,
"tagKeywords": ["price", "order", "available", "interested", "dm"],
"dedupeCommentersAcrossUrls": true,
"aggregateCommenterMetrics": true
}

Input reference

FieldTypeDefaultDescription
startUrlsstring[]Instagram post or reel URLs (required)
maxCommentsPerUrlinteger500Max comments per URL
maxRepliesPerCommentinteger10Max replies per comment
maxUrlsinteger50Max URLs to process
outputModestring"comment_rows"comment_rows, commenter_rows, or both
includeRepliesbooleanfalseInclude reply threads
onlyPinnedCommentsbooleanfalseOnly pinned comments (best effort)
sortModestring"default"default, top_first, newest_first
minCommentLikesinteger0Minimum comment likes filter
keywordIncludestring[][]Only comments with these keywords
keywordExcludestring[][]Exclude comments with these keywords
languageAllowliststring[][]Language filter (best effort)
enrichCommenterProfilebooleanfalseFetch commenter profile data
includeProfileBiobooleantrueInclude bio text
includeProfileExternalUrlbooleantrueInclude external URL
includeProfileCountsbooleantrueInclude follower/post counts
includeRecentActivitySnapshotbooleanfalseInclude recent activity
detectIntentSignalsbooleantrueDetect buying/contact intent
detectQuestionCommentsbooleantrueDetect questions
tagKeywordsstring[][]Custom keywords to tag
enableLeadScorebooleantrueCompute lead score (0-100)
dedupeCommentersAcrossUrlsbooleantrueDeduplicate commenters
keepFirstSeenCommentOnlybooleanfalseOne comment per commenter
aggregateCommenterMetricsbooleantrueAggregate commenter metrics
requestTimeoutSecsinteger300Request timeout
maxConcurrencyinteger1Max concurrent URLs
debugModebooleanfalseVerbose logging

Output

The run produces four dataset views — Comment Rows, Commenter Rows, Lead Signals, and Contact Hints — all backed by the same dataset and each tuned for a specific workflow.

Comment Rows table view

Comment Rows

One row per comment, flat and CSV-friendly. Use this view for raw comment analysis, moderation, or as the base feed for downstream enrichment.

{
"sourceUrl": "https://www.instagram.com/p/DXFnCHojbs-/",
"sourceType": "post",
"postId": "3874674723871636286_217723373",
"shortcode": "DXFnCHojbs-",
"postOwnerUsername": "CNN",
"postCaption": "Democratic Rep. Eric Swalwell announced Monday he planned to resign from Congress following explosive allegations of sexual misconduct against him.\n\nThe announcement from the California Democrat comes after mounting pressure from both Democrats and Republicans to step aside from his role in the House of Representatives.",
"postTimestamp": "2026-04-13T21:54:09.000Z",
"postLikeCount": 2840,
"postCommentCount": 352,
"commentId": "dom_2_1776130587350",
"parentCommentId": null,
"isReply": false,
"commentText": "👏👏👏 And his bid for California governor. Don't care if you're a democrat or a republican or a flying purple people eater if you're accused of sexual assault, you deserve what you get.",
"commentTextNormalized": "👏👏👏 and his bid for california governor. don't care if you're a democrat or a republican or a flying purple people eater if you're accused of sexual assault, you deserve what you get.",
"commentTimestamp": "2026-04-14T01:32:29.000Z",
"commentLikeCount": 0,
"commenterUsername": "salty_but_humble_",
"commenterFullName": null,
"commenterProfileUrl": "https://www.instagram.com/salty_but_humble_/",
"commenterIsVerified": false,
"commenterFollowerCount": null,
"commenterFollowingCount": null,
"commenterPostCount": null,
"commenterBio": null,
"commenterExternalUrl": null,
"commenterCategory": null,
"commenterIsBusinessLike": null,
"commenterRecentPostCount": null,
"containsQuestion": false,
"containsBuyingIntent": false,
"containsContactIntent": false,
"intentTags": null,
"matchedKeywords": null,
"leadScore": 30,
"leadReason": "detailed_comment|multi_sentence",
"extractedAt": "2026-04-14T01:36:41.558Z"
}

Commenter Rows

One row per unique commenter, aggregated across source URLs. Use this view when you want a de-duplicated prospect list with per-person activity metrics.

{
"commenterUsername": "salty_but_humble_",
"commenterFullName": null,
"commenterProfileUrl": "https://www.instagram.com/salty_but_humble_/",
"commenterIsVerified": false,
"commenterFollowerCount": null,
"commenterFollowingCount": null,
"commenterPostCount": null,
"commenterBio": null,
"commenterExternalUrl": null,
"commenterCategory": null,
"commenterIsBusinessLike": null,
"totalCommentsCaptured": 2,
"totalRepliesCaptured": 0,
"distinctSourceUrls": 1,
"firstSeenCommentAt": "2026-04-14T01:32:29.000Z",
"lastSeenCommentAt": "2026-04-14T01:32:29.000Z",
"sourceOwnerUsernames": "CNN",
"sourceShortcodes": "DXFnCHojbs-",
"exampleComments": "@american_muscle_truck your entire profile screams that you're compensating. 🍆. Ladies, you know exa | 👏👏👏 And his bid for California governor. Don't care if you're a democrat or a republican or a flying",
"matchedKeywords": null,
"aggregateIntentTags": null,
"aggregateLeadScore": 30,
"aggregateLeadReason": "active_commenter",
"extractedAt": "2026-04-14T01:36:42.014Z"
}

Lead Signals

A focused view on lead-qualifying signals. Use this when you want to quickly rank commenters by buying intent, question presence, and lead score without the post-level noise.

{
"commenterUsername": "dannyperezcu",
"commenterProfileUrl": "https://www.instagram.com/dannyperezcu/",
"commentText": "Why you had to do it man why",
"containsQuestion": true,
"containsBuyingIntent": false,
"containsContactIntent": false,
"matchedKeywords": null,
"intentTags": "question",
"leadScore": 35,
"leadReason": "question",
"commenterIsVerified": false,
"commenterFollowerCount": null,
"commenterIsBusinessLike": null,
"sourceUrl": "https://www.instagram.com/p/DXFnCHojbs-/",
"postOwnerUsername": "CNN"
}

Contact Hints

A contact-oriented slice that highlights bio, external URL, category, and profile metrics next to the comment. Use this view to shortlist commenters you can actually reach out to (populated when enrichCommenterProfile is enabled).

{
"commenterUsername": "salty_but_humble_",
"commenterFullName": null,
"commenterProfileUrl": "https://www.instagram.com/salty_but_humble_/",
"commenterBio": null,
"commenterExternalUrl": null,
"commenterCategory": null,
"commenterFollowerCount": null,
"commenterFollowingCount": null,
"commenterPostCount": null,
"commenterIsBusinessLike": null,
"commentText": "@american_muscle_truck your entire profile screams that you're compensating. 🍆. Ladies, you know exactly what I mean about these big truck driving little wiener idiots 😂",
"sourceUrl": "https://www.instagram.com/p/DXFnCHojbs-/"
}

Intent tags

TagMeaning
questionComment contains a question
buying_intentMentions price, availability, ordering
contact_intentMentions DM, email, collaboration
recommendation_requestAsks for recommendations
complaintNegative feedback
spam_likeSpam patterns detected
emoji_onlyComment is emoji-only
generic_praiseSingle-word generic praise

All intent tags and lead scores are heuristic best-effort classifications, not guaranteed labels.

Lead scoring

Heuristic 0-100 score based on comment content and commenter profile signals:

Positive signals: questions (+15), buying intent (+25), contact intent (+20), detailed comment (+5), liked comment (+5-10), verified commenter (+10), commenter with external URL (+10), business-like commenter (+10), keyword matches (+10)

Negative signals: emoji-only (-30), generic praise (-20), spam patterns (-40), very short comment (-10)

Pricing

Pay-per-event pricing:

  • comment-result: one event per comment row output
  • commenter-result: one event per aggregated commenter row output

The actor respects user spending limits — when the configured limit is reached, the run stops gracefully.

Tips for best results

  • Start small — test with maxCommentsPerUrl: 20 to verify results
  • Use keyword filterskeywordInclude and tagKeywords help find high-intent comments
  • Enable enrichment selectivelyenrichCommenterProfile significantly increases run time; use it for smaller batches
  • Commenter rows for prospecting — use outputMode: "commenter_rows" with dedupeCommentersAcrossUrls: true to get one row per person

Local development

cd actor
npm install
npm start # Run with INPUT.json
npm run dev # Run with local storage