Blog / API guides

Trustpilot Reviews API: Any Company's Reviews as JSON

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.

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, 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, 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.

Then search for the company to confirm its domain:

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:

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 before writing any code. The quick start 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 Company Search query 1
/v1/trustpilot/company-details Company Details company_domain 1
/v1/trustpilot/company-reviews Company Reviews company_domain 1
/v1/trustpilot/businesses Businesses category 1
/v1/trustpilot/categories Categories none 1
/v1/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 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:

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.

{
  "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 (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.

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.

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 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 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 and pricing page 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 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 list every code and the rate limits docs 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 for setup, and MCP vs function calling for when each approach fits. For other review sources, the Google Maps reviews guide, the App Store reviews guide, the Google Play guide and the Glassdoor guide work the same way.

Next step: run the Amazon call above in the playground on the Trustpilot API page, then swap in the domain you care about.

APIs in this post

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, 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 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.

  1. Google Maps Reviews API: Parameters, Requests and Cost

    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. AliExpress Product API: Search, Reviews and Shipping

    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. Google Maps Directions API Alternative: Routes as JSON

    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.

Start with 1,000 free credits

No password to set. We email you a sign-in link, and your key works on every API.

No credit card. 1,000 free credits a month.