100 free credits on signup · no card required

Instagram Comments API

One URL in. Clean JSON out.

Give this endpoint an Instagram post or reel URL and it returns the public comments on it as a JSON array, one object per comment. One call returns up to `limit` comments — there is no second page to fetch. Billing is per comment returned, at 3 credits each, so a 10-comment call costs 30 credits.

Credits 3 / comment
Input ?url=
Cache 15m–7d
Paging limit
GET · BEARER
Request composing…
D @dev.casey

This fixed it for me, thank you

♥ 0
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 5 typed fields
{
"data": [
{
"id": "c_9021",
"text": "This fixed it for me, thank you",
"author": {
"handle": "dev.casey"
},
"likes": 412,
"posted_at": "2026-07-01T09:12:00Z"
}
],
"meta": {
"count": 2,
"limit": 50
},
"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 Flat objects, no reply tree

An array of comment objects. Each one carries the comment text, who wrote it, how many likes the comment picked up, when it was posted, and Instagram's own comment id. That is enough to run sentiment analysis, pull out the questions people keep asking, or spot the accounts that show up under every post a competitor publishes.

02 Platform ranking, not chronology

Comments come back in the order the platform serves them, which is Instagram's own ranking rather than strict chronology. Popular comments tend to surface first. If you need everything in time order, sort the returned array on posted_at yourself.

03 Replies arrive flat, unparented

Replies are not separated out into a tree. A reply to a comment arrives as its own object in the flat array, and there is no parent id on the response, so you cannot reconstruct which top-level comment a given reply belongs to. Plan your analysis around the flat list.

Field explorer Pick a key to see its type and the caveats.
string|null Nullable Use for windowing
posted_at

ISO 8601 UTC timestamp for when the comment was written. Null on comments where no timestamp is published.

{
"id": "c_9021",
"text": "This fixed it for me, thank you",
"author": { … },
"likes": 412,
"posted_at": "2026-07-01T09:12:00Z"
}
Good fit

Reach for this when

  • Reading what an audience actually says under a brand's posts — objections, repeat questions, product requests — instead of guessing from like counts.
  • Building a support or FAQ backlog: pull comments across a company's last 50 posts and cluster the questions.
  • Feeding comment text to a sentiment or topic model, where you need the raw strings and a timestamp per row.
  • Spotting engagement pods and bot activity: the same handles commenting the same phrases across unrelated posts show up quickly once you have the author field.
  • Sourcing UGC and testimonials, where the comment text is the asset and you want it with an attributable handle.
Different job?

There's an endpoint for that

  • You want the post's own like and comment counts rather than the comment text — that is the Instagram Stats API, which is one call at a flat cost instead of per-comment billing.
  • You want a list of a profile's recent posts to feed in here — start with the Instagram Channel Posts API, then pass each post URL to this endpoint.
  • You want the commenter's follower count, bio, or verification status. This returns a handle only; enrich it with the Instagram Channel Stats API.
  • You are after comments under a TikTok video or a LinkedIn post — those are the TikTok Comments API and the LinkedIn Comments API, with their own field shapes.

Pricing

Start free, pay for what comes back

Billing is per comment returned, about 1.5¢ each on the monthly plan, so a 20-comment call runs 60 credits — roughly 30¢. A post that returns zero comments still costs 1 credit.

Estimate your bill
$10/ month
30 comments/day × 3 credits × 365 days = 32,850 credits/yr, or $117/yr on the annual plan plus 21 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 32,850
Plan Annual $54/yr
Per comment

Estimate only, on a full-year basis. 3 credits per returned comment. 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

Credits are charged per comment returned, at 3 credits per comment. Ask for 100 comments and you pay 300 credits, which is $1.50 on the monthly plan. There is no bulk discount past a certain page size and no cheaper 'count only' mode here.

For most analysis work the first 20 to 50 comments per post carry the signal. Pull a small limit first, look at what you got, and only raise the limit on the posts that turn out to matter. Asking for thousands of comments off a viral reel is a real invoice.

One call returns one array of up to `limit` comments and that is the whole result. No cursor, no page token, no offset comes back in the response, so there is nothing to pass to a follow-up call. If you want more comments than you got, raise `limit` and call again from the top.

Raising the limit re-fetches the thread from the beginning, so a second, larger call overlaps heavily with the first. Deduplicate on `id` when you merge them. Instagram also reorders comments as new ones arrive and old ones are deleted, so two calls a day apart will not line up item for item.

Instagram does not publish every comment to logged-out visitors. Comments hidden by the account's keyword filters, comments from accounts that blocked the poster, and comments on posts with comments disabled are simply absent. On very large threads the platform stops serving more after a few thousand.

Treat the result as a sample of public comments, not a census. If your analysis depends on completeness, say so in your own reporting rather than implying you have the full set.

Handles and comment bodies are written by real people. They are public, but public is not the same as unrestricted — GDPR and similar regimes still apply once you store them. Keep a retention window, honour deletion requests, and do not build a profile of an individual out of their comment history.

If you only need the language and not the identity, drop the author field on ingest. Most sentiment and topic work does not need it.

Responses sit in the fast cache class, so repeating the same URL and limit within the window returns in milliseconds and sets x-cache: hit. A cache hit is billed the same as a fresh call — the comments were still delivered. Add fresh=true to force a live pull when you are monitoring a post that is actively collecting comments.

Questions

Frequently asked

Send a GET to /v1/instagram/comments with the post or reel URL and your API key. There is no Instagram login, no app review, and no OAuth involved. The endpoint reads the same public post page anyone can open in a browser, so it reaches public comments only. Comments on private accounts are not accessible and never will be through this API.

3 credits per comment returned. Credits are $0.005 each on the monthly plan and $0.0045 on annual, so one comment is about 1.5 cents and 100 comments run roughly $1.50. Because billing is per item, the limit parameter is the main lever on your bill. Failed calls are never charged, and a call that returns zero comments costs nothing.

Replies come back mixed into the same flat array as top-level comments, but the response has no parent id, so you cannot rebuild the reply tree from it. If a reply is what you want, you will get its text, author, likes and timestamp — you just will not know which comment it was answering. For thread-shaped analysis, work from the flat list.

As many as one call returns, which you cap with `limit` — the maximum accepted is 500. There is no cursor and no second page, so a single call is the whole result set. On small posts that is the entire thread. On posts with tens of thousands of comments the platform stops serving more after a few thousand anyway, and no scraper gets past that without a logged-in session, which we do not use. Budget for a large but partial sample rather than a complete one.

No. They arrive in the platform's own ranking, which pushes popular and recent comments toward the front. Sort the returned array on posted_at if you need true chronology. Note that posted_at can be null on some comments, so decide up front whether those go to the top, the bottom, or into a separate bucket.

Yes, that is one of the most common uses. The text field gives you the raw string including emoji, and posted_at lets you plot sentiment over time. Two practical notes: emoji carry a lot of the sentiment on Instagram, so do not strip them before scoring, and comment spam ('DM me', follow-for-follow) will skew a naive model unless you filter it first.

This endpoint returns the comments themselves and bills per comment. The Instagram Stats API returns the post's own metrics — likes, comment count, caption, author — as a single object at a flat cost. If you only need to know how many comments a post has, use Post Stats. Fetching every comment just to count them is the expensive way to get one number.

Next

Pairs well with

Full Instagram API reference →
/v1/instagram/stats
Instagram Stats API Likes, comments and view counts for an Instagram post or reel. 1 cr / post
/v1/instagram/channel-posts
Instagram Channel Posts API Latest posts from an Instagram account with per-post metrics. 2 cr / post
/v1/tiktok/comments
TikTok Comments API Paginated comments on a TikTok video; charged per comment returned. 2 cr / comment
/v1/linkedin/comments
LinkedIn Comments API Paginated comments on a LinkedIn post; charged per comment returned. 5 cr / comment

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/stats Likes, comments and view counts for an Instagram post or reel. 1 credit / post /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 Comments 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/comments
Get your free API key