All posts

Instagram Follower Count API: Get and Track Followers in Code

November 9, 2026

Short answer

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

RouteWhose countNeedsLimits
Graph API, your accountYour own professional accountMeta app, professional account, tokenPlatform rate limits
Business DiscoveryOther professional accountsSame, plus App Review to serve other usersNo personal or age-gated accounts
Account insightsYour own account, with daily follows and unfollowsSameNot returned under 100 followers; data up to 48 hours late
instaloaderAny public accountPython, ideally a loginYour IP, your account, your upkeep
Public data APIAny public accountAn API keyPer 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

DayFollowersNet changeNote
148,210
248,290+80Typical day
348,365+75Typical day
451,940+3,575About 45 times the median: check for a viral reel, a giveaway or bought followers
551,120-820Giveaway followers leaving, or Instagram removing fake accounts

Illustrative numbers. Rules that keep the series honest:

  1. Flag spikes above 5 times the 30-day median daily change, then look at that day's posts.
  2. Use 7-day percent growth to compare accounts of different sizes. +500 means a lot at 10,000 followers and nothing at 10 million.
  3. Never fill gaps with zero. A missed day is unknown, not "no change". Interpolate or leave it empty.
  4. 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.

100 free credits, no card. Credits never expire.

Get API key