---
title: "Trustpilot Reviews API: Any Company's Reviews as JSON"
description: "Get any company's Trustpilot reviews as JSON with one GET to /v1/trustpilot/company-reviews. Parameters, a real Amazon response and 1 credit per call."
url: https://perceptlayer.com/blog/trustpilot-reviews-api
---

[Blog](https://perceptlayer.com/blog) / [API guides](https://perceptlayer.com/blog/category/api-guides)

# Trustpilot Reviews API: Any Company's Reviews as JSON

23 Jul 2026 Perceptlayer 8 min read

To get a company's Trustpilot reviews as JSON, call `GET /v1/trustpilot/company-reviews` with the company's domain in `company_domain`. The response opens with the business profile (trust score, review counts, categories), then lists reviews with a star rating, title, text, dates and language for each. Each successful call costs 1 credit and a failed call costs nothing. The endpoint is addressed by a company's domain, so one request shape works for any company you look up.

## Key takeaways

-   `GET /v1/trustpilot/company-reviews` takes one required parameter, `company_domain`, and is addressed by the company's domain rather than your own account.
-   Filter with `rating`, `verified`, `with_replies`, `query`, `date_posted`, `sort` and `languages`; page with `page` and `per_page`.
-   Use `/v1/trustpilot/company-search` to find a domain from a name, and `/v1/trustpilot/company-details` for the profile alone.
-   Every Trustpilot endpoint costs 1 credit on success. 1,000 calls cost 1,000 credits, which fits the free tier of 1,000 credits a month.
-   The recorded Amazon response shows `numberOfReviews: 49830` and `trustScore: 1.5`, then `reviews` and `relevantReviews` arrays whose entries carry `rating`, `title`, `text`, `dates` and `language`.
-   Review entries also include a `consumer` object with a display name, so decide before you store or republish anything.

## Can you get any company's reviews from Trustpilot's official API?

Trustpilot's developer site describes its Trustpilot for Business API as a way to send invitations, showcase reviews and reply to feedback ( [Trustpilot Developers](https://developers.trustpilot.com/), 2026). Access to Trustpilot's global database of business profiles and consumer reviews is listed there as a separate offering, Data Solutions. That page doesn't spell out account requirements for either, so check Trustpilot's terms for the access you'd need.

If you're managing your own reviews, the Business API is described for that job. This guide covers a different shape: one GET addressed by a company's domain, which suits reading reviews for competitors, suppliers, merchants or a list of domains.

## How do you make your first call?

You need an API key and one request. [Get a free API key](https://perceptlayer.com/signup), which gives you 1,000 free credits every month after you verify an email address, with no credit card. Keys start with `sk_live_` and go in the `X-API-Key` header, as described in [the authentication docs](https://docs.perceptlayer.com/authentication).

Then search for the company to confirm its domain:

```bash
curl "https://api.perceptlayer.com/v1/trustpilot/company-search?query=amazon" \
  -H "X-API-Key: $API_KEY"
```

Pass the domain you find to the reviews endpoint:

```bash
curl "https://api.perceptlayer.com/v1/trustpilot/company-reviews?company_domain=amazon.com&languages=all" \
  -H "X-API-Key: $API_KEY"
```

You can also run either call in the playground on [the Trustpilot API page](https://perceptlayer.com/apis/trustpilot) before writing any code. The [quick start](https://docs.perceptlayer.com/quickstart) covers the same steps for other APIs.

## Which endpoints does the Trustpilot API have?

The Trustpilot API has six endpoints, all `GET`, all 1 credit. Three of them do most of the work for a review workflow: search to resolve a name to a domain, details for the profile, and reviews for the review text itself. The other three list businesses by category, categories and countries.

| Path | Returns | Required parameters | Credits |
| --- | --- | --- | --- |
| [`/v1/trustpilot/company-search`](https://perceptlayer.com/apis/trustpilot/company-search) | Company Search | `query` | 1 |
| [`/v1/trustpilot/company-details`](https://perceptlayer.com/apis/trustpilot/company-details) | Company Details | `company_domain` | 1 |
| [`/v1/trustpilot/company-reviews`](https://perceptlayer.com/apis/trustpilot/company-reviews) | Company Reviews | `company_domain` | 1 |
| [`/v1/trustpilot/businesses`](https://perceptlayer.com/apis/trustpilot/businesses) | Businesses | `category` | 1 |
| [`/v1/trustpilot/categories`](https://perceptlayer.com/apis/trustpilot/categories) | Categories | none | 1 |
| [`/v1/trustpilot/countries`](https://perceptlayer.com/apis/trustpilot/countries) | Countries | none | 1 |

The `businesses` endpoint lists companies in a category and takes optional `trustscore`, `claimed`, `country` and `sort` filters. `categories` and `countries` take no parameters and return the category and country lists.

## What parameters does the company reviews endpoint take?

`company-reviews` has one required parameter, `company_domain` (up to 255 characters), and eleven optional ones that filter, sort and page the results. The catalogue documents the types and allowed values below and nothing more, so test a filter in the playground on the [Company Reviews page](https://perceptlayer.com/apis/trustpilot/company-reviews) before relying on it.

| Parameter | Type | Notes |
| --- | --- | --- |
| `company_domain` | string, required | Up to 255 characters |
| `page` | integer | Page number |
| `per_page` | integer | Reviews per page |
| `verified` | boolean | Optional |
| `with_replies` | boolean | Optional |
| `query` | string | Up to 200 characters |
| `rating` | string | Optional |
| `sort` | string | `relevance` or `recency` |
| `locale` | string | One of 23 values, such as `en-US`, `de-DE`, `fr-FR`, `pt-BR`, `ja-JP` |
| `languages` | string | Review languages; the recorded call below uses `all` |
| `fields` | string | Up to 500 characters |
| `date_posted` | string | `any`, `last_12_months`, `last_6_months`, `last_3_months` or `last_30_days` |

A call that sets `verified`, `sort` and `date_posted` looks like this:

```bash
curl "https://api.perceptlayer.com/v1/trustpilot/company-reviews?company_domain=amazon.com&verified=true&sort=recency&date_posted=last_30_days" \
  -H "X-API-Key: $API_KEY"
```

## What does the response look like?

We recorded a call for Amazon with `languages=all`. The excerpt below is the start of that response, trimmed with `…`. It opens with `businessUnit`, the profile, and the figures are a snapshot, so the counts will differ when you run it.

```json
{
  "pageUrl": "https://www.trustpilot.com/review/www.amazon.com?languages=all",
  "businessUnit": {
    "id": "46ad346800006400050092d0",
    "displayName": "Amazon",
    "identifyingName": "www.amazon.com",
    "numberOfReviews": 49830,
    "numberOfReviewsLast12Months": 9156,
    "trustScore": 1.5,
    "websiteUrl": "https://www.amazon.com",
    "stars": 1.5,
    "categories": [
      {
        "id": "shoe_store",
        "name": "Shoe Store",
        "isPrimary": false
      },
      …
    ],
    "isClaimed": true,
    "isClosed": false,
    "countryCode": "GB",
    "activity": {
      "claimedDate": "2015-02-18T19:08:43.000Z",
      "replyBehavior": {
        "averageDaysToReply": 0,
        "negativeReviewsWithRepliesCount": 0,
        "replyPercentage": 0,
        "totalNegativeReviewsCount": 7932
      },
      …
    }
  },
  "reviews": [
    {
      "text": "Disgusting company run by disgusting and greedy people …",
      "rating": 1,
      "labels": {
        "verification": {
          "isVerified": false,
          "verificationLevel": "not-verified"
        }
      },
      "title": "Disgusting company run by disgusting…",
      "likes": 0,
      "source": "Organic",
      "dates": {
        "experiencedDate": "2026-10-22T00:00:00.000Z",
        "publishedDate": "2026-10-23T01:55:36.000Z"
      },
      "language": "en",
      …
    },
    …
  ],
  "relevantReviews": [ … ],
  …
}
```

The review above is one entry from the recording, with fields trimmed and the `consumer` block left out. Field names stay as the source uses them, so the response is easy to map into a table. `numberOfReviews` and `numberOfReviewsLast12Months` give volume, `trustScore` and `stars` give the rating, and `activity.replyBehavior` holds reply figures for negative reviews: `averageDaysToReply: 0`, `negativeReviewsWithRepliesCount: 0`, `replyPercentage: 0` and `totalNegativeReviewsCount: 7932`. Treat them as a snapshot of what the API returned, not as a statement about how Amazon behaves.

Each review carries a `rating`, a `title`, `text`, a `likes` count, a `source`, a `language` code, and a `dates` object with `experiencedDate` and `publishedDate`. `labels.verification.isVerified` flags verification. In the recording, review text and titles that run long end in `…`.

### Why are there `reviews` and `relevantReviews`?

The recorded response has two separate arrays with the same entry shape. Both hold individual reviews with the fields above. In the recording, `reviews` holds two entries, both published on 2026-10-23, while `relevantReviews` holds entries published on 2026-10-22 and 2026-10-19, one of them with `likes: 2`. The recording doesn't show how either list is chosen, so read both and de-duplicate on each entry's `id` if you merge them.

The `filters` block comes after the lists. `filters.pagination` shows `currentPage: 1`, `totalPages: 2340`, `totalResults: 46782` and `perPage: 20`, and `filters.reviewStatistics.ratings` gives star counts: `one: 33636`, `two: 3004`, `three: 1869`, `four: 2423` and `five: 8898`. Note that `ratings.total` is 49830 while `totalNumberOfReviews` is 46782 in the same recording, so pick one figure and say which you used. Trustpilot explains how it calculates TrustScore in its [Trust Centre](https://corporate.trustpilot.com/trust) (2026), so read that before you compare `trustScore` across companies with very different review counts.

## How do you read these fields in Python?

Call `company-search`, pick the domain, then call `company-reviews` and read the profile and the review entries. We have no recorded `company-search` response, so its fields aren't shown here and the script doesn't parse them. It prints the start of the result so you can find the domain yourself, then sets `domain` by hand. The fields it reads afterwards are the ones in the Amazon recording.

```python
import json
import os

import requests

BASE = "https://api.perceptlayer.com/v1/trustpilot"
HEADERS = {"X-API-Key": os.environ["API_KEY"]}

def get(path, **params):
    r = requests.get(f"{BASE}/{path}", headers=HEADERS, params=params, timeout=30)
    r.raise_for_status()
    print("credits remaining:", r.headers.get("X-Credits-Remaining"))
    return r.json()

search = get("company-search", query="amazon")
print(json.dumps(search)[:500])  # inspect this to find the company's domain

domain = "amazon.com"  # set by hand from the search output

data = get("company-reviews", company_domain=domain, languages="all")
unit = data["businessUnit"]
reply = unit["activity"]["replyBehavior"]

print(unit["trustScore"], unit["numberOfReviews"])
print(reply["totalNegativeReviewsCount"], reply["replyPercentage"])

for review in data["reviews"]:
    print(
        review["rating"],
        review["dates"]["publishedDate"],
        review["text"][:80],
    )
```

Against the recorded call, the two profile lines read `1.5 49830` and `7932 0`, and the loop prints one line per entry in `reviews`, such as `1 2026-10-23T01:55:36.000Z Disgusting company run by disgusting and greedy people`. Two calls cost 2 credits. Loop over `data["relevantReviews"]` the same way if you want that list too. Skip `review["consumer"]` unless you have a reason to read it.

## How do you get just the company profile?

Call `company-details` when you only need the profile, such as a trust score for a list of suppliers. It takes `company_domain` (required) and an optional `locale`, and costs 1 credit.

```bash
curl "https://api.perceptlayer.com/v1/trustpilot/company-details?company_domain=amazon.com" \
  -H "X-API-Key: $API_KEY"
```

It costs the same 1 credit as a `company-reviews` call. We have no recorded response for this endpoint, so the [Company Details page](https://perceptlayer.com/apis/trustpilot/company-details) is the place to see its fields.

## How do you page through every review?

`page` and `per_page` are the paging parameters, both integers. The recording's `filters.pagination` block reports `currentPage`, `totalPages` and `perPage`, which is the place to check how far you have left to go. Each page is a separate call at 1 credit, so a limit on pages is also a limit on spend.

Two habits are a general paging pattern. Stop when a page comes back with no reviews rather than at a fixed count, and log the `X-Credits-Remaining` header the API returns on every success. The [pagination guide](https://perceptlayer.com/blog/paginate-web-data-api-python) has a safe loop in Python.

## What does it cost?

Every Trustpilot endpoint costs 1 credit per successful call, and failed calls cost nothing and return `X-Credits-Used: 0`. The free tier gives 1,000 credits a month. Purchased credits last 12 months, with no subscription and no seats; the [credits docs](https://docs.perceptlayer.com/credits) and [pricing page](https://perceptlayer.com/pricing) have the detail.

| Pack | Credits | Requests a second included |
| --- | --- | --- |
| Free | 1,000 a month | 1 |
| Starter | 10,000 | 5 |
| Build | 50,000 | 5 |
| Growth | 200,000 | 5 |
| Pro | 500,000 | 5 |
| Scale | 1,000,000 | 10 |
| Volume | 5,000,000 | 20 |

A worked example: checking the trust score of 500 suppliers with `company-details` is 500 calls × 1 credit = 500 credits, inside the free tier. Pulling 20 review pages for each of 100 companies is 100 × 20 = 2,000 calls × 1 credit = 2,000 credits, which fits the Starter pack's 10,000.

Scaling up, 500,000 review pages is 500,000 calls × 1 credit = 500,000 credits, exactly one Pro pack. See [pricing](https://perceptlayer.com/pricing) for what credits cost. Rate limits are per account and counted per minute; the pricing page also lists the faster rates you can choose at checkout.

## How do you handle errors and limits?

Errors return an HTTP status and a JSON body with `error.code`, `error.message` and `error.request_id`. For this API, check parameter values against the table above: `invalid_parameters` (422) is the code for bad parameters, alongside `not_found` (404) and `insufficient_credits` (402). Rate-limited (429) and temporarily unavailable (503) responses include a `Retry-After` header with the seconds to wait.

Treat 429 and 503 as retryable after that delay, and 4xx errors as bugs in the request. The [errors docs](https://docs.perceptlayer.com/errors) list every code and the [rate limits docs](https://docs.perceptlayer.com/rate-limits) cover 429 behaviour. Data is collected from publicly available sources and returned as found at the time of the call.

## Can an AI agent call this?

Yes. The MCP server at `https://api.perceptlayer.com/mcp` exposes `search_endpoints`, `get_endpoint` and `call_endpoint`. The first two only look up the catalogue and cost nothing; `call_endpoint` takes an endpoint ID and its parameters and spends 1 credit on success only.

An agent can then resolve a company name with `company-search`, fetch `company-reviews` and summarise recent complaints. See [the MCP docs](https://docs.perceptlayer.com/ai-agents) for setup, and [MCP vs function calling](https://perceptlayer.com/blog/mcp-vs-function-calling-web-data) for when each approach fits. For other review sources, the [Google Maps reviews guide](https://perceptlayer.com/blog/google-maps-reviews-api-parameters), the [App Store reviews guide](https://perceptlayer.com/blog/app-store-reviews-api), the [Google Play guide](https://perceptlayer.com/blog/google-play-store-api) and the [Glassdoor guide](https://perceptlayer.com/blog/glassdoor-salary-data-api) work the same way.

Next step: run the Amazon call above in the playground on [the Trustpilot API page](https://perceptlayer.com/apis/trustpilot), then swap in the domain you care about.

## APIs in this post

-   [Trustpilot **1 credit per call** · 6 endpoints](https://perceptlayer.com/apis/trustpilot)

## Frequently asked questions

### Do I need a Trustpilot account to use this?

You need a Perceptlayer API key, which is free to create, and the company's domain. The catalogue documents `company_domain` as the only required input and no Trustpilot credentials. Trustpilot's official Trustpilot for Business API is described as a way to send invitations, showcase reviews and reply to feedback ( [Trustpilot Developers](https://developers.trustpilot.com/), 2026). This endpoint is addressed by a company's domain instead.

### How much does it cost to pull a company's reviews?

One credit per successful call, whichever Trustpilot endpoint you use, so 1,000 calls × 1 credit = 1,000 credits. The free tier covers 1,000 credits a month, and failed calls are never billed. [Pricing](https://perceptlayer.com/pricing) shows what credits cost in the 10,000 to 5,000,000 credit packs.

### Do the responses include reviewer names?

Yes. Each review entry in the recording has a `consumer` object with a display name, an image URL, a country code and a review count. We left that block out of the excerpts and don't reproduce the names. Display names identify real people, so we'd leave them out of anything you publish. Check the terms and any privacy rules that apply to your use before you store them.

### Can I filter reviews by star rating or date?

The endpoint has a `rating` parameter (a string with no allowed values listed) and `date_posted`, which takes one of `any`, `last_12_months`, `last_6_months`, `last_3_months` or `last_30_days`. `sort` takes `relevance` or `recency`. Try the combination in the playground. Each call is 1 credit.

### How do I find a company's domain?

Call `company-search` with `query` set to the company name. You can narrow it with `country`, `min_rating` ( `any`, `3`, `4` or `4.5`) and `min_review_count` ( `any`, `25`, `50`, `100`, `250` or `500`). Then pass the domain you chose as `company_domain` to the reviews or details endpoint.

reviews trustpilot reputation api

## More from the blog

1.  [API guides](https://perceptlayer.com/blog/category/api-guides) 9 Jul 2026 Perceptlayer 8 min read
    
    ## [Google Maps Reviews API: Parameters, Requests and Cost](https://perceptlayer.com/blog/google-maps-reviews-api-parameters)
    
    Call GET /v1/google-maps/reviews with a business\_id from Simple Search. Every parameter, the sort values 1 to 4, and the cost: 1 credit per call.
    
2.  [API guides](https://perceptlayer.com/blog/category/api-guides) 2 Oct 2026 Perceptlayer 6 min read
    
    ## [AliExpress Product API: Search, Reviews and Shipping](https://perceptlayer.com/blog/aliexpress-api-product-search-reviews)
    
    Chain AliExpress search, product, product-reviews and product-shipping, with every required parameter, at 1 credit per call, and cost a 100-product review pull.
    
3.  [API guides](https://perceptlayer.com/blog/category/api-guides) 15 Sept 2026 Perceptlayer 7 min read
    
    ## [Google Maps Directions API Alternative: Routes as JSON](https://perceptlayer.com/blog/google-maps-directions-api-alternative)
    
    One GET to /v1/google-maps/directions returns a route as JSON for 1 credit. Parameters, a 15,000-route cost example and Google's per-request rates.
