Trustpilot Product Review Summary API
Read source-qualified per-star SKU or SKU-group counts and aggregate attributes from an entitled public product widget, keeping imported reviews separate.
- 1 credit per call
- Failed calls are free
- Updated
- trustpilot.product.summary.get
{ "display_name": "Mabel & Fox", "identifying_name": "mabelandfox.com", "product_identity_verified": false, "profile_url": "https://www.trustpilot.com/review/mabelandfox.com", "template_id": "57177697fdb1180308e3815f", "imported": { "review_count": 39, "stars_average": 4.9, "distribution": { "five_stars": 37, "four_stars": 1, "one_star": 0, "three_stars": 1, "two_stars": 0 } }, "trustpilot": { "review_count": 4, "stars_average": 4, "distribution": { "five_stars": 3, "four_stars": 0, "one_star": 1, "three_stars": 0, "two_stars": 0 } }, "attributes": [ { "name": "Quality", "rating": 5, "id": "attributes.default.quality", "rating_count": null, "scale_max": 5, "scale_min": 1 }, { "name": "Value for money", "rating": 4.2, "id": "attributes.default.value-for-money", "rating_count": null, "scale_max": 5, "scale_min": 1 } ]}
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| business_unit_id | string | yes | Business unit identifier. | 615bed25d9362e001de1d4d9 |
| sku | string | yes | One SKU or up to twenty distinct comma-separated SKUs from the merchant product widget; zero reviews does not verify product existence. | ARM - Under The Sea _010 |
| expected_identifying_name | string | no | Optional exact source business-domain/path guard. | mabelandfox.com |
| locale | string | no | Locale to use for the request. Default: en-US. |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | Example |
|---|---|---|
| display_name | string | Mabel & Fox |
| attributes | array | 2 records |
| attributes[].id | string | attributes.default.quality |
| attributes[].name | string | Quality |
| attributes[].rating | integer | 5 |
| attributes[].rating_count | null | null |
| attributes[].scale_max | integer | 5 |
| attributes[].scale_min | integer | 1 |
| identifying_name | string | mabelandfox.com |
| imported | object | 3 fields |
| imported.distribution | object | 5 fields |
| imported.distribution.five_stars | integer | 37 |
| imported.distribution.four_stars | integer | 1 |
| imported.distribution.one_star | integer | 0 |
| imported.distribution.three_stars | integer | 1 |
| imported.distribution.two_stars | integer | 0 |
| imported.review_count | integer | 39 |
| imported.stars_average | number | 4.9 |
| product_identity_verified | boolean | false |
| profile_url | string | https://www.trustpilot.com/review/mabelandfox.com |
| template_id | string | 57177697fdb1180308e3815f |
| trustpilot | object | 3 fields |
| trustpilot.distribution | object | 5 fields |
| trustpilot.distribution.five_stars | integer | 3 |
| trustpilot.distribution.four_stars | integer | 0 |
| trustpilot.distribution.one_star | integer | 1 |
| trustpilot.distribution.three_stars | integer | 0 |
| trustpilot.distribution.two_stars | integer | 0 |
| trustpilot.review_count | integer | 4 |
| trustpilot.stars_average | integer | 4 |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "trustpilot.product.summary.get", "input": { "business_unit_id": "615bed25d9362e001de1d4d9", "expected_identifying_name": "mabelandfox.com", "sku": "ARM - Under The Sea _010" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "trustpilot.product.summary.get", "input": { "business_unit_id": "615bed25d9362e001de1d4d9", "expected_identifying_name": "mabelandfox.com", "sku": "ARM - Under The Sea _010" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "trustpilot.product.summary.get", "input": { "business_unit_id": "615bed25d9362e001de1d4d9", "expected_identifying_name": "mabelandfox.com", "sku": "ARM - Under The Sea _010" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
With Upscrape, get the Trustpilot product review summary for business unit id "615bed25d9362e001de1d4d9", expected identifying name "mabelandfox.com" and sku "ARM - Under The Sea _010". Tell me what it costs before you run it, then show the results as a table.
More from the Trustpilot API
Trustpilot Product Review Summary API FAQ
The short answers. The docs have the long ones.
How much does the Trustpilot Product Review Summary API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send business_unit_id and sku. The input fields below list every option with its type and limits.
Do I need a Trustpilot login?
No. It reads public Trustpilot data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds trustpilot.product.summary.get, checks its price and runs it with the same credits as the REST API.
Your first Trustpilot call is free.
Up to 100 free credits to start, no card needed.