Instagram Followers & Following Scraper
Pricing
from $0.57 / 1,000 follower profiles
Instagram Followers & Following Scraper
Get the follower list of any public Instagram account with no login; the following list needs your own cookie. One row per account: username, full name, profile picture, profile URL, and the verified and private flags. Up to 1,000 per profile and list. $0.60 per 1,000 rows.
Pricing
from $0.57 / 1,000 follower profiles
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
2
Bookmarked
47
Total users
19
Monthly active users
4 hours ago
Last modified
Categories
Share
Give it a public Instagram handle and get its follower list back as rows: username, full name, profile picture, profile URL, and whether each account is verified or private. One row per person.
The awkward part, and it is better to know now than on run two: the following list needs your own
Instagram cookie. Followers come back without one. Ask for following or both with no cookie and
you get the followers plus a labelled row telling you the other half was not available.
| Input | Up to 5 public handles, @handles or profile URLs |
| Output | One row per follower or followed account: username, full name, picture, profile URL, verified and private flags |
| Ceiling | 1,000 rows per profile, per list |
| Account needed | None for followers. Your own cookie for following |
| Price | $0.60 per 1,000 rows on the free plan, down to $0.57 on Business. The free plan's $5 a month covers about 8,000 |
🔍 What Instagram Followers & Following Scraper does
It walks the follower list of the handles you name and writes each account it finds as a row. Every row says which of your handles it came from and which list it came from, so you can send several profiles in one run and still tell the results apart afterwards.
Rows arrive in the order Instagram serves them, which is neither alphabetical nor by date. Treat the order as meaningless and sort on your own side.
Nothing to install and no API key. For followers there is nothing to log into either.
A private source account cannot be read at all. Neither can a private account that appears in the list, beyond its name and picture, which is exactly what Instagram shows a stranger.
📋 What data you get from each Instagram follower
| What you get | Field |
|---|---|
| The account's numeric id, handle and display name | id, username, fullName |
| A link to the profile, and its picture | profileUrl, profilePicUrl |
| Whether it is private, and whether it is verified | isPrivate, isVerified |
| Which of your handles it came from | sourceUsername, sourceProfileId |
| Which list it is on | listType |
▶️ How to scrape Instagram followers
- Open Instagram Followers & Following Scraper and click Try for free.
- Put your handles into Instagram profiles, up to five.
- Leave List type on Followers unless you have a cookie to paste.
- Set Maximum rows per profile and list, then click Start.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
Start a run with no profiles at all and you get one labelled sample row showing the output shape. That row is not charged and no credentials are touched.
💰 How much does it cost to scrape Instagram followers?
$0.60 per 1,000 rows. That is the free plan's price; paid plans pay a little less: $0.59 on Starter, $0.58 on Scale and $0.57 on Business. On the free plan, the $5 Apify gives you each month covers about 8,000 rows.
One charge per account written to your dataset. A both run bills each list separately, because it
returns two lists. Sample rows and diagnostic rows are not billed, and a profile whose list comes
back empty is not billed for results.
📥 What you give it
{"profiles": ["nasa"],"listType": "followers","maxItemsPerProfile": 100}
| Field | Default | What it is |
|---|---|---|
profiles | none | nasa, @nasa or a full profile URL. Up to 5 in one run. |
listType | followers | followers, following or both. The last two need a cookie. |
maxItemsPerProfile | 100 | Rows per profile per list, 1 to 1,000. Ask for both at 100 and a profile can return 200. |
sessionCookies | none | Your own Instagram sessionid. Required for following lists, and the run then uses your own account. |
maxRunSeconds | 120 | Wall-clock ceiling for the whole run, 20 to 180. Raise it for a big pull. |
requestTimeoutSeconds | 15 | How long one request may take, 5 to 30. |
maxAttempts | 8 | How many times a refused request is retried before the run gives up on it. 1 to 12. |
proxyConfiguration | Apify default | Leave it alone unless you have servers of your own to use. |
📤 What you get back
A real row from a run on 30 September 2026, with the long picture link cut short:
{"ok": true,"recordType": "relationship_profile","id": "24145128766","username": "genere_action","fullName": "Genereaction","isPrivate": false,"isVerified": false,"profilePicUrl": "https://instagram.fmex44-1.fna.fbcdn.net/v/t51.2885-19/...","sourceUsername": "nasa","sourceProfileId": "528817151","listType": "followers","profileUrl": "https://www.instagram.com/genere_action/"}
| Field | How to read it |
|---|---|
id | Instagram's numeric id for that account. Stable, and the right dedupe key across runs. A username can change, this does not. |
sourceUsername, sourceProfileId | Which of your handles this row came from. |
listType | followers or following, so a both run stays separable. |
isPrivate | true means you can see the name and picture and nothing else. That is all Instagram shows anyone. |
profilePicUrl | A signed link that expires within hours. Download what you want to keep. |
Nothing is guessed. A field Instagram did not send comes back empty rather than filled in.
🧾 Reading the output
Three kinds of row land in your dataset, and only the first kind is billed.
| Row | How to spot it | Billed |
|---|---|---|
| An account | recordType: "relationship_profile" | yes |
| The sample row | _sample: true, and only on a run with no profiles | no |
| A diagnostic | ok: false and an errorCode | no |
Filter on recordType == "relationship_profile" and drop any row with _sample: true, and you have
your list. The code on a diagnostic row says what happened:
| Code | What it means |
|---|---|
BAD_INPUT | Nothing in profiles looked like a handle. |
NOT_FOUND | No such account, or it is private, so the list cannot be opened. |
NO_RESULTS | The account resolved but the list came back empty. |
PROVIDER_UNSUPPORTED | You asked for a following list without a cookie. Add one in sessionCookies. |
PARTIAL | The run delivered some rows and then stopped, usually on the time ceiling. What arrived is complete. |
RATE_LIMITED | Too many requests too close together. Space the runs out. |
PROVIDER_AUTH, SESSION_EXHAUSTED | That list could not be opened this time. If you supplied a cookie, check it is still valid. |
SERVER_ERROR, NETWORK | Instagram was unreachable or answered badly. Re-run it. |
A diagnostic row never bills you for results, and a bad handle does not stop the other handles in your list.
💡 What people use it for
- Checking the overlap between two accounts' followers to see how much of an audience is shared.
- Pulling the verified accounts out of a follower list as a shortlist of people worth approaching.
- Watching who a competitor started following this month, with a cookie and a weekly schedule.
- Measuring how much of a follower list is private accounts, which is a rough tell for bought growth.
From a follower list to the followers who matter, in three steps:
- Run this on a handle with
listTypeset tofollowers. - Copy the
usernamecolumn. - Paste it into
Instagram Profile Scraper and sort on
followersCountto find the followers with an audience of their own.
🚧 What it does not do
- The following list needs your own cookie. Without one you get followers and a labelled row saying the rest was unavailable.
- No private source accounts. If the profile you name is private, there is no list to read.
- No complete list of a large account. 1,000 rows per profile per list is the ceiling, and a million-follower account gives you the first slice of it.
- No cursor between runs. Run it twice and it starts from the top again, returning the same rows.
- The order is Instagram's, not yours. It is not newest first and it is not alphabetical.
- No follower counts, bios, emails or posts. Those live in the profile actor.
- Picture links expire within hours.
- Five profiles per run. A longer list needs splitting.
🧭 Which Instagram scraper do you need?
| If you want | Use |
|---|---|
| Who follows an account, or who it follows | This one |
| Follower counts, bio, email and links for an account | Instagram Profile Scraper |
| Posts and reels from a profile | Instagram Scraper |
| Accounts that mentioned or tagged a handle | Instagram Mentions Scraper |
| What changed on up to 15 accounts since your last run | Instagram Competitor Monitor |
| The followers of a TikTok account | TikTok Followers and Following Scraper |
| The followers of an X account | X (Twitter) Followers Scraper |
❓ Questions people ask
Do I need an Instagram account to scrape followers?
Not for followers. For a following list, yes, your own cookie: in Chrome, F12, then Application,
Cookies, instagram.com, and copy the sessionid value. Use a throwaway account if you would rather
not use your main one.
Can I get all of a big account's followers?
No. The ceiling is 1,000 per profile per list, and there is no way to page past it on a later run.
Why are the rows in that order?
Because that is the order Instagram hands them over. Sort them yourself once they are in your sheet.
Will a wrong handle fail the run?
No. It gets an uncharged row of its own and the rest of your profiles carry on.
Can I call it from code or connect it to an AI assistant?
Yes. The
API tab has
ready-made code for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP
client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/instagram-followers-following-scraper.
Either way the run happens on your Apify account at the same price.
Is scraping Instagram followers legal?
This reads public profiles only, never private accounts or messages. Follower lists are personal data, which GDPR and similar laws cover, so have a lawful reason for collecting them. Apify's write-up on the legality of web scraping is a good starting point, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the handle you used and the run ID. The code on the diagnostic row usually explains it on its own.