# Trustpilot Company Search Scraper (`automation-lab/trustpilot-company-search`) Actor

Search Trustpilot by keyword and export ranked public company cards with domains, TrustScores, review counts, categories, locations, and claimed status.

- **URL**: https://apify.com/automation-lab/trustpilot-company-search.md
- **Developed by:** [Automation Lab](https://apify.com/automation-lab) (community)
- **Categories:** Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.40 / 1,000 company extracteds

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

## Trustpilot Company Search Scraper

Search Trustpilot by keyword and export ranked public company cards for reputation-market mapping, prospect research, and competitive analysis.

The Actor turns each **trustpilot company search** into structured records with business names, profile URLs, domains, TrustScores, review counts, categories, location fields, and card status fields when Trustpilot exposes them.

It searches public pages without requiring a Trustpilot login.

### What does this Actor do?

Give the Actor one or more phrases such as:

- `accounting software`
- `coffee roasters`
- `reputation management software`

It visits the corresponding Trustpilot search result pages, follows pagination, and saves unique company cards to the default Apify dataset.

The output preserves the originating query and rank so you can compare different markets or repeated runs.

This Actor discovers companies.
It does not download individual customer reviews.

### Who is it for?

#### Market researchers

Map which companies appear for an industry, product, or buyer-intent phrase and compare their public reputation signals.

#### Sales and partnerships teams

Build source-attributed company lists with public domains and Trustpilot profile links for later qualification.

#### Reputation teams

Track the company landscape around recurring queries by scheduling the same input and comparing datasets over time.

#### Data teams

Feed normalized Trustpilot company cards into a spreadsheet, warehouse, CRM staging table, or BI workflow.

### Why use it?

- Search by company, product, industry, category, or location phrase.
- Keep Trustpilot's ranked result order.
- Collect card fields without fetching every review page.
- Apply minimum TrustScore and review-count filters.
- Deduplicate the same company across queries.
- Stop at a predictable global result limit.
- Export through Apify as JSON, CSV, Excel, XML, or RSS.
- Schedule recurring searches with standard Apify tooling.

### What data can I extract?

| Field | Meaning |
| --- | --- |
| `query` | Search phrase that produced the card |
| `position` | Accepted result rank within that query |
| `businessId` | Stable Trustpilot business identifier |
| `name` | Public company display name |
| `domain` | Domain identifying the company profile |
| `profileUrl` | Canonical Trustpilot company profile URL |
| `trustScore` | Public TrustScore, or `null` when absent |
| `stars` | Star value exposed by the card |
| `reviewCount` | Public review count shown for the company |
| `categories` | Exposed business categories |
| `location` | Address, city, postal code, and country when exposed |
| `isClaimed` | Claimed status when the source exposes it |
| `isVerified` | Verification status when the source exposes it |
| `logoUrl` | Public logo URL when available |
| `sourceUrl` | Exact search page used |
| `scrapedAt` | UTC extraction timestamp |

Source fields can be absent or `null` when Trustpilot does not expose them on a particular card.

### How to search Trustpilot companies

1. Open the Actor input page.
2. Add one or more real phrases to **Search queries**.
3. Set **Maximum companies** to the largest dataset you need.
4. Optionally set a minimum TrustScore or review count.
5. Start the run.
6. Open the **Trustpilot companies** dataset view.
7. Export the records or connect the dataset to your next workflow.

Start with a small result limit while designing filters.
Raise the limit after confirming that the query returns the market you expect.

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `searchQueries` | `string[]` | `['reputation management software']` | One to 20 phrases searched on Trustpilot |
| `maxItems` | integer | `100` | Global maximum of unique companies, from 1 to 1,000 |
| `minTrustScore` | number | `0` | Keep scores from this value through 5 |
| `minReviewCount` | integer | `0` | Keep companies with at least this many reviews |

#### Basic input

```json
{
  "searchQueries": ["accounting software"],
  "maxItems": 25
}
```

#### Filtered market map

```json
{
  "searchQueries": [
    "reputation management software",
    "review management platform",
    "customer feedback software"
  ],
  "maxItems": 100,
  "minTrustScore": 3.5,
  "minReviewCount": 20
}
```

Filters are applied before a record is saved or charged.
The result limit applies across all queries in the run.

### Output example

A current public search can produce a record shaped like this:

```json
{
  "query": "software",
  "position": 1,
  "businessId": "iremove.tools",
  "name": "iCloud Unlock (Bypass) - iRemove Software",
  "domain": "iremove.tools",
  "profileUrl": "https://www.trustpilot.com/review/iremove.tools",
  "trustScore": 4.5,
  "stars": 4.5,
  "reviewCount": 4881,
  "categories": ["Software company"],
  "location": {
    "address": null,
    "city": null,
    "zipCode": null,
    "country": null
  },
  "isClaimed": null,
  "isVerified": null,
  "logoUrl": null,
  "sourceUrl": "https://www.trustpilot.com/search?query=software&page=1",
  "scrapedAt": "2026-09-15T20:20:00.000Z"
}
```

Values change as Trustpilot updates its search index and company reputation data.
Do not treat the example as a current endorsement or ranking.

### How much does it cost to search Trustpilot companies?

Pay-per-event pricing has two parts:

- **$0.005** when a run starts.
- **$0.004 per saved company** on the BRONZE tier.

Filters and duplicates are not charged as companies because they are not saved.

Example BRONZE prices:

| Saved companies | Estimated price |
| ---: | ---: |
| 1 | $0.009 |
| 10 | $0.045 |
| 25 | $0.105 |
| 100 | $0.405 |

Higher subscription tiers receive the tier prices shown on the Actor page.
Apify platform usage is included in pay-per-event pricing rather than added as a separate customer bill.

### Pagination, ranking, and deduplication

The Actor begins with page one for each query.
It follows additional result pages only while more accepted records are needed.

`position` is the accepted rank for a query after applying your filters.
This makes filtered lists easy to scan.

A stable Trustpilot business ID is used for deduplication.
If one company appears in several queries, the first accepted occurrence is saved.

Run separate inputs when you need an independent ranking table for every query without cross-query deduplication.

### Reliability and proxy behavior

Trustpilot protects its public pages with a connection challenge.
The Actor uses an Apify proxy-backed browser session, preserves cookies and proxy identity, and retries one challenged request with a fresh session.

Concurrency is deliberately conservative to reduce challenge rates.
A run fails visibly if all bounded session attempts are blocked.
It does not return a misleading successful empty dataset for a transport failure.

A valid query with no matching source cards or filters can complete with zero items.

### Limits and troubleshooting

#### My run returns fewer companies than `maxItems`

The source may have fewer matching cards, filters may reject cards, or duplicate companies may appear across queries.
Try a broader phrase or lower `minTrustScore` and `minReviewCount`.

#### My run fails with a Trustpilot search error

The source challenge was not cleared within the bounded retries.
Run the same small input later.
Persistent failures should be reported with the Apify run URL, not copied browser cookies.

#### A field is null

Trustpilot does not expose every field for every search card.
The Actor intentionally uses `null` rather than inventing values or fetching unrelated private data.

#### Why is the result order different from my browser?

Trustpilot may vary results by time, locale, source updates, and its own ranking logic.
The Actor records the exact source URL and extraction timestamp for auditing.

### Schedule recurring market maps

Create an Apify Schedule using a stable query set.
Store each run's dataset ID and compare records by `businessId`.

Useful changes to track include:

- newly appearing companies;
- companies that disappear from the accepted set;
- TrustScore movement;
- review-count growth;
- rank movement for a query;
- category or location changes.

The Actor produces snapshots.
It does not send alerts or compute historical changes by itself.

### Export to spreadsheets and data pipelines

From the dataset page, download JSON, CSV, Excel, XML, or RSS.

For automated pipelines:

1. run the Actor;
2. wait for completion;
3. read `defaultDatasetId` from the run;
4. fetch dataset items through the Apify API;
5. upsert by `businessId` in your destination.

Keep `query`, `sourceUrl`, and `scrapedAt` as provenance columns.

### Use the Apify API with cURL

Replace `YOUR_APIFY_TOKEN` with your token:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~trustpilot-company-search/runs?token=YOUR_APIFY_TOKEN&waitForFinish=120" \
  -H "Content-Type: application/json" \
  -d '{
    "searchQueries": ["accounting software"],
    "maxItems": 25,
    "minReviewCount": 10
  }'
```

Fetch the resulting default dataset with the `defaultDatasetId` returned by the run.

### Use the Apify API with JavaScript

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/trustpilot-company-search').call({
  searchQueries: ['accounting software'],
  maxItems: 25,
  minReviewCount: 10,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Install the client with `npm install apify-client`.

### Use the Apify API with Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/trustpilot-company-search').call(run_input={
    'searchQueries': ['accounting software'],
    'maxItems': 25,
    'minReviewCount': 10,
})

items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

Install the client with `pip install apify-client`.

### Use with MCP and AI assistants

Add the Actor to Claude Code through Apify MCP:

```bash
claude mcp add --transport http apify \
  "https://mcp.apify.com?tools=automation-lab/trustpilot-company-search"
```

#### Claude Desktop

Add this server to the Claude Desktop MCP configuration:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=automation-lab/trustpilot-company-search"
    }
  }
}
```

#### Cursor

Add the same `apify` server URL under **Settings → MCP → Add server** in Cursor.

#### VS Code

Add the same JSON server entry to your VS Code MCP configuration, then enable the `apify` server for the chat session.

Example prompts:

- “Search Trustpilot for accounting software and return 20 companies with at least 50 reviews.”
- “Map coffee roasters on Trustpilot and sort the dataset by TrustScore.”
- “Run three reputation software queries and give me the resulting dataset URL.”

AI assistants should cite `profileUrl` and `scrapedAt` when presenting source-derived claims.

### Data handling, retention, and AI

The Actor runtime does **not** use AI or send inputs or scraped data to an AI model provider. The MCP examples above only show how a user can invoke the Actor from an assistant.

Trustpilot receives the public search query and normal browser request metadata. Apify processes proxy traffic, runtime logs, and the output dataset as part of running the Actor. The Actor does not request a Trustpilot account, user cookies, contact details, or private data, and it creates no external database or cache.

Datasets, key-value stores, and logs remain in your Apify account under your configured platform retention settings. Delete the run and its storage through Apify when you no longer need them. Search queries appear in operational logs, so do not submit secrets or confidential personal information as queries.

### Responsible use and legality

This Actor accesses public Trustpilot search pages.
It is not affiliated with, sponsored by, or endorsed by Trustpilot.

You are responsible for complying with applicable laws, Trustpilot's terms, Apify's terms, and rules governing your downstream use.

Do not use output for harassment, unlawful discrimination, deceptive outreach, or unsupported claims about a company.
Verify important decisions against the live source.
Respect personal-data and retention obligations in your jurisdiction.

### Frequently asked questions

#### Does it scrape individual Trustpilot reviews?

No.
It exports company search result cards.
For review-level records, use a dedicated reviews Actor.

#### Does it require a Trustpilot account?

No login or user-supplied cookie is required.

#### Can I search multiple markets in one run?

Yes.
Provide up to 20 queries and use a global `maxItems` limit.

#### Can I filter by country?

There is no separate country filter.
Include a location in the search phrase when relevant and inspect the public `location` fields that the source exposes.

#### Does it monitor changes automatically?

The Actor creates current snapshots.
Use Apify Schedules and compare datasets in your own workflow for monitoring.

#### Are emails and phone numbers included?

No.
This product stays at the public company-card level and does not promise detail-page contact enrichment.

### Related automation-lab Actors

- [Trustpilot Reviews Scraper](https://apify.com/automation-lab/trustpilot) for review-level text and authors from known company domains.
- [Trustpilot Scraper](https://apify.com/automation-lab/trustpilot-scraper) for broader known-profile and review workflows.

Choose this Actor when discovery and ranked company cards are the primary output.
Choose a reviews Actor when you already know the company and need review records.

### Support

For reproducible support, include:

- the Apify run URL;
- the input with secrets removed;
- expected versus observed behavior;
- whether the issue affects one query or every query.

Do not share tokens, proxy passwords, account cookies, or private credentials.

# Changelog

This Actor's version history is a separate document: https://apify.com/automation-lab/trustpilot-company-search/changelog.md

# Actor input Schema

## `searchQueries` (type: `array`):

Company names, products, industries, categories, or location phrases to search on Trustpilot.

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

Maximum number of unique matching company records saved across all queries.

## `minTrustScore` (type: `number`):

Keep companies whose public TrustScore is at least this value.

## `minReviewCount` (type: `integer`):

Keep companies with at least this many public Trustpilot reviews.

## Actor input object example

```json
{
  "searchQueries": [
    "reputation management software"
  ],
  "maxItems": 20,
  "minTrustScore": 0,
  "minReviewCount": 0
}
```

# Actor output Schema

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

Dataset containing all accepted company search records.

# 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 = {
    "searchQueries": [
        "reputation management software"
    ],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/trustpilot-company-search").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 = {
    "searchQueries": ["reputation management software"],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/trustpilot-company-search").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 '{
  "searchQueries": [
    "reputation management software"
  ],
  "maxItems": 20
}' |
apify call automation-lab/trustpilot-company-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automation-lab/trustpilot-company-search"
        }
    }
}
```

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/VazvudGmKfb2QJ4zq/builds/30ddBuiKgPs8AQHeH/openapi.json
