How do I get an Instagram follower count without logging in?
Call the Openhandle profile endpoint with the username. One GET request returns the follower count as an integer in metrics.followers. You need an API key, not an Instagram login, a Meta app, or an app review.
This works for any public account. A private account returns a clear PROFILE_PRIVATE error, not a guess. The count is the exact number, not the rounded "48.2K" the profile page shows.
Checked September 2026 · request and response run against the API · no affiliate links
curl "https://api.openhandle.dev/v1/instagram/profiles/@northstar_forge_test" \
-H "Authorization: Bearer $OPENHANDLE_API_KEY"import { OpenHandle } from '@openhandle/sdk';
const openhandle = new OpenHandle({ apiKey: process.env.OPENHANDLE_API_KEY! });
const response = await openhandle.instagram.profile('northstar_forge_test').get();
console.log(response.data.metrics.followers); // 48291{
"platform": "instagram",
"resource": "profile",
"capturedAt": "2026-09-18T09:14:02Z",
"source": "live",
"data": {
"id": "910000000001",
"handle": "northstar_forge_test",
"displayName": "Northstar Forge",
"isVerified": true,
"isPrivate": false,
"metrics": {
"followers": 48291,
"following": 318,
"posts": 5
}
}
}Trimmed to the fields this question needs. The full profile has bio, links, avatar, business fields, and more. The example uses a Test account, so you can run it on a free Test key before you touch a real profile.
Why the official Instagram API does not do this
The Instagram Graph API only answers about accounts that authorized your app. It needs a business or creator account you manage, a Facebook app, and an app review. It cannot look up a public account you do not control. The Basic Display API, which could read your own profile, was retired in December 2024. There is no official way to read a stranger's follower count.
What people try instead
- —Loading the profile page. Instagram pushes logged-out visitors to a login wall after a few page views. The number on the page is rounded. Scripts that do this break every few weeks and get the IP blocked.
- —Pooled accounts and proxies. A scraper logs in with throwaway accounts. Those accounts get banned in batches, often during the campaign you are tracking.
- —A public data API. Openhandle reads the public profile when you ask and answers in one shape. Instagram changes are absorbed on our side. You pay per answered request.
Track the count over time
The API returns the count at the moment you ask. It does not keep history for you. To track growth, store capturedAt and metrics.followers on each call and read on a schedule. Store the id from the response as well. Handles change, IDs do not, so a renamed account keeps its history.
Add ?freshness=24h when a day-old number is fine. A cache hit costs $0.0005 instead of $0.0025. Use freshness=live when you need the number as of right now, for a payout or a contract check.
When this does not work
These answers are definitive. Store them, do not retry them.
| Situation | Status | Code |
|---|---|---|
| The account is private | 403 | PROFILE_PRIVATE |
| The account is deleted, banned, or never existed | 404 | PROFILE_NOT_FOUND |
| The identifier is malformed | 400 | INVALID_IDENTIFIER |
{
"error": {
"code": "PROFILE_PRIVATE",
"message": "This profile is private.",
"requestId": "req_01j8…",
"retryable": false
}
}Branch on code, never on message. Private and not-found answers bill like any answered request. Provider errors and our errors are never billed. Every new workspace starts with 100 free live requests, no card needed.
Read next
More Instagram questions
Send your agent ahead.
Paste the prompt into your agent and it sets everything up. Or come yourself, it takes five minutes.