Comment Sentiment Analysis: One Label per Comment, Plus What Changed
This comment sentiment analysis tool reads comments and reviews you already collected, either from an Apify Dataset or as a pasted list, and returns one row per comment with its sentiment, detected language, duplicate and spam flags and, in monitor mode, whether it is new or changed since the last run. It is built for brand and community managers, e-commerce and support teams, agencies and analysts who handle comments in English, French, German, Spanish, Italian or Portuguese and do not want to send them to an outside AI service.
Run it on Apify- $1.50 per 1,000 results
- 1 user in the last 30 days
- Export: JSON, CSV, Excel, API
- recordId
- comment-1
- sourceRef
- inline:sha256:3d574e210bd9e7318776c5e6bb66314db953811021d6c8c276bbcc72…
- text
- I love this product and the delivery was fast.
- textHash
- b092984bd4deaffa20514da5ea47e7ef273b04ef9c8da5537d41fa11176f4751
- language
- en
- languageSource
- detected
- languageScore
- 1
- complaintSignal
- not_evaluated
- sentiment
- positive
What you get
recordIdYour own comment ID, or a SHA-256 hash of it if you turn source IDs offtextThe comment itself, left out when you uncheck the text optionsentimentpositive, neutral or negativeconfidenceModel score between 0 and 1 for the sentiment labellanguageen, fr, de, es, it or pt, or und when the text is too short to telllanguageSourceWhether the language came from your data, was detected, or stayed undeterminedcomplaintSignalBeta flag for Spanish, Italian and Portuguese: possible, not_detected or not_evaluatedisDuplicatetrue when the comment repeats an earlier one word for wordisSpamtrue when basic spam rules matchstatusMonitor mode only: NEW, CHANGED or UNCHANGED compared with the previous runprocessingStatusOK, or ERROR for an invalid comment that is not billederrorCodeReason a comment was rejected, such as invalid texttextHashSHA-256 hash of the comment textobservedAtDate mapped from your source data, when you provide onemodelVersionVersion of the local model that produced the label
What people use it for
Sort reviews after a scrape
Run any reviews scraper on Apify, copy the Dataset ID of that run and paste it into this actor with the name of the field that holds the review text. Sort the output by sentiment and read the negative rows first instead of scrolling through every review.
Weekly brand report
Set the mode to monitor, give it a fixed state key such as brand-weekly and schedule it on Apify every week after your comments scraper. Each row comes back as NEW, CHANGED or UNCHANGED, and the SUMMARY record gives the sentiment split and daily volume for the report.
Find polite complaints in Southern European markets
Spanish, Italian and Portuguese customers often describe a problem in a friendly tone, which a sentiment label alone can read as neutral. Filter on complaintSignal set to possible to pull out those comments for the support team, then check them by hand since the signal is a beta triage aid.
Analyze comments without sharing them
Paste your own list of comments as JSON with an id and a text for each one. The models run inside the actor, so the text is not sent to an AI provider, and you can hide the text and hash the IDs in the output if you only need the labels.
Who it is for
- Brand managers who track how people talk about a product from week to week
- Community managers who want the negative comments under a video or post at the top of the list
- E-commerce and app teams who sort store and marketplace reviews before replying
- Support leads who use the complaint signal to find problem reports in Spanish, Italian and Portuguese
- Agencies and analysts who compare sentiment across markets for a client report
How to run it
- Open Comment & Review Sentiment Analysis on Apify and sign in to go to its Input tab.
- Paste the Dataset ID of a comments or reviews scraper run, or paste your comments as a JSON list in the inline field.
- Set the text field name if it is not text, and choose Analyze for a one-off run or Monitor changes with a state key for repeat runs.
- Start the run and wait for one row per comment to appear in the output Dataset, with the SUMMARY record in the key-value store.
- Download the results as JSON, CSV, Excel or HTML, or read them through the Apify API from Python, Node.js or any HTTP client.
Pricing
You pay per result, through your Apify account: $1.50 per 1,000 results at the time of writing (2026-11-08). No subscription to this actor. Apify's free plan includes monthly platform credit, enough to test it. The current price is always the one shown on the Apify page.
Questions
Is it legal to run sentiment analysis on social media comments?
Analyzing comments is generally allowed, but comments can contain personal data, which the GDPR and similar laws protect. Only process comments you have a legitimate reason to handle, and keep the output small by hiding text or hashing IDs if you do not need them. The actor does not copy author profiles. If you are unsure about your case, ask a lawyer.
Does this tool scrape the comments for me?
No. It only analyzes comments you already have, either from another Apify actor's Dataset or from a list you paste. To get comments from a platform, run a comments or reviews scraper first and pass its Dataset ID to this actor. No social account, cookie or proxy is needed.
How much does comment sentiment analysis cost?
Pricing is pay per event with no subscription. Each analyzed comment costs $0.0015, so 1,000 comments cost $1.50, plus a start fee of $0.0005 per GB of memory for each run. Comments rejected as invalid come back as ERROR rows and are not charged, and you can set a maximum cost per run in Apify.
Which languages does it support?
Sentiment covers English, French, German, Spanish, Italian and Portuguese, with language detection for each comment. The complaint signal only covers Spanish, Italian and Portuguese. Very short comments may get the language code und when there is not enough text to decide.
How accurate is the sentiment?
The README reports a macro-F1 of 0.870 on 612 annotated test sentences across the six languages, and lower scores on short extracts of real reviews. Sarcasm, jargon, mixed opinions and indirect complaints can be labeled neutral when a person would call them negative. Check a sample of your own data before you rely on the labels for decisions.
What export formats can I get?
The output Dataset can be downloaded as JSON, CSV, Excel or HTML, read through the Apify API, or sent to Google Sheets and other tools through Apify integrations. Summary figures are stored separately in the SUMMARY record of the run's key-value store.
What are the limits per run?
One run reads up to 10,000 comments, and each comment can be up to 5,000 characters. Longer or malformed comments become ERROR rows while the rest continue. The actor needs at least 2 GB of memory, and only one monitor run per state key can run at a time.