Instagram Lead Qualifier
Pricing
from $0.05 / qualified profile
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
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
a month ago
Last modified
Categories
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–100score 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
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
profiles | array | ✅ | - | Instagram usernames (without @) or full profile URLs |
sessionId | string | ✅ | - | Instagram session cookie (supports URL-encoded format) |
minFollowers | integer | ❌ | 1000 | Minimum follower threshold |
maxFollowers | integer | ❌ | null | Maximum follower threshold |
minEngagementRate | number | ❌ | 1.5 | Minimum engagement rate as percentage (e.g., 1.5 = 1.5%) |
requireBusinessEmail | boolean | ❌ | false | Only qualify profiles with an email in bio |
nicheKeywords | array | ❌ | [] | Keywords to match in profile bio |
maxProfilesPerRun | integer | ❌ | 50 | Maximum profiles to process per run |
proxyConfiguration | object | ✅ | RESIDENTIAL | Apify 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)
| Component | Weight | Description |
|---|---|---|
| Follower Fit | 40% | How well follower count matches target range |
| Engagement Rate | 25% | Engagement relative to tier-adjusted threshold |
| Niche Match | 20% | Bio keyword matches / total keywords |
| Business Email | 10% | Has public email in bio |
| Verified Badge | 5% | Instagram verification status |
Recommendations
| Score range | Recommendation | Action |
|---|---|---|
70–100 | contact | High priority lead, reach out immediately |
40–69 | review | Moderate fit, manual review recommended |
0–39 | skip | Does not meet qualification criteria |
Influencer tiers & engagement thresholds
The actor automatically adjusts engagement expectations based on follower count:
| Tier | Followers | Base threshold multiplier | Example (1.5% base) |
|---|---|---|---|
| Nano | <1K | 1.0x | 1.5% |
| Micro | 1K–10K | max(base, 5%) | 5.0% |
| Mid | 10K–100K | 1.0x | 1.5% |
| Macro | 100K–1M | 0.67x | 1.0% |
| Mega | 1M+ | 0.33x | 0.5% |
🔐 Getting Your Session ID
- Open Instagram in Chrome and log in.
- Press
F12to open DevTools. - Go to Application → Cookies →
https://www.instagram.com. - Find the
sessionidcookie and copy its value. - Paste into the
sessionIdinput field.
Note: Session IDs can be either URL-encoded (with
%3A) or decoded (with:). Both formats are supported.
⚠️ Error Codes
| Code | Description | Resolution |
|---|---|---|
LOGIN_REQUIRED | Redirected to Instagram login | Provide a valid sessionId |
ACCESS_DENIED | Rate limited or blocked | Reduce maxRequestsPerMinute, use residential proxies |
PARSE_ERROR | Failed to extract profile data | Check 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 HTMLscreenshot-{username}-{label}-{timestamp}- Page screenshot
Labels include: LOGIN_REDIRECT, BLOCKED_HARD, PARSE_FAIL, PARSE_ERROR.
🚀 Usage Example
Via Apify Console
- Navigate to the Actor in Apify Console.
- Fill in the input form with your profiles and session ID.
- Click Start.
- 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
1minimizes rate limits. - Batch appropriately: Process
25–50profiles per run. - Monitor session ID: Refresh if you see
LOGIN_REQUIREDerrors. - Respect rate limits: Actor auto-aborts after
3consecutive rate limit hits.
📄 License
Private - Internal use only.