Instagram Followers & Following Scraper avatar

Instagram Followers & Following Scraper

Pricing

from $0.57 / 1,000 follower profiles

Go to Apify Store
Instagram Followers & Following Scraper

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

Dami's Studio

Maintained by Community

Actor stats

2

Bookmarked

47

Total users

19

Monthly active users

4 hours ago

Last modified

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.

InputUp to 5 public handles, @handles or profile URLs
OutputOne row per follower or followed account: username, full name, picture, profile URL, verified and private flags
Ceiling1,000 rows per profile, per list
Account neededNone 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 getField
The account's numeric id, handle and display nameid, username, fullName
A link to the profile, and its pictureprofileUrl, profilePicUrl
Whether it is private, and whether it is verifiedisPrivate, isVerified
Which of your handles it came fromsourceUsername, sourceProfileId
Which list it is onlistType

▶️ How to scrape Instagram followers

  1. Open Instagram Followers & Following Scraper and click Try for free.
  2. Put your handles into Instagram profiles, up to five.
  3. Leave List type on Followers unless you have a cookie to paste.
  4. Set Maximum rows per profile and list, then click Start.
  5. 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
}
FieldDefaultWhat it is
profilesnonenasa, @nasa or a full profile URL. Up to 5 in one run.
listTypefollowersfollowers, following or both. The last two need a cookie.
maxItemsPerProfile100Rows per profile per list, 1 to 1,000. Ask for both at 100 and a profile can return 200.
sessionCookiesnoneYour own Instagram sessionid. Required for following lists, and the run then uses your own account.
maxRunSeconds120Wall-clock ceiling for the whole run, 20 to 180. Raise it for a big pull.
requestTimeoutSeconds15How long one request may take, 5 to 30.
maxAttempts8How many times a refused request is retried before the run gives up on it. 1 to 12.
proxyConfigurationApify defaultLeave 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/"
}
FieldHow to read it
idInstagram's numeric id for that account. Stable, and the right dedupe key across runs. A username can change, this does not.
sourceUsername, sourceProfileIdWhich of your handles this row came from.
listTypefollowers or following, so a both run stays separable.
isPrivatetrue means you can see the name and picture and nothing else. That is all Instagram shows anyone.
profilePicUrlA 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.

RowHow to spot itBilled
An accountrecordType: "relationship_profile"yes
The sample row_sample: true, and only on a run with no profilesno
A diagnosticok: false and an errorCodeno

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:

CodeWhat it means
BAD_INPUTNothing in profiles looked like a handle.
NOT_FOUNDNo such account, or it is private, so the list cannot be opened.
NO_RESULTSThe account resolved but the list came back empty.
PROVIDER_UNSUPPORTEDYou asked for a following list without a cookie. Add one in sessionCookies.
PARTIALThe run delivered some rows and then stopped, usually on the time ceiling. What arrived is complete.
RATE_LIMITEDToo many requests too close together. Space the runs out.
PROVIDER_AUTH, SESSION_EXHAUSTEDThat list could not be opened this time. If you supplied a cookie, check it is still valid.
SERVER_ERROR, NETWORKInstagram 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:

  1. Run this on a handle with listType set to followers.
  2. Copy the username column.
  3. Paste it into Instagram Profile Scraper and sort on followersCount to 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 wantUse
Who follows an account, or who it followsThis one
Follower counts, bio, email and links for an accountInstagram Profile Scraper
Posts and reels from a profileInstagram Scraper
Accounts that mentioned or tagged a handleInstagram Mentions Scraper
What changed on up to 15 accounts since your last runInstagram Competitor Monitor
The followers of a TikTok accountTikTok Followers and Following Scraper
The followers of an X accountX (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.

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.