Instagram Related Profiles Scraper avatar

Instagram Related Profiles Scraper

Pricing

$10.00 / 1,000 profile analyzeds

Go to Apify Store
Instagram Related Profiles Scraper

Instagram Related Profiles Scraper

Discover related Instagram profiles via Instagram's Suggested for You algorithm. Expand from 1-5 seed accounts to find similar creators, qualify leads, and grow your network. Filter by engagement, contact info, language, business category, and more.

Pricing

$10.00 / 1,000 profile analyzeds

Rating

0.0

(0)

Developer

Andrey Afanasenko

Andrey Afanasenko

Maintained by Community

Actor stats

0

Bookmarked

14

Total users

9

Monthly active users

3 hours ago

Last modified

Share

Apify Actor

Discover similar Instagram profiles via Instagram's own Suggested for You algorithm. Expand from 1–5 seed accounts to find related creators, qualify leads, and map a niche — with 25+ built-in filters and full enrichment (bio, contacts, engagement, Reels analytics, language).

🎯 What it does

You give the actor 1–5 Instagram usernames you already know are relevant (a customer, a competitor, a creator you like). For each seed it asks Instagram for the «Suggested for You» list — the same suggestions you'd see in the app's «Discover People» tray — and returns one row per discovered profile, fully enriched.

At depth 2 the actor recursively expands the suggestions of suggestions, surfacing a much wider network from a single seed.

For every profile that comes back you get:

  • Identity — handle (Account URL), Full Name, Profile Picture, verified flag.
  • Audience — Followers Count, Following Count, Total Posts, Posts per Month, Posts in Last 30 Days, Last Post age in days.
  • Reels analytics — Reels Count, Last Reel age, Median Views, Views/Followers ratio.
  • Engagement — Avg Likes, Avg Comments, Median Engagement Rate, Quality flag (Good / Poor).
  • Contact — Email (from contact field or bio), Email Source, Phone, External URL, Physical Address.
  • Classification — Business Category, Detected Language, Tagged Location, Account Type.
  • Optional post sample — captions of the 8 most recent feed posts, plus contacts parsed from those captions.

Then the actor applies your filters (followers band, engagement floor, language, business category, contact-channel presence, posting cadence, Reels view ratio, verification, and more) so only the profiles that match your target persona end up in the dataset.

⚡ Quick start

A minimal input that works on the free plan (5 profiles, no extra setup):

{
"startUsernames": ["openai"],
"searchDepth": "1",
"maxCountExpansion": 5
}

Run it once, open the Storage → Dataset tab, and you'll see 5 profiles similar to @openai with a full row of metrics each. From there, layer filters in the input form to narrow to your target.

📦 What you get — output sample

Every analyzed profile is pushed to the dataset as one item. Here's a real row (truncated for readability):

{
"Account": "https://instagram.com/brezscales",
"Full Name": "Brez",
"Source": "Network Expansion",
"Followers Count": 1320754,
"Following Count": 943,
"Biography": "i scale brands and own cool cars\nbuilding… @brezmarketing",
"Email": "N/A",
"Email Source": "N/A",
"Phone": "N/A",
"External URL": "https://go.ai-advertiser.com/free-live-class",
"Address": "N/A",
"Category": "N/A",
"Profile Picture": "https://…cdninstagram.com/…/profile.jpg",
"Reels Count": 12,
"Last Reel (Days Ago)": 0,
"Median Views": 238321,
"Avg Likes": 141178,
"Avg Comments": 822,
"Views/Followers Ratio": "18.04%",
"Posts in Last 30 Days": 1,
"Posts per Month": 1,
"Total Posts": 24,
"Detected Language": "English",
"Last Post Within (Days)": 0,
"Median ER": "10.39%",
"Quality": "Good"
}

Missing optional values come back as the string "N/A" (not null), so every key is always present and downstream code can rely on a stable shape.

The full per-field schema (types, descriptions, examples) is published in .actor/dataset_schema.json — that's also what AI agents see when they call the actor through Apify's MCP server.

🧭 When to use it

  • Lead generation. You found one ideal customer or partner on Instagram. Expand from them to reach a list of look-alike accounts to qualify and contact.
  • Influencer marketing. You like one creator's content / audience. Expand to discover comparable creators in the same niche, then filter by engagement rate, follower band, and posting cadence.
  • Competitor research. Map who Instagram thinks is adjacent to a competitor — surfaces both direct and tangential rivals.
  • Niche audit. From a single anchor account, build a seed list of 50–500 qualified profiles in a vertical you don't yet know.
  • Audience expansion. Generate a high-quality top-of-funnel list before reaching out, instead of hash-tag-scraping noise.

🛠 Input

The input form is grouped into three sections:

SectionPurpose
🎯 Profiles to AnalyzeSeed handles + how deep to expand.
⚙️ Data Extraction OptionsWhich enrichments to run (email, phone, posts, engagement). Off = skip the API call → faster + cheaper.
🔬 Advanced Filtering (Optional)20+ filters that drop non-matching profiles before they're billed.
▶️ Run & Storage OptionsResume from checkpoint, offline re-filter mode.

Highlights of the most useful fields (full reference in the input form):

  • startUsernames — 1–5 seed handles (without @). Up to 5 seeds; depth-2 expansion can yield hundreds per seed.
  • searchDepth1 (related of seeds, recommended) or 2 (related of related — paid plan only).
  • maxCountExpansion — hard cost ceiling, in profiles. Set to your spend budget × 100 (e.g. 1000 = $10).
  • analyzeQuality — turn on for Engagement Rate + Quality flag (default on).
  • extractPosts — turn on to fetch the 8 most recent post captions; required for lastPostDays, minPostsInPeriod, keywordLocation=posts, and searchContactsInPosts.
  • minFollowers / maxFollowers — the most-used filter, set as a band (e.g. 5 000–100 000 for nano/micro).
  • minEngagementRate — common B2B floor: 1–3 %.
  • viewFollowerRatioMin / Max — drop bot-inflated and one-hit-viral accounts.
  • contactInfoType — only keep profiles with the contact channel you'll actually use (emailOrPhone, emailOnly, etc.).
  • profileLanguage — restrict to one of 13 detected languages.

💰 Pricing

The actor uses Apify's Pay Per Event model with one single primary event:

EventPriceTriggered
Profile Analyzed$0.01Once per discovered profile that's successfully retrieved (live or from cache) and analyzed, regardless of whether it passes your filters.

You're billed per profile, not per API call. The cost ceiling maxCountExpansion translates directly to your maximum spend.

Pricing math

You set maxCountExpansionPlanApprox cost
5Free$0.05 (free-plan ceiling)
100Paid$1.00
500Paid$5.00
1 000Paid$10.00
5 000Paid$50.00

Tighter filters mean more profiles are retrieved and analyzed before you find matches, so be conservative with maxCountExpansion if you stack many filters.

🆓 Free vs paid plan

Free planPaid plan
Profiles per run5unlimited
Search depth1 only1 or 2
Filters (followers, language, engagement, etc.)
Reels analytics (Median Views, Views/Followers)blankedfull
Resume from checkpoint
Single PPE event ($0.01 / profile)n/a (free-tier ceiling)yes

Upgrade to a paid plan to remove the 5-profile cap, unlock depth-2 expansion, and see Reels view analytics.

🧪 Filter recipes

Common stacks that work well together:

Nano-influencer outreach (B2C beauty / fitness)

{
"startUsernames": ["sephora"],
"searchDepth": "2",
"maxCountExpansion": 500,
"minFollowers": 5000,
"maxFollowers": 100000,
"minEngagementRate": 2,
"extractPosts": true,
"lastPostDays": 30,
"contactInfoType": "emailOrPhone",
"filterForInfluencers": true
}

B2B partnership shortlist

{
"startUsernames": ["hubspot"],
"searchDepth": "1",
"maxCountExpansion": 200,
"minFollowers": 10000,
"viewFollowerRatioMin": 5,
"viewFollowerRatioMax": 30,
"accountType": "business",
"hasWebsite": true,
"profileLanguage": "English"
}

Local-market discovery (restaurants, services)

{
"startUsernames": ["londoneats"],
"searchDepth": "2",
"maxCountExpansion": 300,
"extractPhysicalAddress": true,
"locationKeywords": "London, UK",
"categoryFilter": "Restaurant"
}

🔁 Resume / checkpoint

Long runs can be interrupted (timeout, manual stop, abort). The actor writes a checkpoint to its key-value store after every batch. To resume, simply run the actor again with clearSavedData unchecked — already-analyzed profiles are not re-billed.

🧊 Offline mode

Already paid for a profile cache and want to re-filter it with new criteria? Set enableOfflineMode: true. The run reads from the cached profile data, applies the current filters, and writes a fresh dataset — with no Instagram API calls and no paid events. Ideal for iterating on filter values cheaply.

📡 Live status & storage records

While the run is in progress, the actor exposes:

Storage keyTypeWhat it holds
status.htmlHTML pageLive progress, costs, ETA. Open it from the run's Storage tab.
RUN_SUMMARYJSONAggregate run statistics — counts, plan, pricing, timings. Available after the run finishes.
SKIPPED_ACCOUNTSJSONPer-username list of profiles skipped during the run, with reason and category (filter / not_found / private / error). Re-run the error cohort separately if you want.
USER_MESSAGEJSONOnboarding banner shown on a paying user's 1st and 3rd paid run. Empty otherwise.

These are stable, machine-readable surfaces — pull them via the Apify API for dashboards or post-processing.

🤖 Programmatic / API use

Run the actor from your own code or AI agent:

REST API (start a run, poll for completion):

curl -X POST "https://api.apify.com/v2/acts/afanasenko~instagram-related-profiles-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUsernames": ["openai"],
"searchDepth": "1",
"maxCountExpansion": 100
}'

MCP / agentic clients (Claude, ChatGPT, Cursor, LangGraph, OpenAI Agents SDK, Mastra, …):

The actor is automatically exposed as a tool through Apify's MCP server at mcp.apify.com. Once your MCP-enabled client is connected to your Apify token, an LLM can search, inspect input + output schemas, and run the actor with natural-language instructions like "Find 50 fitness creators in the UK with 10–50k followers and an engagement rate above 3%".

❓ FAQ

Q: How does the actor know which profiles are «similar»? A: It uses Instagram's own «Suggested for You» recommendations — the same list users see in the «Discover People» tray. We don't infer similarity ourselves; the algorithm is whatever Instagram's recommender returns at run time.

Q: Can I run this on a private Instagram account? A: No. The seed accounts must be public, and only public profile data is returned.

Q: How is engagement rate calculated? A: For each of the most recent feed posts, (likes + comments) / followers, then median across the sample. The median is more robust to viral outliers than the mean.

Q: What does the Quality flag mean? A: A heuristic combining engagement rate and audience signals. Good = recommend reaching out. Poor = likely low-engagement or inflated audience. Treat it as a quick filter, not a verdict.

Q: Why are my Reels metrics blank? A: Reels analytics (Median Views, Last Reel (Days Ago), Views/Followers Ratio) require a paid plan. On the free plan, those columns return "N/A".

Q: Why do I see «N/A» instead of null for missing values? A: It's a deliberate choice — every output key is always present so Google Sheets, Airtable, and CSV consumers don't have to special-case missing fields. If you need null, it's a one-line transform in your post-processing.

Q: Can the actor scrape stories, posts, or DMs? A: This actor focuses on profile-level data and the 8 most recent post captions. For full post / Reel / story analytics, see the Instagram Profile Scraper linked below.

Q: Will I get the same profiles for the same seed across runs? A: Mostly, but not deterministically. Instagram's recommender shifts day-to-day. Re-running the same seed a week later typically returns a 70–90 % overlap with the previous list.

Q: How fast is it? A: Roughly 1 profile per second on a single seed at depth 1, depending on which enrichments you turn on. A 100-profile run finishes in ~2 minutes; a 1 000-profile run in ~15–20 minutes.

Q: What if a profile errors out mid-run? A: It lands in SKIPPED_ACCOUNTS with category: "error". Most errors are transient (Instagram rate-limit, transient network); re-run the error cohort with clearSavedData: false to retry without re-billing.

🔗 Other Instagram scrapers (same author)

This actor is part of a family of focused Instagram tools — pick the one that matches your discovery model:

You start with…You want to find…Use this actor
1–5 seed handles you likeSimilar / suggested profiles in the same nicheThis actor — Network Expansion
One known accountThe full list of its followers or following (with filters & enrichment)Instagram Followers & Following Extractor
Anything else (handles, locations, hashtags, keywords)All of the above + 4 other discovery modes in one toolInstagram Profile Scraper — 5-mode all-in-one

The single-mode actors are simpler to configure and cheaper to run for one specific job; the all-in-one Profile Scraper is right when one project needs multiple discovery flows.

🛟 Support & feedback

  • Open an issue on the actor's Issues tab in Apify Console — fastest way to get a fix shipped.
  • Feature requests in the same tab; we read every one.
  • Ratings & reviews on the Apify Store page help other users find the actor.

⚖️ Disclaimer

This actor scrapes publicly available profile data from Instagram. It does not bypass authentication, scrape private profiles, or interact with content on your behalf. Use it in compliance with Instagram's Terms of Service and applicable privacy laws (GDPR, CCPA) — for outreach lists, ensure you have a legitimate interest and a clear unsubscribe path. The contact information returned (emails, phone numbers) is what the profile owner has chosen to make public on Instagram.