# Trustpilot Company Scraper — Profiles, Search & Categories (`khadinakbar/trustpilot-company-scraper`) Actor

Scrape Trustpilot company profiles, search results, and category leaderboards. Auto-detects domains, Trustpilot URLs, search terms, and category URLs. Returns TrustScore, review count, claimed status, website, country, contacts, and categories. MCP-ready. Charged $0.005 per company.

- **URL**: https://apify.com/khadinakbar/trustpilot-company-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, MCP servers
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 trustpilot company returneds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Company Scraper — Profiles, Search & Categories

Extract **company-level Trustpilot data** at scale: full company profiles, company search results, and category leaderboards. One focused actor, three company-data modes, auto-detected from whatever you paste in. Built for competitor research, lead generation, market mapping, and AI agents.

> Need individual **review text** (rating, reviewer, reply, sentiment)? Use the companion [Trustpilot Reviews Scraper](https://apify.com/khadinakbar/trustpilot-reviews-scraper). This actor returns **companies**, not reviews.

### What you get

| Field | Description |
|-------|-------------|
| `resultType` | `profile`, `search`, or `category` |
| `companyName` | Display name on Trustpilot |
| `domain` | Company domain / identifying name (e.g. `apple.com`) |
| `trustpilotUrl` | Canonical Trustpilot review page |
| `websiteUrl` | Company's own website |
| `trustScore` | TrustScore (0–5, one decimal) |
| `stars` | Displayed star bucket (1–5) |
| `reviewCount` | Total reviews |
| `ratingDistribution` | Counts per star bucket (profile mode) |
| `categories` | Trustpilot categories the company is listed under |
| `categorySlug` | Category slug (category mode) |
| `isClaimed` / `isVerified` | Claimed / verified business flags |
| `country` / `city` / `address` / `postalCode` | Location, when published |
| `phone` / `email` | Contact details, when published |
| `logoUrl` | Company logo image |
| `rank` | Position in a search/category listing |
| `scraped_at` / `source_url` | Provenance |

### When to use it

- **Competitor research** — pull TrustScore, review volume, and claimed status for a list of rival domains in one run.
- **Market mapping** — scrape a whole category leaderboard (`/categories/bank`, `/categories/vpn`) and rank players by TrustScore.
- **Lead generation** — find companies in a niche + country, with website and contact details where published.
- **AI agents** — a clean, flat JSON tool that answers "how is company X rated on Trustpilot" or "who are the top-rated companies in category Y".

### Price

Pay-per-event:

- **Actor start:** $0.00005 (scaled by RAM)
- **Company result returned:** **$0.005** per record — a profile, a search hit, or a category entry.

A 50-company category leaderboard costs about **$0.25**. A single profile costs **$0.005**. Pay-Per-Usage (compute + proxy) is also available for very large jobs.

### Input

Paste any mix of domains, Trustpilot URLs, search terms, or categories into `queries`. Each item is auto-detected:

| You enter | Detected mode | What you get |
|-----------|---------------|--------------|
| `apple.com` | profile | One company profile |
| `https://www.trustpilot.com/review/netflix.com` | profile | One company profile |
| `online banks` | search | Companies matching the search |
| `/categories/bank` | category | The category leaderboard |
| `https://www.trustpilot.com/categories/jewelry_store` | category | The category leaderboard |

Set `mode` to `profile`, `search`, or `category` to force one interpretation. Use `country` (e.g. `GB`, `US`, `DE`) to scope search and category results. Use `maxResultsPerQuery` to cap how many companies each listing returns.

#### Example input

```json
{
  "queries": [
    "stripe.com",
    "online banking",
    "/categories/jewelry_store"
  ],
  "mode": "auto",
  "country": "US",
  "maxResultsPerQuery": 50
}
```

### Use via API

#### JavaScript

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('khadinakbar/trustpilot-company-scraper').call({
    queries: ['apple.com', '/categories/bank'],
    mode: 'auto',
    maxResultsPerQuery: 50,
});

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

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("khadinakbar/trustpilot-company-scraper").call(run_input={
    "queries": ["apple.com", "/categories/bank"],
    "mode": "auto",
    "maxResultsPerQuery": 50,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### Use with AI agents (MCP)

This actor is MCP-ready and exposed through the [Apify MCP server](https://mcp.apify.com) as `apify--trustpilot-company-scraper`. Claude, ChatGPT, and other MCP clients can call it directly with a domain, search term, or category and receive flat, structured company records.

### How it works

Trustpilot fronts its site with Cloudflare and blocks datacenter IPs at the TLS-fingerprint level. This actor uses a real Chromium browser (PlaywrightCrawler) with Crawlee fingerprint spoofing, a Cloudflare-challenge handler, consent-cookie injection, and Apify **Residential** proxies. Company data is read from the page's embedded `__NEXT_DATA__` JSON, so output is structured and consistent rather than scraped from brittle CSS selectors.

### FAQ

**Does it return review text?** No — this actor returns company-level data. For reviews, use the [Trustpilot Reviews Scraper](https://apify.com/khadinakbar/trustpilot-reviews-scraper).

**Why must I use residential proxies?** Trustpilot blocks datacenter IPs. The default residential configuration is required; datacenter proxies will fail.

**Can I scrape a whole category?** Yes. Enter `/categories/<slug>` (e.g. `/categories/bank`) and set `maxResultsPerQuery` to how many companies you want. Add `country` to scope by market.

**What if a company isn't on Trustpilot?** That query is skipped cleanly and logged; the run continues with the rest.

**How are costs capped?** The run prints its maximum cost before scraping and never charges beyond `maxResultsPerQuery` per query.

### Legal

This actor scrapes only publicly available data from Trustpilot. You are responsible for using the output in compliance with Trustpilot's Terms of Service, applicable data-protection laws (including GDPR/CCPA where relevant), and any contractual obligations. Do not use scraped personal data for unlawful purposes. This actor is not affiliated with or endorsed by Trustpilot.

# Actor input Schema

## `queries` (type: `array`):

Use this when you need Trustpilot company records from domains, company URLs, search terms, or category pages. Enter one item per line: 'apple.com' or 'https://www.trustpilot.com/review/apple.com' returns a company profile; '/categories/bank' returns a category leaderboard; 'online banks' runs company search. NOT for individual review text — use the trustpilot-reviews-scraper actor for reviews.

## `mode` (type: `string`):

Use this when you want to force how every company target is interpreted. 'auto' detects profile, search, or category per item; 'profile' treats each item as a company domain or Trustpilot review URL; 'search' runs Trustpilot company search; 'category' treats each item as a category slug or URL. Defaults to auto and is NOT a review filter.

## `country` (type: `string`):

Use this when search or category results should be scoped to a Trustpilot market. Enter a two-letter ISO country code such as 'US', 'GB', 'DE', 'FR', or 'AU'; leave empty for global trustpilot.com. Ignored for profile mode because company profiles resolve to canonical pages. NOT a language or review-country filter.

## `maxResultsPerQuery` (type: `integer`):

Use this to cap how many company records are returned for each target. Profile targets always return at most 1 company; search and category targets paginate until this cap is reached or results run out. Defaults to 50 with a hard cap of 1000 per target to protect budget. NOT a review-count limit.

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

Use this to choose the outbound proxy for Trustpilot pages. Defaults to Apify Residential proxies because Trustpilot uses Cloudflare and often blocks datacenter IPs at the TLS-fingerprint level. Leave as default unless you have a specific residential pool. NOT needed for authentication; this actor does not log in.

## Actor input object example

```json
{
  "queries": [
    "stripe.com",
    "https://www.trustpilot.com/categories/jewelry_store",
    "vpn services"
  ],
  "mode": "auto",
  "country": "GB",
  "maxResultsPerQuery": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

All extracted Trustpilot company records as structured JSON

# 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 = {
    "queries": [
        "apple.com",
        "/categories/bank",
        "online banking"
    ],
    "mode": "auto",
    "maxResultsPerQuery": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/trustpilot-company-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 = {
    "queries": [
        "apple.com",
        "/categories/bank",
        "online banking",
    ],
    "mode": "auto",
    "maxResultsPerQuery": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/trustpilot-company-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "apple.com",
    "/categories/bank",
    "online banking"
  ],
  "mode": "auto",
  "maxResultsPerQuery": 50
}' |
apify call khadinakbar/trustpilot-company-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/trustpilot-company-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/dwzGa9UOUzw2nggC4/builds/2wclbaCusfNHAnMUq/openapi.json
