Instagram Lead Qualifier avatar

Instagram Lead Qualifier

Pricing

from $0.05 / qualified profile

Go to Apify Store
Instagram Lead Qualifier

Instagram Lead Qualifier

Qualify Instagram influencers at scale. Input a list of profiles, get lead scores (0-100), engagement rates, follower counts, business emails, and niche matching. Tiered engagement thresholds auto-adjust by influencer size. Perfect for agencies and brand partnership teams.

Pricing

from $0.05 / qualified profile

Rating

0.0

(0)

Developer

Fatih İlhan

Fatih İlhan

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

a month ago

Last modified

Share

Instagram Influencer Lead Qualification Actor

A high-performance Apify Actor that scrapes and qualifies Instagram influencer profiles based on customizable engagement metrics, follower thresholds, and niche relevance.

🎯 Overview

This actor takes a list of Instagram profiles and returns qualified leads with comprehensive engagement data, lead scores, and actionable recommendations. It’s useful for influencer marketing agencies, brand partnership teams, and growth marketers.

✨ Features

  • Multi-method data extraction: Uses Instagram's internal API, HTML parsing, and meta tag fallbacks for maximum reliability.
  • Intelligent lead scoring: 0–100 score based on follower fit, engagement rate, niche match, and business email presence.
  • Tiered engagement thresholds: Automatically adjusts engagement expectations based on influencer tier (nano → mega).
  • Multilingual support: Parses follower counts in English, Turkish, Spanish, French, Indonesian, and more.
  • Anti-detection: iPhone 14 Pro device emulation with fingerprint randomization.
  • Rate limit handling: Automatic abort after configurable rate limit threshold.
  • Debug tools: Saves HTML dumps and screenshots for failed extractions.

📥 Input

Input schema

{
"profiles": ["username1", "username2", "https://instagram.com/username3"],
"sessionId": "YOUR_INSTAGRAM_SESSION_ID",
"minFollowers": 1000,
"maxFollowers": 500000,
"minEngagementRate": 1.5,
"requireBusinessEmail": false,
"nicheKeywords": ["fitness", "health", "wellness"],
"maxProfilesPerRun": 50,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Input parameters

ParameterTypeRequiredDefaultDescription
profilesarray-Instagram usernames (without @) or full profile URLs
sessionIdstring-Instagram session cookie (supports URL-encoded format)
minFollowersinteger1000Minimum follower threshold
maxFollowersintegernullMaximum follower threshold
minEngagementRatenumber1.5Minimum engagement rate as percentage (e.g., 1.5 = 1.5%)
requireBusinessEmailbooleanfalseOnly qualify profiles with an email in bio
nicheKeywordsarray[]Keywords to match in profile bio
maxProfilesPerRuninteger50Maximum profiles to process per run
proxyConfigurationobjectRESIDENTIALApify proxy configuration

📤 Output

Successful profile item

{
"username": "fitness_influencer",
"profileUrl": "https://www.instagram.com/fitness_influencer/",
"followers": 125000,
"following": 892,
"posts": 1247,
"bio": "🏋️ Certified Personal Trainer | 📧 collab@fitness.com",
"externalUrl": "https://linktr.ee/fitness_influencer",
"isVerified": false,
"profilePicUrl": "https://instagram.com/...",
"recentPosts": [
{
"shortcode": "ABC123xyz",
"likeCount": 4521,
"commentCount": 89,
"timestamp": "2024-01-15T10:30:00.000Z",
"displayUrl": "https://..."
}
],
"avgLikes": 4200,
"medianLikes": 4100,
"avgComments": 85,
"engagementRate": 0.0343,
"postingFrequency": 0.85,
"businessEmail": "collab@fitness.com",
"nicheMatchScore": 0.67,
"leadScore": 78.5,
"recommendation": "contact",
"qualified": true,
"skipReason": null,
"score_explanation": {
"avg_likes_last_12": 4200,
"engagement_rate": 0.0343,
"follower_count": 125000,
"tier": "macro",
"expected_engagement": 1.0,
"reason_summary": "Engagement: 3.43% | Expected for macro: 1.0% | Followers: 125,000 | Tier: macro"
},
"inputType": "profileUrl",
"source": "https://www.instagram.com/fitness_influencer/",
"success": true,
"scrapedAt": "2024-01-20T14:32:00.000Z"
}

Failed profile item

{
"username": "private_account",
"profileUrl": "https://www.instagram.com/private_account/",
"success": false,
"error": "LOGIN_REQUIRED",
"errorCode": "LOGIN_REQUIRED",
"errorMessage": "Redirected to Login.",
"scrapedAt": "2024-01-20T14:33:00.000Z"
}

📊 Lead Scoring System

Score components (0–100)

ComponentWeightDescription
Follower Fit40%How well follower count matches target range
Engagement Rate25%Engagement relative to tier-adjusted threshold
Niche Match20%Bio keyword matches / total keywords
Business Email10%Has public email in bio
Verified Badge5%Instagram verification status

Recommendations

Score rangeRecommendationAction
70–100contactHigh priority lead, reach out immediately
40–69reviewModerate fit, manual review recommended
0–39skipDoes not meet qualification criteria

Influencer tiers & engagement thresholds

The actor automatically adjusts engagement expectations based on follower count:

TierFollowersBase threshold multiplierExample (1.5% base)
Nano<1K1.0x1.5%
Micro1K–10Kmax(base, 5%)5.0%
Mid10K–100K1.0x1.5%
Macro100K–1M0.67x1.0%
Mega1M+0.33x0.5%

🔐 Getting Your Session ID

  1. Open Instagram in Chrome and log in.
  2. Press F12 to open DevTools.
  3. Go to ApplicationCookieshttps://www.instagram.com.
  4. Find the sessionid cookie and copy its value.
  5. Paste into the sessionId input field.

Note: Session IDs can be either URL-encoded (with %3A) or decoded (with :). Both formats are supported.

⚠️ Error Codes

CodeDescriptionResolution
LOGIN_REQUIREDRedirected to Instagram loginProvide a valid sessionId
ACCESS_DENIEDRate limited or blockedReduce maxRequestsPerMinute, use residential proxies
PARSE_ERRORFailed to extract profile dataCheck debug HTML in the Key-Value Store

🛠️ Configuration Defaults

const DEFAULT_MAX_PROFILES = 50;
const DEFAULT_MAX_CONCURRENCY = 1;
const DEFAULT_MAX_REQUEST_RETRIES = 2;
const DEFAULT_MAX_REQUESTS_PER_MIN = 15;
const MAX_RATE_LIMIT_HITS = 3;

📁 Debug Outputs

When extraction fails, the actor saves debug data to the Key-Value Store:

  • debug-html-{username}-{timestamp} - Full page HTML
  • screenshot-{username}-{label}-{timestamp} - Page screenshot

Labels include: LOGIN_REDIRECT, BLOCKED_HARD, PARSE_FAIL, PARSE_ERROR.

🚀 Usage Example

Via Apify Console

  1. Navigate to the Actor in Apify Console.
  2. Fill in the input form with your profiles and session ID.
  3. Click Start.
  4. Download results from the Dataset tab.

Via API

curl -X POST "https://api.apify.com/v2/acts/YOUR_ACTOR_ID/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"profiles": ["therock", "cristiano", "kyliejenner"],
"sessionId": "YOUR_SESSION_ID",
"minFollowers": 100000,
"minEngagementRate": 1.0,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}'

Via JavaScript SDK

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('YOUR_ACTOR_ID').call({
profiles: ['therock', 'cristiano'],
sessionId: 'YOUR_SESSION_ID',
minFollowers: 100000,
proxyConfiguration: {
useApifyProxy: true,
apifyProxyGroups: ['RESIDENTIAL']
}
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

📋 Best Practices

  • Use residential proxies: Required for reliable Instagram access.
  • Keep concurrency low: Default of 1 minimizes rate limits.
  • Batch appropriately: Process 25–50 profiles per run.
  • Monitor session ID: Refresh if you see LOGIN_REQUIRED errors.
  • Respect rate limits: Actor auto-aborts after 3 consecutive rate limit hits.

📄 License

Private - Internal use only.