Instagram Related Users Scraper
Pricing
from $2.00 / 1,000 results
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
Maintained by CommunityActor stats
34
Bookmarked
1.1K
Total users
181
Monthly active users
2.2 hours
Issues response
2 days ago
Last modified
Categories
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
| Field | Type | Default | Description |
|---|---|---|---|
username | array of strings | — | Required. Seed usernames or profile URLs. |
maxItem | integer | 100 | Maximum accounts saved. 0 removes the limit. |
chainDepth | integer | 0 | Levels to follow outward. 0 returns one level. |
maxItemPerLevel | integer | 5 | Accounts followed per account, per level. |
verifiedOnly | boolean | false | Keep only verified accounts. |
skipPrivate | boolean | false | Discard private accounts. |
minFollowers | integer | — | Minimum follower count. Requires profile enrichment. |
maxFollowers | integer | — | Maximum follower count. Requires profile enrichment. |
enrichProfile | boolean | false | Fetches the full profile for every account kept. |
fullProfileDetails | boolean | false | Extends enrichment to the complete profile payload. |
exportGraph | boolean | false | Emits the discovery edges as additional rows. |
excludePosts | boolean | false | Omits post previews from enriched profiles. |
excludeSavedMedia | boolean | false | Omits saved-media fields. |
excludeInternalFlags | boolean | false | Omits Instagram's internal flags. |
excludeBioLinkDetails | boolean | false | Omits expanded bio-link data. |
{"username": ["nasa"],"chainDepth": 2,"maxItemPerLevel": 5,"maxItem": 100,"skipPrivate": true,"enrichProfile": false}
Response fields
One record per discovered account.
| Field | Contents |
|---|---|
username | Discovered account's username |
full_name | Display name |
id | Instagram user ID |
is_private | Whether the account is private |
is_verified | Whether the account is verified |
profile_pic_url | Profile image URL |
discovered_from | The account this one was suggested from |
depth | How many levels out from the seed it was found |
chain_path | The full path of accounts leading back to the seed |
enriched | Whether the full profile was fetched |
is_business_account | Whether the account is set up as an Instagram Business account (fullProfileDetails only) |
business_category_name | Public business category, e.g. "Food & Personal Goods" (fullProfileDetails only, where Instagram resolves it) |
business_email | Public business contact email, where published (fullProfileDetails only) |
business_phone_number | Public business contact phone number, where published (fullProfileDetails only) |
business_contact_method | The contact action Instagram surfaces on the profile, e.g. "CALL", "EMAIL" (fullProfileDetails only) |
business_address_json | Public business address as a JSON string — street, city, zip, lat/long — where published (fullProfileDetails only) |
is_partial | true 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):maxItemis a single total across every seed and level. - Flat (
chainDepthof0):maxItemapplies to each seed independently. Three seeds withmaxItemat 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.
Related Actors
| Actor | Purpose |
|---|---|
| Instagram User Info Scraper | Profile details for accounts already known |
| Instagram Followers & Followings Scraper | An account's actual follower and following lists |
| Instagram Profile Content Scraper | Posts, reels, and story status for an account |
| Instagram Popular Search Scraper | Discovery by hashtag or keyword rather than by account |

