IGComments

For developers & researchers

Export Instagram comments to JSON

Get the comments on any public Instagram post or Reel as a single, well-structured JSON file — post metadata plus one object per comment, replies included. No Graph API app, no access token, no scraping script to maintain. Free up to 200 comments.

Free up to 200 comments · no Instagram login · replies included · CSV, Excel & JSON

The JSON format

The file is one JSON object with two keys: post, describing what was fetched, and comments, an array with one object per comment. A trimmed example:

{
  "post": {
    "url": "https://www.instagram.com/p/DAbC123xYz/",
    "owner": "harbor.coffee",
    "comment_count_reported": 1874,
    "fetched_at": "2026-10-02T14:03:11+00:00",
    "preview_only": false
  },
  "comments": [
    {
      "#": 1,
      "comment_id": "18047712345678901",
      "username": "maria.bakes",
      "user_id": "5512345678",
      "comment": "Is the oat latte back for good? @sam_k we need to go",
      "posted_at_utc": "2026-09-30 08:15:42",
      "likes": 14,
      "is_reply": "no",
      "reply_to_comment_id": "",
      "reply_to_username": "",
      "mentions": "@sam_k",
      "hashtags": ""
    },
    {
      "#": 2,
      "comment_id": "18047798765432109",
      "username": "harbor.coffee",
      "user_id": "4410987654",
      "comment": "@maria.bakes it is! All autumn",
      "posted_at_utc": "2026-09-30 09:02:10",
      "likes": 3,
      "is_reply": "yes",
      "reply_to_comment_id": "18047712345678901",
      "reply_to_username": "maria.bakes",
      "mentions": "@maria.bakes",
      "hashtags": ""
    }
  ]
}

Field reference

FieldTypeMeaning
post.urlstringThe post or Reel the comments came from
post.ownerstringUsername of the account that published it
post.comment_count_reportedintegerThe comment count Instagram displayed at fetch time
post.fetched_atISO 8601 stringWhen the comments were collected
post.preview_onlybooleantrue if this is the free preview of a larger post, not the full set
#integerPosition in the export
comment_id, user_idstringInstagram IDs, as strings so they never lose precision
username, commentstringHandle and full UTF-8 text (emoji unescaped)
posted_at_utcstringYYYY-MM-DD HH:MM:SS in UTC
likesintegerLikes on the comment at fetch time
is_replystring"yes" or "no"
reply_to_comment_id, reply_to_usernamestringParent comment for replies; empty string otherwise
mentions, hashtagsstringSpace-separated, e.g. "@a @b"; empty string if none

The keys match the CSV and Excel column headers exactly, so code written against one format works with the others. Comparing comment_count_reported with the length of comments tells you how much Instagram is withholding; why the counts differ.

Loading it

Python with pandas, keeping IDs as strings:

import json, pandas as pd

with open("comments.json", encoding="utf-8") as f:
    data = json.load(f)

df = pd.DataFrame(data["comments"])
df["posted_at_utc"] = pd.to_datetime(df["posted_at_utc"], utc=True)
df["mentions"] = df["mentions"].str.split()
replies = df[df["is_reply"] == "yes"]

On the command line, jq gets you quick answers:

jq -r '.comments[].username' comments.json | sort | uniq -c | sort -rn | head

That prints the ten most frequent commenters. In JavaScript, JSON.parse on the file gives you the same structure; rebuild threads by grouping on reply_to_comment_id.

No API key, no app review

Getting comments through Instagram’s official Graph API means creating a Meta developer app, connecting a Business or Creator account, and going through permissions review — and even then it only covers accounts you manage. For a researcher studying public conversation, or a developer who needs the comments from one campaign post, that is a lot of process for a single file.

IGComments works from the public post link. There is no token to request, no app to register and no Instagram login. You paste a URL and download the JSON.

What this is not

To be straightforward about the limits:

  • It is not a real-time or programmatic API. You fetch a post through the website and download a file. There is no endpoint to poll, no webhook, and no streaming of new comments. Each file is a snapshot as of fetched_at.
  • Public posts only. Private accounts can’t be fetched.
  • Comment data only. No display names, profile bios, follower counts or contact details — just what is in the field reference above.
  • Hidden comments aren’t included. Comments Instagram filters or hides from everyone, and deleted ones, can’t be fetched by any tool.

For one-off datasets, a set of campaign posts, or a research sample, that is usually exactly enough. Filters you apply on the results page — date range, replies only, a search term, one comment per person — apply to the JSON too, so you can download a pre-filtered subset.

Pricing for datasets

Posts with up to 200 comments are free. Above that, the free download is a preview of the first 200 comments (with preview_only: true) and a one-time Export Pass unlocks the full file: $4.99 up to 10,000 comments, $9.99 up to 30,000, $14.99 up to 100,000. Per post, no subscription. Pricing.

Frequently asked questions

Is there an API I can call instead of using the website?

No. IGComments is a website that produces downloadable files; there is no public API, webhook or real-time feed.

Why are IDs strings rather than numbers?

Instagram IDs are larger than JavaScript can represent exactly as numbers. Keeping them as strings means they never get rounded when you parse the file.

Is the JSON a single array or newline-delimited?

A single JSON object with a post object and a comments array. Convert it to newline-delimited JSON with jq -c ".comments[]" if your pipeline needs that.

How do I tell whether I have the full set of comments?

Check post.preview_only, which is true when only the free preview was exported, and compare the length of comments with post.comment_count_reported.

Can I use the data for academic research?

The export contains publicly visible comments. Whether and how you may use them depends on your institution’s ethics rules and the platform’s terms, so check those for your project. IGComments is not affiliated with Instagram or Meta.

Are emoji escaped as \u sequences?

No. Text is written as plain UTF-8, so emoji and non-Latin scripts are readable in the raw file.