Instagram Following Scraper
DeprecatedPricing
from $1.50 / 1,000 profile scrapeds
Instagram Following Scraper
DeprecatedExport the following and followers lists of an Instagram profile as structured JSON, with username, full name, verified and private flags, and profile URL for each account.
Pricing
from $1.50 / 1,000 profile scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
79
Total users
6
Monthly active users
18 days ago
Last modified
Categories
Share
What is Instagram Following Scraper?
Instagram Following Scraper exports the following and followers list of any Instagram profile as structured JSON. It accepts Instagram usernames or profile URLs and returns one record per connected account. Each record includes the source profile, list type, username, full name, verified and private flags, profile URL, and scrape timestamp. Profile enrichment (bio, email, counts) is not available on the current data route, so records contain the connection identities listed above. The Actor is available on Apify and usable through Apify MCP.
Best fit and connected workflows
Use this Actor when your starting point is an Instagram profile and you want a clean list of connected accounts for analysis, routing, or downstream enrichment.
Common workflow fits include:
- Audience mapping from a brand, creator, or competitor profile.
- Lead lists of accounts a brand or creator follows, ready for a separate profile-enrichment step.
- Private vs. verified account review in a follower base.
- Social graph expansion before sending profile records to a downstream Instagram tool.
When you want reactions, comments, or review data for a profile discovered here, pass that profile into Instagram Comments Scraper. That workflow starts from a returned Instagram account and continues into engagement data for the same profile.
Practical scenario
A growth analyst starts with nasa and wants the accounts NASA follows. They enter the username, keep listType on following, and set a result cap that matches the size of the review. The Actor returns records with username, fullName, isVerified, isPrivate, profileUrl, and scrapedAt. The analyst sees that one returned account is verified and has a clear profile URL, then opens that profile in a separate workflow or sends it to a comments review step.
Input
| Field | Type | Description |
|---|---|---|
usernames | array of strings | Instagram usernames or profile URLs to scrape, such as nasa or https://www.instagram.com/natgeo/. Accepts bare handles, @handles, and full profile URLs. Targets user profiles only. |
listType | string | Which list to export: following, followers, or both. Defaults to following. |
maxResults | integer | Maximum profiles returned per target per list. Used as a hard cost cap. |
enrichProfiles | boolean | Kept for compatibility. Enrichment is not available on the current data route: records stay identity-only and no enrichment event is charged. |
proxyConfiguration | object | Proxy settings for Instagram requests. The default uses Apify Residential proxy. |
Example input
{"usernames": ["nasa","https://www.instagram.com/natgeo/"],"listType": "following","maxResults": 100,"enrichProfiles": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Output
Each dataset item represents one account from the selected following or followers list.
| Field | Type | Description |
|---|---|---|
sourceUsername | string | The Instagram profile whose list this record came from. |
listType | string | following or followers. |
username | string | Handle of the connected account. |
fullName | string | Display name, if set. |
userId | string | Instagram numeric user ID. |
isPrivate | boolean | Whether the account is private. |
isVerified | boolean | Whether the account has a verified badge. |
profilePicUrl | string | Profile picture URL. |
profileUrl | string | Canonical Instagram profile URL. |
scrapedAt | string | ISO 8601 timestamp of when the record was scraped. |
biography | string | Profile bio text. Only filled when enrichment is available; currently absent. |
email | string | Business email or an email parsed from bio. Only filled when enrichment is available; currently absent. |
phone | string | Public business phone. Only filled when enrichment is available; currently absent. |
externalUrl | string | Linked website. Only filled when enrichment is available; currently absent. |
followerCount | integer | Follower count. Only filled when enrichment is available; currently absent. |
followingCount | integer | Following count. Only filled when enrichment is available; currently absent. |
mediaCount | integer | Post count. Only filled when enrichment is available; currently absent. |
category | string | Account category. Only filled when enrichment is available; currently absent. |
isBusiness | boolean | Business or professional account flag. Only filled when enrichment is available; currently absent. |
Example output record
{"sourceUsername": "nasa","listType": "following","username": "spacex","fullName": "SpaceX","userId": "12345678","isPrivate": false,"isVerified": true,"profilePicUrl": "https://instagram.fxxx.cdn.com/v/pic.jpg","profileUrl": "https://www.instagram.com/spacex/","scrapedAt": "2026-06-02T07:24:00.000Z"}
How it works
This Actor collects the selected list through a managed data route for public Instagram follower graphs, without your login or cookies. It requests up to the maxResults cap for each target profile and list type, validates each returned account, and writes one dataset record per profile. If the route stops early after returning some profiles, those profiles are kept and the run is reported as PARTIAL; a private account or an empty list is reported as VALID_EMPTY with no profile charges; if the route returns nothing at all, the run fails honestly.
Pricing
Startup billing and empty runs
The apify-actor-start event is charged per startup unit: Apify charges one startup unit per GB of allocated memory, with a minimum of one unit, so a 2 GB run incurs two units. This startup charge still applies when input is invalid, no results are found, or an upstream request fails. Statements about free, unbilled, or skipped results refer only to the corresponding result event; they do not waive the startup charge. Apify platform usage is charged separately according to the resources each run uses and your plan. Check the live Pricing tab for current events, tiers, and rates. Result limits cap result events, not the entire run cost.
This Actor uses Pay per event pricing. The primary event is Profile scraped, and Apify platform usage is charged separately. Open the live Pricing tab in Apify Console for the current pricing details.
A simple example: if a run returns one hundred profiles, billing is based on one hundred Profile scraped events plus the startup event, plus the relevant Apify platform usage for the run. No enrichment events are charged on the current data route.
Use with AI agents (MCP)
This Actor is exposed through Apify MCP and can be called by AI agents that need structured Instagram connection lists. The tool identity is khadinakbar/instagram-following-scraper.
Use it when an agent needs a source Instagram username or profile URL and should receive normalized records for following or followers connections. The output provenance is the dataset items produced by the run, so each record keeps the source profile and scrape timestamp.
Fetch the following list for
nasa, return verified and private flags, and includeprofileUrlandscrapedAt.
Output interpretation is straightforward: each item is one connected profile. listType tells you which relationship was exported, and sourceUsername preserves the original source profile. Pagination is handled by the Actor, and maxResults acts as a hard cap on the number of returned profiles per source and per list. Cost follows the same cap because billing is based on returned profile events. If you work with a larger profile set, the dataset is still the main place to read the full result list back.
Apify API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const run = await client.actor('khadinakbar/instagram-following-scraper').call({usernames: ['nasa'],listType: 'following',maxResults: 10,enrichProfiles: false,});const dataset = client.dataset(run.defaultDatasetId);const { items } = await dataset.listItems();console.log('Dataset items:', items);
Best results and outcome guidance
Start with a small maxResults value when you are validating a profile, list type, or enrichment setting. Use following for accounts a profile follows, followers for accounts that follow the profile, and both when you want both directions in one run. For lead-style records with bio or email, pass the returned usernames to a separate Instagram profile tool. Keep the proxy configuration on the default residential setting unless your Apify environment already provides a residential provider.
Continue the workflow
- Then use Instagram Hashtag Posts Scraper for AI Agents to extend Instagram Following Scraper research with a complementary discovery contract.
- Then use Instagram Keyword Search Scraper for Profiles to extend Instagram Following Scraper research with a complementary discovery contract.
Design note
I found that the dataset contract always requires sourceUsername, listType, username, profileUrl, and scrapedAt, which makes every record traceable back to the original Instagram profile and scrape time.
FAQ
What input can I use for usernames?
You can provide bare handles, @handles, or full Instagram profile URLs. The input schema is scoped to user profiles, which keeps the workflow centered on account connection lists.
When should I use following, followers, or both?
Use following to export accounts the profile follows, followers to export accounts that follow the profile, and both when you want both relationships tagged in the output.
What does enrichProfiles add?
On the current data route it adds nothing: records stay identity-only (username, full name, user ID, verified and private flags, profile URL) and no enrichment event is charged. The option is kept so saved inputs keep working.
How does the result cap work?
maxResults sets the maximum number of returned profiles per target profile per list. For both, the cap applies to following and followers separately.
Can I use this Actor through Apify MCP?
Yes. The Actor is MCP-ready and usable through Apify MCP as khadinakbar/instagram-following-scraper.
Which Actor is a natural next step after this one?
If you want comments for a returned Instagram profile, use Instagram Comments Scraper. It fits when you have a profile from this Actor and want engagement context for that same account.
Responsible use
Use the output in ways that respect Instagram's terms, applicable privacy and data-protection laws, and the context in which the profiles were collected. Review your own compliance requirements before storing, sharing, or enriching personal data.