How-to

How to Export Instagram Comments to CSV: Every Column, Every Method (2026)

By The ZocialComment Team, Social-data analystsAugust 2026· Updated Aug 202613 min read
How to Export Instagram Comments to CSV: Every Column, Every Method (2026)

Export Instagram comments now

Free — first 100 comments of any post, no signup. CSV, Excel & JSON.

Every Instagram analysis that goes beyond "scroll and screenshot" starts the same way: export Instagram comments to CSV. A CSV is the lowest common denominator — Excel opens it, Google Sheets imports it, pandas and R read it in one line, Looker Studio and Power BI treat it as a table. Once the comment section of a post is a CSV, every question about it (who comments most, what language the audience writes in, which hour of the day the replies land, which comment the creator pinned) becomes a sort or a pivot instead of a scrolling session.

This guide is the practical, column-by-column version. It covers what an Instagram comment CSV actually contains, four ways to produce one, the one Excel gotcha that silently corrupts your data, and how to load the file into the tools people really use. If you only need one takeaway: paste the post URL into the Instagram comment exporter, download CSV, and import it via Data → From Text/CSV with the ID columns set to Text.

What an Instagram comment CSV contains

A useful comment CSV has one row per comment and stable, machine-friendly column names. Here is the exact layout the ZocialComment exporter produces (the same header set is used for XLSX; JSON nests the same fields):

ColumnTypeWhat it holdsTypical use
authortextDisplay name of the commenterHuman-readable label in reports
usernametextInstagram handle (without @)Group by commenter, find repeat commenters, build a giveaway entry list
avatar_urlURLProfile picture link at export timeDashboards, influencer shortlists
texttextThe full comment, emoji and line breaks preservedSentiment, keyword search, word clouds
likesintegerLikes on the commentSort to surface the comments the audience agreed with
repliesintegerNumber of replies under the commentFind the comments that started conversations
created_atISO 8601When the comment was posted (UTC)Time-of-day and velocity charts
languageISO codeDetected language of the textAudience geography proxy, filter for translation
is_pinnedbooleanWhether the creator pinned itSeparate creator curation from organic ranking
idtext (long integer)Instagram's comment IDDeduplicate across re-exports, join to replies
reply_to_idtext (long integer)Parent comment id for replies, blank for top-levelRebuild threads

After those eleven core columns come the raw platform fields Instagram returned that are not already represented — things like user_id, is_verified, has_liked_comment, share_enabled and thread flags — converted to snake_case. You will rarely need them, but they are there so nothing is thrown away between Instagram and your spreadsheet.

The two columns people underestimate are language and reply_to_id. Language turns a comment dump into a rough audience-geography map without any profile scraping (a Reel whose comments are 40% Bahasa Indonesia and 25% Portuguese tells you where the audience is). reply_to_id is what lets you separate a creator's replies from fan replies and measure which top-level comments actually generated discussion.

Four ways to get Instagram comments into a CSV

1. A comment exporter (paste URL → download)

The fastest path and the one that works on posts you do not own. Open the Instagram comment exporter, paste the URL of any public post or Reel, and download the finished job as CSV, XLSX or JSON. The first 100 comments of a post are free with no signup; the $14 3-Day Pass covers unlimited posts at up to 10,000 comments each, pay-per-export is $1 per 100 comments (minimum $3), and Pro passes from $49 raise the cap to 100,000 comments per post and add AI analysis. Nothing is a subscription. Replies are optional and export as their own rows.

Use this when you need comments from other accounts (competitors, creators you are vetting, viral posts in your niche), when you need it today, or when you do not want to maintain code.

2. The Instagram Graph API (your own account only)

If you manage a Business or Creator account connected to a Facebook Page, the IG Media Comments endpoint returns comments on your own media as JSON: GET /{ig-media-id}/comments?fields=id,text,username,timestamp,like_count,replies. Page through the cursor, flatten the JSON, and write a CSV. It is free and officially supported, but the setup (Meta developer app, App Review for the instagram_basic and instagram_manage_comments permissions, token refresh every 60 days) is a day of work, and it cannot read anyone else's posts. Full walkthrough in the Instagram comments API explained.

3. Python (instaloader / requests)

Open-source libraries such as Instaloader can iterate post.get_comments() and write rows with csv.DictWriter. It works until Instagram changes an endpoint or rate-limits your session — which for logged-in scraping happens often enough that people maintaining these scripts spend more time on retries and cookies than on analysis. Reasonable for a one-off research project; painful as a weekly workflow. See how to scrape Instagram comments for the code and the caveats.

4. Browser extensions and copy-paste

Extensions inject a "download comments" button on the post page and dump what is currently loaded in the DOM. They are convenient for a few hundred comments but stall on long threads (Instagram lazy-loads in batches, and you must scroll everything into view first) and typically lose reply structure, timestamps or both. Copy-paste into a sheet is the fallback of last resort — it works for a dozen comments and falls apart after that. How to copy Instagram comments compares the manual routes honestly.

MethodOther people's postsRepliesSetupCost
Comment exporterYesYes (optional)NoneFirst 100 free; $14 pass
Graph APINoYesDeveloper app + reviewFree, your time
Python scraperYes, fragileUsuallyCode + session upkeepFree, your time
Browser extensionYes, partiallyRarelyInstallFree–$10/mo

Opening the CSV without breaking it

CSV is simple, which is exactly why applications feel free to "help" when opening one. Three things go wrong with Instagram comment CSVs specifically.

Excel rounds comment IDs

Instagram comment IDs are 17-digit integers. Excel stores numbers as IEEE-754 doubles with 15 significant digits, so a double-clicked CSV shows 1.79E+16 and, if you save it, permanently replaces the last digits with zeros. Microsoft documents this in "Last digits are changed to zeros". Fix: Data → From Text/CSV → Transform Data, set id, reply_to_id and user_id to Text, then Load. Or download XLSX, where the exporter already types those columns as text.

Emoji and non-Latin text

The file is UTF-8. Excel on Windows sometimes assumes the system code page and shows Thai, Arabic or emoji as garbage. The same From Text/CSV import dialog lets you pick 65001: Unicode (UTF-8). Google Sheets, Numbers, pandas and R read UTF-8 by default.

Line breaks inside comments

Comments contain newlines. A correct CSV quotes those cells, and every proper importer handles it, but hand-rolled parsers that split on \n will break rows. If you write your own reader, use a real CSV library (Python's csv, readr in R, Papa Parse in JavaScript) rather than string splitting.

Loading the CSV into the tools you actually use

Google Sheets

File → Import → Upload, separator "Detect automatically", and untick "Convert text to numbers, dates and formulas" so IDs survive. Then =QUERY(A:K, "select B, count(B) group by B order by count(B) desc") gives you commenters ranked by comment count. The dedicated guide is export Instagram comments to Google Sheets.

Python / pandas

import pandas as pd
df = pd.read_csv("comments.csv", dtype={"id": str, "reply_to_id": str})
df["created_at"] = pd.to_datetime(df["created_at"])
top = df.sort_values("likes", ascending=False).head(20)
by_lang = df["language"].value_counts()
by_hour = df.set_index("created_at").resample("h").size()

R

library(readr); library(dplyr)
comments <- read_csv("comments.csv", col_types = cols(id = col_character(), reply_to_id = col_character()))
comments %>% count(username, sort = TRUE) %>% head(20)

Looker Studio, Power BI, Tableau

All three accept a CSV upload or a Google Sheet as a source. Set created_at as a date-time dimension and likes/replies as metrics. Because the file is one row per comment, a simple record count is your "comments" metric and a distinct count of username is "unique commenters" — the ratio between them is a quick engagement-quality signal (a healthy post has many unique commenters; a suspicious one has a handful of accounts posting dozens of times).

What to do with the CSV once you have it

  • Giveaways. Filter to unique username, drop your own account and any rows before the contest start time, then pick at random — or skip the spreadsheet and use the comment picker directly. Details in Instagram comment picker.
  • Sentiment and themes. Feed the text column into a sentiment model or an LLM prompt. Instagram comment sentiment analysis walks through it, including the Pro-pass AI analysis that runs on the export itself.
  • Competitor research. Export the last ten posts from a rival account and compare comment volume, language mix and reply rate against your own. See Instagram competitor analysis.
  • Creator vetting. A CSV makes fake engagement obvious — repeated generic comments, clusters of usernames that co-comment on every post, timestamps bunched into a five-minute window. Our guide to detecting fake Instagram comments shows the exact checks.
  • Archiving. Comments get deleted, accounts go private, posts disappear. A dated CSV per post is the only record you control. Paid exports stay downloadable for 30 days; keep your own copies beyond that.

Keeping exports up to date and combining posts

A single CSV is a snapshot. Comment sections keep growing for days after publishing, people delete comments, and creators pin or unpin. If you are tracking a campaign, export the same post again at 24 hours, 72 hours and one week, and use the id column to deduplicate: append the new file under the old one, remove duplicate id values keeping the latest row, and you have both the current state and a record of what disappeared. In pandas that is pd.concat([old, new]).drop_duplicates("id", keep="last"); in Sheets, Data → Data cleanup → Remove duplicates on the id column.

To compare many posts, add a post_url column to each CSV before merging (the exporter's job list shows the source URL, and the XLSX version already includes it in the sheet name). With one combined table you can pivot comments by post and by day, chart which posts drew replies rather than one-liners, and calculate a per-post unique-commenter count — the number that best predicts whether an audience is real. Agencies running this at scale should read the bulk export guide for the workflow across dozens of URLs.

Common problems and fixes

  • The export returns zero comments. The account is private, the post has comments turned off, or the URL is a Story or Highlight (which have no public comments). Only public posts and Reels export.
  • Fewer comments than Instagram shows. Instagram's displayed count includes deleted, hidden and restricted comments that are not served to anyone; the exporter can only return what the platform still delivers. A gap of a few percent is normal. On the free tier the export also stops at 100 comments per post — the CSV is not truncated randomly, it is capped, and a pass removes the cap.
  • Timestamps look wrong. created_at is UTC. Convert to the audience's time zone before drawing time-of-day charts, or the peak will appear shifted by several hours.
  • Emoji show as boxes. The file is fine; the font in your spreadsheet lacks those glyphs. Change the font or view in a browser-based tool.
  • Reply rows have no parent. You exported without replies on one run and with replies on another. Re-export with replies enabled so every reply_to_id resolves to an id in the same file.

Comments on public posts are public, but they are also personal data once you store them with usernames attached. Under GDPR, ICO guidance treats publicly available personal data as still protected — collection needs a lawful basis and a retention limit (ICO lawful-basis guidance). Practically: export only what you need, keep the CSV access-controlled, aggregate before you share, and delete raw files when the analysis is done. Meta's Terms of Use prohibit unauthorised automated collection, so prefer tools that respect rate limits and only touch public content, and never export from accounts you have to log in to see.

Summary

To export Instagram comments to CSV: copy the post URL, paste it into the Instagram comment exporter, download CSV, and import it with the ID columns typed as text. You get author, username, text, likes, replies, created_at, language, is_pinned, id and reply_to_id per row, plus every raw field Instagram returned. The Graph API is the right choice for automated pulls from your own account; scrapers and extensions are stopgaps. Related reading: export Instagram comments to Excel · 3 ways to get Instagram comments out of the app · how to analyze Instagram comments.

Export Instagram comments now

Paste any Instagram post or Reel URL — every comment in CSV-ready format.