Most Instagram sentiment analysis produces the same artefact: a pie chart saying 72% positive, 18% neutral, 10% negative. It gets pasted into a deck, everyone nods, and nothing changes — because that number is not actionable and, worse, it is usually not even true.
This guide is the version that works. It costs about two hours per post, produces findings people argue about in a good way, and it starts with the unglamorous part: getting the comments out of Instagram.
Why the blended positivity score is a bad metric
Averaging sentiment across a whole comment section is like averaging the temperature of an oven and a freezer and reporting the room is comfortable. A realistic thread on a product launch contains at least four conversations happening at once: people who love the product, people asking where to buy it, people complaining about shipping to their country, and people who are only there because a creator tagged a friend.
Blend those and you get 72% positive. The 72% moves by five points next month and nobody can say why, because the number has no referent. Meanwhile the actual finding — shipping-to-Malaysia complaints went from 4% of comments to 19% in six weeks — is sitting in the same dataset, invisible.
Three failure modes follow directly from blending:
- Volume drowns severity. Four hundred fire emoji outweigh twelve detailed complaints about a defect. The emoji cost nothing to type; the complaints came from people who cared enough to write sentences.
- Positivity is a property of the mechanic, not the product. A giveaway post is 95% positive by construction. That measures the prize, not the brand.
- Movement is uninterpretable. When the aggregate shifts you cannot tell whether a real problem appeared or the comment mix changed.
The fix is not a better model. It is scoring inside themes.
Step 1: get the whole thread, replies included
You cannot filter, count or de-duplicate comments inside the Instagram app, and Insights will never classify text. Everything below assumes a table.
Paste the post URL into the Instagram comment exporter, enable replies, and download CSV or Excel. Each row arrives with author, username, avatar_url, text, likes, replies, created_at, language, is_pinned, id and reply_to_id. The first 100 comments of any post are free with no signup, which is enough to check the shape before committing to a bigger thread.
Two of those columns do disproportionate work. likes is your severity weight — the difference between an opinion one person holds and one four thousand people endorsed. language lets you separate the multilingual portion of the thread before it corrupts your scoring, which matters enormously on any account with an audience in Southeast Asia or Latin America.
Do not sample the visible comments. Instagram ranks the comment section, and the ranking favours engagement, recency and accounts you interact with. Scrolling and copying the first 200 gives you a biased slice of the most engaged responses — systematically the least representative ones. If you are comparing two posts or two creators, that bias will be larger than the effect you are trying to measure. Export both threads in full.
Export daily while a campaign is live, too. Comments disappear continuously: authors delete them, moderators hide them, and Meta removes an enormous volume automatically, as documented in its Community Standards Enforcement Report. Whatever went before your one end-of-campaign export is unrecoverable, and negative comments are disproportionately the ones that get deleted — which quietly biases every retrospective analysis upward.
Step 2: separate the noise before you score it
A typical Instagram thread is perhaps 40 to 60 percent content and the rest is structural noise. Move these into a separate sheet — count them, never score them:
- Emoji-only comments. Real signal about enthusiasm, zero signal about why. Bucket and count them.
- Tag-only comments. "@sarah @mike" is a mechanic response, not an opinion. On a tag-a-friend post this can be the majority of the thread and it will read as neutral, inflating your neutral share into meaninglessness.
- Giveaway boilerplate. "Done all steps ✅ me please" is a form submission.
- Bot and spam text. Generic praise from throwaway accounts, crypto and follower-service links. Our guide to bot comments covers the detection patterns; the short version is to sort by
usernameand by exact duplicatetextand the clusters announce themselves.
Report the noise share as its own number. "58% of this thread was tag-and-enter behaviour" is itself a finding about the mechanic, and it stops anyone reading the remaining sentiment as though it described everyone.
Step 3: cluster into themes before scoring anything
This is the step that separates useful analysis from a pie chart. Read 100 comments and write down the recurring topics — you will almost always land on five to eight. A launch post typically yields something like: product enthusiasm, price, availability and shipping, sizing or fit, the creator themselves, comparison to a competitor, and customer service complaints.
Then classify every scored comment into a theme, allowing more than one where it genuinely applies. Do this with keyword rules for the obvious ones (a comment containing "ship", "delivery", "customs" or "tracking" is shipping) and by hand or with a model for the rest.
Only now does sentiment mean something, because it is anchored to a subject. "Sentiment about shipping is 70% negative and rising" is a sentence someone can act on. "Overall sentiment is 72% positive" is not.
Step 4: score, and weight by likes
For each theme, record four things: comment count, combined likes, the positive/negative/mixed split, and one verbatim quote.
The combined-likes column is the one people skip and the one that changes conclusions. Nine comments carrying 4,000 likes between them and ninety carrying 200 are different phenomena. The first is a widely shared view that a few people articulated well; the second is a scattered mutter. Reporting both as "a theme" flattens the distinction that actually decides what to fix first.
Use four labels, not three. Mixed — "love it but the price is brutal" — is extremely common on Instagram and forcing it into positive or negative is where a lot of accuracy is lost. Keep neutral for genuine questions, which are their own goldmine: a high question rate in a theme means your product page has a gap, and that is a fix you can ship this week.
Step 5: the things that break sentiment models on Instagram
Off-the-shelf sentiment tools are usually trained on reviews and news text. Instagram comments violate nearly every assumption those corpora encode, which is why lexicon and classical approaches — the constraints behind tools like VADER, built specifically for social media text — still struggle here. The recurring problems:
Emoji carry the sentiment, and they drift
A comment that is three fire emoji and nothing else is strongly positive to a human and often neutral to a model that strips non-ASCII characters. Worse, meaning drifts: the skull emoji marks amusement, not death; the crying-laughing face is now read as dated by younger audiences; the upside-down face carries resignation. Check the Unicode emoji list for what a character formally is, then decide what it means for your audience empirically rather than assuming.
Sarcasm and irony
"wow great, another $200 hoodie 🙃" is negative and reads as positive to most classifiers. There is no clean automated fix. The practical mitigation is to hand-check the highest-liked comments in every theme — sarcasm concentrates at the top of the like distribution because it is funny, and those are the comments that matter most anyway.
Mixed languages, and code-switching inside one comment
Use the language column to split the thread. Score each major language separately with something appropriate to it, and pay attention to comments that switch mid-sentence — extremely common in Malay, Tagalog, Hindi and Indonesian comment sections, and reliably misclassified. If a language is under a few percent of the thread, report it as unscored rather than pretending.
In-group and inverted slang
"this is insane", "criminal", "no way this is real" and "I'm dead" are all positive in this context. Any model that has not seen recent social text gets them backwards. This alone is why the calibration step below is mandatory.
Comment ranking bias
Already covered, worth repeating because it is the most common methodological error: analyse the exported thread, never the scrolled one.
Step 6: calibrate against a hand-labelled sample
Take 100 random rows — random, not the top 100 — and label them yourself before looking at the automated labels. Then compare.
Below roughly 80 percent agreement, do not report aggregates; fix the classifier or the prompt first. Read the disagreements individually, because they cluster and the cluster tells you the fix: usually emoji handling, one language, or one piece of community slang. Re-run and re-check.
This takes about forty minutes and it is the difference between a number you can defend in a meeting and one that collapses the first time someone reads the raw comments themselves.
Step 7: report themes, not a percentage
The deliverable is one page:
- Thread composition. Total comments, scored comments, noise share by type.
- Theme table. Theme, comment count, combined likes, positive/negative/mixed/neutral split, and direction versus the previous post or period.
- One verbatim quote per theme. Quotes travel through an organisation in a way percentages never do. The quote is what gets repeated in a meeting you are not in.
- One recommended action. The single highest-likes negative theme, and what to do about it.
Keep the raw export attached. The first question a sceptical stakeholder asks is "show me the actual comments", and being able to filter to a theme live is what converts the analysis into a decision. The broader framework, including how to stack multiple posts into one master sheet, is in how to analyze Instagram comments.
What to do with each finding
- High-volume questions in one theme → your product page or bio link has a gap. Answer it there, and reuse the audience's exact wording; they have already A/B tested the phrasing for you.
- A negative theme with high combined likes → this is your priority fix regardless of comment count. Many people endorsed it, few had to type it.
- Positive sentiment concentrated on the creator, not the product → the collaboration bought attention rather than intent. Read the same threads through the creator scorecard in the agency guide to exporting Instagram comments.
- A theme growing month over month → the most valuable output of all, and only available if you kept the historical exports. Trend lines renew budgets; snapshots do not.
- Strong positive comments describing real experience → a testimonial shortlist, sorted by likes. Get written permission and follow the FTC endorsement guides before any of it appears in paid media.
Cross-platform, because the gap is the finding
The same export shape comes back from TikTok, YouTube, Facebook, Threads and Reddit, so a theme table can be built across platforms with the same columns. That is where the most surprising findings live: an objection appearing in 12 percent of Instagram comments and 34 percent of TikTok comments means the two audiences are at different stages, and it usually reallocates budget. The TikTok-side method is in TikTok comment sentiment analysis for brands.
Cost and tooling
Exports: the first 100 comments of a post are free, three exports a day, no signup — enough to prototype the whole method on a real post. Beyond that it is $1 per 100 comments with a $3 minimum, a one-time $14 3-Day Pass for unlimited posts up to 10,000 comments each, or Pro Passes at $49 for 3 days, $349 for 7 days and $1,499 for 30 days, which raise the ceiling to 100,000 comments per post and include AI analysis over the exported comments. Every one is a one-time purchase that expires by itself; nothing recurs.
For scoring, a spreadsheet plus keyword rules genuinely handles the first pass on threads under a few thousand comments, and the theme clustering is the part where human judgement beats automation anyway. Reach for a model when volume makes manual clustering impractical — and then calibrate it, every time, against a hand-labelled hundred.
One thing not to do
Do not use exported comment data to build ad-targeting lists or to DM commenters. Comment sentiment is personal data attached to identifiable people who wrote it publicly for a completely different purpose, and both the EDPB's guidance and platform terms are against you. Analyse in aggregate, quote sparingly, keep the file access-controlled, set a retention period, and delete on schedule.
Related reading
- How to analyze Instagram comments — the wider analysis framework
- Bulk exporting Instagram comments — getting many posts at once
- What are bot comments — filtering the noise rows
- Exporting Instagram comments to Excel
- Instagram Comments API — why the official API cannot reach creator or competitor posts
- Instagram Comment Exporter — first 100 comments free, replies included, no signup
