# Trustpilot Review Monitor & Reply Follow-up (`sauliusautomatesit/trustpilot-review-followup`) Actor

Export recent Trustpilot reviews, find unanswered low-star feedback, and track new reviews, edits and company replies. Includes a follow-up queue, company comparison and portable history.

- **URL**: https://apify.com/sauliusautomatesit/trustpilot-review-followup.md
- **Developed by:** [Saulius Saulenas](https://apify.com/sauliusautomatesit) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $17.00 / 1,000 completed review pages

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Trustpilot Review Monitor & Reply Follow-up

See which recent low-star reviews still need a reply. Track new reviews, edited feedback and company replies, and export a prioritised follow-up queue for your team or agency.

**Quick start:** enter a company domain, keep the first test at one page, and run. Open the Reviews dataset or FOLLOW-UP-REPORT. No Trustpilot login is required.

### What you get

- Recent review text, rating, dates, verification label, visible company reply and a direct source link.
- A follow-up queue for reviews at or below your chosen rating with no visible company reply. Set a reply target, such as 48 hours, to flag overdue items.
- A report comparing the collected review sample across companies: observed ratings, unanswered low-star reviews and replies added since your previous check.
- Change labels for a baseline, reviews new to the sample, newly added replies, edits, and unchanged records.
- SNAPSHOT for portable repeat-run history, plus page evidence and a coverage summary.

This is useful for customer-service teams, reputation agencies and developers building review workflows. Reviewer names and profile details are omitted. No replies, messages or reviews are posted by this tool.

### Example input

```json
{"companyDomains":["huel.com","monzo.com"],"maxPagesPerCompany":2,"language":"en","lowRatingThreshold":2,"replyTargetHours":48,"previousSnapshot":[],"onlyChanges":false}
```

Domains identify company profiles, not URLs to crawl. Choose 1–10 companies and 1–10 pages per company. Each page normally contains 20 recent reviews. The language can be a two-letter code or all. Keep the same company, language and page scope when comparing runs.

### Pricing

**$0.02 per completed review page** before plan discounts. A page normally contains up to 20 reviews. Reports, change detection, compute and proxy usage during the run are included. One page plus one start event costs $0.02005 at the base tier.

A confirmed empty page or an unchanged monitoring check is still a completed page. onlyChanges changes the export, not the price. Blocked pages, wrong-company results and malformed responses have no review-page charge. Source failures are recorded, and an all-failed run fails.

Review-page prices: FREE $0.02, Bronze $0.019, Silver $0.018, Gold/Platinum/Diamond $0.017. Actor start (`apify-actor-start`) is **$0.00005**, once per allocated GB of memory, minimum one. Default memory is 1 GB. Set a maximum run cost to cap event charges. Downloads and storage outside the run may incur ordinary Apify usage.

### Reading the results correctly

The report covers the recent language/page sample you collected, up to about 200 reviews per company. It is not a full historical export or a statement about every customer. sourceTrustScore is the source's displayed company score; averageSampleRating is calculated only from observed reviews. They are different measures.

An unanswered review means no public company reply was visible. It does not prove the company ignored a private support request. A public reply does not prove resolution. Review text contains customer opinions, not verified findings. OVERDUE uses your chosen target and the source publication timestamp; it is not a contractual service-level finding.

A new-to-sample review can be an older review that moved into the collected pages. Edits and replies are detected only for reviews observed again. The rolling baseline retains up to 5,000 review fingerprints. No removal, fraud or sentiment inference is made.

### Repeat-run workflow

Save SNAPSHOT from a run where SUMMARY.partial is false and pass it as previousSnapshot next time. Retain the old snapshot after a partial run. With onlyChanges enabled, the dataset contains changed/new observations; the follow-up report still includes unanswered reviews from the current sample.

Baselines are supplied by your workflow, so simultaneous runs do not overwrite a shared history store. Use the API/MCP tabs for integration, or the downloadable workflow below. The first run establishes your baseline. Availability depends on Trustpilot's public pages; browser blocks can interrupt collection and should not trigger unbounded retries.

### Download the repeat-run workflow

[Download the Python workflow and example watchlists (ZIP)](https://api.apify.com/v2/key-value-stores/NC097H6r9b5xqENAU/records/business-monitor-workflows-v1.zip?signature=YrU8NLIqwCcHeRTnacwH). Requires Python 3.10 or newer and your APIFY\_TOKEN. No additional Python packages are needed.

The workflow runs a watchlist, exports CSV and JSON, and saves the next baseline only after a complete run. It includes a per-run spending cap and a resume command for interrupted downloads. See the included README for setup. Schedule the command with your existing scheduler if you want recurring checks.

# Actor input Schema

## `companyDomains` (type: `array`):

1–10 business domains as listed on Trustpilot, for example huel.com or monzo.com.

## `maxPagesPerCompany` (type: `integer`):

One page normally contains 20 recent reviews. Maximum ten pages per company.

## `language` (type: `string`):

Two-letter language code, or all.

## `lowRatingThreshold` (type: `integer`):

Reviews at or below this star rating enter the follow-up queue if no company reply is visible.

## `replyTargetHours` (type: `integer`):

Mark unanswered low-star reviews overdue after this many hours from publication.

## `previousSnapshot` (type: `array`):

Paste SNAPSHOT from the last complete run to track new reviews, edits and company replies.

## `onlyChanges` (type: `boolean`):

Completed pages are charged even if no reviews changed. The first run establishes your baseline.

## Actor input object example

```json
{
  "companyDomains": [
    "huel.com"
  ],
  "maxPagesPerCompany": 1,
  "language": "en",
  "lowRatingThreshold": 2,
  "replyTargetHours": 48,
  "previousSnapshot": [],
  "onlyChanges": false
}
```

# Actor output Schema

## `reviews` (type: `string`):

No description

## `report` (type: `string`):

No description

## `summary` (type: `string`):

No description

## `snapshot` (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 = {
    "companyDomains": [
        "huel.com"
    ],
    "maxPagesPerCompany": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("sauliusautomatesit/trustpilot-review-followup").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 = {
    "companyDomains": ["huel.com"],
    "maxPagesPerCompany": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("sauliusautomatesit/trustpilot-review-followup").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 '{
  "companyDomains": [
    "huel.com"
  ],
  "maxPagesPerCompany": 1
}' |
apify call sauliusautomatesit/trustpilot-review-followup --silent --output-dataset

```

## MCP server setup

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

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/uAH6W4kwcGvzowm46/builds/xreuKt5kuBTcubNzq/openapi.json
