Instagram Related Users Scraper avatar

Instagram Related Users Scraper

Pricing

from $2.00 / 1,000 results

Go to Apify Store
Instagram Related Users Scraper

Instagram Related Users Scraper

Discover Instagram accounts similar to a seed profile, chain discovery up to 5 levels deep to map a whole niche, export the connection graph, and enrich every result with business email, phone, category and address for outreach-ready leads.

Pricing

from $2.00 / 1,000 results

Rating

5.0

(2)

Developer

The Netaji

The Netaji

Maintained by Community

Actor stats

34

Bookmarked

1.1K

Total users

181

Monthly active users

2.2 hours

Issues response

2 days ago

Last modified

Share

The Actor expands one or more seed Instagram accounts into the accounts Instagram associates with them — the suggested-accounts set — and can follow those suggestions outward across several levels, producing a network of related accounts rather than a single list.

Because the association is Instagram's own, the result surfaces accounts of comparable audience and subject without requiring a query to describe them. Filters on verification, privacy, and follower count narrow the set, and the discovery graph itself can be exported alongside the accounts.

With enrichProfile and fullProfileDetails both on, each discovered account also carries its public business fields — category, email, phone, contact method, and address, where the account has published them — so the same run that maps a niche can hand back outreach-ready leads, not just a list of usernames.

Accepted input

FieldTypeDefaultDescription
usernamearray of stringsRequired. Seed usernames or profile URLs.
maxIteminteger100Maximum accounts saved. 0 removes the limit.
chainDepthinteger0Levels to follow outward. 0 returns one level.
maxItemPerLevelinteger5Accounts followed per account, per level.
verifiedOnlybooleanfalseKeep only verified accounts.
skipPrivatebooleanfalseDiscard private accounts.
minFollowersintegerMinimum follower count. Requires profile enrichment.
maxFollowersintegerMaximum follower count. Requires profile enrichment.
enrichProfilebooleanfalseFetches the full profile for every account kept.
fullProfileDetailsbooleanfalseExtends enrichment to the complete profile payload.
exportGraphbooleanfalseEmits the discovery edges as additional rows.
excludePostsbooleanfalseOmits post previews from enriched profiles.
excludeSavedMediabooleanfalseOmits saved-media fields.
excludeInternalFlagsbooleanfalseOmits Instagram's internal flags.
excludeBioLinkDetailsbooleanfalseOmits expanded bio-link data.
{
"username": ["nasa"],
"chainDepth": 2,
"maxItemPerLevel": 5,
"maxItem": 100,
"skipPrivate": true,
"enrichProfile": false
}

Response fields

One record per discovered account.

FieldContents
usernameDiscovered account's username
full_nameDisplay name
idInstagram user ID
is_privateWhether the account is private
is_verifiedWhether the account is verified
profile_pic_urlProfile image URL
discovered_fromThe account this one was suggested from
depthHow many levels out from the seed it was found
chain_pathThe full path of accounts leading back to the seed
enrichedWhether the full profile was fetched
is_business_accountWhether the account is set up as an Instagram Business account (fullProfileDetails only)
business_category_namePublic business category, e.g. "Food & Personal Goods" (fullProfileDetails only, where Instagram resolves it)
business_emailPublic business contact email, where published (fullProfileDetails only)
business_phone_numberPublic business contact phone number, where published (fullProfileDetails only)
business_contact_methodThe contact action Instagram surfaces on the profile, e.g. "CALL", "EMAIL" (fullProfileDetails only)
business_address_jsonPublic business address as a JSON string — street, city, zip, lat/long — where published (fullProfileDetails only)
is_partialtrue if Instagram's full-profile source failed for this account and a reduced fallback was used — business fields will be absent rather than genuinely empty
{
"username": "esa",
"full_name": "European Space Agency",
"is_verified": true,
"is_private": false,
"discovered_from": "nasa",
"depth": 1,
"chain_path": ["nasa"],
"enriched": false
}

With enrichProfile and fullProfileDetails both on, a discovered business account also carries its contact fields:

{
"username": "cocacola",
"full_name": "Coca-Cola",
"is_verified": true,
"is_private": false,
"is_business_account": true,
"business_category_name": "Food & Personal Goods",
"business_contact_method": "CALL",
"business_email": null,
"business_phone_number": null,
"discovered_from": "nasa",
"depth": 1,
"chain_path": ["nasa"],
"enriched": true
}

business_email and business_phone_number are null whenever the account hasn't published one — nothing is inferred, guessed, or looked up elsewhere.

chain_path is what makes a multi-level run interpretable: an account found three levels out is only meaningful alongside the route that reached it.

Chained discovery

With chainDepth at 1 or more, discovery proceeds breadth-first. Each account's suggestions are fetched, up to maxItemPerLevel previously unseen accounts are queued for the next level, and the process repeats until the depth is reached or maxItem is met.

Depth is capped at 5. A larger value is clamped and a warning is logged rather than the run being rejected. The cap exists because breadth-first expansion is multiplicative: at maxItemPerLevel of 5, a single seed reaches 5 accounts at depth 1, 25 at depth 2, and 3,125 by depth 5.

Seed accounts are marked as visited before discovery begins, so a seed is never returned as a discovery of itself or of another seed. Accounts already seen anywhere in the run are skipped, so each appears once, attributed to the first path that reached it. A request for one account's suggestions that fails is logged and skipped; the traversal continues with the rest of the queue. Requests are spaced one second apart.

Setting exportGraph adds a row per edge — _type: "graph_edge" with from, to, and depth — interleaved with the account records. These rows describe connections rather than accounts, and are distinguished by the _type field.

How maxItem applies

The two modes bound results differently, which is worth knowing before comparing runs.

  • Chained (chainDepth ≥ 1): maxItem is a single total across every seed and level.
  • Flat (chainDepth of 0): maxItem applies to each seed independently. Three seeds with maxItem at 100 can therefore return up to 300 records.

Behaviour on partial results

verifiedOnly and skipPrivate are applied before enrichment, since both fields are present on the unenriched record. Accounts they reject cost nothing.

minFollowers and maxFollowers cannot work that way, because follower counts are not present until a profile is fetched. Supplying either without enrichProfile therefore enables enrichment automatically and logs a warning. The consequence is billing: every candidate is fetched and charged before the threshold can be tested, including the ones that fail it. A follower filter over a wide discovery is expensive for that reason.

Enrichment runs in batches of 25 and records are written as each batch completes, so a long run writes results progressively rather than producing nothing until the end.

With enrichProfile enabled and maxItem set to 0, the limit becomes 100 rather than unlimited — an unbounded enriched traversal would otherwise continue indefinitely.

Frequently asked questions

What determines which accounts appear? Instagram does. The set is the suggested-accounts list shown alongside a profile, and its composition and size are Instagram's. It typically favours accounts with overlapping audiences or subject matter.

Why did a run with chainDepth set to 4 return far more accounts than expected? Expansion is multiplicative rather than additive. Each level multiplies by maxItemPerLevel, so depth 4 at the default of 5 reaches 625 accounts from a single seed before deduplication. Lowering maxItemPerLevel is usually a better control than lowering depth, since it narrows each level while preserving reach.

Why were follower filters charged for accounts that were excluded? Follower counts are not present on the discovery record and only become available once the profile is fetched. The fetch must therefore happen before the comparison, and it is charged whether or not the account passes. Where cost matters, verifiedOnly and skipPrivate filter for free and should be applied first.

What is the difference between enrichProfile and fullProfileDetails? enrichProfile fetches the profile; fullProfileDetails determines how much of it is returned. Without the second, a condensed payload is attached. The exclude* fields trim it further — post previews, saved media, internal flags, and expanded bio links can each be dropped.

What are the graph_edge rows? Connections rather than accounts, emitted only with exportGraph. Each records that from suggested to at a given depth. They carry _type: "graph_edge", so filtering on that field separates the network structure from the account records.

Are seeds included in the output? No. Seeds are marked visited before discovery starts, so they are never returned as discoveries. To collect the seeds themselves, use Instagram User Info Scraper.

Why are business_email/business_phone_number/business_category_name missing for some enriched accounts? Two separate reasons. Most commonly, the account simply hasn't published that field — nothing is inferred or looked up elsewhere. Separately, Instagram is currently serving an upstream error for a subset of accounts (professional accounts whose category needs a subvertical tier Instagram deleted server-side), and the Actor falls back to a reduced profile for those rather than failing the run. Records affected this way carry is_partial: true and partial_reason: "upstream_schema_error", so they're distinguishable from accounts that genuinely have no business fields set. This is not something the Actor can fix client-side — it's an Instagram-side breakage, not lost or mishandled data.

ActorPurpose
Instagram User Info ScraperProfile details for accounts already known
Instagram Followers & Followings ScraperAn account's actual follower and following lists
Instagram Profile Content ScraperPosts, reels, and story status for an account
Instagram Popular Search ScraperDiscovery by hashtag or keyword rather than by account