Analyze Instagram followers or following to find valuable profiles. Filter large accounts by engagement, contact info, and business category to discover influencers, leads, or ideal customers. Perfect for lead generation, market research, and influencer marketing.
All notable changes to Instagram Followers & Following Extractor are documented here.
The format follows Keep a Changelog .
[3.1.19] - 2026-05-08
Changed
Maintenance build — no user-facing changes.
[3.1.18] - 2026-05-07
Changed
README — refreshed structure for clarity (restored prior section layout). Same input, output, dataset shape, and pricing.
[3.1.17] - 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; 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); MCP wrapper added to Related actors. No functional changes — same input, output, dataset shape, and pricing.
[3.1.16] - 2026-05-06
Fixed
Test runs that used the default demo seed (nike) 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, the output was capped at 10 profiles for cheap testing, and that the canonical input field for their own seeds is usernames. 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.
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. startUsernames, targetUsernames, profileUrls, seedAccounts, maxItems, maxResults, maxProfiles — are detected and mapped back to this actor's canonical names (usernames for seeds, maxResults for the cap). Previously a run configured with the wrong field name would still execute but ignore the customer's intended values without any indication.
[3.1.15] - 2026-05-06
Changed
The "Estimated run time" log line is now closer to typical real-world durations. The previous estimate baked in extra buffer for slow-day retry overhead that's no longer needed after the 3.1.14 retry-pacing speedup. Real runs on a clean upstream now finish around the printed estimate, not at half of it.
[3.1.14] - 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. Retry attempts realigned with the rest of the Instagram actor family (now 3, was 5) — all observed retries succeed well 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 retry log line now reads "Pacing requests — next attempt in Ns..." matching the wording used in the parent actor.
The "Estimated run time" buffer was tightened from 1.5× to 1.25× to reflect the lower pacing overhead.
[3.1.13] - 2026-05-06
Changed
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.
[3.1.12] - 2026-05-06
Fixed
No charge when a followers/following fetch returns no list. If the upstream request for a target's followers or following list errors out and produces zero accounts (404 from a deleted/private/misspelled profile, transient timeout, etc.), the per-fetch paid event is no longer charged. Previously the run could charge for the attempt even when no data came back. Successful fetches that return any accounts are charged as before.
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.
[3.1.11] - 2026-05-06
Fixed
Targets that return 404 from the followers/following endpoint (deleted, banned, or mistyped username) are now reported as unreachable instead of completing silently with 0 saved profiles. Previously the run could finish with 0 output even though the upstream fetch had failed — the Stop Reason: All target accounts unreachable diagnostic now fires correctly for this case.
[3.1.10] - 2026-05-05
Fixed
"No profiles matched filters" is no longer reported on small runs that fetched zero candidate accounts upstream — it now fires only when at least one candidate was actually evaluated against your filters. Previously, a run with maxFollowers=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).
[3.1.9] - 2026-05-05
Changed
Improved diagnostics when every fetched follower / following account is rejected by the configured filters. Runs now show Stop Reason: No profiles matched filters (instead of completing silently with 0 saved profiles) and write a USER_MESSAGE storage record listing the top 3 filter rejections so it's easier to see which filter to relax.
[3.1.8] - 2026-05-05
Changed
Improved diagnostics when every target 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 target accounts (404 / private) are now recorded in the SKIPPED_ACCOUNTS storage record with category not_found / private / error. Previously these failures were logged to console but absent from the storage record.
Removed an unnecessary Actor.exit() on the "no public accounts to process" early-return path so the finalize block (analytics, USER_MESSAGE, SKIPPED_ACCOUNTS) always runs to completion, matching the parent actor's pattern.
[3.1.6] - 2026-05-04
Changed
README expanded with a full output sample, $0.01-per-profile pricing math, three filter recipes (nano-influencer outreach / English-speaking creators / B2B partnership shortlist), an FAQ section, and a comparison table vs the other Instagram scrapers 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 — covers all 7 always-emitted columns + the conditional Email / Phone / Category / Address / Reels / Quality / Post N / contacts-from-posts columns.
Input field help text rewritten throughout — each field now leads with what it does and any prerequisites (e.g. "Free plan ceiling: 50 profiles", "Required field"), so it's clearer what to set before running.
SEO title / description tightened on the Apify Store page (no functional change).
[3.1.5] - 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 minViewToFollowerRatio 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.
[3.1.4] - 2026-05-01
Changed
Documentation: added a "Other Instagram Tools" section to the README, with one-line descriptions of the sibling Instagram actors.
[3.1.3] - 2026-05-01
Maintenance build — no user-facing changes.
[3.1.2] - 2026-04-30
Maintenance build — no user-facing changes.
[3.1.1] - 2026-05-01
Maintenance build — no user-facing changes.
[3.1.0] - 2026-04-30
Added
Demo-input runs (target usernames left at the nike example) are now capped at 10 profiles on any plan, making one-click test runs predictable (~$0.10 max). Custom inputs are unaffected — default Max profiles (1000) is restored as soon as you change the seed username.
TEST RUN banner at start of demo runs explaining how to scrape your own data.
RUN_SUMMARY Key-Value Store record at end of every run — fetch via Actor.getValue('RUN_SUMMARY') for run-level stats (status, profiles found/analyzed, cost, free-tier limits applied).
FREE_LIMITS_APPLIED KVS record when free-plan caps were hit on this run, with stable id codes for programmatic consumption. Empty/omitted on paid runs.
USER_MESSAGE KVS record on a paid user's 1st and 3rd paid run — short onboarding/check-in tips, also embedded in RUN_SUMMARY.
Live status page + JSON status API exposed via the run container (/, /api/status, /api/health). The Apify Console "Live View" tab now shows real-time progress (saved/filtered/private/errors counters, cost, elapsed time).
Key-value store schema groups records into named UI tabs ("Run Summary", "User Message", "Free-tier Limits Applied", "Live Status Page", "Internal Checkpoint State", "Internal Cache") so internal checkpoint/cache keys no longer clutter the run's Storage tab.
Fixed
Run finalization is now bounded with 3-second per-step timeouts plus a 60-second cleanup safety net. Under reduced-permission run contexts these calls were stalling silently and runs could reach the platform timeout instead of exiting cleanly. Completed runs now reliably terminate within ~25 seconds of "Run Complete".
Transient Dataset was not found errors during result writes now retry up to three times with exponential backoff and a forced dataset re-open.
Changed
Language detection switched to cld3-asm (Google's Compact Language Detector v3, compiled to WebAssembly) for improved short-text accuracy on bios. Existing profileLanguage filter behavior is preserved for the major language tags but edge-case classifications may shift.
[3.0] - earlier 2026
Added
Initial public release of Instagram Followers & Following Extractor.
Single-mode actor for extracting followers / following lists from target Instagram profiles.
Filters: minimum/maximum followers, language, account type, verification, business category, contact info type, last post / last reel days, engagement rate, keyword + keyword location.
Free plan: 100 profiles per run.
Pay-per-event pricing: $0.006 per profile analyzed (raised to $0.01 in subsequent build).