Instagram Similar Profiles Scraper — Instagram Competitors
Pricing
from $1.00 / 1,000 similar profiles
Instagram Similar Profiles Scraper — Instagram Competitors
Instagram competitors and lookalikes: the accounts Instagram itself suggests as similar to any handle — username, full name, profile link, verified and private flags, and Instagram's own ranking. No login, no start fee. From $1.00 per 1,000 profiles. An undelivered profile is never charged.
Pricing
from $1.00 / 1,000 similar profiles
Rating
0.0
(0)
Developer
Steadyfetch Team
Maintained by CommunityActor stats
0
Bookmarked
80
Total users
37
Monthly active users
2 days ago
Last modified
Categories
Share
Instagram Related Profiles Scraper — Instagram Competitors
Give it an Instagram account and get back the accounts Instagram itself suggests as similar to it: username, full name, profile link, whether they are verified or private, Instagram's own one-line reason for the suggestion, and its place in Instagram's ranking. No login, no cookies, no proxy to configure. Your result limit is exact — set 80 and you get 80, a profile we could not deliver is never charged, and nothing at all is charged for starting a run.
Using an AI agent? Pin this actor in Apify's MCP server with one link: https://mcp.apify.com?tools=steadyfetch/instagram-similar-profiles-scraper
- Actor id:
steadyfetch/instagram-similar-profiles-scraper - Input:
{ "usernames": ["nasa"], "resultsLimit": 80 }— the one field to set. A profile link works too. - Cap the bill: set
maxTotalChargeUsdon the run (a run option, not Actor input), e.g.0.50— the run stops when it reaches it. - Price: from $1.00 per 1,000 profiles on Gold and above, $2.00 per 1,000 on the Apify free plan. No start fee, no per-account fee, and a profile we could not deliver is never charged. Full table below.
- How often it changes: the suggestion list drifts as the account’s audience changes rather than hour to hour, so weekly or monthly is the useful re-run and
rankmakes each move visible when you diff it. Daily would mostly hand you the same list back, and by default you would be charged for it. - Run it on a schedule: save your input as a Task (Actor page → Save as a new task), then add that task to an Apify Schedule (Console → Schedules → Create) with a cron such as
0 7 * * 1for weekly. Each rerun returns a fresh copy of the whole list, charged like any run — by default this actor keeps no memory of past runs — so diff it against your last dataset. To pay only for what is new, setnewItemsOnlytotrue: a suggested profile your account already received from a run that had it on, in the last 90 days, is then skipped and not charged, and the last row counts it.
What you get
One row per suggested account, with everything the suggestion exposes at one price — there is no second charge for "details":
| Column | What it holds |
|---|---|
username · fullName · profileUrl | the suggested account, and a link straight to it |
similarTo · similarToUserId | which of your accounts this suggestion came from |
rank | its place in Instagram's own ordering of the suggestions, starting at 1 |
suggestionList | only on rows from Instagram's second related-accounts list, read when the first list was shorter than you asked for: related. Their rank continues after the first list, and they are charged like any other profile |
isVerified · isPrivate | the blue check, and whether the account is locked |
socialContext | Instagram's own one-line reason for the suggestion, passed through as served |
userId · profilePicUrl | the numeric account id, and the profile picture |
source | always instagram |
charged · chargedEvents · status · retryable · statusReason | whether this row was billed and for which event ({"similar-profile": 1} on a charged profile, {} on anything else), what happened, whether a re-run could change it, and why — so your invoice reconciles from the dataset itself |
Profile pictures are signed and time-limited by Instagram, so download what you need in the same session. The requesting network address is stripped out of every link before it reaches your dataset.
What a row looks like
One delivered row from a real run — the handle nasa, 2026-09-12. Each suggested account is one similar-profile charge, and rank is Instagram's own order, not ours. Profile pictures are signed and time-limited by Instagram, so they are shown here as placeholders.
{"userId": "5951848929","username": "nasahubble","fullName": "Hubble Space Telescope","profileUrl": "https://www.instagram.com/nasahubble/","profilePicUrl": "https://…","isPrivate": false,"isVerified": true,"socialContext": "Hubble Space Telescope","similarTo": "nasa","similarToUserId": "528817151","rank": 2,"source": "instagram","input": "nasa","sourceIndex": 0,"scrapedAt": "2026-09-12T07:18:55.837Z","charged": true,"status": "delivered","retryable": false,"statusReason": null,"#k": "5951848929","#ce": {"similar-profile":1},"#ask": {"delivered":1}}
Price
One charged event, similar-profile, and it lands only on a profile that was actually delivered. There is no start fee, no per-account fee and no search fee.
| Apify plan | Per profile | Per 1,000 profiles |
|---|---|---|
| Free plan | $0.002 | $2.00 |
| Bronze | $0.0018 | $1.80 |
| Silver | $0.0015 | $1.50 |
| Gold and above | $0.001 | $1.00 per 1,000 |
Platform usage is included in that price — there is no separate compute bill on top. Set maxTotalChargeUsd on the run and it is a hard ceiling: the run stops cleanly under it and the last row says what is left.
On the Apify free plan this actor makes at most 24 Instagram lookups per account in any 24 hours (two per account you name: one to find it, one for its similar accounts — so 12 accounts), and accounts on the free plan share one daily allowance on this actor. Past either, the run keeps everything it already delivered, ships one uncharged row saying when it resets (UTC), and charges nothing past it. Paid Apify plans carry no daily allowance, and the held row names the price per 1,000 similar profiles on Bronze, the first paid plan.
Honest rows: what "not charged" actually means
Every run closes its own books. A profile that was not delivered leaves an uncharged row saying which of eight things happened, and none of them is billed:
account_not_found— the account did not answer as an Instagram account right now (renamed, removed or not public). It is booked only when Instagram's own account lookup says the account is unknown, never guessed from an empty or unexplained answer. If the account exists, try again later.private_account— the account is private, so Instagram will not say which accounts it treats as similar.no_suggestions— Instagram's own answer, not a failure. Itsreasonsays which:none_offered— Instagram offers no similar-account suggestions for that account at all, so re-running it returns the same answer (a different public account in the same niche may carry some);list_ended— Instagram's list ran out before your share for that account filled, and the row says after how many.stopped_at_limit— one of your own limits, the run clock, or the Apify free plan's daily allowance (see Price) stopped it first. The row names which, and a row the run clock cut carriesreason: "run_clock"and names "Max run seconds".vendor_unavailable— the read did not go through, or the account answered but its list of similar accounts did not come back. Says nothing about the account, and a re-run is the fix.source_refused— Instagram refused to answer for that account at all, and it refuses the same way every time, so a re-run cannot change it. Check the spelling in a browser; if the account works there, say so on the Issues tab.unsupported_shape— Instagram answered in a shape this actor does not read yet. That is on us, not on your account, and a re-run gets the same answer — tell us on the Issues tab which account it was and support for it will be added.limit_reached— this run reached its own limit and stopped rather than collecting more. Usually that is its limit for one run, and a new run with the accounts on those rows collects them; rarely this actor is paused until the start of next month. The row says which.
The last row of every run is a receipt (_summary: true): delivered, asked for, what stopped it, and the charged-event totals in chargedEvents — the sum of the rows above it. Its accountsNotFilled counts your ACCOUNTS that came back empty or short, by why (noneOffered, listEnded, notFound, private, retryable, refused, unsupported, runClock), and the run page says the same in one line — so a list of seeds shows at a glance which ones Instagram will never fill. A time limit ends the collecting, never the delivering — profiles already in hand are always written out.
How often this data changes
Instagram's suggestion list is a ranked recommendation set, not a feed: it is rebuilt from who follows the account and who those people follow, so it drifts as the account's audience changes rather than changing hour to hour. We do not have a measured cadence for it and will not invent one — what we can say is what we measured on 11 September 2026: a very large account returned about 80 suggestions in one read, a five-follower account about 20, and neither list is paginated, so one run gets everything Instagram holds for that account at that moment.
The practical advice that follows from that: for a watchlist, re-run weekly or monthly and diff the username column against your previous dataset — the rows carry rank, so a move up or down Instagram's own ordering is visible without any extra work. Re-running daily will mostly hand you the same list back, and by default you would be charged for it, so we say so here rather than letting you find out on the invoice. By default this actor keeps no memory of what it gave you before, because a remembered suggestion list would be a stale one. Set newItemsOnly to true and it skips, without charging, only the profiles your account already received from a run that had it on.
Reliability
The suggestions are looked up directly rather than scraped from Instagram's own web pages, which is why there is nothing to log into and nothing to configure. When a lookup cannot answer, the run says so on an uncharged row and finishes successfully — a failed read is never billed and never dressed up as an account with nothing similar.
Use it as an API endpoint (Standby)
You can also call this actor like an API: send one to 15 Instagram accounts in a single web request and get their similar profiles back in the same response, with no run to start and no dataset to read. The address is the one in the example below; the actor's Endpoints tab shows it too, and you can try it from the browser there.
curl -H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \"https://steadyfetch--instagram-similar-profiles-scraper.apify.actor/?usernames=nasa,natgeo&resultsLimit=40"
| Setting | What it does |
|---|---|
usernames | The Instagram accounts — names, @handles or profile links, comma-separated (or a JSON list in a POST body). At most 15 per request (2 on the Apify free plan). |
resultsLimit | How many similar profiles to return in total, split evenly across the accounts. 80 if you leave it out; at most 1,000 per request (80 on the Apify free plan). |
The answer is JSON: profiles (each with the same fields as a row in a run's dataset), delivered, charged, notes for anything that was not returned, per account and in plain words, and summary (the same summary row a run ends on). You are charged per similar profile returned, at the same per-profile price as a run. An account that does not exist, is private or has no suggestions is not charged, and if the charge for a request cannot be completed, its profiles are not sent and nothing is charged. For more than 15 accounts at once, run the actor as usual.
Related actors
- One account's own posts: Instagram Profile Posts Scraper — https://apify.com/steadyfetch/instagram-profile-posts
- The posts published under a hashtag: Instagram Hashtag Scraper — https://apify.com/steadyfetch/instagram-hashtag-scraper
- The spoken words inside a reel: Instagram Reel Transcript Scraper — https://apify.com/steadyfetch/instagram-reel-transcript-scraper
Limits and good manners
Max profiles and Max run seconds take any number you type: this actor delivers at most 5,000 profiles in one run, and runs for at most the run's own timeout less 20 seconds kept for writing out the results (an hour when the run has no timeout, and at least 30 seconds), so a long job needs only a longer run timeout. A bigger ask runs at the ceiling instead of being refused, and one uncharged row says what was asked for and what was used.
Only Instagram's own public suggestion surface is read, and only for accounts that exist. Some accounts have no suggestion list at all — Instagram simply declines to chain from them — and the run says so on an uncharged row instead of padding. This actor may stop working if Instagram changes how the data is served; if it does, undelivered items are never charged.
Support
Something off, or a column you need that is not here? Open an issue on the Issues tab — we usually reply within a couple of hours.
If it earned its keep, a rating helps other buyers find it, and saving the actor keeps it one click away.