Use cases / Trustpilot Reviews API
Trustpilot review monitoring
Who
Who runs this, and what for
| Team | What they decide with it |
|---|---|
| Support and CX | Which negative reviews need an answer today, and how quickly the team replies. |
| Product teams | Which complaints repeat across reviews after a release. |
| Marketing and brand | How TrustScore moves against competitors, and when to ask happy customers for reviews. |
| Investors and analysts | Whether customer sentiment about a company is improving or falling, before it shows up in results. |
Pipeline
The calls, step by step
01Find the companies to watch
Company search takes a name or domain fragment and returns matching profiles with their TrustScore and review count; the category endpoint lists every business in a Trustpilot category for one country, sorted by recommendation, latest review, or review count. Keep the domain from each result: it is the key for the next call.
GET /v1/reviews/search?query=bank · results.0
{ "id": "5060f52a00006400051bf99f", "name": "Happen Bank", "domain": "happen.com", "profile_url": "https://www.trustpilot.com/review/happen.com", "website_url": "https://happen.com", "logo_url": "https://s3-eu-west-1.amazonaws.com/tpd/logos/5060f52a00006400051bf99f/0x0.png", "trust_score": 4.7, "stars": 4.5, "review_count": 14830, "location": { "address": "88 Kearny Street, Suite 600", "city": "San Francisco", "zip_code": "94108", "country": "United States" }, "contact": { "email": null, "phone": "(888) 596-3157" }, "categories": [ { "id": "bank", "name": "Bank", "is_primary": false }, { "id": "financial_institution", "name": "Financial Institution", "is_primary": false } ], "is_recommended": false }Recorded response. Live values differ. 02Snapshot the profile
The company endpoint returns the business profile with each call: TrustScore, star rating, review count, rating distribution, whether the profile is claimed, and how the company replies to negative reviews. One call a day per company gives a time series of all of these, which Trustpilot does not provide.
GET /v1/reviews?domain=stripe.com&page=1 · business
{ "id": "50489e6800006400051ae0d6", "name": "Stripe", "domain": "stripe.com", "profile_url": "https://www.trustpilot.com/review/stripe.com", "website_url": "https://stripe.com", "logo_url": "https://s3-eu-west-1.amazonaws.com/tpd/logos/50489e6800006400051ae0d6/0x0.png", "trust_score": 1.6, "stars": 1.5, "review_count": 17504, "review_count_last_12_months": 1201, "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 } ], "categories": [ { "id": "payment_service", "name": "Payment Service", "is_primary": true } ], "category_path": [ { "id": "business_services", "name": "Business Services" }, { "id": "administration_services", "name": "Administration & Services" }, { "id": "payment_service", "name": "Payment Service" } ], "description": "Millions of businesses of all sizes—from startups to large enterprises—use Stripe’s software and APIs to accept payments, send payouts, and manage their businesses online. It's the payment infrastructure for the internet", "country_code": "US", "contact": { "email": null, "phone": null, "support_url": "https://support.stripe.com/contact", "address": "510 Townsend Street", "city": "San Francisco", "zip_code": "94103", "country": "United States" }, "is_claimed": true, "claimed_at": "2016-05-11T03:33:53.000Z", "is_closed": false, "is_temporarily_closed": false, "is_collecting_reviews": false, "uses_paid_features": false, "uses_ai_replies": false, "has_incentivised_reviews": false, "has_consumer_alert": false, "verification": { "payment_method": true, "user_identity": false, "google": false, "persona": false }, "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" }, "locations_count": 0 }Recorded response. Live values differ. 03Collect new reviews since the last run
Ask for sort=recency and language=all, then read pages until you reach the newest review you already stored. Twenty reviews come per page. Anonymous listings stop at page 10, so a company receiving more than about 200 reviews between runs needs a shorter interval, or one listing per star rating with stars=1 through stars=5: each filtered listing has its own ten pages.
GET /v1/reviews?domain=stripe.com&page=1 · pagination
{ "page": 1, "per_page": 20, "total_results": 14154, "total_pages": 708, "next_page": 2 }Recorded response. Live values differ.
Code
A script to start from
new_reviews.py
# Collect new Trustpilot reviews for a list of companies since the last run
# and flag the negative ones. Keeps the newest seen review id per company.
import json, os, pathlib, requests
API = "https://api.clair.im"
HEADERS = {"Authorization": f"Bearer {os.environ['CLAIR_API_KEY']}"}
COMPANIES = ["stripe.com", "adyen.com", "wise.com"]
STATE = pathlib.Path("seen.json")
seen = json.loads(STATE.read_text()) if STATE.exists() else {}
def listing(domain, page):
r = requests.get(f"{API}/v1/reviews", headers=HEADERS, timeout=60, params={
"domain": domain, "sort": "recency", "language": "all", "page": page})
r.raise_for_status()
return r.json()
for domain in COMPANIES:
new, page = [], 1
while page: # next_page is null after page 10, the anonymous limit
body = listing(domain, page)
if page == 1:
b = body["business"]
print(f"{domain}: TrustScore {b['trust_score']}, {b['review_count']} reviews")
fresh = []
for review in body["results"]:
if review["id"] == seen.get(domain):
break
fresh.append(review)
new += fresh
# Stop at last run's newest review; on a first run, keep page 1 only.
if len(fresh) < len(body["results"]) or domain not in seen:
break
page = body["pagination"]["next_page"]
for review in new:
if review["rating"] <= 2:
print(f" {review['rating']} stars: {review['title']!r} {review['url']}")
if new:
seen[domain] = new[0]["id"]
STATE.write_text(json.dumps(seen, indent=2))
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 |
|---|---|---|---|---|
| 20 companies, daily20 × 1 page × 30 days. Busy profiles need more than one page a day. | 600 | Pay as you go | $3.18 | $5.30 |
| 200 companies, daily200 × 1 page × 30 days. | 6,000 | Pay as you go | $31.80 | $5.30 |
| 1,000 companies, weekly, 3 pages1,000 × 3 pages × 4 weekly runs. | 12,000 | Pro | $49.99 | $4.17 |
| Category study: 5 categories, 2,000 profiles100 category pages for each of 5 categories, then one profile call per business found. | 2,500 | Pay as you go | $13.25 | $5.30 |
Limits
What to plan for
- Anonymous review listings stop at page 10, twenty reviews per page. The full history of a large company cannot be read in one listing; filtered listings (stars, date, language) each reach ten pages.
- Trustpilot.com shows English reviews by default. Pass language=all, or a language code, or reviews in other languages are left out.
- TrustScore is not the average of the stars shown. Trustpilot weights recent reviews more heavily and adds seven 3.5-star reviews to every company's calculation, so a new company starts near the middle.
- Reviews can be removed by Trustpilot or the author after you stored them. Keep the review URL to check that it is still public before you quote it.
- Clair reads public pages. It does not post replies or invitations; answer reviews in Trustpilot.
- Do not republish the reviews as a reviews product of your own. Show the author and the Trustpilot link wherever you display one.
FAQ
Common questions
Is this Trustpilot's official API?
No. Trustpilot's own APIs need a Trustpilot business account and cover mainly your own profile. Clair reads the public profile and review pages, the same ones any visitor sees, for any company.
Can I get reviews for companies that are not mine?
Yes. Any public profile works, which is what makes competitor tracking possible.
How do I catch every new review on a busy profile?
Poll more often, so fewer than 200 reviews arrive between runs. A company with 60 reviews a day is fully covered by a daily run that reads up to three pages.
Does it include the company's replies?
Yes. Each review has reply with the company's answer when there is one, and replies=true keeps only reviews that were answered.
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.