GET/v1/instagram/channel-stats1 credit per profile

Instagram Profile API

Give it an Instagram handle, get the account's follower count, following count, post count, bio, verification badge and avatar URL back as JSON. It reads the public profile page — the same thing you see logged out — so there is no Graph API app review and no Business account requirement. 1 credit per profile.

Request

parametertypedescription
handlestring, requiredThe Instagram username, without the @.
freshbooleanSkip the stored copy and read live, at the same price.
fieldsstringComma-separated field paths to keep.
formatjsonJSON envelope.

Billing and freshness

1 credit per profile. Failed calls are never charged, and empty results are free up to 25 a day. Stored copies are refreshed every 12 hours.

What you get back

One object per handle. The three counters (followers, following, posts) are the numbers Instagram prints at the top of a profile, plus the profile text: display name, bio, verified flag, avatar image URL, canonical profile link, and whether the account is set to private.

This is account-level data only. There is nothing here about individual posts — no likes, no captions, no reach. If you want the grid, that is a separate call to the Instagram Channel Posts API, and this endpoint is usually the cheap first step that tells you whether the grid is worth pulling at all.

Private accounts still return a profile. Instagram publishes the header of a private account to logged-out visitors, so you get handle, name, bio, avatar and the counters, with `is_private` set to true. What you do not get is anything behind the wall, and no other endpoint on this API will get it either.

GET /v1/instagram/channel-stats
curl "https://api.instadata.dev/v1/instagram/channel-stats?handle=nasa" \
  -H "Authorization: Bearer ik_live_..."
Example response
{
  "data": {
    "platform": "instagram",
    "handle": "instagram",
    "name": "Example Creator",
    "bio": "Tutorials and behind-the-scenes. New video every Tuesday.",
    "verified": true,
    "metrics": {
      "followers": 2450318,
      "following": 132,
      "posts": 842
    }
  },
  "request_id": "req_01JZX4M8Q2TE9W"
}

Fields

fieldtypenote
handlestringThe username without the @. Always present — the call fails rather than returning a profile with no handle.
namestring|nullThe display name from the profile header. Null when the account never set one.
followersnumber|nullPublic follower count. Instagram rounds this in its own UI above roughly 10,000.
followingnumber|nullHow many accounts this account follows. A useful ratio input when screening for follow-for-follow inflation.
postsnumber|nullTotal posts on the grid. Counts carousels as one, and does not include stories or archived posts.
biostring|nullThe biography text as written, newlines and emoji included. Null when the bio is empty.
verifiedbooleanTrue when the account carries the blue badge, false otherwise. Never null — if the page data does not carry the flag we return false, so absence and a genuine unverified account look the same.
avatarstring|nullURL of the profile picture, highest resolution available. The link is a CDN URL that expires — download the image if you need to keep it.
urlstringCanonical https://www.instagram.com/handle/ profile link. Constructed from the handle when the page does not supply one.
is_privatebooleanTrue for private accounts, false otherwise. Never null — branch on `is_private === true`, not on a null check, which will never fire. Check it before spending credits on the posts or reels endpoints for the same handle.

Reach for it when

  • Screening a list of creators before you pay to pull their content — one 1-credit call tells you follower size, verification and whether the account is private.
  • Tracking follower growth for your own accounts or a competitor set, by storing the counters with a date and diffing daily or weekly.
  • Enriching a CRM or influencer database where you already hold handles and need audience size attached to each record.
  • Validating that a handle a user typed into your product actually exists and is public, before you build the rest of the workflow on top of it.
  • Computing a rough follower-to-following ratio as one signal among several when auditing an account for bought reach.

Not the right call when

  • You want the account's actual posts, captions and like counts — use the Instagram Channel Posts API, or the Instagram Channel Reels API for video.
  • You have a post URL rather than a handle and want that post's numbers — that is the Instagram Stats API.
  • You need engagement rate. This endpoint returns no per-post data, so you cannot derive one from it. Pull recent posts and divide the average engagement by the follower count you get here.
  • You are looking for a creator you cannot name yet. This takes an exact handle, not a search term.

Things to know

Follower counts are rounded, and they lag

Instagram displays follower counts to logged-out visitors with rounding once an account gets large, and the figure it publishes is not updated the instant someone follows. Treat the number as the platform's public figure at call time, accurate enough for trends and segmentation, not accurate enough for a contractual payout calculation.

That rounding also means small day-to-day changes on a big account can vanish entirely. If you are charting growth for an account with hundreds of thousands of followers, weekly sampling produces a cleaner series than daily.

This endpoint is cached in hours, not minutes

Profile data sits in the slow cache class because the underlying numbers barely move within a day. Repeat calls for the same handle inside the window return in milliseconds and set x-cache: hit. A cache hit is billed at the same 1 credit.

Pass fresh=true when you specifically need to bypass the cache — a follower-count monitor that runs once a day, for instance, should use it, otherwise the second run of the day may hand you back the first run's answer.

The avatar URL will stop working

Instagram serves profile pictures from a CDN with signed, expiring links. The URL is valid when we return it and will break some time later, often within days. If the image matters to your product, fetch it during the same job and store your own copy rather than hotlinking the value.

Handles change; ids do not exist here

Instagram lets people rename accounts, and the old handle becomes free for someone else to claim. This response is keyed on the handle, so a stored handle can silently start resolving to a different person. If you keep a long-lived database of creators, re-verify handles periodically instead of assuming they are permanent identifiers.

Bios contain personal data

People put email addresses, phone numbers and other contact details in their Instagram bio. That text arrives verbatim in the `bio` field. It is public, but public is not the same as fair game under GDPR or CCPA — if you store or process it, that is your processing, and your obligations. Strip what you do not need.

Questions

How do I get an Instagram follower count without the Graph API?

Send a GET to /v1/instagram/channel-stats with the handle and your API key. You get followers, following and post count as JSON. Instagram's Graph API only reports on accounts you own or manage, needs a linked Business or Creator account, and requires app review before it returns anything in production. This endpoint reads the public profile page instead, so any public handle works immediately.

Can I check the follower count of an account that is not mine?

Yes, as long as it is public. The endpoint reads the same profile page a logged-out browser sees, so any public account is reachable regardless of who owns it. That is the whole reason it exists — competitor tracking and influencer vetting are impossible through Instagram's own API, which is scoped to accounts you already control.

What does it return for a private Instagram account?

A normal response with is_private set to true. Instagram shows the header of a private profile publicly, so the handle, display name, bio, avatar and the three counters all come back. Nothing behind the privacy wall is available — no posts, no reels, no comments — and no other endpoint on this API can reach them either.

How much does one Instagram profile lookup cost?

1 credit per handle. Credits are $0.005 each on the monthly plan and $0.0045 on annual, so a lookup is about half a cent and $5 covers roughly 1,000 profiles. Cached responses cost the same as fresh ones. Calls that fail are not charged, so a handle that does not exist costs you nothing.

Can I look up several Instagram handles in one call?

One handle per call. Fire the requests concurrently — each is independent and the service is built for parallel traffic. For a screening job over a few thousand handles, run a worker pool of ten or twenty and let the slow cache absorb any duplicates in your list.

How do I calculate Instagram engagement rate from this?

You cannot from this endpoint alone; it has no post data. The usual method is two calls: take the follower count from here, then pull the last twelve posts from the Instagram Channel Posts API, average their likes and comments, and divide that average by followers. Quote the window you used — a rate over twelve posts and a rate over ninety days are different numbers.

Is the follower number exactly what Instagram shows?

It is what Instagram publishes to logged-out visitors, which is rounded on larger accounts and updated on Instagram's own schedule rather than in real time. Good enough to segment creators by size or chart growth over weeks. Not good enough to settle a payment that depends on an exact threshold — use the account owner's own analytics for that.

Related

GET /v1/instagram/profile-fullGET /v1/instagram/profile-aboutGET /v1/instagram/similarGET /v1/instagram/profile-search The whole sheet