# Trustpilot Business Scraper - API Based (`jobscrawler/trustpilot-business-scraper`) Actor

Read genuine Trustpilot business summaries from public widgets published on supplied company websites. Get native names, TrustScore, review totals and profile URLs without an API key. Optional filters apply to supplied websites; no global search or inferred contact details.

- **URL**: https://apify.com/jobscrawler/trustpilot-business-scraper.md
- **Developed by:** [Jobs Scraper](https://apify.com/jobscrawler) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

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/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 this Actor does

Read genuine Trustpilot business summaries without an API key by using the public Trustbox that a business publishes on its own website. The Actor first downloads the supplied company page, reads its published business-unit and template configuration, and requests the same first-party public widget data interface. It checks source robots policies and verifies that the business website and native Trustpilot profile match the publishing company.

This is a website-based business-summary collector. It does not provide global Trustpilot search, scrape excluded profile pages, guess widget templates or retry a business after an entitlement/access denial. The previous keyword-search implementation is replaced by this supported public-widget workflow. The optional query field filters names/domains among the supplied websites; it does not discover new companies.

### Input and defaults

The example company page is Bulk Spain's public reviews page: https://www.bulk.com/es/bulk-reviews. You can replace it with one to twenty public company pages that publish a valid Trustpilot widget. Static HTML widget attributes and Adobe Edge Delivery Trustpilot configuration blocks are supported. A company whose widget is injected only through unrelated custom JavaScript may require its server-rendered reviews page.

Example input:

```json
{"startUrls":[{"url":"https://www.bulk.com/es/bulk-reviews"}],"maxItems":10,"minTrustScore":0,"minReviews":0,"sampleMode":false}
```

Maximum businesses is a cap. One distinct publisher business can produce one record, even when the maximum is ten. Duplicate business IDs are removed. Score, review-count and optional business-name filters can legitimately produce an empty dataset. A source error fails the run rather than adding a diagnostic object to the dataset. No synthetic results or invented contact details are returned.

### Output and freshness

Results contain the native display name, business identifier, score, total review count, available star distribution, country, website and exact profile link. Publisher URL, template ID, retrieval timestamp and response hashes provide provenance. Missing email, phone, address or categories are omitted. Regional profile paths are preserved as supplied.

extractedAt is the retrieval time of the first-party public widget response. It is not the time Trustpilot last recalculated a rating. Available source cache-age and date headers are included; their absence is not represented as zero. Only business summaries are emitted, although the native widget response may also contain publicly displayed reviews.

Two anonymized illustrative examples follow; they are documentation examples, not runtime output:

```json
[
 {"businessUnitId":"111111111111111111111111","displayName":"Example Shop","identifyingName":"example.com","trustScore":4.2,"numberOfReviews":125,"trustpilotUrl":"https://www.trustpilot.com/review/example.com","dataMode":"live_public_widget"},
 {"businessUnitId":"222222222222222222222222","displayName":"Example Regional Shop","identifyingName":"example.org/es","trustScore":4.0,"numberOfReviews":40,"trustpilotUrl":"https://es.trustpilot.com/review/example.org/es","dataMode":"live_public_widget"}
]
```

### Failure handling and limits

Only HTTPS company URLs are accepted. Redirects, access denials and missing/invalid widget configuration stop the run without identity, cookie, proxy or template rotation. Requests are sequential, separated per origin, bounded in size and time, and capped at sixty per run. No vendor API key or Apify proxy is required for these source requests. Apify platform execution and configured dataset-event charges still apply in the cloud.

Inspect SOURCE_METADATA and RUN_SUMMARY in the default key-value store. ERROR_DIAGNOSTIC is separate from the dataset on failure. Successful output must be verified locally and on the actual production build before an operator clears maintenance.

# Actor input Schema

## `startUrls` (type: `array`):

One to twenty company pages. Only their published business/template pair is used; denied widgets are not retried.

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

A cap. One supplied business can return one result; no padding.

## `query` (type: `string`):

Optional case-insensitive filter over supplied business results. This is not global Trustpilot search.

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

Keep native business summaries whose score meets this minimum.

## `minReviews` (type: `integer`):

Keep businesses whose native total review count meets this minimum.

## `sampleMode` (type: `boolean`):

Must be false. Synthetic or static results are never output.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.bulk.com/es/bulk-reviews"
    }
  ],
  "maxItems": 10,
  "query": "",
  "minTrustScore": 0,
  "minReviews": 0,
  "sampleMode": false
}
```

# Actor output Schema

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

Dataset containing the Actor's Trustpilot business results.

## `files` (type: `string`):

Run summary and failure diagnostics, not scraped business 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 = {
    "startUrls": [
        {
            "url": "https://www.bulk.com/es/bulk-reviews"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("jobscrawler/trustpilot-business-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 = { "startUrls": [{ "url": "https://www.bulk.com/es/bulk-reviews" }] }

# Run the Actor and wait for it to finish
run = client.actor("jobscrawler/trustpilot-business-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 '{
  "startUrls": [
    {
      "url": "https://www.bulk.com/es/bulk-reviews"
    }
  ]
}' |
apify call jobscrawler/trustpilot-business-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jobscrawler/trustpilot-business-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/PZWgMcNG9o0Reent2/builds/DzFCc7Z5NMaSALNtU/openapi.json
