Instagram Follower Count API: Get and Track Followers in Code
An Instagram follower count API returns an account's followers as a number in JSON. Meta's official option is Business Discovery in the Instagram Graph API, which returns followers_count and media_count for other professional accounts, but not personal ones, using your own professional account's token. For any public account, including personal ones, a public data API such as ScrapeIO's Instagram profile endpoint returns followers for 1 credit a call.
Getting one follower count is easy. Getting the right one for many accounts, every day, without gaps, takes a few decisions. This guide compares the official and public routes, gives working code for both, and shows how to store daily snapshots and turn them into growth numbers. If you need other profile data too, see Instagram public data without the Graph API.
Ways to get an Instagram follower count
| Route | Whose count | Needs | Limits |
|---|---|---|---|
| Graph API, your account | Your own professional account | Meta app, professional account, token | Platform rate limits |
| Business Discovery | Other professional accounts | Same, plus App Review to serve other users | No personal or age-gated accounts |
| Account insights | Your own account, with daily follows and unfollows | Same | Not returned under 100 followers; data up to 48 hours late |
| instaloader | Any public account | Python, ideally a login | Your IP, your account, your upkeep |
| Public data API | Any public account | An API key | Per call cost |
Business Discovery: the official API for other accounts
Business Discovery lets your professional account look up another professional account by username and returns "basic metadata and metrics" such as followers_count and media_count. Meta's docs add that data about age-gated professional accounts is not returned. Personal accounts are not covered at all.
import requests
GRAPH = "https://graph.facebook.com/v23.0/" # use the current Graph API version
MY_IG_ID = "YOUR_IG_USER_ID"
TOKEN = "YOUR_ACCESS_TOKEN"
def followers_bd(username):
fields = "business_discovery.username(" + username + "){followers_count,media_count}"
r = requests.get(GRAPH + MY_IG_ID, params={"fields": fields, "access_token": TOKEN},
timeout=30).json()
bd = r.get("business_discovery")
return bd["followers_count"] if bd else None
print(followers_bd("bluebottle"))
Business Discovery counts against Meta's platform rate limits. For Instagram, Meta's rate limit page gives "Calls within 24 hours = 4800 * Number of Impressions", where impressions are how often your account's content appeared on screens in the last 24 hours. A quiet account gets a small budget.
Your own account: count, follows and unfollows
For your own account, insights add what the raw count can't show. Meta's account insights reference lists follows_and_unfollows with period day, defined as the number of accounts that followed you and that unfollowed you or left Instagram. It and follower_demographics are "Not returned if the IG User has less than 100 followers", demographics return only the top 45 values, and data "may be delayed up to 48 hours". Net change from snapshots tells you growth; follows and unfollows tell you churn.
instaloader: free, for small jobs
import instaloader
L = instaloader.Instaloader()
p = instaloader.Profile.from_username(L.context, "natgeo")
print(p.followers, p.followees, p.mediacount)
Since version 4.16, instaloader's docs say mediacount returns None "when not logged in", so post counts need a login, which puts your own Instagram account behind every request. Fine for checking ten accounts by hand. Risky for a daily job across hundreds.
A public data API: any public account
curl "https://scrapeio.com/v1/instagram/profile?handle=natgeo" \
-H "x-api-key: YOUR_KEY"
The answer includes followers, following, posts, verified and private. It works for personal and professional accounts alike. If you only have a numeric user id, the basic profile endpoint takes userId instead.
Track follower count over time
No Instagram API returns another account's follower history. You build it by saving one snapshot per account per day:
import sqlite3, datetime, requests
KEY = "YOUR_KEY"
HANDLES = ["natgeo", "nasa", "nike"]
today = datetime.date.today().isoformat()
db = sqlite3.connect("followers.db")
db.execute("CREATE TABLE IF NOT EXISTS snap (handle TEXT, day TEXT, followers INTEGER, PRIMARY KEY (handle, day))")
for h in HANDLES:
r = requests.get("https://scrapeio.com/v1/instagram/profile", params={"handle": h},
headers={"x-api-key": KEY}, timeout=60).json()
if r.get("success") and r["data"]["followers"] is not None:
db.execute("INSERT OR REPLACE INTO snap VALUES (?, ?, ?)", (h, today, r["data"]["followers"]))
db.commit()
Run it once a day from cron at the same hour. Then compute growth in SQL:
SELECT handle, day, followers,
followers - LAG(followers) OVER (PARTITION BY handle ORDER BY day) AS net_change,
ROUND(100.0 * (followers - LAG(followers, 7) OVER (PARTITION BY handle ORDER BY day))
/ LAG(followers, 7) OVER (PARTITION BY handle ORDER BY day), 2) AS pct_7d
FROM snap ORDER BY handle, day;
Reading the numbers: a worked example
| Day | Followers | Net change | Note |
|---|---|---|---|
| 1 | 48,210 | ||
| 2 | 48,290 | +80 | Typical day |
| 3 | 48,365 | +75 | Typical day |
| 4 | 51,940 | +3,575 | About 45 times the median: check for a viral reel, a giveaway or bought followers |
| 5 | 51,120 | -820 | Giveaway followers leaving, or Instagram removing fake accounts |
Illustrative numbers. Rules that keep the series honest:
- Flag spikes above 5 times the 30-day median daily change, then look at that day's posts.
- Use 7-day percent growth to compare accounts of different sizes. +500 means a lot at 10,000 followers and nothing at 10 million.
- Never fill gaps with zero. A missed day is unknown, not "no change". Interpolate or leave it empty.
- Store private and not-found results as events. An account that goes private stops your series for a reason.
What daily tracking costs
500 accounts once a day is about 15,000 calls a month. At $1.88 per 1,000 credits that is $28.20 a month; at the $497 pack rate of $0.99 per 1,000 it is $14.85. Not-found and private answers are free, and credits never expire, so a paused tracker costs nothing. For creator vetting workflows built on these snapshots, see the creator vetting playbook.
Doing it with ScrapeIO
The Instagram profile API returns followers for any public account, and the Instagram basic profile API does the same by numeric user id, each for 1 credit. Pair them with the user posts API to see what caused a spike. The Instagram MCP server lets an AI agent run the same checks.
FAQ
Can I get an Instagram follower count without the Graph API?
Yes. instaloader reads public profiles from Python, and public data APIs return the count by handle with no Meta app.
Can the Graph API get another account's follower count?
Yes, through Business Discovery, if the other account is a professional account and not age-gated. Personal accounts are not available.
Does the Instagram API give a list of followers?
No. The official API returns counts and, for your own account, follows, unfollows and demographics, but not the list of who follows you.
Why is follower data missing from insights?
Meta does not return follows_and_unfollows or demographics for accounts under 100 followers, and insights can lag by up to 48 hours.
How often should I check follower counts?
Once a day at a fixed hour is enough for growth tracking. Hourly checks only help during a campaign or a launch.
Sources
Checked on 9 November 2026 from each vendor's own pages. Prices and limits change; follow the links before you decide.
- https://developers.facebook.com/docs/instagram-platform/instagram-api-with-facebook-login/business-discovery
- https://developers.facebook.com/docs/instagram-platform/api-reference/instagram-user/insights
- https://developers.facebook.com/docs/graph-api/overview/rate-limiting/
- https://instaloader.github.io/module/structures.html
100 free credits, no card. Credits never expire.
Get API key