# Review Sentiment Scorer for Trustpilot Exports (`bonpleincapital/review-sentiment-scorer`) Actor

Score exported Trustpilot or other reviews (JSON/CSV): sentiment -1 to 1, label, topics, rating-mismatch flag. No site scraping, fast. Created with the help of AI.

License: personal use only; resale and redistribution prohibited.
Created with the help of artificial intelligence.

- **URL**: https://apify.com/bonpleincapital/review-sentiment-scorer.md
- **Developed by:** [Bon Plein Capital](https://apify.com/bonpleincapital) (community)
- **Categories:** AI, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 1,000 review scoreds

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

## Review Sentiment Scorer for Trustpilot Exports

**Review Sentiment Scorer** turns customer reviews exported from Trustpilot (or any review platform) into a sentiment-ready dataset. Paste reviews as JSON or CSV, and get for each one a sentiment score from -1 to 1, a positive / neutral / negative label, the topics mentioned (delivery, price, support, quality, refund, website) and the words that drove the score. It does not visit Trustpilot or any website to collect reviews: you bring the text, it does the analysis, so it runs in seconds and never gets blocked.

### What can this Actor do?

- Score every review with a transparent, rule-based English sentiment model (negation and intensifiers handled), blended with the star rating when you provide one.
- Flag **rating mismatches**: 5-star reviews with angry text, or 1-star reviews with praise. These are the reviews worth reading first.
- Tag aspects (delivery, price, support, quality, refund, website_app) so you can see what customers complain about.
- Export results as JSON, CSV, Excel or via the Apify API, Make, Zapier and n8n, ready for dashboards and spreadsheets.
- On the Apify free plan you can score thousands of reviews with your monthly credits.

### How to use it

1. Click **Try for free** and open the **Input** tab.
2. Put your reviews in **Reviews** (JSON list), paste a CSV in **CSV text**, or give a public **CSV URL**. A CSV needs a header row with columns such as `title`, `text` (or `content`), `rating`, `author`, `date`.
3. Set the maximum number of results and click **Start**.
4. Download the dataset from the **Output** tab.

### Input

```json
{
  "reviews": [
    {"title": "Great service", "text": "Fast delivery and very helpful support. I love it!", "rating": 5, "author": "Anna"},
    {"title": "Never again", "text": "Terrible experience, parcel arrived damaged.", "rating": 1}
  ],
  "neutralThreshold": 0.1,
  "maxItems": 100
}
```

### Output

```json
{
  "id": "1",
  "author": "Anna",
  "rating": 5,
  "title": "Great service",
  "text": "Fast delivery and very helpful support. I love it!",
  "sentimentScore": 0.9,
  "sentimentLabel": "positive",
  "ratingMismatch": false,
  "aspects": ["delivery", "support"],
  "sentimentKeywords": ["love", "helpful"],
  "wordCount": 11
}
```

### How much does it cost?

This Actor uses **pay per event** pricing: you pay a small amount per scored review (one `result` event), and nothing for rows that are empty. 1,000 scored reviews cost the price of 1,000 `result` events shown in the **Pricing** tab. There is no proxy and almost no compute, so runs stay cheap.

### FAQ

#### Does it scrape Trustpilot?

No. It analyses review text that you provide, for example from your own Trustpilot business export or any other source you are allowed to use. This avoids anti-bot walls entirely.

#### Which languages are supported?

English only for now. Other languages get a score based on stars only when a rating is given, otherwise neutral.

#### How accurate is it?

It is a fast lexicon-based model, good for triage and trends, not a replacement for human reading. Sarcasm can fool it; the rating mismatch flag helps spot such cases.

#### Is it legal to use?

You are responsible for the data you provide. Reviews can contain personal data (names): handle them in line with the GDPR and remove what you do not need.

#### Can I use it through the API?

Yes. Every run can be started and read through the Apify API and its Python and JavaScript clients.

***

Created with the help of artificial intelligence.

# Changelog

This Actor's version history is a separate document: https://apify.com/bonpleincapital/review-sentiment-scorer/changelog.md

# Actor input Schema

## `reviews` (type: `array`):

Reviews to score: plain strings, or objects with text, title, rating (1-5), author, date, id.

## `csvText` (type: `string`):

Paste a CSV export with a header row (columns such as title, text or content, rating, author, date).

## `csvUrl` (type: `string`):

Public URL of a CSV file with a header row, for example a file you exported from your review platform.

## `neutralThreshold` (type: `number`):

Scores between minus and plus this value are labelled neutral.

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

Stop after this many scored reviews.

## Actor input object example

```json
{
  "reviews": [
    {
      "title": "Great service",
      "text": "Fast delivery and very helpful support. I love it, highly recommend!",
      "rating": 5,
      "author": "Anna"
    },
    {
      "title": "Never again",
      "text": "Terrible experience, parcel arrived damaged and nobody answered my refund request.",
      "rating": 1,
      "author": "Tom"
    },
    {
      "title": "Okay",
      "text": "Product is fine, the price is not cheap but it works.",
      "rating": 3
    }
  ],
  "neutralThreshold": 0.1,
  "maxItems": 3
}
```

# Actor output Schema

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

One dataset item per result, shown in the Overview view.

# 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 = {
    "reviews": [
        {
            "title": "Great service",
            "text": "Fast delivery and very helpful support. I love it, highly recommend!",
            "rating": 5,
            "author": "Anna"
        },
        {
            "title": "Never again",
            "text": "Terrible experience, parcel arrived damaged and nobody answered my refund request.",
            "rating": 1,
            "author": "Tom"
        },
        {
            "title": "Okay",
            "text": "Product is fine, the price is not cheap but it works.",
            "rating": 3
        }
    ],
    "neutralThreshold": 0.1,
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("bonpleincapital/review-sentiment-scorer").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 = {
    "reviews": [
        {
            "title": "Great service",
            "text": "Fast delivery and very helpful support. I love it, highly recommend!",
            "rating": 5,
            "author": "Anna",
        },
        {
            "title": "Never again",
            "text": "Terrible experience, parcel arrived damaged and nobody answered my refund request.",
            "rating": 1,
            "author": "Tom",
        },
        {
            "title": "Okay",
            "text": "Product is fine, the price is not cheap but it works.",
            "rating": 3,
        },
    ],
    "neutralThreshold": 0.1,
    "maxItems": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("bonpleincapital/review-sentiment-scorer").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 '{
  "reviews": [
    {
      "title": "Great service",
      "text": "Fast delivery and very helpful support. I love it, highly recommend!",
      "rating": 5,
      "author": "Anna"
    },
    {
      "title": "Never again",
      "text": "Terrible experience, parcel arrived damaged and nobody answered my refund request.",
      "rating": 1,
      "author": "Tom"
    },
    {
      "title": "Okay",
      "text": "Product is fine, the price is not cheap but it works.",
      "rating": 3
    }
  ],
  "neutralThreshold": 0.1,
  "maxItems": 3
}' |
apify call bonpleincapital/review-sentiment-scorer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bonpleincapital/review-sentiment-scorer"
        }
    }
}
```

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/1lbc9CkrNb7tVMTmu/builds/KZ6BffRXobCstxVi7/openapi.json
