# Trustpilot Leads Finder (`alkausari_mujahid/trustpilot-leads-finder`) Actor

Find businesses that got a 1-star Trustpilot review in the last 60 days (or any window, any star rating), with their email or phone, website and the review itself. Scans every Trustpilot company, no list needed. Filter by country, industry or TrustScore. Run daily for only new leads.

- **URL**: https://apify.com/alkausari\_mujahid/trustpilot-leads-finder.md
- **Developed by:** [Alkausari M](https://apify.com/alkausari_mujahid) (community)
- **Categories:** Lead generation, Marketing, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 leads

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

### What does Trustpilot Leads Finder do?

**Trustpilot Leads Finder finds businesses that recently received a 1-star review on [Trustpilot](https://www.trustpilot.com) — and gives you their email or phone, website and the review itself.** Run it once to get every business with a bad review in the last 60 days (or any window and star ratings you choose), then **schedule it daily and get only new leads**: companies you haven't seen before, as soon as a negative review lands.

It scans **every company on Trustpilot** — over **1.2 million businesses** across all of Trustpilot's language sites — so there's no list to build and no URLs to paste. Choose how far back to look, which star ratings count as negative, and (optionally) countries and industries. The Actor does the rest.

Because it runs on the Apify platform you also get scheduling, an API, webhooks, and integrations with Google Sheets, HubSpot, Slack, Zapier and Make.

### Who is it for?

A business that just got a 1-star review has a problem it wants solved *now*. That makes it a warm lead for:

- **Reputation-management and review-response agencies** — reach companies while the bad review is fresh.
- **Customer-experience, support-outsourcing and call-centre providers** — reviews tell you exactly what's going wrong ("no one answers the phone", "refund never arrived").
- **Marketing and SEO agencies** — businesses with falling TrustScores need help rebuilding trust.
- **Software vendors** — helpdesk, CRM, delivery-tracking and review-management tools.
- **Researchers and analysts** — track which industries and countries are collecting negative reviews.

### How to find leads on Trustpilot

1. Click **Try for free** and open the **Input** tab.
2. Keep the defaults — 1-star reviews in the last 60 days, companies that list an email or phone — or adjust them.
3. Click **Start**. Leads appear in the **Output** tab within a minute or two.
4. Download them as **Excel, CSV, JSON or HTML**, or send them straight to Google Sheets or your CRM.
5. For an evergreen flow, open **Schedules** and run the Actor **every day**. With **Only new leads** on (the default) each run returns only companies you haven't received yet.

### Input

The first screen is all most people need:

| Field | What it does | Default |
|---|---|---|
| **Negative review within the last (days)** | A company is a lead if it got a negative review in this window. | 60 |
| **Which star ratings count as negative** | 1★ only, or add 2★ (or any mix). | 1★ |
| **Maximum number of leads** | Stop after this many. 0 = no limit. | 500 |
| **Only leads with** | Contact details the company must list on Trustpilot: email or phone, email, phone, both, or no requirement. | Email or phone |
| **Only new leads** | Skip companies delivered in earlier runs. | On |

Optional **Filters**: countries (`US`, `GB`, `DE`…), industries (any word from the Trustpilot category, like `insurance` or `car dealer`), minimum total reviews, maximum TrustScore, claimed/unclaimed profiles, and whether to include businesses marked as closed.

**Scheduling & memory** lets you send a company again after a number of days (only if it received a *newer* negative review), and name the memory — use one memory name per client or campaign to keep their lead lists separate.

### Output

One row per company. Example (shortened):

```json
{
    "companyName": "Example Furniture Ltd",
    "website": "https://www.example-furniture.co.uk",
    "email": "support@example-furniture.co.uk",
    "phone": "0121 000 0000",
    "trustpilotUrl": "https://www.trustpilot.com/review/example-furniture.co.uk",
    "countryCode": "GB",
    "city": "Birmingham",
    "primaryCategory": "Furniture Store",
    "trustScore": 3.9,
    "totalReviews": 1840,
    "negativeReviewsInPeriod": 12,
    "latestNegativeReviewDate": "2026-09-21T16:03:00.000Z",
    "latestNegativeReviewRating": 1,
    "latestNegativeReviewTitle": "Still waiting for my refund",
    "latestNegativeReviewText": "Ordered a sofa six weeks ago…",
    "latestNegativeReviewUrl": "https://www.trustpilot.com/reviews/6ab139149ebc111aaac8fcab",
    "repliesToNegativeReviewsPercent": 12.5,
    "isClaimed": true,
    "foundAt": "2026-09-21T18:27:13.818Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The **Leads** view shows the key columns; **All fields** shows everything.

#### Data fields

| Field | Description |
|---|---|
| `companyName`, `website`, `domain` | The business and its website |
| `email`, `phone`, `address`, `city`, `zipCode`, `countryCode` | Contact details the business lists on its Trustpilot profile |
| `trustpilotUrl` | The company's Trustpilot page |
| `primaryCategory`, `categoryPath`, `categories` | Trustpilot industry categories |
| `trustScore`, `stars`, `totalReviews`, `reviewsLast12Months` | Overall rating and review volume |
| `negativeReviewsInPeriod` | Matching negative reviews inside your window (counted up to 20 — 20 means "20 or more") |
| `latestNegativeReview…` | Date, rating, title, text, link and whether the business replied |
| `repliesToNegativeReviewsPercent`, `totalNegativeReviews`, `lastReplyToNegativeReview` | How the business handles criticism — a low reply rate is a strong signal |
| `isClaimed`, `hasPaidSubscription`, `usesPaidFeatures` | Whether the business manages (and pays for) its Trustpilot profile |
| `foundAt`, `lookbackDays` | When the lead was found and with which window |

A **run summary** (companies scanned, leads found, and why other companies weren't leads) is saved to the key-value store as `RUN_SUMMARY`.

### How many leads can I get?

Measured on a real day:

- About **357,000 companies** received a Trustpilot review in the last 60 days, and about **20,000 new companies are reviewed every day**.
- Among recently reviewed companies, roughly **two in three** had a 1-star review in the last 60 days *and* listed an email or phone.
- A **first full run** (maximum leads = 0) therefore returns **well over 100,000 leads**. After that, daily scheduled runs return the companies that newly received a negative review.

Numbers vary with your filters — a narrow country or industry returns fewer leads.

### How much does it cost?

You pay for the leads you get, plus a small fee for each company the Actor checks:

| | Price |
|---|---|
| **Per lead** | $2.00 per 1,000 ($0.002 each) |
| **Per company checked** | $0.10 per 1,000 ($0.0001 each) |

Some example runs:

| Run | Companies checked | Leads | Cost |
|---|---|---|---|
| First run, default settings, 1,000 leads | about 1,400 | 1,000 | about $2.14 |
| First run, 10,000 leads | about 14,000 | 10,000 | about $21.40 |
| Daily scheduled run, only new leads | about 15,000 | about 2,000 | about $5.50 |
| Narrow filters (one country and one industry) | about 15,000 | about 100 | about $1.70 |

The check fee covers looking at companies that turn out not to be leads — without it, narrow filters would be priced the same as broad ones. **Companies skipped because they were already delivered or haven't changed since the last run are never checked and never charged**, and a check that fails isn't charged either (it's retried in the next run).

There's no subscription. Each run also carries Apify's standard start charge of $0.00005 per GB of memory — about $0.0001 per run. Set a **maximum cost per run** in the run options, or cap **Maximum companies to check**, and the Actor stops cleanly when the limit is reached, keeping every lead found so far.

### Tips

- **Target smaller or struggling businesses**: set a **maximum TrustScore** (e.g. 3.5) and a **minimum total reviews** (e.g. 20) to skip giants and one-review hobby shops.
- **Unclaimed profiles rarely list contact details.** If you want unclaimed businesses, set **Only leads with** to *No requirement* — you still get the website to find contacts yourself.
- **Faster runs**: raise **Parallel sessions** (Advanced). Each session checks about one company per second.
- **Separate clients**: give each client its own **Memory name** so they never share leads.
- **Freshest first**: companies are checked newest-review-first, so a lead cap keeps the most recent reviews.

### FAQ

**Where do the contact details come from?**
From the business's own public Trustpilot profile. The Actor doesn't guess or enrich emails. Businesses that haven't claimed their profile usually don't list any.

**How fresh are the leads?**
Trustpilot updates its company index daily, so a review posted today normally shows up in the next day's run at the latest.

**Does it collect reviewer personal data?**
No. Leads are business records. The review title and text are included for context (you can turn that off); reviewer names are not collected.

**Is it legal to scrape Trustpilot?**
The Actor only reads publicly available pages. Trustpilot's terms restrict automated access, and rules on contacting businesses (for example GDPR and PECR in the UK/EU, CAN-SPAM in the US) apply to how you use the leads. You're responsible for using the data lawfully — if in doubt, ask a lawyer.

**What happens if Trustpilot changes its website?**
Every run checks the first 50 companies for signs that Trustpilot's data has changed shape. If nearly all of them look broken, the run stops with a clear error instead of finishing "successfully" with no leads — so you're not charged for an empty run, and companies aren't marked as checked. Please report such an error in the **Issues** tab so the Actor can be updated.

**Why did a company with a 1-star review not show up?**
The run summary lists the reasons: most often the company lists no email or phone, the review is outside your window, or it was already delivered in an earlier run.

### Support

Found a bug or need a field added? Open an issue in the **Issues** tab — feedback is very welcome. Need a custom lead pipeline (website email enrichment, CRM sync, other review sites)? Get in touch through the Issues tab.

# Actor input Schema

## `lookbackDays` (type: `integer`):

A company is a lead if it received a negative review in this many days. 60 = the last two months.

## `starRatings` (type: `array`):

Review ratings that make a company a lead. Pick several to include, for example, 1★ and 2★.

## `maxLeads` (type: `integer`):

Stop after this many leads. Set to 0 for no limit (a first full run can return 100,000+ leads).

## `contactRequirement` (type: `string`):

Which contact details a company must list on its Trustpilot profile to count as a lead. Every lead also has its website and Trustpilot page.

## `onlyNewLeads` (type: `boolean`):

Remember delivered companies and skip them in later runs, so a daily schedule only returns companies you haven't seen. Turn off to get every matching company again.

## `countries` (type: `array`):

Only companies based in these countries, as 2-letter codes (US, GB, DE, …). Leave empty for all countries.

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

Only companies whose Trustpilot category contains one of these words, for example "electronics", "travel", "insurance" or a category id like "car\_dealer". Leave empty for all industries.

## `minTotalReviews` (type: `integer`):

Only companies with at least this many Trustpilot reviews in total. Useful to skip tiny businesses.

## `maxTrustScore` (type: `string`):

Only companies with a TrustScore at or below this value (0–5, e.g. 3.5). Leave empty for any score.

## `claimedStatus` (type: `string`):

Claimed profiles are managed by the business on Trustpilot; unclaimed ones aren't.

## `includeClosedBusinesses` (type: `boolean`):

Trustpilot marks some businesses as closed. They're skipped by default.

## `redeliverAfterDays` (type: `integer`):

With "Only new leads" on, a company already delivered can come back once this many days have passed AND it has received a newer negative review. 0 = never send the same company twice.

## `memoryName` (type: `string`):

Name of the key-value store that remembers delivered companies. Use a different name per client or campaign to keep their lead lists separate. Leave empty to disable memory.

## `includeReviewText` (type: `boolean`):

Add the newest negative review's title and text to each lead — handy for personalised outreach.

## `maxCompaniesToCheck` (type: `integer`):

Hard cap on how many companies are checked in one run. Each check is one request and carries the small per-company fee, so this also caps that part of the cost. 0 = no cap.

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

How many browser sessions check companies at the same time. Each session uses its own proxy IP and checks roughly one company per second.

## `sitemapLocales` (type: `array`):

Each Trustpilot language site lists a different set of companies. Leave empty to use all of them.

## `proxyConfiguration` (type: `object`):

Apify Proxy datacenter IPs work well. Each parallel session gets its own IP.

## Actor input object example

```json
{
  "lookbackDays": 60,
  "starRatings": [
    "1"
  ],
  "maxLeads": 100,
  "contactRequirement": "emailOrPhone",
  "onlyNewLeads": true,
  "minTotalReviews": 0,
  "claimedStatus": "any",
  "includeClosedBusinesses": false,
  "redeliverAfterDays": 0,
  "memoryName": "trustpilot-leads-memory",
  "includeReviewText": true,
  "maxCompaniesToCheck": 0,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `leads` (type: `string`):

No description

## `runSummary` (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 = {
    "lookbackDays": 60,
    "starRatings": [
        "1"
    ],
    "maxLeads": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("alkausari_mujahid/trustpilot-leads-finder").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 = {
    "lookbackDays": 60,
    "starRatings": ["1"],
    "maxLeads": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("alkausari_mujahid/trustpilot-leads-finder").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 '{
  "lookbackDays": 60,
  "starRatings": [
    "1"
  ],
  "maxLeads": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call alkausari_mujahid/trustpilot-leads-finder --silent --output-dataset

```

## MCP server setup

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

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/5F6Ugni8lxMwtrA3A/builds/Eg61weDHu8X0YCmGB/openapi.json
