Trustpilot
Trustpilot Reviews API
One page of 20 Trustpilot reviews for a business, filtered by stars, language, date range, topics, text search, verified-only and with-replies, sorted by recency or relevance. Each review carries its rating, title, full text, dates, verification, the reviewer's public summary and the business reply. Up to 10 pages (200 reviews) per filter combination. Costs 2 credits per request.
Authorizations
AuthorizationstringheaderrequiredBearer authentication header of the form Bearer <token>, where <token> is your Scavio API key (e.g. Bearer sk_live_your_key).
Body
application/jsondomainstringThe business's website domain as listed on Trustpilot. Pass exactly one of domain or url.
Example: nordvpn.com
urlstringA trustpilot.com/review/<domain> page URL, from any Trustpilot country site. Alternative to domain.
Example: https://www.trustpilot.com/review/nordvpn.com
pageintegerdefault:1Reviews page, 1-10, 20 reviews per page. Trustpilot serves at most 10 pages per filter combination; see Notes for reaching more.
Example: 2
starsinteger[]Only reviews with these star ratings, 1-5. One or more values.
Example: [1, 2]
languagestringdefault:all2-letter review language code, or all.
Example: en
date_rangeenum<string>Only reviews published in this window, counted back from today.
Example: last30days
last30days— The last 30 days.last3months— The last 3 months.last6months— The last 6 months.last12months— The last 12 months.
sortenum<string>default:recencyReview order.
Example: relevance
recency— Newest first.relevance— Trustpilot's relevance order.
verified_onlybooleandefault:falseOnly verified reviews.
Example: true
with_repliesbooleandefault:falseOnly reviews the business replied to.
Example: true
topicsstring[]Up to 10 topic ids, taken from the topics array of the Business endpoint.
Example: ["customer_service"]
searchstringOnly reviews containing this text, 1-100 characters.
Example: refund
Notes
200 reviews per filter combination. Trustpilot serves at most 10 pages of 20 reviews for any one combination of filters, so a single query reaches at most 200 reviews. The response tells you where you stand: max_page is the last page you can request for this combination, and total_filtered counts every review that matches, including the ones past page 10. In the captured example, NordVPN has 6,294 English 1- and 2-star reviews, of which one query can read 200.
Reaching more: slice the filters. Each different combination is its own set of up to 200, so splitting one large set into several smaller ones reads more of it:
- stars: query each rating on its own (
[1],[2]...[5]). The five slices do not overlap. - language: query each language the business has reviews in. The Business endpoint's
languagesarray lists them with counts. Languages do not overlap either. - date_range: the windows all count back from today and nest inside each other (
last30dayssits insidelast3months), so a date range narrows a slice rather than partitioning it. Use it to read the newest reviews of a busy slice, and readtotal_filteredfor review velocity: the count of new reviews in the last 30 days, 3, 6 or 12 months. topics,search,verified_only,with_repliesandsort: "relevance"each return a different subset, which overlaps with the others. Deduplicate onreview_idwhen you combine slices.
What slicing cannot do. A stars x language grid reads up to 200 reviews per cell. When a single cell holds more than 200 reviews (5-star English reviews of a large brand, for example), you get the newest 200 of that cell, or the 200 most relevant with sort: "relevance", not its full history. For most small and mid-size businesses every cell is under 200 and the grid covers every review.
Cost. Every page is 2 credits. One full slice is 10 pages, so 20 credits for 200 reviews; a 5-star x 2-language grid at full depth is at most 200 credits for up to 2,000 reviews. Stop at max_page, which is lower than 10 for small slices.
Request
from scavio import ScavioClient
client = ScavioClient(api_key="sk_live_your_key")
# Slice by stars x language: each cell is its own set of up to 200 reviews.
seen = {}
for language in ["en", "de"]:
for star in [1, 2, 3, 4, 5]:
page = 1
while True:
res = client.trustpilot.reviews(
domain="nordvpn.com", stars=[star], language=language, page=page
)
data = res["data"]
for r in data["reviews"]:
seen[r["review_id"]] = r
if page >= data["max_page"]:
break
page += 1
print(len(seen), "unique reviews")Response