GET/v1/instagram/comments1 credit per comment

Instagram Comments API

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 1 credit each, so a 10-comment call costs 10 credits.

Request

parametertypedescription
urlstring, requiredA public Instagram post, reel or profile URL. Share links are resolved.
limitintegerItems per page, up to 50 synchronously. Above that the call becomes a job.
cursorstringmeta.next_cursor from the previous page.
freshbooleanSkip the stored copy and read live, at the same price.
fieldsstringComma-separated field paths to keep.
formatjson, csvCSV flattens each item to one row.

Billing and freshness

1 credit per comment. Failed calls are never charged, and empty results are free up to 25 a day. Stored copies are age-aware, 15 minutes to 7 days.

What you get back

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.

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.

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.

GET /v1/instagram/comments
curl "https://api.instadata.dev/v1/instagram/comments?url=https%3A%2F%2Fwww.instagram.com%2Fp%2FC8xQvZ2sVAb%2F&limit=10" \
  -H "Authorization: Bearer ik_live_..."
Example response
{
  "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"
    },
    {
      "id": "c_9022",
      "text": "Can you do a follow-up on the advanced settings?",
      "author": {
        "handle": "mariana.codes"
      },
      "likes": 96,
      "posted_at": "2026-07-01T10:44:00Z"
    }
  ],
  "meta": {
    "count": 2,
    "limit": 50
  },
  "request_id": "req_01JZX4M8Q2TE9W"
}

Fields

fieldtypenote
idstring|nullInstagram's comment id. Use it to deduplicate when you pull the same post more than once.
textstringThe comment body, emoji and @mentions included, exactly as posted. A comment with no text is dropped rather than returned empty, so this key is always populated.
authorstring|nullThe commenter's Instagram handle, without the leading @. Null when the platform withholds it.
likesnumber|nullLikes on the comment itself, not on the post. Null when Instagram does not expose a count.
posted_atstring|nullISO 8601 UTC timestamp for when the comment was written. Null on comments where no timestamp is published.

Reach for it 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.

Not the right call when

  • 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.

Things to know

Every comment costs, so set limit deliberately

Credits are charged per comment returned, at 1 credit per comment. Ask for 100 comments and you pay 100 credits, which is $0.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.

There is no pagination — limit is the only lever

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.

You will not always get the whole thread

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.

Comment text is personal data

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.

Caching behaviour

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

How do I scrape Instagram comments without logging in?

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.

How much does it cost to pull Instagram comments?

1 credit per comment returned. Credits are $0.005 each on the monthly plan and $0.0045 on annual, so one comment is about half a cent and 100 comments run roughly $0.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, up to 25 empty results a day per account (1 credit each after that).

Can I get replies to Instagram comments?

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.

How many comments can I get from one Instagram post?

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.

Are Instagram comments returned in chronological order?

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.

Can I use Instagram comment data for sentiment analysis?

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.

What is the difference between this and the Instagram Stats API?

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.

Related

GET /v1/instagram/profile-comments The whole sheet