# Trustpilot Reviews, Company Contacts & Sentiment Scraper (`rollan_dev/trustpilot-reviews-scraper`) Actor

Fast, no-start-fee Trustpilot Reviews Scraper & Company Contact Enricher: extract customer reviews, star ratings, verified status, company replies, business emails, phones, addresses, and sentiment analysis.

- **URL**: https://apify.com/rollan_dev/trustpilot-reviews-scraper.md
- **Developed by:** [Rollan Sadykov](https://apify.com/rollan_dev) (community)
- **Categories:** Lead generation, E-commerce
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.35 / 1,000 trustpilot review & company records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## ⭐ Trustpilot Reviews, Company Contacts & Sentiment Scraper

**Trustpilot Reviews, Company Contacts & Sentiment Scraper** is a fast, **zero-start-fee** B2B data extraction & lead enrichment tool built for growth teams, marketing agencies, reputation managers, and AI automation pipelines (`n8n`, `Make`, `Zapier`, `Clay`, `HubSpot`, and LLM RAG).

Extract **full customer reviews, star ratings (`1★–5★`), verified buyer labels, official company replies, sentiment tags (`POSITIVE`, `NEUTRAL`, `NEGATIVE`), and B2B company contact details (`Email`, `Phone`, `Physical Address`, `Website`, `TrustScore`, `Categories`, `Claimed Status`)** directly from Trustpilot in seconds.

***

### 💰 Why Choose This Trustpilot Scraper?

| Feature | Typical Trustpilot Scrapers | This Scraper (`rollan_dev/trustpilot-reviews-scraper`) |
| :--- | :--- | :--- |
| **Actor Start Fee** | `$0.005 – $0.05` charged on every run | **`$0.00` (Zero Start Fee — ideal for API & AI Agents)** |
| **Price per 1,000 Reviews** | `$0.50 – $3.00 / 1,000` | **`$0.35 / 1,000` (`$0.00035` per review)** |
| **B2B Company Contacts (`Email`, `Phone`, `Address`)** | Paid add-on (`+$0.01/company` or `+$1.00/1k`) | **Included 100% FREE on every record** |
| **Sentiment Classification (`POSITIVE` / `NEUTRAL` / `NEGATIVE`)** | Paid add-on | **Included 100% FREE on every record** |
| **Canonical Domain Deduplication** | Duplicates billed twice | **Built-in deduplication (`apify.com` = `https://www.apify.com`)** |
| **Excel / CSV Export** | Nested arrays that break spreadsheets | **100% Flat 30-Column Schema (ready for Excel, Clay & CRM)** |

***

### 🎯 Top B2B & Growth Use Cases

1. **Competitor Churn & Pain-Point Lead Generation**:
   - Filter competitor profiles by `starRating: "1"` or `"2"` to extract unhappy customers, analyze their complaints (`reviewText`), and identify switching opportunities.
2. **B2B Company Contact Enrichment**:
   - Extract verified public business emails (`companyEmail`), phone numbers (`companyPhone`), headquarters addresses (`companyAddress`), `companyTrustScore`, and industry `companyCategories` for CRM enrichment in Clay, HubSpot, or Salesforce.
3. **Automated Brand & Reputation Monitoring (`n8n` / `Make` / `Zapier`)**:
   - Schedule daily or weekly runs with `sortBy: "recency"` to push new reviews and `companyReplyText` status straight into Slack, Discord, or Google Sheets.
4. **AI / LLM Customer Sentiment & Product Research**:
   - Feed structured multi-language reviews (`language: "all"` or `"en"`, `"de"`, `"fr"`, `"es"`) into GPT/Claude/Gemini pipelines.

***

### 📥 Input Parameters

You can pass bare domains (`"apify.com"`, `"stripe.com"`), website URLs (`"https://www.shopify.com"`), or full Trustpilot review URLs (`"https://www.trustpilot.com/review/apify.com"`):

```json
{
  "companies": [
    "apify.com",
    "github.com"
  ],
  "maxReviewsPerCompany": 20,
  "starRating": "all",
  "language": "all",
  "sortBy": "recency",
  "verifiedOnly": false
}
```

#### Input Options Breakdown

- **`companies`** *(array of strings)*: List of company domains or Trustpilot URLs (also accepts `domains`, `urls`, or `startUrls` via API). Automatically normalized and deduplicated.
- **`maxReviewsPerCompany`** *(integer, default: `20`)*: Maximum reviews to extract per company (`1` to `5000`).
- **`starRating`** *(string, default: `"all"`)*: Filter by `"all"`, `"5"`, `"4"`, `"3"`, `"2"`, or `"1"` stars.
- **`language`** *(string, default: `"all"`)*: ISO-2 language code (`"all"`, `"en"`, `"de"`, `"fr"`, `"es"`, `"it"`, `"pt"`, `"nl"`, `"pl"`, `"ru"`).
- **`sortBy`** *(string, default: `"recency"`)*: Sort by newest reviews first (`"recency"`) or Trustpilot relevance (`"relevance"`).
- **`verifiedOnly`** *(boolean, default: `false`)*: Extract only verified buyer reviews (`?verified=true`).

***

### 📤 Clean Flat Output Structure (30 Columns — CSV / Excel / JSON Ready)

Every scraped review includes both the full review details and the enriched B2B company profile in a flat structure:

```json
{
  "companyDomain": "apify.com",
  "companyName": "Apify",
  "companyTrustScore": 4.8,
  "companyStars": 5,
  "companyTotalReviews": 828,
  "companyIsClaimed": true,
  "companyWebsiteUrl": "https://apify.com",
  "companyEmail": "hello@apify.com",
  "companyPhone": null,
  "companyAddress": "Vodičkova 704/36, Nové Město, Prague, 110 00, CZ",
  "companyCategories": "Software Company, Computer Software Store, Research and Product Development, Software Vendor, Online Marketplace",
  "reviewId": "6aeb4963029205c99c5289e6",
  "rating": 5,
  "sentiment": "POSITIVE",
  "reviewTitle": "Great product",
  "reviewText": "Great product",
  "language": "en",
  "isVerified": true,
  "verificationSource": "Invitation",
  "likes": 0,
  "publishedDate": "2026-11-04T17:04:03.000Z",
  "experiencedDate": "2026-11-04T00:00:00.000Z",
  "updatedDate": null,
  "reviewerName": "Sanvi Khandelwal",
  "reviewerCountry": "IN",
  "reviewerTotalReviews": 1,
  "companyReplyText": null,
  "companyReplyDate": null,
  "reviewUrl": "https://www.trustpilot.com/reviews/6aeb4963029205c99c5289e6",
  "scrapedAt": "2026-11-05T10:30:00.000Z"
}
```

***

### ❓ Frequently Asked Questions (FAQ)

- **Do I need residential proxies to run this scraper?**
  No. The Actor solves Trustpilot's AWS WAF challenge automatically inside its managed browser session and falls back to rotating Apify Proxy sessions only if needed.
- **What happens if I pass a domain that is not on Trustpilot?**
  Non-existent domains (HTTP 404) are detected immediately and skipped in under 1 second with `0` reviews charged, and the scraper continues processing the rest of your list.
- **Does it respect my Apify spending cap (`maxTotalChargeUsd`)?**
  Yes. The Actor checks `eventChargeLimitReached` after every batch and stops immediately once your budget cap is reached.

# Actor input Schema

## `companies` (type: `array`):

List of company domains (e.g. 'apify.com', 'stripe.com') or full Trustpilot URLs ('https://www.trustpilot.com/review/apify.com'). Automatically normalized and deduplicated.

## `maxReviewsPerCompany` (type: `integer`):

Maximum number of reviews to extract for each company (20 reviews per page).

## `starRating` (type: `string`):

Filter reviews by specific star rating, or extract all ratings.

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

Language code for reviews ('all' for all languages, or 'en', 'de', 'fr', 'es', 'it', 'pt', 'nl', 'pl', 'ru').

## `sortBy` (type: `string`):

Sort reviews by newest first ('recency') or Trustpilot default relevance.

## `verifiedOnly` (type: `boolean`):

When enabled, extracts only verified buyer reviews on Trustpilot.

## Actor input object example

```json
{
  "companies": [
    "apify.com",
    "github.com"
  ],
  "maxReviewsPerCompany": 20,
  "starRating": "all",
  "language": "all",
  "sortBy": "recency",
  "verifiedOnly": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

Default dataset containing extracted Trustpilot reviews, company contact metadata, and sentiment analytics

# 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 = {
    "companies": [
        "apify.com",
        "github.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("rollan_dev/trustpilot-reviews-scraper").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 = { "companies": [
        "apify.com",
        "github.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("rollan_dev/trustpilot-reviews-scraper").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 '{
  "companies": [
    "apify.com",
    "github.com"
  ]
}' |
apify call rollan_dev/trustpilot-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

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/rQfBFHrGkiLcDNXTs/builds/lZciChqLZuqhgvwyU/openapi.json
