Trustpilot API

Read Trustpilot reviews and TrustScore with one API

The Trustpilot API returns company reviews, TrustScore and profile data as clean JSON.

T
/trustpilot/v1

12 active endpoints. Every call is 1 credit.

  • POST/trustpilot/v1/company/reviews
  • POST/trustpilot/v1/company/details
  • POST/trustpilot/v1/category/browse
  • POST/trustpilot/v1/category/companies
  • POST/trustpilot/v1/category/recently-reviewed
  • POST/trustpilot/v1/category/newest
  • POST/trustpilot/v1/category/details
  • +5 more

What Trustpilot endpoints does ReefAPI ship?

12 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.

12 endpoints

company/reviews

1 cr

Get a company's Trustpilot reviews and its full profile from trustpilot.com.

required
company
optional
maxReviews, includeCompany, sort, date_posted, rating, verified, with_replies, query, languages, page, locale

company/details

1 cr

The full Trustpilot company profile WITHOUT reviews (cheaper than company/reviews when you on…

required
company
optional
locale

category/browse

1 cr

List the companies in a Trustpilot category (20/page) → each company's name, domain, TrustSco…

required
categoryId
optional
page, cursor, locale, sort, country, min_rating, claimed

category/companies

1 cr

List the companies in a Trustpilot category (20/page), ranked → each company's name, domain,…

required
categoryId
optional
page, locale, sort, country, min_rating, claimed

category/recently-reviewed

1 cr

The companies in a Trustpilot category that were reviewed most recently → name, domain, Trust…

required
categoryId
optional
locale

category/newest

1 cr

The newest companies added to a Trustpilot category → name, domain, TrustScore, review count…

required
categoryId
optional
locale

category/details

1 cr

Details of a Trustpilot category → its display name, the number of businesses in it, and its…

required
categoryId
optional
locale

category/search

1 cr

Search Trustpilot categories by keyword → matching categories with their id and display name…

required
query
optional
locale

company/search

1 cr

Search Trustpilot for companies by name (10 matches/page) → each match's name, domain, TrustS…

required
query
optional
page, cursor, min_rating, min_review_count, locale

consumer/details

1 cr

A Trustpilot consumer's public profile → display name, country, number of reviews written, an…

required
consumer_id
optional
locale

consumer/reviews

1 cr

Every review a Trustpilot consumer has written across all companies → each review's company,…

required
consumer_id
optional
page, cursor, locale

reviewer/profile

1 cr

Alias of consumer/details + consumer/reviews.

required
consumer_id
optional
page, cursor, locale

Every parameter, every allowed value →

Trustpilot API

3 of 12 endpoints, ready to run

View docs ↗

The profile without the reviews: TrustScore, the star rating, how many reviews exist and how they split across one to five stars. This is the call you plan a full pull with.

1 credit1 required · 0 optional
POST/trustpilot/v1/company/details
ok3314 ms · 1 records · sample
{
  "ok": true,
  "meta": {
    "api": "trustpilot",
    "endpoint": "company/details",
    "mode": "live",
    "latency_ms": 3314.4,
    "record_count": 1,
    "cache_hit": false
  },
  "data": {
    "company": {
      "domain": "gossby.com",
      "business_unit_id": "5dc962f10fdaf000012b2f08",
      "name": "Gossby",
      "trust_score": 4.2,
      "stars": 4,
      "number_of_reviews": 37665,
      "number_of_reviews_last_12_months": 1321,
      "rating_distribution": {
        "one": 3924,
        "two": 1110,
        "three": 1516,
        "four": 2829,
        "five": 28286,
        "total": 37665
      },
      "categories": [
        "Gift Shop",
        "Clothing Store",
        "Hobby Store"
      ],
      "is_claimed": true,
      "is_closed": false,
      "is_temporarily_closed": false,
      "is_collecting_reviews": false,
      "claimed_date": "2019-11-15T04:26:53.000Z",
      "reply_behavior": {
        "reply_percentage": 100,
        "average_days_to_reply": 0.24,
        "negative_reviews_with_replies": 222,
        "total_negative_reviews": 222,
        "last_reply_to_negative": "2026-08-26 03:03:09 UTC"
      },
      "verification": {
        "verified_payment_method": false,
        "verified_user_identity": true,
        "verified_by_google": true
      },
      "locations_count": 0,
      "website_url": "https://gossby.com",
      "website_title": "gossby.com",
      "profile_image_url": "//s3-eu-west-1.amazonaws.com/tpd/logos/5dc962f10fdaf000012b2f08/0x0.png",
      "contact_email": "[email protected]",
      "contact_phone": "(585) 366 8846",
      "contact_address": "6901 Riverport Dr",
      "contact_city": "Louisville",
      "contact_country": "US",
      "contact_zip": "40258",
      "rankings": [],
      "breadcrumb": [
        "Shopping & Fashion",
        "Clothing & Underwear",
        "Clothing Store"
      ],
      "topics": [
        {
          "topic": "Order",
          "summary": null,
          "sentiment": null
        },
        {
          "topic": "Delivery service",
          "summary": null,
          "sentiment": null
        },
        {
          "topic": "Product",
          "summary": null,
          "sentiment": null
        }
      ],
      "description": null,
      "ai_summary": null
    }
  }
}
Real response, fetched from the live endpoint with the parameters on the left — trimmed to the first few rows, with seller names left out. Press Try it for the untrimmed response.

How the Trustpilot API works

Trustpilot is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.

01
Authenticate
x-api-key header

No OAuth app, no request signing, no per-site account. One key covers all 185 engines.

02
Call
POST /trustpilot/v1/…

Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.

03
Pay
1 credit per call

Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.

04
Read
{ ok, data, meta, error }

One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.

One call to plan the pull, five to collect it

A single reviews call stops at 200 no matter what you ask for. Star buckets do not overlap, so the way to a thousand reviews is five narrow calls instead of one wide one — and the profile call tells you in advance how many sit in each bucket.

01details
POST/trustpilot/v1/company/details
{"company": "gossby.com"}

rating_distribution gives you {one, two, three, four, five, total}. Any bucket under 200 will come back whole.

02reviews
POST/trustpilot/v1/company/reviews
{"company": "gossby.com", "rating": "1", "maxReviews": 200}

One bucket per call. Repeat for 2, 3, 4 and 5 — measured, the buckets share no review ids.

03reviews
POST/trustpilot/v1/company/reviews
{"company": "gossby.com", "maxReviews": 200}

The unfiltered call last. It is the newest 200 across all stars, so it only adds whatever posted since.

About a thousand unique reviews for a large company, and everything for a small one. Reviews are metered per 50 rows returned, so those six calls cost 24 credits, not 6.

request
curl -X POST https://api.reefapi.com/trustpilot/v1/company/details \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"company":"lendingclub.com"}'
response envelope
{
  "ok": true,
  "data": { … },
  "meta": {
    "api": "trustpilot",
    "endpoint": "company/details",
    "mode": "live",
    "latency_ms": …,
    "record_count": …
  },
  "error": null
}

TrustScore, stars and the star distribution are three different numbers

A Trustpilot page shows one rating, but the payload carries three views of it and they do not agree by design. trust_score is Trustpilot's own weighted score, stars is that score rounded for display, and rating_distribution is the raw count of reviews per star, whose arithmetic mean is a fourth number again. Every figure below came from a measured company/details call.

FieldWhat it isMeasured
trust_scoreA float from 1 to 5 with one decimal. Trustpilot's own weighted score, which favors recent reviews.gossby.com 4.2, amazon.com 1.6, ryanair.com 1.3
starstrust_score rounded to the nearest half. A display value, never more precise than the score.4.2 became 4.0, 1.6 became 1.5, and 1.3 also became 1.5
mean of rating_distributionNot returned, and not equal to trust_score. Compute it only if you want the unweighted average.gossby averages 4.339 against a TrustScore of 4.2; amazon.com averages 2.020 against 1.6
rating_distributionKeys are the English words one, two, three, four and five, plus total. Not "1" through "5".{one: 3924, two: 1110, three: 1516, four: 2829, five: 28283, total: 37662}
number_of_reviews vs number_of_reviews_last_12_monthsA lifetime count and a trailing-year count, both on the company object.37662 lifetime against 1321 in the last twelve months
business_unit_id24 hex characters. review_id and reviewer_id use the same shape.5dc962f10fdaf000012b2f08 for gossby.com; a review came back as 6a8df0a36dc0d1236b16f7b0
is_verified vs verification_levelA boolean and a string, carrying different information.false with "not-verified", false with "invited", true with "verified"
sourceHow the review reached Trustpilot."Organic" and "BasicLink" both appeared on one company
published_date vs experience_dateISO 8601 UTC. experience_date is date-only, so its time is always midnight.published 2026-08-25T21:44:35.000Z about an experience dated 2026-08-24T00:00:00.000Z
page and maxReviewsThe logged-out view holds 20 reviews per page across 10 pages, so 200 per view is the ceiling.A capped call returned status "PARTIAL" with a notes field saying so

The company actions and the category actions name their fields differently. company/details returns business_unit_id with categories as plain strings; category/companies returns businessUnitId with categories as objects of {categoryId, displayName, isPrimary, isPredicted}. Do not point one parser at both.

Can you get all of them, and what does a thousand cost

Measured against the live site on 2026-08-27 on gossby.com (37,665 reviews) and exhalecoffee.com. Two of these rows go against us. They are here because a buyer who discovers the 200 ceiling after building on us is a refund, and a buyer who reads it here is a customer.

What 1,000 reviews cost

Reviews are billed per 50 rows returned, not per call: a 200-review pull is 4 credits and the five-bucket strategy above is 20. Failed calls are free, so a company that turns out to have 60 reviews costs 2 credits, not 20.

How deep one call goes

Against us: 200 rows, whatever you ask for. maxReviews 200, 1,000 and 5,000 all returned exactly 200 — the schema's 20,000 maximum is the parameter's range, not the public view's depth. page moves the window rather than extending it (page 3 returned 160) and walls at page 10.

How you get past 200

One star rating per call. Measured on gossby: the 1-star call and the 3-star call each returned their own 200 and shared zero review ids; the unfiltered call overlapped each only partly. Five buckets is about a thousand unique reviews on a company with 37,665.

Do you know what you missed

Every result carries total_reviews, completeness_pct and status. A 3-star pull on exhalecoffee.com came back 87 of 87, status COMPLETE; the same call on gossby came back 200 with status PARTIAL. You never have to infer it.

Fields that arrive filled

On 200 rows: review id, star rating, title, body, language, published date, experience date and verified flag on every single one; the company's reply on 98%. Nothing in this set came back as an empty string.

What people build with Trustpilot

The jobs this data is most often used for.

12

endpoints

1

credit per call

01

Support and reputation teams call company/reviews to monitor new reviews and TrustScore changes for their own domain.

02

Market researchers use category/companies to benchmark every competitor's rating in a category.

03

Review-aggregation platforms pull company/details to show a live TrustScore without maintaining a scraper.

What Trustpilot data costs

The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.

Full pricing →
$0.67–$1.50 / 1,000 credits
  • 1,000 free credits on signup, no card
  • One key, all 185 APIs, one credit pool
  • Failed and blocked calls are never charged
  • Credits roll over and never expire

Call it in two lines

Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.

curl
curl -X POST https://api.reefapi.com/trustpilot/v1/company/details \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"company":"lendingclub.com"}'
python
import requests

r = requests.post(
    "https://api.reefapi.com/trustpilot/v1/company/details",
    headers={"x-api-key": REEF_KEY},
    json={
  "company": "lendingclub.com"
},
)
print(r.json()["data"])
FAQ

Have a question? We got answers.

The questions people actually ask before wiring up Trustpilot.

Get a free key →
Why does trust_score not match the average of rating_distribution?

Because TrustScore is a weighted score rather than an arithmetic mean. It gives more weight to recent reviews and to a company's review volume, so it lags the raw average when a company's older reviews were better. Measured: gossby.com's distribution averages 4.339 but its TrustScore is 4.2, and amazon.com's distribution averages 2.020 against a TrustScore of 1.6. If you want the unweighted average, compute it from rating_distribution yourself, since both numbers arrive in the same response.

What is the difference between trust_score and stars?

stars is trust_score rounded to the nearest half, and that is all it is. Measured across three companies: 4.2 became 4.0, 1.6 became 1.5, and 1.3 also became 1.5. So stars carries strictly less information, and two companies half a point apart can end up sharing the same star value. Sort and threshold on trust_score, and use stars only when you are rendering a star graphic.

Why does rating_distribution use words as keys?

Because that is Trustpilot's own shape, and we pass it through rather than renaming keys you may later want to match against their site. The object is {one, two, three, four, five, total}, so distribution["5"] is undefined and distribution.five is 28283. total is included, and it equalled number_of_reviews on every company measured (37662 for gossby.com), which makes it a cheap integrity check on your own ingestion.

is_verified is false but verification_level says "invited". What does that mean?

They answer different questions. verification_level describes where the review came from, and the measured values are "verified", "invited" and "not-verified", while is_verified is true only for the first of those. So an invited review is a real review the company solicited, not a verified purchase. The separate source field names the mechanism: "Organic" for someone who found the page themselves, "BasicLink" for an invitation link. Filtering with verified=true does work, returning only rows where is_verified is true and verification_level is "verified".

I asked for reviews and got fewer than the company has. Why?

The logged-out Trustpilot view serves 20 reviews per page across at most 10 pages, so 200 per view is the ceiling and a larger maxReviews will not break it. The response says so plainly: a measured call returned scraped_count 5 against total_reviews 37662, status "PARTIAL", completeness_pct 0.0 and a notes field reading "Limited by maxReviews=5; 37662 reviews exist. Raise maxReviews (up to 200) for more." Read status and notes instead of assuming the array you received is everything.

What is the difference between published_date and experience_date?

published_date is when the review was posted and carries a real time; experience_date is when the customer says the purchase or interaction happened and is date-only, so its time component is always 00:00:00. A measured review was published 2026-08-25T21:44:35.000Z about an experience dated 2026-08-24T00:00:00.000Z. Use published_date for recency and monitoring, and experience_date if you are correlating reviews against your own order dates. updated_date stays null unless the reviewer edited it.

Several profile fields came back null or empty. Which ones should I not count on?

On the three companies measured, rankings[] was empty on all of them, amazon.com and ryanair.com included, and description, ai_summary and every topics[].summary and topics[].sentiment came back null. topics[] itself was populated with 15 topic labels such as "Order" and "Delivery service", just without their summaries. Treat those fields as opportunistic: render them when they exist, and do not build a page section that breaks when they are null.

What does reply_behavior actually tell me?

How responsive the business is, with the negative-review case broken out separately, which is the number worth watching. A measured company returned reply_percentage 99.5495, average_days_to_reply 0.24, and negative_reviews_with_replies 221 out of total_negative_reviews 222, plus last_reply_to_negative as a "YYYY-MM-DD HH:MM:SS UTC" string. reply_percentage is an unrounded float, so round it at display time. It sits alongside verification{verified_payment_method, verified_user_identity, verified_by_google}, which are three independent booleans rather than one trust flag.

What is the Trustpilot API?

Trustpilot API is a ReefAPI endpoint group for company reviews, ratings and profiles. It returns live JSON through POST requests under /trustpilot/v1.

Is the Trustpilot API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Trustpilot calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Trustpilot login or account?

No login to Trustpilot is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Trustpilot data?

The page example is captured from a live company/reviews call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Trustpilot API use?

Trustpilot actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Trustpilot from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call trustpilot actions with the same key, credit pool and JSON envelope used by normal REST requests.

14 Reputation & Reviews APIs on the same key

One key, one credit pool, one response envelope. If you are pulling Trustpilot, you are one call away from the rest of the category — no second contract, no second integration.

Try it on your own data before you pay anything

The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.

Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-08-27.