# AI Review & Feedback Analyzer - Sentiment, Themes & Summary (`plotpointtech/ai-review-feedback-analyzer`) Actor

Analyze reviews, surveys and support tickets with AI: sentiment, themes, feature requests, complaints, urgency and a free summary report with counts, quotes and trends. Works on our app review scrapers. $1 per 1,000 items.

- **URL**: https://apify.com/plotpointtech/ai-review-feedback-analyzer.md
- **Developed by:** [Plot Point Technologies](https://apify.com/plotpointtech) (community)
- **Categories:** AI, Automation, E-commerce
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 item analyzeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## AI Review & Feedback Analyzer: Sentiment, Themes & Summary for $1 per 1,000

**Turn thousands of reviews, survey answers, support tickets or comments into a clear picture of what customers love, what annoys them and what they ask for.** Every item gets sentiment, themes from one consistent taxonomy, feature requests, complaints, praise, urgency, language and a one-line summary. At the end you get one free summary record with theme counts and example quotes, the top complaints, top feature requests and top praise (with real counts), a trend by date and a written executive summary.

It works directly on the output of our [Google Play Reviews Scraper](https://apify.com/plotpointtech/google-play-reviews) and [App Store Reviews Scraper](https://apify.com/plotpointtech/apple-app-store-reviews), on any other Apify dataset, on a CSV/JSON file, or on text you paste in.

### What does the AI Review & Feedback Analyzer do?

- **Sentiment per item:** positive, neutral or negative, plus a score from -1 to 1. Judged from the text, not just the stars, so a 5-star review that reports a bug is caught.
- **Consistent themes:** the tool first reads a sample of your data and builds a taxonomy of 5 to 20 themes (for example "Bank Sync", "Pricing & Subscription", "Customer Support"), then tags every item with 1 to 3 of them. Or give it your own category list.
- **Feature requests, complaints and praise** as short phrases, in the output language you choose.
- **Bug flag and urgency** (low, medium, high, critical) so data loss, billing errors and crashes rise to the top.
- **Language detection** for multilingual feedback. Feedback in any language is understood; results are written in English or the language you pick.
- **One aggregate record (free):** sentiment split, average rating, theme table with example quotes, top complaints / requests / praise grouped by meaning with exact item counts and item IDs, the most urgent items, a trend by day, week or month, and an executive summary with recommendations.

### Who uses it?

- **App and product teams** reading every review after a release instead of skimming a few.
- **Customer experience and support leads** tagging tickets and survey (NPS/CSAT) comments by theme and urgency.
- **Founders and marketers** checking what customers praise to use in messaging.
- **Agencies and analysts** producing review reports for clients or comparing competitors' reviews.

### How to use it

1. Get your feedback: run the [Google Play Reviews Scraper](https://apify.com/plotpointtech/google-play-reviews) or [App Store Reviews Scraper](https://apify.com/plotpointtech/apple-app-store-reviews), export a CSV from your survey or helpdesk tool, or copy the texts.
2. Paste the **dataset ID**, a **file URL**, or the **texts** into the input.
3. Optional: describe what the feedback is about (e.g. "a meditation app"), add your own categories, choose the output language.
4. Click **Start**. Results appear in the dataset; the last record (`recordType: "summary"`) is the report. It is also saved as `SUMMARY` in the run's key-value store.

**Tip:** run it automatically after the review scraper with an Apify integration ("Actor run succeeded" -> start this tool with the scraper's dataset ID), or on a schedule to watch sentiment week by week.

With no input at all the tool analyzes 20 bundled sample reviews of a fictional budgeting app, so you can see the output in about 20 seconds.

### Input

| Field | Description |
|---|---|
| `datasetId` | Apify dataset to analyze (e.g. from our review scrapers or any other Actor) |
| `fileUrls` | Links to CSV, JSON, JSON Lines or plain-text files |
| `texts` | Pasted feedback, one item per line |
| `textField`, `titleField`, `dateField`, `ratingField`, `idField` | Column/field names. Leave empty to auto-detect common names (`text`, `review`, `content`, `comment`, `date`, `rating`, `reviewId`...). Dots select nested fields. |
| `passThroughFields` | Extra fields copied to each result, e.g. `appName`, `country`, `appVersion` |
| `categories` | Your own theme list (optional). Otherwise themes are derived from your data. |
| `maxThemes` | Max themes to derive (5-20, default 10) |
| `productContext` | A few words on what the feedback is about (improves accuracy) |
| `outputLanguage` | Language for summaries and phrases (default English) |
| `maxItems` | Analyze at most this many items (0 = all, up to 100,000) |
| `maxTextLength` | Long texts are shortened to this many characters (default 1,500) |
| `includeText`, `includeSummary` | Include original text / add the free summary record |
| `anthropicApiKey` | Optional: your own Anthropic key for a lower per-item price |

#### Input example

```json
{
  "datasetId": "YOUR_GOOGLE_PLAY_REVIEWS_DATASET_ID",
  "productContext": "a language-learning app",
  "passThroughFields": ["appName", "appVersion"],
  "outputLanguage": "English"
}
```

### Output

#### Per item (from a real default run)

```json
{
  "recordType": "item",
  "itemId": "s02",
  "sentiment": "negative",
  "sentimentScore": -0.8,
  "themes": ["Bank Sync & Transactions", "App Stability & Bugs"],
  "primaryTheme": "Bank Sync & Transactions",
  "featureRequests": ["Fix bank sync failing almost daily"],
  "complaints": ["Bank sync fails almost every day since update", "Must log out and back in for new transactions"],
  "praise": [],
  "isBugReport": true,
  "urgency": "high",
  "language": "en",
  "summary": "Bank sync fails almost daily since the last update, forcing logouts; user considers churning.",
  "date": "2026-07-06",
  "rating": 2,
  "title": "Sync keeps failing",
  "text": "Bank sync fails almost every day since the last update. I have to log out and back in to see new transactions. Please fix, this is the main reason I pay for it.",
  "textTruncated": false,
  "source": "sample"
}
```

#### Summary record (shortened, same run)

```json
{
  "recordType": "summary",
  "itemsAnalyzed": 20,
  "sentimentCounts": {"positive": 9, "neutral": 3, "negative": 8},
  "avgSentimentScore": 0.045,
  "avgRating": 3.1,
  "urgencyCounts": {"low": 10, "medium": 3, "high": 4, "critical": 3},
  "bugReports": 7,
  "themes": [{"theme": "Budgeting & Categories", "count": 6, "share": 0.3, "positive": 4, "neutral": 2, "negative": 0,
              "exampleQuotes": [{"itemId": "s05", "sentiment": "positive", "quote": "The shared household budget is exactly what we needed..."}]}],
  "topComplaints": [{"label": "Bank sync and connection failures", "count": 2, "share": 0.1, "itemIds": ["s02", "s18"],
                     "examples": ["Bank sync fails almost every day since update", "Bank connection drops every few days"]}],
  "topFeatureRequests": [{"label": "Transaction categorization and tagging", "count": 2, "itemIds": ["s06", "s20"]}],
  "topPraise": ["..."],
  "mostUrgent": ["..."],
  "trendGranularity": "month",
  "trend": [{"period": "2026-07", "count": 6, "positive": 3, "neutral": 1, "negative": 2, "negativeShare": 0.333, "avgSentimentScore": 0.117, "avgRating": 3.33, "bugReports": 1}],
  "overallSummary": "Across 20 feedback items, sentiment is mixed and close to neutral (9 positive, 8 negative, 3 neutral; average rating 3.1). Customers consistently praise category breakdowns ... The main problems are app stability and bugs (4 items, all negative) ...",
  "recommendations": ["Prioritize fixing crashes, startup failures, and bank sync connection errors, ..."]
}
```

Counts in the summary are computed from the per-item results, not estimated by the AI: each complaint, request or praise group lists the exact item IDs it covers.

### Pricing

Pay per item analyzed; the summary record is free.

- **$1.00 per 1,000 items** with our AI (no account or key needed).
- **$0.30 per 1,000 items** with your own Anthropic API key (Anthropic then bills you directly, typically $0.10-0.25 per 1,000 items).
- Volume discounts on higher Apify plans.

Worked examples: 1,000 Google Play reviews = $1.00. A 10,000-response survey = $10.00. A weekly run on 500 new reviews = $0.50 a week. Items that fail are not charged, and the tool stops at your "maximum cost per run".

### Notes and limits

- Texts longer than `maxTextLength` (default 1,500 characters) are shortened before analysis; `textTruncated` shows when that happened.
- AI output can occasionally be wrong on sarcasm, very short texts ("ok") or mixed reviews. Spot-check before acting on single items; the aggregate is robust.
- Themes are derived per run. For comparisons across runs (e.g. weekly reports), pass the same `categories` every time.
- Speed: about 1,000 items in under 2 minutes.

### FAQ

**Is it legal?** The tool only analyzes text you provide or already hold in your Apify account. You are responsible for having the right to process that data (e.g. your own customers' feedback, or public reviews) and for following privacy law such as GDPR when texts contain personal data.

**Which AI model does it use?** Anthropic Claude (Haiku). Your data is sent to Anthropic's API for processing only.

**Can I use it via API?** Yes. Start it with the Apify API or client libraries and read the dataset; the summary is also in the key-value store under `SUMMARY`.

**Does it work with Make, Zapier or n8n?** Yes, through the Apify integrations for each platform, for example "new survey responses -> analyze -> post summary to Slack".

**Can AI agents use it?** Yes, through the Apify MCP server, so assistants like Claude can analyze feedback on request.

**What about other review sources?** Any Apify dataset works. Pick the text field if it is not named `text`, `review`, `content` or `comment`.

### Related tools from Plot Point Technologies

- [Google Play Reviews Scraper](https://apify.com/plotpointtech/google-play-reviews): Android app reviews to analyze with this tool.
- [App Store Reviews Scraper](https://apify.com/plotpointtech/apple-app-store-reviews): iOS app reviews with the same field names.
- [App Store & Google Play Scraper](https://apify.com/plotpointtech/app-details): app details, search and charts for competitor lists.
- [Hacker News Scraper](https://apify.com/plotpointtech/hacker-news-scraper): developer discussions and comments to analyze.
- [Website to Markdown Crawler](https://apify.com/plotpointtech/website-to-markdown-crawler): turn web pages into text for AI pipelines.

Plot Point Technologies is not affiliated with Anthropic, Google or Apple.

If this tool helps you, please leave a review. Found a problem or need a field? Open an issue on the Issues tab and we will look at it quickly.

# Actor input Schema

## `datasetId` (type: `string`):

Analyze items from an Apify dataset, for example the output of our Google Play Reviews Scraper or App Store Reviews Scraper, or any other Actor. Paste the dataset ID or pick it.

## `fileUrls` (type: `array`):

Links to CSV, JSON, JSON Lines or plain-text files (one feedback per line). Exports from survey tools, helpdesks or spreadsheets work. Public links only (e.g. Google Sheets 'publish to web' CSV link).

## `texts` (type: `array`):

Paste feedback directly: one review, survey answer, ticket or comment per line. Leave all three sources empty to analyze 20 bundled sample reviews.

## `textField` (type: `string`):

Name of the field/column that holds the feedback text (dots for nested fields, e.g. review.body). Leave empty to auto-detect: text, review, reviewText, content, body, comment, feedback, message, description.

## `titleField` (type: `string`):

Optional review title field. Auto-detected: title, reviewTitle, subject, headline.

## `includeTitle` (type: `boolean`):

Send the review title to the AI together with the text.

## `dateField` (type: `string`):

Field with the review date, used for the trend. Auto-detected: date, publishedAt, createdAt, at, timestamp and similar.

## `ratingField` (type: `string`):

Field with a star rating or score. Auto-detected: rating, stars, score. Used as a hint and for average rating.

## `idField` (type: `string`):

Field with a unique item ID to carry into the output. Auto-detected: reviewId, id. Otherwise the row number is used.

## `passThroughFields` (type: `array`):

Extra input fields to copy unchanged into each result, e.g. appName, country, appVersion, authorName.

## `categories` (type: `array`):

Your own theme list, e.g. Pricing, Onboarding, Sync, Support. Leave empty and the tool derives a consistent taxonomy from a sample of your data first. 'Other' is always added.

## `maxThemes` (type: `integer`):

Upper limit on automatically derived themes.

## `productContext` (type: `string`):

A few words of context that improve accuracy, e.g. 'a meditation app', 'our hotel in Lisbon', 'B2B invoicing software'.

## `outputLanguage` (type: `string`):

Language for summaries, complaints, requests and the report. Feedback in any language is understood.

## `maxItems` (type: `integer`):

Analyze at most this many items (0 = all, up to 100,000).

## `maxTextLength` (type: `integer`):

Longer texts are shortened to this length before analysis (keeps cost predictable). Most reviews are under 500 characters.

## `includeText` (type: `boolean`):

Copy the original feedback text into each result.

## `includeSummary` (type: `boolean`):

Add one free final record with theme counts and example quotes, top complaints, top feature requests, top praise, trend by date and an overall summary. Also saved as SUMMARY in the key-value store.

## `maxConcurrency` (type: `integer`):

How many batches of 10 items are analyzed at once.

## `anthropicApiKey` (type: `string`):

Optional. With your own Anthropic key you pay a lower per-item price and Anthropic bills you directly for AI usage (a few cents per 1,000 items).

## Actor input object example

```json
{
  "includeTitle": true,
  "maxThemes": 10,
  "outputLanguage": "English",
  "maxItems": 0,
  "maxTextLength": 1500,
  "includeText": true,
  "includeSummary": true,
  "maxConcurrency": 6
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("plotpointtech/ai-review-feedback-analyzer").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("plotpointtech/ai-review-feedback-analyzer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call plotpointtech/ai-review-feedback-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,plotpointtech/ai-review-feedback-analyzer"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/hi7Uc74kNG70dESfx/builds/KT4dII8egYSRFP9QR/openapi.json
