100 free credits on signup · no card required

Instagram Stats API

One URL in. Clean JSON out.

Give it the URL of a public Instagram post, Reel or carousel and get the engagement numbers back as JSON. 1 credit per post, no Graph API app review, no Business account linkage, no headless browser to keep alive. The call reads the same public page you would open yourself.

Credits 1 / post
Input ?url=
Cache 15m–7d
GET · BEARER
Request composing…
Fresh when it matters
age-aware cache
Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<article class="_aagv _ab8w x1n2onr6" role="presentation"><div class="x9f619 xjbqb8w x78zum5"><div class="_aagu"><img alt="Photo by @creator" class="x5yr21d xu96u03" src="https://scontent.cdninstagram.com/v/t51...blob"/></div><section class="x6s0dn4 x78zum5 xdt5ytf"><span class="x1lliihq _aacl _aaco">55,210 likes</span><div class="_a9zs"><span dir="auto">Three settings you should change today</span></div><span class="_aacl _aaco x1i10hfl">View all 981 comments</span></section><time class="_aaqe" datetime="2026-07-03T12:00:00.000Z">18h</time></div><script type="application/json" data-sjs>{"require":[["ScheduledServerJS","handle",null,[{"__bbox"...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 13 typed fields
{
"data": {
"platform": "instagram",
"entity_id": "C8xQvZ2sVAb",
"url": "https://www.instagram.com/reel/C8xQvZ2sVAb/",
"author": {
"handle": "instagram",
"name": "Example Creator"
},
"posted_at": "2026-06-30T14:05:00Z",
"metrics": {
"views": 1204593,
"likes": 88410,
"comments": 2314,
"shares": 10092
}
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 One object per post

One object per post. Likes and comments, the caption and its hashtags, the media type, when it went up, who posted it, and a thumbnail URL. That is enough to build a content dashboard, back-fill a reporting table, or score a creator's recent output without touching Meta's developer console.

02 Nulls where Instagram stays quiet

Instagram is stingier with public numbers than most platforms, and the response reflects that honestly. View counts only exist for video — Reels and video posts carry a play count, a photo or carousel does not. Share counts are not published anywhere on a public post page, so the `shares` key is always null. It stays in the response so the shape is stable across platforms, not because we have a number hiding behind it.

03 Shortcode is the primary key

The identifier we return is the shortcode from the URL (the `ABC123` in /p/ABC123/), not Instagram's internal media id. It is stable for the life of the post and it round-trips into a URL, which makes it a better primary key for most databases.

Field explorer Pick a key to see its type and the caveats.
number|null Nullable Sortable metric
views

Play count. Present for Reels and video posts; null for photos and most carousels, because Instagram publishes no view figure for them.

{
"id": "…",
"url": "https://www.instagram.com/reel/C8xQvZ2sVAb/",
"type": "…",
"caption": "…",
"views": 1204593,
"likes": 88410,
"comments": 2314,
"shares": 10092,
"duration_sec": 0,
"posted_at": "2026-06-30T14:05:00Z",
"author": { … },
"thumbnail": "…",
"hashtags": ["…"]
}
Good fit

Reach for this when

  • Reporting on your own or a client's posts without connecting a Business account through Meta's Graph API, which requires app review and only ever sees accounts you have a token for.
  • Competitor tracking: keep a list of rival post URLs and poll them on a schedule to see which formats actually land in your category.
  • Influencer vetting before you pay someone — pull their last 20 post URLs and check whether the like-to-comment ratio looks organic or purchased.
  • Enriching an internal content library so each archived post row carries its real performance numbers rather than a screenshot taken on publish day.
  • Deciding whether a Reel is worth transcribing or clipping, using views and duration as the filter before you spend anything else.
Different job?

There's an endpoint for that

  • You want the comment text, not just the count — that is the Instagram Comments API, which returns author, text and likes per comment.
  • You have a handle rather than a post URL. Start with the Instagram Channel Posts API to list an account's recent posts, then feed those URLs here.
  • You need follower counts, bio or verification status for an account — use the Instagram Channel Stats API.
  • You need share counts. No Instagram endpoint anywhere can give you those from public data, ours included. If share volume is your core metric, TikTok Stats does publish it.

Pricing

Start free, pay for what comes back

One post is 1 credit — about 0.5¢ on the monthly plan, 0.45¢ annual. $5 covers roughly 1,000 posts, cached hits cost the same as fresh, and failed calls are never charged.

Estimate your bill
$5/ month
30 posts/day × 1 credits × 365 days = 10,950 credits/yr — inside the base plan Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 10,950
Plan Annual $54/yr
Per post

Estimate only, on a full-year basis. 1 credits per returned post. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.

Engineering notes

Docs you can build on

We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.

Failed calls are never charged Public data only, no login session Built for parallel traffic

Instagram lets an account hide like counts per post. When that is on, the public page shows no number and we return null for `likes` while `comments` still works normally. Treat null as unknown. Coercing it to 0 will quietly drag down every average you compute over a creator's feed.

The same rule applies to `views` on a photo. Absent is not zero.

A Reel or video post carries a play count. A single photo or a carousel of photos does not, so `views` comes back null. If you are comparing post formats, compare likes and comments across the set and treat views as a video-only metric rather than trying to normalise around the gap.

A carousel that contains a video sometimes reports a count and sometimes does not, depending on how Instagram renders it that day. Code for both.

We read public pages logged out. If the account is private, the post was deleted, or it is geo-restricted where the request lands, the call returns an error instead of a half-filled object. Failed calls are not charged.

This is also why there is no follower-only content here. There is no session to log in with, by design.

The `thumbnail` link points at Instagram's CDN and carries a signature with a lifetime measured in hours to days. Saving it in a database and rendering it two weeks later gives you broken images. Fetch the bytes at ingest time and store them yourself if the image matters.

Responses sit in the fast cache class, so a repeat call for the same post inside the window comes back in milliseconds with x-cache: hit. A hit costs the same 1 credit as a miss. Pass fresh=true to skip the cache — worth doing on the first read of a monitoring cycle, wasteful on every read.

Questions

Frequently asked

Send a GET to /v1/instagram/stats with the post URL and your API key. There is no app review, no Business or Creator account requirement, and no OAuth token to refresh. Meta's Graph API only returns insights for accounts you hold a token for, which rules it out entirely for competitor research or influencer vetting. This endpoint reads the public post page instead.

Because the post is not a video. Instagram publishes a play count for Reels and video posts only; photos and photo carousels have no public view figure, so we return null rather than inventing one. If you need a number for every post in a set, use likes and comments as your comparable metrics and treat views as video-only.

No. Instagram does not show a share count on public post pages, so no tool reading public data can report one, including this one. The `shares` key is present in the response and always null so your parsing code does not have to branch per platform. TikTok does publish shares publicly, and the TikTok Stats endpoint returns them.

1 credit per post. Credits are $0.005 each on monthly billing and $0.0045 on annual, so a call is half a cent or less and $5 covers roughly a thousand posts. Cached responses cost the same as fresh ones. Calls that fail — private account, deleted post, bad URL — are never charged.

Yes. Reel URLs (/reel/…), photo posts (/p/…) and carousels all go to the same endpoint at the same price. The `type` field tells you which one you got back, and Reels additionally carry `views` and `duration_sec`. You do not need to detect the format before calling.

One URL per call. Run them concurrently — each call is independent and the API expects parallel traffic. If you are starting from an account rather than a list of links, the Instagram Channel Posts API returns a list of recent posts in one call, and those URLs drop straight into this endpoint.

We only read pages that any logged-out visitor can load, and we do not touch private accounts, follower-only content or personal data behind a login. That said, what you may do with the data depends on your jurisdiction and your purpose — aggregate analytics sits very differently from profiling individuals. Check with your own counsel before building anything that stores data about identifiable people.

Next

Pairs well with

Full Instagram API reference →
/v1/instagram/comments
Instagram Comments API Paginated comments on an Instagram post; charged per comment returned. 3 cr / comment
/v1/instagram/channel-posts
Instagram Channel Posts API Latest posts from an Instagram account with per-post metrics. 2 cr / post
/v1/instagram/channel-stats
Instagram Channel Stats API Follower counts, bio and profile metadata for an Instagram account. 3 cr / profile
/v1/tiktok/stats
TikTok Stats API Views, likes, comments and shares for a single TikTok video. 3 cr / video

More Instagram endpoints

/v1/instagram/transcript Full transcript of an Instagram reel with timestamped segments. 40 credits / reel /v1/instagram/summary Short AI summary of an Instagram reel, built on its transcript. 42 credits / reel /v1/instagram/comments Paginated comments on an Instagram post; charged per comment returned. 3 credits / comment /v1/instagram/channel-stats Follower counts, bio and profile metadata for an Instagram account. 3 credits / profile /v1/instagram/channel-posts Latest posts from an Instagram account with per-post metrics. 2 credits / post /v1/instagram/channel-reels Latest reels from an Instagram account with per-reel metrics. 3 credits / reel /v1/instagram/reels-search Keyword search over Instagram reels. 3 credits / result /v1/instagram/download Resolves a downloadable media URL for an Instagram reel (URL expires within 1h). 40 credits / video

Try the Instagram Stats endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/instagram/stats
Get your free API key