πŸ•ΈοΈ Instagram Related Profiles Network Scraper avatar

πŸ•ΈοΈ Instagram Related Profiles Network Scraper

Pricing

$14.99/month + usage

Go to Apify Store
πŸ•ΈοΈ Instagram Related Profiles Network Scraper

πŸ•ΈοΈ Instagram Related Profiles Network Scraper

Scrapes related people from any Instagram profile, capturing suggested accounts, usernames, bios, follower counts, categories, and profile URLs. Ideal for influencer discovery, audience mapping, competitor research, and automated identification of similar Instagram profiles

Pricing

$14.99/month + usage

Rating

5.0

(1)

Developer

Scrapio

Scrapio

Maintained by Community

Actor stats

2

Bookmarked

118

Total users

5

Monthly active users

56 days

Issues response

5 days ago

Last modified

Share

Extract the accounts Instagram itself suggests as related / similar for any public profile β€” the same graph that powers the "Related accounts" panel on the website. This Instagram related profiles scraper takes one or more seed profiles and returns typed JSON: one row per related account (username, rank, parent, profile URL), an enriched seed-profile summary, and β€” when you turn on enrichment β€” follower counts, bio text, category, external URL, business flags, and emails/links extracted from the bio. Unlike scraping frameworks that hand you raw HTML, it returns structured data ready for a spreadsheet, a database, or an LLM context window without any parsing. This guide covers every input and output field and how growth, research, and data teams actually deploy it.

The actor reads Instagram's unauthenticated web_profile_info endpoint for each seed profile you supply, pulls the edge_related_profiles (or edge_chaining) list Instagram already computed for that account, and turns it into a flat, de-duplicated dataset. No Instagram account, login, or session cookie is required β€” the requests are made against the same public endpoint the website loads for anonymous visitors. Recursive crawling can follow the related graph up to two hops beyond the seed (related-of-related-of-related), and cross-seed results are merged so a profile suggested by three different seeds is written once with a co-suggestion count.

  • πŸ”— Related-profile discovery for one or more seed accounts in a single run
  • πŸ•ΈοΈ Recursive depth crawl (1–3 hops) that follows the related graph outward from each seed
  • ✨ Optional per-profile enrichment β€” follower/following/post counts, bio, category, external URL, business flag
  • 🀝 Cross-seed de-duplication with a co-suggestion frequency signal
  • 🧾 Two output shapes β€” flat (one row per related profile) or nested (one row per seed with a related_profiles[] array)
  • βœ… Free filters (verified-only, exclude-private) that need no extra requests, plus enrichment-gated filters (minimum followers, bio keyword)
  • πŸ“§ Deterministic email/URL extraction from bio text β€” regex-based, not AI-guessed

⚑ Features & Capabilities

The actor is built around one job β€” mapping Instagram's own related-account recommendations β€” done with configurable depth, opt-in enrichment, and cost-aware filtering.

Core features

  • Flexible seed input β€” accepts a full profile URL, an @handle, a bare username, or a numeric user ID, and normalizes all four into the same internal target.
  • Fixed-list slicing, not pagination β€” Instagram returns a single fixed batch of related accounts per profile (no "next page" exists); max_profiles slices that batch, it does not request more pages.
  • Recursive expansion β€” depth follows related accounts of related accounts, up to 3 hops, tagging every row with depth and discoveredVia.
  • Opt-in enrichment β€” enrichProfiles re-fetches each related profile to fill followersCount, followsCount, postsCount, biography, categoryName, externalUrl, isBusinessAccount, bioEmails, and bioLinks. Off by default, so a discovery-only run costs one request per related profile, not two.
  • Co-suggestion signal β€” suggestedByCount and suggestedBy[] show how many (and which) seeds surfaced the same related account, a proxy for how central that profile is to the niche.
  • Never-fabricated fields β€” every value in the row is either read straight from Instagram's response or left null. There is no placeholder string, no estimated figure, no "N/A" standing in for missing data.

Every field name below is copied from ROW_KEYS in src/main.py, the constant that defines the actor's output schema:

type, depth, username, fullName, parentUsername, discoveredVia, position, profileUrl, userId, isVerified, isPrivate, isBusinessAccount, followersCount, followsCount, postsCount, categoryName, biography, externalUrl, bioEmails, bioLinks, profilePicUrl, profilePicUrlHD, suggestedByCount, suggestedBy, relatedCount, enriched, error, scrapedAt.

FeatureThis actorInstagram Related Profiles Scraper (afanasenko)Instagram Related Profiles Scraper (instagram-scraper)
Output shapeFlat (default) or nested β€” your choice via outputModeFlat, one row per discovered profileNested β€” related_profiles[] inside each profile record
Missing-value conventionnull, documented as "never fabricated"The string "N/A" for every missing optional field (as observed on the Apify Store on 2026-07-26)null for missing scalars, [] for missing lists (as observed on the Apify Store on 2026-07-26)
Recursive depth1–3 hops, no plan gating in the schemaDepth 1 always available; depth 2 documented as paid-plan only (as observed on the Apify Store on 2026-07-26)scrapeDepth 0–10 (as observed on the Apify Store on 2026-07-26)
Co-suggestion signalsuggestedByCount / suggestedBy[] across all seedsNot documentedNot documented
Seed profile rowFull seed summary emitted (uncharged) alongside related rowsNot documented as a separate output rowRoot username emitted at depth: 0 with the same profile schema (as observed on the Apify Store on 2026-07-26)
Free vs. paid filtersverifiedOnly / excludePrivate need no enrichment; minFollowers / bioKeyword require it, and the actor logs a warning if you set them without enrichment on20+ filters, applied after profile retrieval and billing (as observed on the Apify Store on 2026-07-26)Filter fields documented as still counting as "processed work" even when they exclude a row (as observed on the Apify Store on 2026-07-26)

If your use case is feeding structured data to an LLM, the missing-value convention row is the decision-maker β€” a string like "N/A" sitting in a numeric column breaks downstream type coercion, while a null does not. Co-suggestion frequency is the other practical difference: it tells you which related accounts several of your seeds agree on, which is a stronger signal than any single seed's list.

When another tool might suit you better

If you need Reels view counts, engagement-rate scoring, or a Quality flag per profile, afanasenko's Instagram Related Profiles Scraper documents those metrics directly (as observed on the Apify Store on 2026-07-26) β€” this actor does not compute engagement rate or Reels analytics at all. Likewise, if you want full recent-post captions and media alongside related-profile discovery in one call, instagram-scraper's actor documents a latest_posts[] field this actor does not return (as observed on the Apify Store on 2026-07-26). This actor's focus is the related-account graph itself, not post-level content.

Every public Apify Actor, including this one, is reachable through Apify's own MCP server at mcp.apify.com β€” it is a platform-level integration, not something this actor implements itself. Once an MCP-enabled client (Claude, Cursor, ChatGPT, or another agent framework) is connected with an Apify token, the agent can discover instagram-related-profiles-network-scraper by name, inspect its input schema, and start a run mid-task without leaving the IDE. Every row that comes back is typed JSON, so no HTML parsing step sits between the tool call and the agent's context window.

This actor covers the related-account graph. For the full follower list of a known account with lead enrichment, use Instagram Followers Lead Scraper (instagram-followers-lead-scraper). For shared-following / common-connections mapping between accounts, use Instagram Shared-Following / Common-Connections Mapper (instagram-shared-following-mapper). For hashtag-level posts, likes, and comments, use Instagram Hashtag Stats Scraper Plus (instagram-hashtag-stats-scraper-plus). For a profile's Highlights, use Instagram Highlights Scraper Plus (instagram-highlights-scraper-plus).

Why do developers and data teams scrape Instagram?

Instagram's related-account graph is one of the few places the platform itself tells you which accounts belong to the same niche β€” that's valuable to several distinct audiences.

🏒 Growth and influencer marketing teams

You give the actor one or more seed accounts β€” a competitor, a known creator, or your own brand handle β€” and get back every account Instagram considers similar, with username, profileUrl, and (with enrichment on) followersCount and categoryName for each. Filter to verifiedOnly or a minFollowers floor to cut the list to outreach-ready candidates, then export the flat table to a CRM or spreadsheet for a partnership or influencer-outreach list.

πŸ“Š AI training data and RAG indexing

biography, categoryName, and fullName are the highest-information text fields for embedding into a RAG index β€” they describe what an account is about in the account owner's own words. For training data, followersCount, followsCount, postsCount, isVerified, isBusinessAccount, and suggestedByCount are consistently structured numeric/boolean fields across every row, which makes them reliable features for a lookalike-account classifier without any additional normalization.

πŸ“± Competitive and market intelligence

Point the actor at a competitor's handle and the related-account list becomes a live map of who Instagram considers adjacent to them β€” track suggestedByCount over repeated runs on the same seed set to see which accounts are gaining or losing centrality to that niche, or watch categoryName distribution shift as a market segment evolves.

πŸ”¬ Research and academic use

Social-network researchers can use the recursive depth crawl and the suggestedBy[] co-suggestion list to build a directed graph of Instagram's own recommendation structure across a niche β€” all from publicly accessible profile data, with no login and no access to non-public information.

πŸŽ₯ Product and SaaS development

The flat output format is a direct fit for a "similar accounts" or "discover creators like this one" feature in a directory, monitoring tool, or enrichment API β€” the actor already returns position (rank within the related list) and discoveredVia (which parent surfaced the result), so a product can reconstruct the discovery path without extra bookkeeping.

🍚 Input Parameters

Every parameter below is read directly from .actor/actor.json, in schema order.

ParameterRequiredTypeDescriptionExample Value
urlsYesarrayOne or more Instagram profiles to find related accounts for. Accepts a full URL (https://www.instagram.com/nasa/), an @handle (@nasa), a plain username (nasa), a numeric user ID (528817151), or a per-item object to set a custom limit, e.g. {"username": "nasa", "limit": 20}.["https://www.instagram.com/nasa/"]
max_profilesNointegerHow many related profiles to keep per seed, in rank order. Instagram returns a fixed set of roughly 30–80 related accounts per profile with no pagination, so this only slices the returned list. Minimum 0, maximum 80, default 30.30
outputModeNostring (enum: flat, nested)flat (default) β€” one row per related profile, best for CSV/Sheets and per-profile billing. nested β€” one row per seed with a related_profiles[] array, kept for back-compat with the original actor."flat"
depthNointegerHow deep to follow the related-account graph. 1 = only each seed's related profiles (default). 2 = also fetch related-of-related. 3 = one hop further. Minimum 1, maximum 3. Higher depth means many more requests and longer runs.1
enrichProfilesNobooleanWhen true, re-fetches each related profile to fill follower/following/post counts, biography, category, external URL, business flags, and bio-extracted emails/links. Adds one request per enriched profile. When false, those fields stay null. Default false.true
maxEnrichedProfilesNointegerCap on how many related profiles get enriched, to protect run time and cost. Only applies when enrichProfiles is true. Minimum 0, maximum 500, default 25.25
verifiedOnlyNobooleanKeep only verified (blue-check) related profiles. A free filter β€” applied directly from the related-account node, no enrichment needed. Default false.false
excludePrivateNobooleanDrop private related profiles. A free filter β€” applied directly from the related-account node, no enrichment needed. Default false.false
minFollowersNointegerKeep only related profiles with at least this many followers. Requires enrichProfiles: true β€” follower counts are only known after enrichment. If set while enrichment is off, it is ignored and a warning is logged. Minimum 0, default 0 (no minimum).10000
bioKeywordNostringKeep only related profiles whose biography contains this text (case-insensitive). Requires enrichProfiles: true. If set while enrichment is off, it is ignored and a warning is logged."photographer"
proxyConfigurationNoobjectApify Proxy settings. Residential proxies are strongly recommended β€” Instagram throttles and blocks datacenter IPs. The actor requests a residential proxy URL when Apify Proxy is enabled.{"useApifyProxy": true}

Example input:

{
"urls": ["https://www.instagram.com/nasa/", "natgeo"],
"max_profiles": 30,
"outputMode": "flat",
"depth": 1,
"enrichProfiles": true,
"maxEnrichedProfiles": 25,
"verifiedOnly": false,
"excludePrivate": true,
"minFollowers": 5000,
"bioKeyword": "",
"proxyConfiguration": { "useApifyProxy": true }
}

Supported URL types and input formats

The urls array accepts five input shapes, normalized by parse_input_target() in the source:

  1. Full profile URL β€” https://www.instagram.com/nasa/ (anything after instagram.com/ up to the next / or ? becomes the username).
  2. @handle β€” @nasa (leading @ is stripped).
  3. Plain username β€” nasa.
  4. Numeric user ID β€” 528817151, matched when the value is entirely digits after stripping a leading @; resolved to a username via i.instagram.com/api/v1/users/{id}/info/ before the related-profile lookup runs.
  5. Per-item object with a custom limit β€” {"username": "nasa", "limit": 20} (also accepts url, userId, user_id, or id as the target key, and max_profiles as an alias for limit). This overrides max_profiles for that one seed only.

Two real examples:

{ "urls": ["nasa", "@natgeo", "https://www.instagram.com/spacex/"] }
{ "urls": [{ "username": "nasa", "limit": 10 }, { "username": "natgeo", "limit": 50 }] }

An empty or unresolvable urls array raises a validation error and the run stops before any request is made β€” no hardcoded default seed is ever substituted.

πŸ“¦ Output Format

The dataset always shares one 28-key column set (ROW_KEYS in src/main.py), whichever row type is written, so the output table renders consistently across seed, related, and error rows. Unpopulated fields are null, never a placeholder string. In flat mode (default) the actor emits one seed row per input plus one related row per discovered profile; in nested mode it emits one seed row per input with a related_profiles[] array attached.

{
"type": "related",
"depth": 1,
"username": "esa",
"fullName": "European Space Agency",
"parentUsername": "nasa",
"discoveredVia": "nasa",
"position": 3,
"profileUrl": "https://www.instagram.com/esa/",
"userId": "1067259270",
"isVerified": true,
"isPrivate": false,
"isBusinessAccount": true,
"followersCount": 4200000,
"followsCount": 120,
"postsCount": 3800,
"categoryName": "Science, Technology & Engineering",
"biography": "European Space Agency. Exploring space for the benefit of all.",
"externalUrl": "https://www.esa.int/",
"bioEmails": null,
"bioLinks": null,
"profilePicUrl": "https://scontent.cdninstagram.com/.../150x150.jpg",
"profilePicUrlHD": "https://scontent.cdninstagram.com/.../hd.jpg",
"suggestedByCount": 1,
"suggestedBy": ["nasa"],
"relatedCount": null,
"enriched": true,
"error": null,
"scrapedAt": "2026-07-26T12:00:00Z"
}

A related row before enrichment carries only the fields Instagram's related-account node itself exposes β€” type, depth, username, fullName, parentUsername, discoveredVia, position, profileUrl, userId, isVerified, isPrivate, profilePicUrl, suggestedByCount, suggestedBy, enriched: false, and scrapedAt. Everything else β€” followersCount, followsCount, postsCount, categoryName, biography, externalUrl, isBusinessAccount, profilePicUrlHD, bioEmails, bioLinks β€” stays null until enrichProfiles fills it in.

Output for a seed profile

{
"type": "seed",
"depth": 0,
"username": "nasa",
"fullName": "NASA",
"parentUsername": null,
"discoveredVia": null,
"position": null,
"profileUrl": "https://www.instagram.com/nasa/",
"userId": "528817151",
"isVerified": true,
"isPrivate": false,
"isBusinessAccount": true,
"followersCount": 100000000,
"followsCount": 60,
"postsCount": 4200,
"categoryName": "Government Organization",
"biography": "Exploring the universe and our home planet.",
"externalUrl": "https://www.nasa.gov/",
"bioEmails": null,
"bioLinks": null,
"profilePicUrl": "https://scontent.cdninstagram.com/.../150x150.jpg",
"profilePicUrlHD": "https://scontent.cdninstagram.com/.../hd.jpg",
"suggestedByCount": null,
"suggestedBy": null,
"relatedCount": 30,
"enriched": true,
"error": null,
"scrapedAt": "2026-07-26T12:00:00Z"
}

A seed row is always fully enriched (enriched: true) β€” the actor already fetched the full profile to discover its related accounts, so every profile field is populated. relatedCount on a seed row records how many related profiles that seed surfaced after the free filters (verifiedOnly / excludePrivate) were applied. In nested mode, the seed row additionally carries related_profiles (an array of related-profile objects) and related_profiles_count.

An unresolvable input produces an error row instead: type: "error", username, profileUrl (when resolvable), error (e.g. NOT_FOUND, BLOCKED_LOGIN_WALL, ID_RESOLVE_FAILED:<reason>), enriched: false, scrapedAt, and every other field null.

Schema stability and export options

The 28-key column set stays identical across every run regardless of which fields Instagram happens to populate for a given profile β€” a field that Instagram removes from its response simply comes back null rather than disappearing from the row, so downstream code never has to special-case a missing key. The dataset is available through the Apify Console's Storage tab and the Apify API in JSON, CSV, Excel, XML, RSS, and HTML table formats β€” no custom export step is built into the actor beyond what the platform provides.

🎯 Strategy 1: Real-time enrichment pipeline

Trigger a run from your CRM or lead-gen tool whenever a new prospect's Instagram handle comes in: pass it as the single value in urls with enrichProfiles: true, then read followersCount, biography, categoryName, and bioEmails off the resulting related and seed rows to enrich the record before writing it back to your destination system. Keep maxEnrichedProfiles low (e.g. 10) to bound the cost of each on-demand call.

🎯 Strategy 2: Scheduled monitoring and alerting

Save an input as an Apify Task with a fixed seed list, then attach an Apify Schedule to run it daily or weekly. Diff each run's related_order (by username) against the previous dataset to see which accounts entered or left a competitor's related-account list, and watch suggestedByCount for a given username climbing across runs as a signal that it's becoming more central to the niche. Alert on any related account that is new since the previous run and already isVerified: true.

🎯 Strategy 3: Bulk dataset build

Feed a large urls list (or fan out multiple runs, one seed list per run, via the Apify API) with depth: 2 or 3 and enrichProfiles: true to build a broad, enriched account graph for a niche. Aggregate the resulting datasets into CSV or a database with the Apify API's dataset export. No actor-level concurrency limit is documented in the source beyond the request pacing built into the crawl loop (a roughly one-second pause between seed fetches, half a second between depth-expansion fetches, and 0.4 seconds between enrichment fetches) β€” plan run time accordingly for large seed lists.

Strategy comparison at a glance

StrategyBest forRun patternOutput format
Real-time enrichmentSingle-lead lookups on CRM eventsOne seed, on-demandFlat rows, read immediately
Scheduled monitoringTracking a competitor's related-account graph over timeFixed seed list, recurring scheduleFlat rows, diffed run-over-run
Bulk dataset buildResearch or training datasets across a nicheLarge seed list, depth 2–3Flat rows exported to CSV/database
ScraperWhat it extracts
Instagram Followers Lead Scraper (instagram-followers-lead-scraper)The full follower list of a known account, with lead enrichment
Instagram Shared-Following / Common-Connections Mapper (instagram-shared-following-mapper)Accounts that two or more profiles both follow
Instagram Hashtag Stats Scraper Plus (instagram-hashtag-stats-scraper-plus)Posts, likes, and comments for a given hashtag
Instagram Highlights Scraper Plus (instagram-highlights-scraper-plus)A profile's Highlights and their metadata
Instagram Related Profiles Scraper (afanasenko)Related-account discovery with engagement-rate and Reels analytics (as observed on the Apify Store on 2026-07-26)
Website Contact & Email ExtractorEmails and contact details from a website URL, for enriching an external URL found in a bio

Instagram Related Profiles Scraper works with any language or tool that can make an HTTP request, through the Apify API and the apify-client SDKs.

Python

from apify_client import ApifyClient
import csv
client = ApifyClient("<YOUR_APIFY_API_TOKEN>")
run_input = {
"urls": ["https://www.instagram.com/nasa/", "natgeo"],
"max_profiles": 30,
"outputMode": "flat",
"depth": 1,
"enrichProfiles": True,
"maxEnrichedProfiles": 25,
"excludePrivate": True,
"proxyConfiguration": {"useApifyProxy": True},
}
run = client.actor("instagram-related-profiles-network-scraper").call(run_input=run_input)
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
related = [r for r in rows if r["type"] == "related"]
with open("related_profiles.csv", "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=related[0].keys())
writer.writeheader()
writer.writerows(related)
print(f"Saved {len(related)} related profiles.")

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });
const run = await client.actor('instagram-related-profiles-network-scraper').call({
urls: ['https://www.instagram.com/nasa/', 'natgeo'],
max_profiles: 30,
outputMode: 'flat',
depth: 1,
enrichProfiles: true,
maxEnrichedProfiles: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const related = items.filter((row) => row.type === 'related');
console.log(`Fetched ${related.length} related profiles.`);

MCP for AI agents

Because the actor is reachable through Apify's shared MCP server, an MCP-enabled agent (Claude, Cursor, or another agent framework) can call instagram-related-profiles-network-scraper directly from a task like "Find accounts related to @nasa with at least 50,000 followers" β€” the agent supplies urls, enrichProfiles, and minFollowers, and reads typed JSON rows back without a parsing step.

Async and scheduled pipelines

For large seed lists, start the run via the Apify API and poll GET /v2/actor-runs/{runId} (or use the client SDK's .call(), which polls for you) instead of waiting synchronously in your own process. For recurring monitoring, save the input as an Apify Task and attach an Apify Schedule β€” no webhook delivery is built into the actor itself, so polling the dataset or scheduling the task is the supported fire-and-forget pattern.

🏒 Growth and influencer marketing teams

A marketing team seeds the actor with three known creators in their vertical, sets verifiedOnly: true and minFollowers: 20000, and gets back a shortlist of verified, mid-to-large accounts Instagram itself considers related β€” ready to review for a partnership or influencer-outreach campaign.

πŸ“Š AI and ML data teams

A team building a lookalike-account classifier uses biography and categoryName as text features and followersCount, followsCount, isVerified, and suggestedByCount as structured features β€” every value typed and consistently present or null, with no HTML to strip first.

πŸ“± Competitive intelligence teams

An analyst tracks a competitor's urls seed weekly and watches which accounts newly appear in the related list, using suggestedByCount across a set of competitor seeds to spot which third-party accounts several competitors are all being grouped with.

πŸ”¬ Researchers

A social-network researcher studying platform recommendation structures runs the actor at depth: 3 across a sample of seed accounts and uses the resulting parentUsername / discoveredVia chain and suggestedBy[] lists to reconstruct the related-account graph β€” using only publicly accessible profile data, with no login involved.

Scraping publicly accessible web data is generally lawful in the United States: in hiQ Labs v. LinkedIn Corp., 938 F.3d 985 (9th Cir. 2019), the Ninth Circuit held that scraping data not walled off behind a login does not violate the Computer Fraud and Abuse Act. That precedent addresses unauthorized-access law, not Instagram's own Terms of Service β€” scraping in violation of a platform's ToS can still expose you to civil claims (breach of contract, account suspension) even where it is not a criminal violation. Separately, because this actor returns personal data β€” usernames, biographies, follower counts, and any emails or links found in a bio β€” GDPR and CCPA-style data-protection obligations attach to how you store, process, and use that data once collected, independent of whether collecting it was lawful. Instagram Related Profiles Scraper returns only publicly accessible data. What you do with that data is your responsibility β€” consult legal counsel for commercial applications involving personal data.

❓ Frequently asked questions

Yes. It calls Instagram's public web_profile_info endpoint the same way an anonymous website visitor's browser does β€” no Instagram login, session cookie, or credential of any kind is required or accepted as input.

It bootstraps a session by loading a seed profile's page with Chrome TLS impersonation (via curl_cffi, impersonate="chrome110") to harvest a working x-ig-app-id and csrftoken, retries failed requests up to 3 times with exponential backoff, and detects blocks by checking for HTTP 401/403/429/500/502/503/504 responses or a 200 response that is actually an HTML login wall instead of JSON. Residential proxy support is built in via proxyConfiguration and is recommended because Instagram throttles and blocks datacenter IPs.

The actor self-paces its requests β€” roughly a one-second pause between seed fetches, half a second between depth-expansion fetches, and 0.4 seconds between enrichment fetches β€” and retries transient failures automatically. No uptime or block-rate figure is published for this actor; using a residential proxy and keeping depth and maxEnrichedProfiles proportional to your seed count are the documented ways to reduce block risk.

Every run performs a live fetch against Instagram's web_profile_info endpoint at run time β€” nothing is cached or reused across separate actor runs. Within a single run, a profile fetched once (for example, as both a related node and later an enrichment target) is served from an in-memory per-run cache rather than re-requested.

Instagram's web_profile_info response returns a single fixed batch of related accounts per profile β€” there is no pagination parameter that requests a second page. max_profiles (0–80) only slices that fixed batch; to surface more accounts, add more seeds or increase depth to follow the graph outward.

For RAG, biography and categoryName carry the most descriptive free text about what an account is. For training data, followersCount, followsCount, postsCount, isVerified, isBusinessAccount, and suggestedByCount are the fields with the most consistent structure across every row β€” all typed primitives (integers, booleans, or null) requiring no cleanup before use.

Yes β€” the actor returns publicly available personal data (usernames, biographies, follower counts, and any bio-extracted emails or links), so GDPR and CCPA-style obligations apply once you store and use it. The actor itself only reads what Instagram already serves publicly; establishing a lawful basis for storing and using that data is the responsibility of whoever runs it.

Yes, through Apify's shared MCP server (mcp.apify.com), which exposes every public Apify Actor β€” including this one β€” as a callable tool to any MCP-enabled client. Outside of MCP, it is callable as a standard HTTP endpoint by any agent framework via the Apify API; every response is typed JSON, so no HTML parsing step sits between the actor and an LLM's context window.

Afanasenko's Instagram Related Profiles Scraper documents deeper per-profile analytics β€” engagement rate, Reels view metrics, a Quality flag, and 20+ filters β€” that this actor does not compute (as observed on the Apify Store on 2026-07-26); if those metrics are what you need, it is the better fit. This actor's advantages are a null-only missing-value convention (rather than the string "N/A", as that competitor documents), an uncharged seed-profile summary row on every run, and a cross-seed suggestedByCount signal that is not documented on either competitor's listing as of the same date.

ℹ️ Disclaimer

Instagram Related Profiles Scraper extracts only publicly available data from Instagram. This tool is intended for lawful use cases only. Users are responsible for complying with Instagram's terms of service and applicable data protection laws in their jurisdiction.