Instagram Similar Profiles Scraper — Instagram Competitors avatar

Instagram Similar Profiles Scraper — Instagram Competitors

Pricing

from $1.00 / 1,000 similar profiles

Go to Apify Store
Instagram Similar Profiles Scraper — Instagram Competitors

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

Steadyfetch Team

Maintained by Community

Actor stats

0

Bookmarked

80

Total users

37

Monthly active users

2 days ago

Last modified

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 maxTotalChargeUsd on 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 rank makes 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 * * 1 for 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, set newItemsOnly to true: 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":

ColumnWhat it holds
username · fullName · profileUrlthe suggested account, and a link straight to it
similarTo · similarToUserIdwhich of your accounts this suggestion came from
rankits place in Instagram's own ordering of the suggestions, starting at 1
suggestionListonly 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 · isPrivatethe blue check, and whether the account is locked
socialContextInstagram's own one-line reason for the suggestion, passed through as served
userId · profilePicUrlthe numeric account id, and the profile picture
sourcealways instagram
charged · chargedEvents · status · retryable · statusReasonwhether 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 planPer profilePer 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. Its reason says 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 carries reason: "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"
SettingWhat it does
usernamesThe 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).
resultsLimitHow 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.

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.