Scrape Instagram accounts and profiles similar to any handle — competitor accounts, suggested accounts and niche discovery from Instagram's own Suggested for You. Expand 1–5 seeds into a whole niche, with emails, bio links, engagement rate and Reels views per profile. No login needed.
Creator accounts were being reported as personal, and the account-type filter dropped them.
Instagram has three kinds of account — business, creator and personal — and the first two are
both professional: both can publish a Contact button with an email or a phone number. This actor
had been reading a single business/not-business signal, so every creator fell into the personal
bucket. That mattered more here than anywhere else: on 60 accounts taken from this actor's own
results, 48% were business, 52% creator and none at all were personal. So Business only
was discarding half of the professional accounts it found, and Personal only was returning
creators — not personal accounts, of which suggested profiles contain almost none.
Added
Account Type column, on every analyzed row: business, creator or personal, read from
Instagram's own account type. The README has listed this column for some time; it now exists. It
is the last column, so every column you already read keeps its position.
Two new choices in Filter by Account Type: Creator only, and Professional (business or
creator) for when you want everyone with a Contact button and do not care which kind. Looking
for influencers? Choose Creator — the old advice to choose Personal was wrong, and on
this actor it returned an empty list for the wrong reason.
[0.0.98] - 2026-09-04
Documentation only. The Related actors table now lists Instagram Email Scraper, for the
contact details a list of usernames publishes — email, phone, website and business category,
one row per account. No change to this actor's behaviour, input, output or prices.
All notable changes to Instagram Related Profiles Scraper are documented in this file.
Documentation only. The Related actors table now lists Instagram Comments Scraper, for
reading what a post's comments say — every comment and reply as a row, with @mentions and
#hashtags in their own columns. No change to this actor's behaviour, input, output or prices.
[0.0.96] - 2026-09-03
Maintenance build — no user-facing changes. Input schema, output dataset
columns, KVS records, console output, error messages, defaults, and pricing
are all unchanged from 0.0.95. Saved tasks continue to work identically.
[0.0.95] - 2026-09-01
Changed
Related actors section updated to include Instagram Likes Scraper (post likers and
commenters) and Instagram Influencer Search (keyword and hashtag search). The second one
had been missing since it shipped on 2026-08-11 — a customer landing here saw a family that
was two members short of the real one.
[0.0.94] - 2026-09-01
Fixed
Runs no longer crowd each other out. This Actor shares a data connection with several others, and
when more than one run was going at once the data layer answered slower and refused more often —
measured, the wait per request roughly doubled and refusals went from under 1% to over 4%. A run
now notices when it is being refused and eases off on its own instead of pushing harder, which
makes it more likely to finish inside the time limit you set.
[0.0.93] - 2026-09-01
Fixed
A run that hits the time limit you set for it now stops itself instead of being cut off. It saves
everything it collected, finishes as a normal successful run, and writes a USER_MESSAGE saying
how many profiles fit, how many were still queued and how fast this particular run was moving.
Until now such a run was killed outright: the results it was holding never reached the dataset
and nothing anywhere said what had happened.
You are charged only for profiles the run actually analysed — a profile it never got to costs
nothing, and re-running with Clear saved data unchecked continues from where it stopped.
Added
The run warns you while there is still time to act. Once it has measured its own speed it says,
in the log, whether the profiles you asked for fit the limit you set — for example "at 2.4s per
profile, about 9 of the 41 remaining profiles fit in the 46s left of your 1m 10s limit" — so you
can raise the timeout or lower Max profiles to process before the run ends.
Changed
The README no longer promises "1 profile per second". Real speed is 1–8 seconds per profile
depending on how busy Instagram's data layer is that day, and the run now prints its own measured
figure. The old number was right on a good day and six times optimistic on a bad one, which is
how runs came to be given timeouts they could not meet.
[0.0.89] - 2026-08-31
Fixed
A mistake in the input no longer marks the run as failed. If a seed isn't a username, a keyword
field is empty, or a location can't be resolved, the run now finishes normally and the status line
says exactly what to change. Nothing is fetched and nothing is charged, as before.
The run's status line now names the problem instead of reporting "a critical error". Whatever
stopped the run is written there, so you can see what happened without opening the log.
If a billing call fails mid-run, the run now shuts down in an orderly way instead of stopping
dead. Everything already collected is saved to the dataset and the run summary, and profiles the
platform did not actually bill for are no longer counted as charged.
A failure during start-up — before the first profile is read — no longer ends the run without
explanation. The reason is now written to the log and to the run's status.
The live status page can no longer take the run down with it if its port is unavailable.
Reading a very long followers or following list is now capped per run, so a single read cannot
exhaust the run's memory. If a list is longer than one pass can read, the log says so.
[0.0.88] - 2026-08-26
Fixed
A run that returned nothing because of the last-post filter now says what the rejected profiles
actually looked like — "7 of 10 had no posts we could read, and this filter needs posts to judge
an account" — instead of naming the filter and stopping there. The sentence was already written
and could never appear, so every zero-row run caused by that filter gave you the filter's name
and no number to move.
[0.0.87] - 2026-08-24
Changed
The README headline now matches the actor's live title, "Instagram Related Profiles Scraper —
Similar Accounts". It had been left on the pre-August wording, and the headline is the first
line anyone — person or AI agent — reads about this actor.
The opening section and "When to use it" now describe the actor in the words people actually use
to look for it: similar accounts, suggested accounts, competitor accounts, niche discovery,
account discovery, audience research. Same five use cases, same capabilities, named plainly
instead of by paraphrase.
Documentation only. Input schema, output dataset columns, KVS records, console output, error
messages, filters, defaults and pricing are all unchanged from 0.0.86.
[0.0.86] - 2026-08-19
Changed
Correction to the 0.0.85 note on the Business-Address filter: full country names DO match
outside the US, Canada, Mexico and India — Instagram writes the city line as "Berlin, Germany"
or "Lagos, Nigeria", country spelled out in English; in the US, Canada, Mexico and India it
ends in the state ("Miami, Florida"). Abbreviations like "USA" or "UAE" are not what the field
carries.
The filter's input-form description, the README guidance and the run messages now teach the
shape that works: a comma-separated list of several cities plus the region written out in full,
in Instagram's own spelling, accents included.
When some profiles did publish an address and your terms simply missed them, the closing
message now says so and suggests the towns-plus-region list instead of staying generic.
[0.0.85] - 2026-08-19
Changed
The location filter is now called "Filter by Business Address — professional accounts only",
because that is what it reads. Instagram publishes an address only on professional accounts that
filled it in, so ordinary creators have none at all and this filter rejects every one of them.
Write city names: the field holds a city, so "Miami" can match and "USA" never will.
Added
A run whose location filter cannot match anything now stops after the first 25 profiles instead
of paying its way through the whole search and reporting an empty result at the end. If none of
those 25 publishes a business address, the run says so, tells you how much of the search it
declined to pay for, and points at the field to clear. The profiles already fetched stay saved,
so you can clear the filter and re-filter them for free with Offline Mode.
[0.0.84] - 2026-08-18
Fixed
The pre-run warning about narrow filters now also fires on a location filter used on its own.
Until now it only spoke up when location was combined with keywords, so a run narrowed by
location alone went ahead with no warning at all — and those are the runs most likely to fetch
profiles, charge for them and save none of them.
The expected-yield figure in that warning is now specific to the contact type you picked.
All four choices used to be quoted the same ~10%. They do not behave the same: asking for
BOTH an email and a phone — the strictest of the four — actually keeps about twice as many
profiles as asking for an email alone, and the warning now says so instead of understating it.
[0.0.83] - 2026-08-17
Fixed
A run that stopped on an error now always explains itself. Every diagnosis this actor
writes for an empty result was reachable only when the run finished normally, so a run
that failed handed back an empty dataset with nothing said about it. It now reports what
went wrong, what to try, and exactly what was charged — including when the charge was
under a cent.
Input mistakes are no longer recorded as crashes. A missing or malformed field in Network
Expansion or Keyword Discovery was being filed as an unexpected failure, which made the
run summary blame the actor for something the input explained.
[0.0.82] - 2026-08-17
Maintenance build — no user-facing changes. Input schema, output dataset
columns, KVS records, console output, error messages, defaults, and pricing
are all unchanged from 0.0.81. Saved tasks continue to work identically.
[0.0.81] - 2026-08-17
Maintenance build — no user-facing changes. Input schema, output dataset
columns, KVS records, console output, error messages, defaults, and pricing
are all unchanged from 0.0.80. Saved tasks continue to work identically.
[0.0.80] - 2026-08-12
Fixed
Runs you start at the same time no longer interfere with each other. 0.0.79 stopped
them failing; this removes the cause. Every run keeps a record of the accounts it has
already analysed so it can pick up where it left off, and that record was shared by all of
your runs at once — each starting run cleared it. Three quiet things followed from that:
a run could skip accounts you asked for because another run had already analysed
them, leaving them out of your results with nothing to show for it;
the run summary's "profiles charged" figure could count profiles another run paid
for, so the number did not match the run it was printed for;
after a server move, a run could add another run's results to yours.
Each run now keeps its own private record, which no other run can see or clear. Resuming
after a server move works exactly as before, and so does setting Start a Fresh Run to
false to continue a previous run — that now picks up the last run that actually finished,
rather than whichever one happened to write last.
Changed
Starting a fresh run no longer deletes saved profiles that another of your runs is still
using. The saved profiles are what Enable Offline Mode re-filters for free, and a run
starting up used to clear them. It now leaves them alone if another run touched them in the
last few minutes, and starts its own collection from scratch — which is what Start a
Fresh Run means. Nothing about what you are charged changes.
[0.0.79] - 2026-08-12
Fixed
Runs no longer fail when you start several at the same time. If you launched two or more
runs together, one of them could stop with "Could not read this run's progress record in
full" — and there was nothing wrong with it. Each run saves its own progress list so it can
pick up where it left off, and a run starting up would clear that list at the very moment
another run was reading it. Three things changed:
a run that cannot read the progress list now waits a moment and tries again, twice, instead
of giving up the first time;
it re-opens the list after the retry, so anything it saves afterwards is kept rather than
written into thin air;
a run that has not analysed anything yet no longer stops at all. That check exists to
protect a resumed run from being charged twice for the same account; a run that has just
started has nothing to be charged twice for, so it now carries on with an empty list and a
note in the log.
Only runs started alongside other runs were ever affected. A single run on its own was not.
[0.0.78] - 2026-08-12
Fixed
The language filter and the Detected Language column now cover 44 languages instead of 13.
Korean, Polish, Ukrainian, Dutch, Swedish, Serbian, Thai, Vietnamese, Greek, Hebrew, Persian and
23 others were already being recognised from the bio and captions — and then reported as "N/A",
because the column only knew how to name 13 of them. They are now named, and each can be picked
in Filter by Profile Language. Nothing changed for the 13 languages that already worked.
[0.0.77] - 2026-08-10
Fixed
A failed run no longer prints the raw technical failure text from the service this actor depends
on. That text went into the run log and into the run's storage records, and on a connection
problem it carried that service's address. None of it was ever useful to you. Failures now read as
"the request was refused upstream"; the reasons you can act on are unchanged.
[0.0.76] - 2026-08-10
Added
Your results now say when the free plan stopped the search early. On the free plan a run
analyzes 5 discovered profiles. If Instagram still had suggestions left for one of your starting
profiles, the results now carry one extra row for that starting profile — not_analyzed in the
new Analysis Status column, and in Why Not Analyzed how many more accounts it still had,
for example "at least 37 more suggested accounts for nike".
Until now that fact lived only in the run log and in the run's storage records. Anyone reading
the results through the API or an AI assistant saw five profiles and no way to tell "the free
plan stopped at five" from "that account has no suggestions".
These rows come after your results and are never charged.
A paid run never produces them, and neither does a run started with the demo values.
The number is a floor, and the wording says so: only the first page of Instagram's suggestions
is read, so there may be more.
Changed
Two columns added to every row: Analysis Status and Why Not Analyzed. On a profile that was
analyzed they read analyzed and N/A. They are appended at the end of the row, so every column
that existed before keeps its position — a spreadsheet or script that reads by column number is
unaffected.
[0.0.75] - 2026-08-02
Added
The run now warns when your starting profiles are far bigger than the profiles you asked for.
Instagram suggests accounts of a similar size to the one it is given, so starting from a channel
with millions of followers and asking for accounts under 100,000 asks for something the suggestions
will not contain — one such run came back with candidates between 1.4 and 272 million followers and
kept none of them. The run now says so after the search and before it starts charging, names the
size of each starting profile, and suggests starting from accounts closer to the size you want. A
run whose starting profiles are within about 10x of your maximum says nothing.
Fixed
The free re-filter instructions now say where the setting is. They named the "Enable Offline
Mode" checkbox but not the section holding it, so the one instruction that saves you from paying
twice was hard to follow. It now points at "▶️ Run & Storage Options".
[0.0.74] - 2026-08-02
Fixed
A narrow follower range is now recognised as the strong filter it is. Setting both a minimum and
a maximum close together is the single fastest way to spend a run and keep almost none of it, and
the up-front warning did not treat it as narrow at all. It now does, and it fires before the run
starts collecting rather than after the money is spent. A wide range is unaffected — nothing that
ran quietly before starts warning now.
[0.0.73] - 2026-07-30
Added
Related actors now lists Instagram Reel Script Extractor — the family member for reading what a creator's reels actually say and show (spoken transcript, text burned into the frame, opening hook) rather than which accounts are similar.
[0.0.72] - 2026-07-29
Fixed
Results are no longer lost when the platform moves a run to another server. Results used to be
held in memory and written out in groups, so a run that was moved, aborted or interrupted before a
group was complete lost everything it had collected since the last write — and because those
accounts were already marked as done, they were skipped instead of retried when the run continued.
Results are now written continuously and again immediately before a run is interrupted. If an
earlier interruption did lose results, a continued run rebuilds them from the profiles it already
holds, at no extra cost and without fetching anything again.
The run summary now describes the whole run, not just the part after an interruption. Profiles
saved, filtered, private and skipped counts, the filter breakdown, the skipped-accounts list and
the analysis time all used to restart from zero when a run was moved to another server.
Each row of "Start Profiles" is treated as one account. Entries containing spaces were split on
the space, so "Alex Hormozi" was read as two separate accounts — and because short words like those
often exist as real usernames, a run could quietly expand outward from accounts that had nothing to
do with the ones requested. A row is now kept whole, and a leading @ or a full profile link is
accepted and cleaned up automatically.
Entries that are not Instagram usernames are caught before anything is fetched or charged.
A person's real name, an email address or a link to a post now stops the run with the exact rows at
fault and instructions for finding the right username.
Usernames that do not exist now fail immediately instead of stalling the run. A missing account
was retried four times with waits of up to 30 seconds even though the answer could never change.
A run continuing after an interruption can no longer re-analyze accounts it had already
finished. If the record of completed accounts was slow to load, it was treated as empty and the
run started over — repeating work and overstating the number of profiles scanned.
[0.0.71] - 2026-07-29
Changed
The Store listing now says what this actor returns — emails, bio links, engagement rate,
Reels views and language on every account discovered from your seed handles — and the price line
shows the per-profile price instead of a generic label.
[0.0.70] - 2026-07-28
Fixed
The two records that let an interrupted run resume are now declared in the actor's storage
schema. They were always written, but the schema did not list them, so anything reading the
schema had no way to know they existed.
[0.0.69] - 2026-07-28
Fixed
The "Live status" link now works after a run has finished. It pointed at the run's own
container, which the platform shuts down as soon as the run ends — so opening it later showed
nothing. It now opens the saved copy of the page, which stays available for as long as the run's
storage does.
FREE_LIMITS_APPLIED is now declared in the actor's storage schema. The record was always
written on free-plan runs, but the schema did not list it, so tools reading the schema had no way
to know it existed.
[0.0.68] - 2026-07-28
Changed
The Related Actors table now describes Instagram Profile Scraper accurately: it gained a sixth discovery mode that returns the accounts which liked or commented on a given post, so the row no longer says five.
[0.0.67] - 2026-07-28
Changed
Maintenance build — no user-facing changes.
[0.0.66] - 2026-07-28
Changed
The first-run guarantee now ends at the run's first match. On a first run, profiles rejected by your filters stay unbilled until one profile passes; from that point the run bills normally, still capped at 100 waived profiles. Introduced yesterday in 0.0.65, the guarantee covered every filter rejection on a first run, including runs that returned plenty of rows — where the filters were doing exactly what they were asked to. Runs that return nothing are unaffected: they are still fully covered.
The "no profiles matched your filters" message explains two more rejection causes in plain language: profiles dropped because they had no readable posts, and profiles dropped for having no public email or phone. It also says "one of the filters named above" when more than one filter is listed.
[0.0.65] - 2026-07-27
Fixed
Profiles that could not be retrieved are no longer billed. Not-found, deleted, private, and errored accounts were charged as a Profile Analyzed event even though they produced nothing. Billing now fires only after a profile actually comes back readable, matching what the pricing table and FAQ have always promised.
The free re-filter this Actor advertises now works. The completed screen and the run report told you that re-filtering a run's saved profiles was free — but a profile rejected on follower count, verification, account type, contact details, category, location, or a bio keyword was never saved in the first place, so there was nothing to re-filter. All retrieved profiles are now saved, rejected ones included.
Offline Mode works with one checkbox instead of two. Turning on Enable Offline Mode now keeps your saved profiles even when Start a Fresh Run is left at its default. The two settings used to conflict: the fresh-run wipe deleted the saved profiles moments before Offline Mode tried to read them, so the run reported "no cached data".
An empty cache and an unreadable one are no longer reported the same way. Reading the saved profiles is now paged and given a realistic time budget; a storage timeout says so and tells you to retry, instead of claiming there is nothing saved.
Offline runs no longer let post-based filters through unchecked. A profile stopped by a profile-level filter never had its posts downloaded, so filters like Min Engagement Rate had nothing to judge and silently passed it. Those profiles are now rejected with the reason stated.
Added
Your first run is not charged for profiles your filters reject. Filters are evaluated after a profile is retrieved, so a first-time user setting up a filter combination could pay to find out it matched nothing. On your first run, rejected profiles are free — up to 100 of them; past that, billing continues as normal and the run says so.
RUN_SUMMARY now reports profilesCharged (billable profiles this run) and filterRejectsWaived.
Changed
The "no profiles matched your filters" report now names the filter as it appears in the input form and gives you a number to move it to — for example "8 rejected by Follower Count Range — the profiles we found had 340–4,210 followers, your minimum is 5,000" — and spells out the free re-filter path.
Input form wording corrected where it was steering runs into empty results. The follower-range field recommended a specific 5,000–100,000 band that in practice returned nothing; the location filter is now described for what it actually reads — the tagged location and business address that most creators never fill in. Enable Offline Mode and Start a Fresh Run now describe how they relate.
[0.0.64] - 2026-07-27
Removed
Removed the Also monitor follower changes input option and the follower-monitoring next step it drove. Measured across the three sibling Actors that carried it, no customer ever used it: 0 clicks from 20 eligible users on the completed screen and 0 adopters of the machine-readable contract among 61 paying users who saw it. It started nothing on its own and charged nothing, so nothing that ran before this release is billed differently.
RUN_SUMMARY no longer carries the relatedWorkflow and relatedWorkflowExecution blocks, and dataset rows no longer carry the Follower Monitoring Offer column. Every other RUN_SUMMARY field, every dataset column, and every storage record are unchanged.
A saved task that still sends startFollowerMonitoring keeps running normally. The field is accepted and ignored, and it is not reported back as an unrecognized input.
Changed
The review invitation returns to the completed screen of successful paid runs. The removed offer had been taking its place there.
[0.0.63] - 2026-07-29
Changed
The existing false-default startFollowerMonitoring consent is visible as Also monitor follower changes in the Web Input form. A successful paid WEB run may now start the same separately billed, one-child, up-to-10-profile tracker baseline used by API/CLI/MCP; free runs and the default-off path still start nothing and incur no tracker charge.
The first dataset profile returned to a paid API, CLI, or MCP caller carries one compact programmatic_dataset_tracker_call_v1 contract. It starts and charges nothing, requires affirmative user confirmation, then provides both a direct MCP call-actor payload and an equivalent authenticated Actor API POST for up to 10 lowest-follower saved profiles under a combined $5 cap. It does not rerun the source Actor; WEB/free/demo dataset rows are unchanged.
The $5 combined cap, cheapest-profile ordering, pre-read budget skips, durable receipt, separate attribution, PII-free telemetry, and exact same-token repeat contract are unchanged.
[0.0.62] - 2026-07-23
Added
Paid API, CLI, and MCP callers can set the hidden startFollowerMonitoring=true input to authorize one separately billed Instagram Follower Tracker baseline for up to 10 successfully saved profiles, ordered from the lowest known follower count. The flag defaults to false, uses the caller's token, caps the combined child run at $5, skips profiles that do not fit the remaining tracker budget before list reads, and records the outcome plus an exact same-token repeatObservation contract in RUN_SUMMARY.relatedWorkflowExecution.
The private analytics row now records only aggregate auto-start request, eligibility, started, and normalized outcome fields. Child run IDs, URLs, usernames, and tokens remain confined to caller-owned storage, while opt-in and start-failure rates become measurable.
A durable pre-start receipt prevents a resurrection or ambiguous Actor-start response from launching the same child twice. Auto-start adoption uses its own api_sibling_autostart attribution instead of contaminating the manual api_sibling_handoff funnel.
Unchanged
Calls without the exact opt-in, plus free, WEB, scheduled, demo, failed, and zero-value runs, never start a child. Source extraction, source billing, dataset rows, and the existing manual relatedWorkflow POST fallback are unchanged.
[0.0.61] - 2026-07-18
Changed
Paid successful WEB runs now offer one-account follower monitoring instead of routing to the seven-account agency template. The completed screen opens the followers-only monitor-followers-after-an-instagram-export task, states the $0.30 starting observation cost, and records the new paid_sibling_single_account_cross_sell_v2 click contract. Eligibility, source extraction, source billing, programmatic direct_actor_api_v2, and customer dataset rows are unchanged.
[0.0.60] - 2026-07-17
Changed
RUN_SUMMARY.relatedWorkflow is now the single-account direct_actor_api_v2 contract. It selects the saved profile with the lowest known follower count, so a programmatic caller starts with the least expensive available observation instead of receiving up to five separately billed accounts. The direct Actor endpoint, $5 run cap, attribution, eligibility, billing, and dataset rows are unchanged.
[0.0.59] - 2026-07-17
Changed
Superseded by 0.0.60 before the new source was published; this build reused the previous source snapshot.
[0.0.58] - 2026-07-17
Changed
The terminal Follower Tracker pointer now tells API/CLI/MCP callers to read RUN_SUMMARY from the run's default key-value store before posting relatedWorkflow.input. This matches the actual Apify MCP response surface while keeping the contract ID/version, endpoint, payload, $5 cap, attribution, billing, and dataset rows unchanged.
[0.0.57] - 2026-07-17
Changed
Paid MCP value runs now normalize to mcp and receive the same machine-executable Follower Tracker handoff as paid API/CLI runs. This opens the contract to the observed agentic cohort without changing its ID, endpoint, payload, $5 cap, attribution, billing, or dataset rows.
[0.0.56] - 2026-07-17
Changed
The machine-visible Follower Tracker title and note now describe one or more saved accounts instead of implying that multiple accounts are required. Contract ID/version, endpoint, payload, $5 cap, attribution, and billing are unchanged.
[0.0.55] - 2026-07-17
Fixed
The REST API instructions now match the live single-profile direct_actor_api_v1 eligibility rule instead of retaining the former five-profile threshold.
[0.0.54] - 2026-07-17
Changed
The direct Follower Tracker API contract now appears after any successful paid API/CLI value run with at least one saved profile, instead of requiring five. Its URL, $5 safety cap, payload, attribution, billing, and dataset behavior are unchanged; the 5+ account agency segment remains separately measurable.
[0.0.53] - 2026-07-17
Changed
Eligible paid API/CLI runs now repeat the direct Follower Tracker pointer in their terminal run statusMessage, which is already returned to polling integrations. The executable input remains in RUN_SUMMARY.relatedWorkflow; dataset rows, eligibility, billing, and all other runs are unchanged.
[0.0.52] - 2026-07-17
Added
Eligible paid API/CLI runs now receive a machine-executable direct_actor_api_v1 Follower Tracker contract in RUN_SUMMARY.relatedWorkflow: a Bearer-authenticated Actor POST URL capped at $5 plus input populated with up to five successfully saved usernames. The same request can be repeated for later observations without copying a Console task; the existing template link remains as a human fallback.
[0.0.51] - 2026-07-17
Fixed
RUN_SUMMARY.relatedWorkflow now marks its public example taskId explicitly as taskIdRole: "template". The note tells API clients to open taskUrl, copy the template into their own account, and reuse the new task ID created by Apify. This prevents clients from trying to run the author's template ID directly; eligibility and destination are unchanged.
[0.0.50] - 2026-07-17
Changed
The API documentation now shows how to fetch RUN_SUMMARY after a run and consume the optional relatedWorkflow added in 0.0.49. The eligibility rules, destination task, runtime, input, output rows, and billing are unchanged.
[0.0.49] - 2026-07-17
Added
Successful paid API/CLI runs that save at least five profiles now expose one PII-free RUN_SUMMARY.relatedWorkflow: the ready-made multi-client Instagram Follower Tracker task. Programmatic callers can discover the relevant recurring-monitoring workflow without parsing logs or web UI. Free, web, scheduled, demo, failed, and smaller runs are unchanged.
[0.0.48] - 2026-07-16
Changed
The one paid completed-screen handoff now opens the focused multi-client Follower Tracker task. Its copy matches the dominant paid discovery workflow—five or more saved profiles—and the click carries a separate PII-free agency variant for contribution attribution. Free, API, scheduled, failed, and zero-result runs remain unchanged.
[0.0.47] - 2026-07-16
Changed
The top README handoff now opens a ready-made Follower Tracker task directly instead of the generic Store page. The dedicated task name keeps this acquisition path measurable without query-string tracking or personal data.
[0.0.46] - 2026-07-16
Added
Paid web users who finish a non-empty run now get one focused next step: open the ready-made Instagram Follower Tracker to monitor new followers and unfollowers for profiles worth watching. The completed-screen link is measured without personal data and replaces the review prompt on that success path. Free, API, scheduled, failed, and zero-result runs are unchanged.
Fixed
Existing completed-screen review and upgrade clicks are now attributed to Instagram Related Profiles Scraper instead of being mislabeled as Instagram Profile Scraper. The review link now opens this Actor's own review page, and copied live/output schema titles now use the correct Actor name.
[0.0.45] - 2026-07-06
Fixed
Timestamp filters work again (last post / last Reel / posts-per-period). The upstream API renamed the media timestamp field (taken_at_ts → taken_at) around 2026-06-25, which made every profile look like it had "no media found to apply last post filter" — any run using lastPostDays, lastReelDays, minPostsInPeriod, or posts-per-month metrics returned 0 results while still charging for the scan. Both spellings are now accepted at the fetch boundary (feed media and clips), restoring documented behavior.
Reel view matching hardened against upstream ID-type drift (feed posts and Reels now report IDs in different types; matching is type-agnostic).
[0.0.44] - 2026-07-06
Changed
Every "Upgrade" link in run messages now says what's behind it: paid plans start at $29/mo with $29 in platform credits, and the link opens your plan page in Apify Console.
[0.0.43] - 2026-07-06
Fixed
The "Upgrade" link in run summaries now opens your Apify plan page directly (the old link form could land on the wrong billing tab).
[0.0.42] - 2026-07-02
Fixed
The free-plan cap notice no longer blames your filters for profiles that were actually lost to private or unavailable accounts. The «your filters kept N of the 5» wording now appears only when filters really rejected candidates; otherwise the notice states the plain delivered count.
[0.0.41] - 2026-07-02
Changed
README «Example tasks» now links two new ready-to-run tasks — «Find travel influencers on Instagram» and «Find food bloggers on Instagram» (six one-click examples total). No code changes.
[0.0.40] - 2026-07-02
Added
Zero-result runs now explain themselves on the completed screen. A free run that ends with nothing saved shows the likely cause and the fastest fix — «your filters rejected all N discovered profiles» (with a pointer to free offline re-filtering) or «Instagram returned no related profiles for your seeds» (with a proven starter seed) — instead of a generic completion screen with an upgrade button.
Filter coaching where it actually helps. When filters zero out a free run, the run report now explains that the free plan discovers 5 profiles before filters and that re-filtering cached results is free (Enable Offline Mode). The input form's filtering section teaches the same before the run, and a new «Tips & best practices» README section collects the field-tested guidance.
Six new FAQ entries — no login/cookies needed, scheduling on the free plan, getting more than 5 profiles per run, the exact API field names (and the common wrong guesses), and free offline re-filtering.
The run summary now reports how many profiles were discovered before filters and whether the free discovery cap held back results.
Changed
The free-plan heads-up message now tells the whole story when filters trimmed a capped harvest — «discovery stopped at the free-plan limit of 5, and your filters kept 3 of the 5» — instead of only naming the cap.
The completed screen's free-plan box now states the real limit for this actor (5 discovered profiles per run); it previously showed a 50-profile figure that belongs to a different mode family.
Fixed
The FREE_LIMITS_APPLIED storage record now lists the discovery cap only when the cap actually held back delivered results. Previously it appeared on nearly every free run — including runs where nothing was held back — which made the record useless for understanding what limited your run.
[0.0.39] - 2026-07-01
Added
A clear heads-up when free runs hit the discovery limit. On the free plan, network discovery stops after 5 related profiles. Previously it just stopped silently. Now the run shows a short message: how many related profiles this run delivered, that your seeds had more to discover beyond the limit, and a one-click way to lift the cap by re-running the same input on a paid plan. No change to billing, run behaviour, or input schema.
[0.0.38] - 2026-06-22
Added
New "Example tasks" section in the README linking ready-to-run example tasks — one-click, pre-configured use cases (find related accounts, discover niche creators, find competitors, expand your niche) you can run with no setup.
[0.0.37] - 2026-06-10
Fixed
The narrow-filters heads-up introduced in 0.0.36 now names this actor's real cost-control field in the message itself. The on-screen suggestion said to validate with a small maxCount, but this actor's field is maxCountExpansion (as the 0.0.36 notes already stated) — following the on-screen advice as written had no capping effect.
On free plans the heads-up no longer counts filter options that the free plan does not apply (engagement, recency, views and view/follower-ratio filters) — predictions match what the run will actually do.
With Filter Combination = OR, combining Keywords with a Business Category no longer over-states the expected filtering — under OR the two widen the match instead of narrowing it.
Changed
The heads-up now also accounts for the engagement, posting-recency, views and follower-range filters when estimating how much of a fetched list will be kept. Runs using only those filters previously produced no prediction at all.
[0.0.36] - 2026-06-10
Added
Heads-up before launching a run with very narrow filters. Some filter combinations (for example Contact Info combined with Profile Language, or Keywords combined with Location Keywords) save only a small fraction of fetched profiles — billing is per fetched profile, not per saved profile, so a big run with such filters can be much pricier per saved result than expected. The actor now shows a pre-run warning estimating the expected save-rate, suggests validating yield with a small maxCountExpansion first, and writes the prediction to a new FILTER_BURN_PREDICTION record in the run's Storage tab. No change to billing, run behaviour, or input schema.
[0.0.35] - 2026-06-05
Fixed
More patient when Instagram briefly returns a server error on the first account lookup. The account-resolution step now uses the same long retry window the related-profile chain reads already use — short upstream hiccups no longer abort the run with "Temporary Unavailable" / zero results. No change to behavior on successful runs; no change to billing.
[0.0.34] - 2026-06-03
Fixed
Profile-category filters (Filter for Influencers Only and Filter by Specific Business Category) now match category names regardless of capitalisation. Previously, a profile whose category came back as "Digital creator" was treated as different from "Digital Creator" — the same string with one letter cased differently — and was incorrectly excluded. On creator-heavy queries this was rejecting up to ~45% of analysed profiles. No input change needed; existing filter settings are strictly more inclusive after the fix.
[0.0.33] - 2026-05-29
Added
A short callout near the top of the README announcing the new Instagram Follower Tracker — a sibling Actor (same author) that reports who started following and who unfollowed any public account over time. Links to its Store page for anyone who wants change-over-time monitoring rather than a one-time scrape.
[0.0.32] - 2026-05-28
Fixed
Runs started via API, MCP, or a schedule now finish as soon as the results are ready, instead of holding a 20-second "completed" screen at the end. That hold only ever helped the in-browser live view; for synchronous API and agent/MCP integrations it was dead time that could push a long run past the caller's own timeout — so the caller could receive nothing even though the run finished and was billed. Runs you start from the web console keep the completed screen unchanged.
[0.0.31] - 2026-05-26
Fixed
Runs that end with every input seed skipped now always say why. The previously silent case — some seeds 404'd, some are private, some filter-rejected, and some hit a temporary read error in the same run — now ends with a clear "Nothing was scraped this run" note that lists each category. A separate case — every seed reachable but every read hit a temporary rate-limit — now says "Couldn't finish reading, please re-run" instead of finishing blank.
Paid-plan welcome / check-in messages no longer overshadow real run results. The onboarding banner only surfaces when there's nothing more specific to report.
[0.0.30] - 2026-05-25
Fixed
Large follower / following lists now finish reliably even if a single page briefly hiccups partway through. Before, one temporary blip while reading a long list could stop the read early and return a truncated list; the read now waits and retries that page before moving on, so big accounts come back complete.
[0.0.29] - 2026-05-22
Changed
Maintenance build — no user-facing changes.
[0.0.28] - 2026-05-22
Changed
Added the Instagram Profile MCP Server (connect Claude / Cursor / ChatGPT to live Instagram data via MCP tools) to the Related Actors section. No change to input, output, behaviour, or pricing.
[0.0.27] - 2026-05-22
Changed
Added the new Instagram Follower Tracker (track who follows / unfollows a public account over time) to the Related Actors section. No change to input, output, behaviour, or pricing.
[0.0.26] - 2026-05-12
Fixed
Dataset was not found warning storm on clearSavedData: true runs — every fresh-data run was silently logging hundreds of [finalize] checkpointDataset.pushData failed: Dataset was not found and matching detailedCacheDataset warnings during the account-processing loop. Cause: the drop-then-reopen sequence wrapped the reopen in a 3-second timeout and silently kept the stale dataset reference when the timeout fired, so every subsequent pushData targeted a just-dropped backend store. Replaced the racey block with a retry-until-writable helper (6 attempts, 1.5–10 s backoff) that aborts the run loudly if it can't recreate the checkpoint and detailed-cache datasets — propagated 1:1 from parent instagram-profile-scraper 0.1.50. Same input, output, and pricing.
[0.0.25] - 2026-05-11
Changed
README — Dropped the Offline mode section. Production-analytics data shows zero of 160 runs since 2026-03-11 used enableOfflineMode: true. The feature stays in the input schema's Advanced Run & Storage section for the few users who need it. Same input, output, and pricing.
[0.0.24] - 2026-05-08
Changed
Maintenance build — no user-facing changes.
[0.0.23] - 2026-05-07
Changed
README — refreshed structure for clarity (restored prior section layout). Same input, output, dataset shape, and pricing.
[0.0.22] - 2026-05-07
Changed
README — aligned to Apify quality template. Hero rewritten with value-first prose and a "beyond what Instagram's official Graph API offers" comparison (Graph API doesn't expose the recommendation graph at all); numbered 3-step Quick start; new 💡 Tips & Best Practices section (4 sub-sections × 3 bullets); new 🛟 Support & feedback section pointing to Apify Store reviews / bookmark / Issues tab; promoted disclaimer to dedicated ⚖️ Is it legal to scrape Instagram? H2 with link to Apify's web-scraping legality blog; FAQ expanded to 12 Q&As (including legality, ban risk, data freshness); offline-mode section consolidated with Resume; MCP wrapper added to Related actors. No functional changes — same input, output, dataset shape, and pricing.
[0.0.21] - 2026-05-06
Fixed
Test runs that used the default demo seed now also write a USER_MESSAGE storage record (in addition to the existing console banner). API-origin runs that never open the run console will now see — wherever they read run output — that the run used the example seed (openai), the output was capped at 10 profiles for cheap testing, and the canonical input field for their own seeds is startUsernames. Previously the only signal was the console banner, so customers who started the actor programmatically with the example seed could end up with 10 unrelated test profiles and assume that's what the actor returned for their input.
Runs that returned 0 profiles because Instagram had no «Suggested for You» suggestions for the seed now show a distinct Stop Reason: "No related profiles found for seed account(s)" instead of completing identically to a successful run, and write a USER_MESSAGE storage record explaining what happened with three concrete next steps (try a more popular seed in the same niche, try the sibling Instagram Profile Scraper's keywordDiscovery mode, or add multiple seeds). Each affected seed is also recorded in SKIPPED_ACCOUNTS under a new category no_related_profiles. This is the most common failure mode for small / niche / non-English / very new seed accounts.
Unknown input field names now surface a warning in the run log and a USER_MESSAGE storage record instead of being silently dropped. Common typos and field names imported from sibling actors — e.g. profileUrls, seedAccounts, usernames, accounts, maxItems, maxResults, maxProfiles — are detected and mapped back to their canonical names (startUsernames, maxCountExpansion). Previously a run configured with the wrong field name would still execute but ignore the customer's intended values without any indication.
[0.0.20] - 2026-05-06
Changed
The "Estimated run time" log line is now closer to typical real-world durations. After the 0.0.19 retry-pacing + concurrency speedup, an 80-account run on this actor now typically finishes in about a minute on a clean upstream — the previous estimate of "~2m 30s" was over-predicting by 2× because it still carried the old retry-overhead buffer. The estimate now reflects the post-fix baseline. (On a slower upstream day the run can still take longer than the estimate — live progress is in the "Status:" heartbeat printed every 60s.)
[0.0.19] - 2026-05-06
Changed
Faster recovery from transient upstream errors. The retry-pacing wait between attempts on 5xx was reduced from 5s/10s/15s to 2s/4s/6s, so brief upstream wobbles no longer add minutes to a run. Successful retry rate is unchanged — observed runs already recovered within the first two attempts.
Higher concurrency ceiling (8 → 16 parallel requests). Until now, runs on plans with high upstream rate were capped at 8 concurrent requests by the actor itself; the new ceiling lets larger upstream rate plans translate into faster runs immediately.
The "Estimated run time" buffer was tightened from 1.5× to 1.25× to reflect the lower pacing overhead.
[0.0.18] - 2026-05-06
Changed
Phone-number extraction is now off by default. Most lead-gen workflows rely on email and website; phone-number availability on Instagram profiles is low. Toggle "Extract Phone Number" on in the input form if you need phones. Users who already had it enabled keep getting phone numbers as before.
The "Estimated run time" log line now factors in a 1.5× buffer for upstream retries, so the printed ETA matches real-world durations more closely on long runs.
[0.0.17] - 2026-05-06
Changed
The "All target accounts unreachable" diagnostic now spells out all common causes for a 404 — the account may be private, deleted, banned, or the username is misspelled — instead of only "deleted or username changed", so users have a clearer first-pass checklist when a target fails.
[0.0.16] - 2026-05-05
Fixed
"No profiles matched filters" is no longer reported on small runs that fetched zero expansion candidates upstream — it now fires only when at least one candidate was actually evaluated against your filters. Previously, a run with maxCountExpansion=1 could trip this diagnostic incorrectly when the fetch returned no candidates at all (a different root cause that should surface as "Completed successfully" with 0 saved, not as filter rejection).
[0.0.15] - 2026-05-05
Fixed
Dataset rows again land normally when a profile is missing follower / engagement metrics. Previously the dataset schema declared Followers Count, Following Count, Reels Count, Avg Likes, Avg Comments, Posts in Last 30 Days, Posts per Month, Total Posts, and Last Post Within (Days) as strict integers/numbers, but the actor emits the string "N/A" for these fields when the underlying value is unavailable — causing the platform to reject every push with "Schema validation failed" and the run to complete with 0 saved profiles. The 9 affected fields now accept either a number or the "N/A" sentinel.
[0.0.14] - 2026-05-05
Changed
Improved diagnostics when every expansion candidate is rejected by the configured filters. Runs now show Stop Reason: No profiles matched filters (instead of completing silently with 0 saved profiles or showing the misleading "User profile limit reached") and write a USER_MESSAGE storage record listing the top 3 filter rejections so it's easier to see which filter to relax.
[0.0.13] - 2026-05-05
Changed
Improved diagnostics when every seed account in a run is deleted, renamed, or private. Runs now show Stop Reason: All target accounts unreachable (instead of "Completed successfully") and write a USER_MESSAGE storage record explaining what happened, so paid runs against accounts that no longer exist surface a clear message rather than completing silently with 0 profiles.
Unreachable seed accounts (404 / private) are now recorded in the SKIPPED_ACCOUNTS storage record with category not_found / private / error. Previously seed-fetch failures were logged to console but absent from the storage record.
[0.0.12] - 2026-05-04
Maintenance build — no user-facing changes.
[0.0.11] - 2026-05-04
Fixed
Dataset rows again land normally. The 0.0.10 dataset-schema rollout introduced strict per-field validation (required-fields list + enum-locked Source / Email Source / Quality columns) that rejected real rows in some configurations and re-queued them indefinitely. Schema retained as documentation; the strict validators are removed.
[0.0.10] - 2026-05-04
Changed
README expanded with a full output sample, pricing math examples, three filter recipes (nano-influencer / B2B partnership / local market), an FAQ section, and a comparison table vs the other Instagram actors in this family.
Every output column now has a per-field description, type, and example available in the Apify Console's dataset view and to clients that read the actor schema programmatically.
Input field help text rewritten throughout — each field now leads with what it does and any prerequisites (e.g. "requires extractPosts=true"), so it's clearer what to set before running.
SEO title / description tightened on the Apify Store page (no functional change).
[0.0.9] - 2026-05-03
Fixed
"Last Post Within (Days)" now reflects the actual most-recent post date. Profiles with pinned posts (Instagram pins up to 3 to the top of the grid regardless of age) were reporting the pinned post's age instead of the latest activity, sometimes by hundreds of days. Affects both the column value and the lastPostDays filter.
"Median Views" and "Views/Followers Ratio" populate correctly for accounts that post Reels. Previously, these came back as 0 / 0.00% on most profiles because the calculation was reading from the feed-posts list (photos / carousels — no view counts) instead of the Reels list. Fixes the false-zero on the column and the corresponding viewFollowerRatioMin/viewFollowerRatioMax filter.
Accounts with no Reels at all now show "Median Views: N/A" instead of "0" — the prior 0 was misleading and made these profiles look like dead Reels accounts when really there were no Reels to measure.
Added
New SKIPPED_ACCOUNTS Storage record listing every username skipped during the run, with reason and category (filter, not_found, private, error). Open the Storage tab → SKIPPED_ACCOUNTS to see exactly which usernames hit which filter, and which ones errored (re-run those — most errors are transient). The Log also prints up to 3 examples per category at the end of the run.
[0.0.8] - 2026-05-01
Fixed
First-paid-run welcome banner referenced features that don't exist in this actor (Modes 1/2/3/4) and an incorrect free-plan cap (50 — actual is 5). Message rewritten to reflect what paid plan actually unlocks here: uncapped profiles per run, Search Depth 2, Reels-analytics filters, and Reels view metrics in the output. Message ID bumped to paid_first_run_v2.
[0.0.7] - 2026-05-01
Changed
Documentation: added a "Other Instagram Tools" section to the README, with one-line descriptions of the sibling Instagram actors.
[0.0.6] - 2026-04-30
Fixed
TEST RUN banner showed an incorrect "50, free-plan limit" cap that did not actually exist.
Changed
Demo-input runs (when start usernames are left at the example value) are now capped at 10 discovered profiles on any plan. This keeps the cost of trying the actor under ~$0.10. Custom seed inputs are unaffected — default "Max profiles" stays 0 (unlimited).
[0.0.5] - 2026-04-30
Fixed
Init slowdown under restricted permissions: switched named storage to actor-scoped names so brand-new runs no longer stall on cross-actor resource lookups.
Removed defensive 5-second timeout on dataset opens — calls now complete in under 200 ms under normal conditions.
[0.0.1] - 2026-04-30
Added
Initial release of Instagram Related Profiles Scraper.
Discover similar profiles via Instagram's Suggested for You algorithm starting from 1–5 seed accounts.
Configurable per-profile filters: minimum/maximum followers, language, business category, contact info type, verification status, website availability, account type.
Free plan limit: up to 5 discovered profiles per run.
Live status page (HTML) and run summary KVS record.
Resume from checkpoint for interrupted runs.
Pay-per-event pricing: $0.01 per profile analyzed (one event per discovered profile that was successfully retrieved and analyzed, regardless of whether it passed your filters).