Instagram Followers & Following Scraper
Get a public Instagram account's followers and following list. Username, full name, profile picture, profile URL, verified and private flags. No login.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
profiles,listType,maxItemsPerProfile(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.0006 per follower profile = $0.6 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Follower profile returned | Charged once per follower profile actually delivered. Sample rows, unresolvable profiles, unsupported list types and early stops are never charged. | $0.0006 |
Pay-per-event pricing: you are billed per result, not per subscription. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-19, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
profiles | Public Instagram usernames, @handles, or profile URLs. Empty input emits one labeled, uncharged sample row without using credentials or proxy. | array |
listType | Extract followers, following, or both relationship lists. | string |
maxItemsPerProfile | Maximum relationship profiles returned for each source profile and selected list. | integer |
requestTimeoutSeconds | Timeout for each Instagram web API request. | integer |
maxRunSeconds | Hard wall-clock bound for profile resolution and relationship pagination. | integer |
sessionCookies | Optional. Add your own Instagram account cookie here and the run uses your account. In Chrome: F12 -> Application -> Cookies -> https://www.instagram.com, then copy the sessionid value. Pasting the whole cookie string works too. Cookie values are never logged or written to the output. Prefer a throwaway account over your main one. Use an account you own and are authorised to automate. | array |
maxAttempts | Bounded retries across rotating configured accounts and sticky proxy sessions. | integer |
What you get
A structured dataset — each result includes fields like:
usernamefullNamelistTypesourceUsernameisPrivateisVerifiedprofileUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
12 ready-to-run use cases
Instagram Prospecting: Mine a Tool's Follower List
Followers of a marketing tool are usually the people who buy marketing help. Usernames and display names only, so qualifying is still manual.
Compare Instagram Followers Between Two Brands
Two accounts in one run, every row tagged with the account it came from, so a join on username gives the overlap. Ships pointed at @adidas and @puma.
Instagram Competitor Analysis: Export Their Followers
A competitor's follower list as rows: username, display name, profile picture, verified and private flags. Runs on @nike out of the box.
Download Instagram Followers List for a Shop
An e-commerce brand's followers as JSON or CSV: username, display name, picture URL, verified and private flags. Set up on @shopify to start.
Instagram Fitness Influencers: Export Their Followers
The audience behind a coaching account, row per follower. Private accounts are flagged so you can drop the ones you will never reach anyway.
Instagram Following List Export for Any Account
The other direction: who an account follows, not who follows it. Same row shape either way, with a listType field naming which list it came from.
Instagram Influencer Audit: Read the Follower List
Pull the follower list before you sign a deal and look at it yourself. Verified and private flags per account. No follower counts, no engagement rates.
Instagram for Local Business: Pull a Follower List
Followers of a nearby shop or cafe, which is the closest thing to a geo-filtered list here. Rows carry no location field, so filtering is on you.
Instagram Lookalike Audience From a Competitor
Export a rival's follower usernames as the seed for a custom audience. What you get is handles - matching them to ad accounts is a separate job.
Find Micro Influencers Following a Niche Account
Trawl a niche account's followers for smaller creators. The verified flag is here; follower counts are not, so size them in a second pass.
Instagram Lead Generation From a Niche Account
Followers of an account your buyers already follow, as usernames and display names. These are handles, not email addresses - no contact data here.
Scrape Instagram Followers of a SaaS Account
The follower list of a B2B account, one row per profile with username, name and the verified flag. Bios and follower counts are not part of it.
Related tools in Developer & Research Tools
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
GitHub Scraper
Search GitHub repos and users: stars, forks, language, topics, licence, plus user bio, company and followers. No token needed. $0.90 per 1,000 rows.
Stack Overflow / Stack Exchange Scraper
Search Stack Overflow and Stack Exchange by keyword or tag. Score, answer count, views, reputation and body text. $2 per 1,000 questions.
Package Registry Scraper (npm + PyPI)
Get npm and PyPI package metadata as JSON. Version, license, author, repo, keywords and npm monthly downloads. $2 per 1,000 packages.
arXiv Scraper
Search arXiv papers by title, author, abstract or category. Get full abstracts, authors, categories, DOI, dates and PDF links. $2 per 1,000 papers.
OpenAlex Scholarly Works Scraper
Search 250M+ OpenAlex papers with no API key. Get titles, authors, venue, year, citations, DOI, OA links and full abstracts. $2.00 per 1,000 papers.
Crossref Scholarly Works Scraper
Search 150M+ papers on Crossref: DOI, title, authors, journal, publisher, date, citations and abstract. No API key. $1.00 per 1,000 works.
Where this tool sits
- Categories
- Developer & Research Tools
Instagram Followers & Following Scraper: who follows a public account
Give it a public Instagram handle and get its follower list back as rows. Username, full name, profile picture, profile URL, and whether that 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 |
| 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, flat on every plan |
🔍 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 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. Put servers of your own in proxyUrls inside it if you have them. |
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.
📤 What you get back
A real row from a real run, with the long picture link cut short:
{
"ok": true,
"recordType": "relationship_profile",
"id": "27736785273",
"username": "rashiniesansadi",
"fullName": "Rashinie Sansadi Wijesooriya",
"isPrivate": true,
"isVerified": false,
"profilePicUrl": "https://scontent-iad6-1.cdninstagram.com/v/t51.82787-19/...",
"sourceUsername": "nasa",
"sourceProfileId": "528817151",
"listType": "followers",
"profileUrl": "https://www.instagram.com/rashiniesansadi/"
}
| Field | What it is |
|---|---|
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 a code | no |
Filter on recordType == "relationship_profile" 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.
▶️ How to run it
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.
💰 How much does it cost?
$0.60 per 1,000 rows. Flat on every Apify plan, no volume tiers.
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 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.
🚧 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 |
| A weekly snapshot of rival accounts | Instagram Competitor Monitor |
❓ Questions people ask
Do I need an Instagram account? Not for followers. For a following list, yes, your own cookie.
Where do I find the 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 100 million of an 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.
Is scraping Instagram 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.