Use cases / Trustpilot Reviews API
Trustpilot competitor benchmarking
Last updated September 28, 2026. Response excerpts are recorded from the live API.
Who
Who runs this, and what for
| Team | What they decide with it |
|---|---|
| Customer experience teams | Whether reply rate and speed match the category leaders, and where to invest. |
| Marketing teams | Which competitors' customers are unhappy, and about what. |
| Analysts and investors | How customer sentiment compares across a sector. |
Pipeline
The calls, step by step
01List the category
Category listing returns the companies in a Trustpilot category for a country, sorted as you choose, with TrustScore, review count, location, and contact.
GET /v1/reviews/categories?category=bank&country=GB · results.0
{ "id": "5791ee7a0000ff0005929cc1", "name": "Atom bank", "domain": "atombank.co.uk", "profile_url": "https://www.trustpilot.com/review/atombank.co.uk", "website_url": "https://www.atombank.co.uk", "logo_url": "https://s3-eu-west-1.amazonaws.com/tpd/screenshotlogo-domain/5791ee7a0000ff0005929cc1/198x149.png", "trust_score": 4.8, "stars": 5, "review_count": 21771, "location": { "address": "The Pattern Shop", "city": "Newcastle upon Tyne", "zip_code": "NE1 3PD", "country": "United Kingdom" }, "contact": { "email": "customer.operations@atombank.co.uk", "phone": "0333 399 0050" }, "categories": [ { "id": "savings_bank", "name": "Savings Bank", "is_primary": false }, { "id": "private_sector_bank", "name": "Private Sector Bank", "is_primary": false }, { "id": "bank", "name": "Bank", "is_primary": true }, { "id": "mortgage_lender", "name": "Mortgage Lender", "is_primary": false }, { "id": "financial_institution", "name": "Financial Institution", "is_primary": false } ], "is_recommended": true }Recorded response. Live values differ. 02Read each company's profile
The reviews endpoint returns the business profile with each call: TrustScore, review count and the last 12 months' count, the rating distribution, claim status, and more.
GET /v1/reviews?domain=stripe.com&page=1 · business.rating_distribution
[ { "stars": 5, "count": 6721, "percent": 38.4 }, { "stars": 4, "count": 725, "percent": 4.1 }, { "stars": 3, "count": 469, "percent": 2.7 }, { "stars": 2, "count": 514, "percent": 2.9 }, { "stars": 1, "count": 9075, "percent": 51.8 } ]Recorded response. Live values differ. 03Compare reply behaviour
reply_behavior gives the share of negative reviews the company replied to, how many days it takes on average, and when it last replied. Leaders in most categories reply to nearly all of them.
GET /v1/reviews?domain=stripe.com&page=1 · business.reply_behavior
{ "negative_reply_rate": 100, "average_days_to_reply": 1.95, "negative_review_count": 1073, "negative_replied_count": 1073, "last_negative_reply_at": "2026-09-26T21:20:34.000Z" }Recorded response. Live values differ.
Code
A script to start from
trustpilot_benchmark.py
# Benchmark companies in a Trustpilot category: TrustScore, share of
# 1-star reviews, and how often each replies to negative reviews.
import csv, os, requests
API = "https://api.clair.im"
HEADERS = {"Authorization": f"Bearer {os.environ['CLAIR_API_KEY']}"}
CATEGORY, COUNTRY, PAGES = "bank", "GB", 2
def get(path, **params):
r = requests.get(f"{API}{path}", headers=HEADERS, timeout=60, params=params)
r.raise_for_status()
return r.json()
companies = []
for page in range(1, PAGES + 1):
body = get("/v1/reviews/categories", category=CATEGORY, country=COUNTRY,
sort="reviews_count", page=page)
companies += body["results"]
with open("benchmark.csv", "w", newline="") as f:
out = csv.writer(f)
out.writerow(["company", "trust_score", "reviews", "reviews_12m",
"one_star_pct", "negative_reply_rate", "days_to_reply"])
for c in companies:
b = get("/v1/reviews", domain=c["domain"])["business"]
one = next((d["percent"] for d in b["rating_distribution"] if d["stars"] == 1), None)
reply = b["reply_behavior"] or {}
out.writerow([b["name"], b["trust_score"], b["review_count"],
b["review_count_last_12_months"], one,
reply.get("negative_reply_rate"), reply.get("average_days_to_reply")])
Set CLAIR_API_KEY to a key subscribed to the Trustpilot Reviews API. Each call is one request against that API's monthly quota.
Cost
What it costs per month
| Schedule | Requests | Plan | Per month | Per 1,000 |
|---|---|---|---|---|
| 1 category, 40 companies, monthly2 category pages plus 40 profiles = 42 requests. | 42 | Pay as you go | $0.22 | $5.24 |
| 10 categories, 40 companies each, weekly420 requests × 4 weeks = 1,680. | 1,680 | Pay as you go | $8.90 | $5.30 |
| Whole category, 280 companies, monthly15 category pages plus 280 profiles = 295 requests. | 295 | Pay as you go | $1.56 | $5.29 |
Limits
What to plan for
- Trustpilot categories are self-chosen by companies, so a category can mix very different businesses. Filter by claimed profiles or minimum reviews.
- TrustScore is not the average star rating: Trustpilot weights recent reviews and adds a fixed prior. Compare TrustScore with TrustScore.
- Companies with few reviews have volatile scores. Set a minimum review count before ranking.
FAQ
Common questions
Does reading the profile cost one request?
Yes. Each reviews call returns the profile and one page of reviews, so the benchmark gets the newest reviews too at no extra cost.
Can I benchmark companies outside my country?
Yes. Category listing takes a country; profiles are global.
What does is_claimed mean?
The company has claimed its Trustpilot profile, which lets it reply to reviews and invite customers. Unclaimed profiles usually have no replies.
Run it on your own products
200 requests a month free on each API, no card. Enough to run the pipeline on a short list before choosing a plan.
Bloomberg News API
Associated Press API
Glassdoor API
Greenhouse Jobs API

Crunchbase API
Website Contacts API