Skip to main content
Glama
mambalabsdev

mcp-review-platform-reputation-enricher

Review Platform Reputation Enricher MCP Server

Smithery Glama score MCP Registry npm version npm downloads license mcpservers.org

An MCP server that resolves a company domain to its Trustpilot rating, review count and claimed status. It wraps the Mamba Labs Trustpilot Reputation Enricher actor on Apify and returns a Clay-ready flat JSON row to any MCP client.

What's Inside

Related MCP server: mcp-legal-entity-resolver

What it does

Give it a Trustpilot business unit id, or a company domain, and it returns the TrustScore, review count, star score, and the one to five star breakdown. One flat row per company. By default it reads Trustpilot's public TrustBox data endpoint, which Trustpilot's robots.txt allows. No Trustpilot API key is needed.

The business unit id is the reliable route: supplied, it always resolves. A domain alone resolves only when the company's own site embeds a Trustpilot widget, so most domains come back not_found without the id. A row's trustpilot_business_id can be fed back as the id on a later call. Setting publicPageAccess to unblocker reads Trustpilot's public company page through Apify Unblocker instead, which resolves a domain with no id and adds categories, claimed status, and verification. Trustpilot's robots.txt disallows those pages to automated agents, so that route is your call, and it spends Unblocker units from your own Apify account.

The tool keeps four kinds of empty apart: a refused request reports blocked, a domain with no business unit reports not_found, a value nobody could read reports not_extractable, and a source that was never queried reports skipped. G2, Capterra and Glassdoor ship as explicit skipped status columns, so the row shape does not change when a source is added.

All of the lookup runs on Apify. This package is a thin client that calls the actor and hands back the result unchanged.

Quick start

You need Node.js 18 or newer and an Apify account with an API token.

Add this to your Claude Desktop config:

{
  "mcpServers": {
    "mamba-review-platform-reputation-enricher": {
      "command": "npx",
      "args": ["-y", "@mambalabsdev/mcp-review-platform-reputation-enricher"],
      "env": {
        "APIFY_TOKEN": "your-apify-token"
      }
    }
  }
}

Get your token at https://console.apify.com/account/integrations, paste it in, and restart Claude Desktop. The get_trustpilot_reputation tool will be available.

Prerequisites

  • Node.js 18 or newer

  • An Apify account with an API token

Example prompts

  • "Get the Trustpilot rating for the business unit 4992d8e10000640005041a9a."

  • "What is the star breakdown for this company on Trustpilot?"

  • "Look up this domain's Trustpilot reputation and flag it only if it has at least 100 reviews."

  • "Is this company's Trustpilot profile claimed and verified? Use the public page route."

Inputs

  • company_domain (optional): bare company domain, for example monzo.com. Used to look for a Trustpilot business unit id in the company's own widget embed. Supplying trustpilotBusinessUnitId instead skips this step and always resolves.

  • company_name (optional): carried through to the output row for joining. The lookup is keyed on the business unit id, so the name never changes which business is returned.

  • trustpilotBusinessUnitId (optional): the 24 character Trustpilot business unit id, for example 57da77be0000ff000594bcdb. The fastest and most reliable input. Find it in the page source of any site running a Trustpilot widget, as data-businessunit-id, or reuse trustpilot_business_id from an earlier row.

  • publicPageAccess (optional): off (the default) or unblocker. unblocker reads Trustpilot's public company page through Apify Unblocker, which resolves a domain with no id and adds categories, claimed status, and verification. A row resolved this way charges public-page-profile-returned instead of reputation-resolved, never both.

  • minReviewCount (optional): one of none, 10, 50, 100 or 500. It sets rating_is_meaningful on the row. A 5.0 rating from two reviews and a 4.2 from nine hundred are not comparable numbers, and this is the column that says which one you are looking at. It never drops a row and never changes the rating returned.

  • includeCategories (optional): has no effect on the default route, because Trustpilot publishes categories only on its public company page. trustpilot_categories is null unless publicPageAccess is unblocker. Kept so saved configurations keep working.

  • sources (optional): which review sources to query. Version 1 serves trustpilot only. G2, Capterra and Glassdoor appear as columns and always report skipped, with the reason on the row. This setting exists so a saved configuration keeps working when a source is added.

  • skipCache (optional): when false (the default) a successful lookup is cached for seven days and reused. Set true to force a fresh fetch.

  • max_charge_usd (optional): spending cap for this call, in USD. The actor stops before any charge that would take the run past this amount and keeps every row already charged.

Output

The tool returns the actor's flat JSON row for the company, with 33 snake_case fields and no nested objects. trustpilot_status is the field to read before any rating, trustpilot_route and trustpilot_id_source say how the business unit was resolved, and rating_is_meaningful reflects the review count threshold you set. See the Apify Store page for the full output schema.

Example output

{
  "degraded": false,
  "degradation_reason": null,
  "company_domain": "mattressonline.co.uk",
  "company_name": "Mattress Online",
  "trustpilot_business_id": "4992d8e10000640005041a9a",
  "trustpilot_url": "https://www.trustpilot.com/review/www.mattressonline.co.uk",
  "trustpilot_name": "MattressOnline.co.uk",
  "trustpilot_rating": 4.8,
  "trustpilot_review_count": 72332,
  "trustpilot_stars": 5,
  "trustpilot_one_star": 1618,
  "trustpilot_two_stars": 768,
  "trustpilot_three_stars": 1485,
  "trustpilot_four_stars": 5850,
  "trustpilot_five_stars": 62611,
  "trustpilot_country_code": "GB",
  "trustpilot_route": "widget",
  "trustpilot_id_source": "homepage_embed",
  "trustpilot_claimed_status": "not_extractable",
  "trustpilot_is_claimed": null,
  "rating_is_meaningful": true,
  "trustpilot_status": "ok",
  "g2_status": "skipped",
  "capterra_status": "skipped",
  "glassdoor_status": "skipped",
  "coverage": 1,
  "fetch_status": "ok",
  "run_date": "2026-08-23T06:39:38.824Z"
}

Features

  • TrustScore, star score and total review count

  • The full one to five star breakdown, not just the average

  • Claimed and verified status, plus Trustpilot categories, on the optional public page route

  • Four kinds of empty, each with its own status, so a refusal is never a zero

  • G2, Capterra and Glassdoor ship as explicit skipped columns

  • 33 flat snake_case fields, one row per company

  • No Trustpilot API key needed

Pricing

You pay per event on Apify, billed to your own Apify account. Prices from the live pricing record, read 2026-10-16:

Event

Price per event (USD)

Fires when

apify-actor-start

$0.00005

Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).

company-checked

$0.003 on the Free plan, down to $0.0021 on higher Apify plans

Once per company for which the Trustpilot business unit lookup completed and a non degraded row was produced, whether or not anything was found. A not_found row fires this event, because looking and finding nothing is a real answer and it is the work you asked for. A degraded row, where the lookup could not run at all, fires nothing.

reputation-resolved

$0.0035 on the Free plan, down to $0.00245 on higher Apify plans

Once per company where a Trustpilot business unit was found and its aggregate record returned. Does not fire on a company with no business unit, does not fire when Trustpilot refused the request, and does not fire when no API key was supplied, because in all three cases no reputation record was produced.

public-page-profile-returned

$0.005 on the Free plan, down to $0.0035 on higher Apify plans

Once per company resolved through the optional public page route, which only runs when you set publicPageAccess to unblocker. It replaces the reputation resolved charge on that row rather than adding to it, so a row is never charged twice, and a run that leaves the setting alone never fires this event at all.

The actor's Apify page carries the current prices. Running this server consumes Apify credits.

Full actor documentation

This server is a thin client and holds no lookup logic. For the complete input and output reference, pricing, and run history, see the Apify Store page:

https://apify.com/mambalabs/review-platform-reputation-enricher


Mamba Labs GTM Suite

This server is one of the Mamba Labs GTM Suite MCP servers. Every actor in the suite takes a domain or a company and returns one flat row, so they stack in the same Clay table without reshaping anything. The actor behind this server is the Trustpilot Reputation Enricher, immutable Apify actor ID 3lIqfCt61j4hqE1xz.

Built by Mamba Labs | npm | Apify Store

License

MIT

Built by Mamba Labs. https://apify.com/mambalabs

Available Tools

1 tool
get_trustpilot_reputationGet Trustpilot ReputationA
Read-onlyIdempotent

Return a company's Trustpilot rating, review count, star score, and one to five star breakdown as one flat Clay ready row. Trustpilot only: G2, Capterra, and Glassdoor ship as skipped status columns so the row shape stays fixed, and they are never fetched. By default it reads Trustpilot's public TrustBox data endpoint, which Trustpilot's robots.txt allows, and needs no Trustpilot API key. Pass trustpilotBusinessUnitId whenever you have it: with the id the lookup always resolves, while a domain alone resolves only when the company's own site embeds a Trustpilot widget. A row's trustpilot_business_id can be fed back as the id on a later call. Set publicPageAccess to unblocker to read the public company page through Apify Unblocker instead, which resolves a domain with no id and adds categories and claimed status, at a higher event price and against Trustpilot's robots.txt, so it is the caller's choice. A refused request reports blocked and a domain with no business unit reports not_found, and those two are never conflated. Do not use it for review text: it returns the aggregate, not review rows. Read only; requires an APIFY_TOKEN and consumes Apify credits per call.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourcesNoWhich review sources to query. This version serves Trustpilot only. G2, Capterra, and Glassdoor appear as columns and always report skipped, with the reason on the row. This setting exists so a saved configuration keeps working when a source is added. Sent as a string for Clay compatibility.
skipCacheNoWhen "false" (default) a successful lookup is cached for seven days and reused, which costs nothing on a repeated run. Set "true" to force a fresh fetch. Sent as a string for Clay compatibility.
company_nameNoOptional. Carried through to the output row for joining. The lookup is keyed on the business unit id, so the name never changes which business is returned.
company_domainNoBare company domain, for example monzo.com. Used to look for a Trustpilot business unit id in the company's own widget embed. Supplying trustpilotBusinessUnitId instead skips this step and always resolves.
minReviewCountNoSets rating_is_meaningful on the row. A 5.0 rating from two reviews and a 4.2 from nine hundred are not comparable numbers, and this is the column that says which one you are looking at. It never drops a row and never changes the rating returned. Sent as a string for Clay compatibility.
publicPageAccessNoLeave at "off" (default) to read only Trustpilot's public TrustBox data endpoint, which Trustpilot's robots.txt allows. Set "unblocker" to read Trustpilot's public company pages through Apify Unblocker, which resolves any domain with no business unit id and also returns categories, claimed status, and verification. Trustpilot's robots.txt disallows those pages to automated agents, so this is the caller's call, and it spends Unblocker units from the caller's Apify account. A row resolved this way charges public-page-profile-returned instead of reputation-resolved, never both.
includeCategoriesNoHas no effect on the default route: Trustpilot publishes categories only on its public company page, so trustpilot_categories is null unless publicPageAccess is unblocker. Kept so saved configurations keep working. Sent as a string for Clay compatibility.
trustpilotBusinessUnitIdNoThe 24 character Trustpilot business unit id, for example 57da77be0000ff000594bcdb. The fastest and most reliable input: supplied here it always resolves. Find it in the page source of any site running a Trustpilot widget, as data-businessunit-id, or reuse trustpilot_business_id from an earlier row. Leave it empty and the actor looks for it on the company's own site.

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover read-only/idempotent safety, but the description adds substantial depth beyond them: endpoint choice and robots.txt implications, unblocker costs and billing differences, the blocked vs not_found status semantics, caching and credit consumption, APIFY_TOKEN requirement, and the fixed row shape with skipped G2/Capterra/Glassdoor columns.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the return shape, then covers inputs, route behavior, and constraints in a dense but organized passage. It is long for a single tool, but every sentence carries operational weight with little redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters, no output schema, and multiple routing/pricing/auth behaviors, the description is thorough: it explains resolution guarantees, cost implications, error statuses, caching, and the fixed column contract. An agent can call it correctly across all routes without external documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3. The description adds meaning beyond the schema by explaining the purpose of trustpilotBusinessUnitId ('always resolves' vs domain-only widget dependency), the feedback loop of trustpilot_business_id, and the routing rationale behind publicPageAccess, though the remaining parameters are largely left to their own schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States specific verb+resource (Trustpilot reputation aggregate) and precisely enumerates what is returned: rating, review count, star score, and star breakdown. It explicitly excludes review text, drawing a firm boundary around what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives strong contextual guidance: when to pass trustpilotBusinessUnitId vs rely on domain, and when to switch publicPageAccess to unblocker. It states what not to use it for (review text). No sibling tools exist to differentiate against, and it does not spell out when to prefer skipCache or minReviewCount settings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev1.0.1
    • Changedget_trustpilot_reputation10 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / company_domain / description
        Previous value: -"Bare company domain, for example stripe.com. Trustpilot business units are keyed on the company website domain, so this is the correct and only lookup key."New value: +"Bare company domain, for example monzo.com. Used to look for a Trustpilot business unit id in the company's own widget embed. Supplying trustpilotBusinessUnitId instead skips this step and always resolves."
      • changedInput schema / properties / company_name / description
        Previous value: -"Optional. Carried through to the output row for joining. The Trustpilot lookup is keyed on the domain, so the name does not change which business unit is returned."New value: +"Optional. Carried through to the output row for joining. The lookup is keyed on the business unit id, so the name never changes which business is returned."
      • changedInput schema / properties / includeCategories / description
        Previous value: -"When \"true\" (default) the Trustpilot categories the business is listed under are returned. They are a useful cheap proxy for what a company actually sells, which is often not what its homepage says. Sent as a string for Clay compatibility."New value: +"Has no effect on the default route: Trustpilot publishes categories only on its public company page, so trustpilot_categories is null unless publicPageAccess is unblocker. Kept so saved configurations keep working. Sent as a string for Clay compatibility."
      • changedInput schema / properties / minReviewCount / enum
        Previous value: -[
        -  "none",
        -  "10",
        -  "50",
        -  "100",
        -  "500"
        -]New value: +[
        +  "10",
        +  "50",
        +  "100",
        +  "500",
        +  "none"
        +]
      • addedInput schema / properties / publicPageAccess
        Added value: +{
        +  "description": "Leave at \"off\" (default) to read only Trustpilot's public TrustBox data endpoint, which Trustpilot's robots.txt allows. Set \"unblocker\" to read Trustpilot's public company pages through Apify Unblocker, which resolves any domain with no business unit id and also returns categories, claimed status, and verification. Trustpilot's robots.txt disallows those pages to automated agents, so this is the caller's call, and it spends Unblocker units from the caller's Apify account. A row resolved this way charges public-page-profile-returned instead of reputation-resolved, never both.",
        +  "enum": [
        +    "off",
        +    "unblocker"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / skipCache / description
        Previous value: -"When \"false\" (default) a successful lookup is cached for seven days and reused, which costs you nothing on a repeated run. Set \"true\" to force a fresh fetch. Sent as a string for Clay compatibility."New value: +"When \"false\" (default) a successful lookup is cached for seven days and reused, which costs nothing on a repeated run. Set \"true\" to force a fresh fetch. Sent as a string for Clay compatibility."
      • changedInput schema / properties / sources / description
        Previous value: -"Which review sources to query. v1 serves Trustpilot only. G2, Capterra and Glassdoor appear as columns and always report skipped, with the reason on the row, because all three refused every documented route and none publishes an API we can use as documented. This setting exists so a saved configuration keeps working when a source is added. Sent as a string for Clay compatibility."New value: +"Which review sources to query. This version serves Trustpilot only. G2, Capterra, and Glassdoor appear as columns and always report skipped, with the reason on the row. This setting exists so a saved configuration keeps working when a source is added. Sent as a string for Clay compatibility."
      • removedInput schema / properties / trustpilotApiKey
        Removed value: -{
        -  "description": "YOUR OWN Trustpilot API key, free to create at developers.trustpilot.com. REQUIRED: the Business Units API is not open, so without a key this actor reports skipped rather than guessing. Marked secret, so the value never renders on this page.",
        -  "type": "string"
        -}
      • addedInput schema / properties / trustpilotBusinessUnitId
        Added value: +{
        +  "description": "The 24 character Trustpilot business unit id, for example 57da77be0000ff000594bcdb. The fastest and most reliable input: supplied here it always resolves. Find it in the page source of any site running a Trustpilot widget, as data-businessunit-id, or reuse trustpilot_business_id from an earlier row. Leave it empty and the actor looks for it on the company's own site.",
        +  "type": "string"
        +}
  2. 1 tool updatev1.0.0
    • First observedget_trustpilot_reputation

TDQS

A4.4/5.0

Scored across 1 tool

Disambiguation5/5

There is only one tool, so there is no possibility of confusing it with another tool. Its purpose is clearly and narrowly defined: return a Trustpilot aggregate reputation row.

Naming Consistency5/5

The single tool uses a predictable snake_case verb_noun pattern: get_trustpilot_reputation. With no other tools, there is no inconsistency to evaluate.

Tool Count3/5

One tool is thin for a server named as a review-platform reputation enricher, especially since G2, Capterra, and Glassdoor are acknowledged but not fetched. The single tool is complex and focused, but the surface feels under-scoped.

Completeness2/5

For Trustpilot aggregate data alone, the read operation is complete. However, the server name implies multi-platform review reputation enrichment, yet only Trustpilot is implemented and other platforms are explicitly skipped, leaving a significant gap relative to the apparent scope.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    MCP server for the Mamba Labs People Finder & Email Verifier actor on Apify. Give it a company domain, name or LinkedIn URL and it returns the people at that company who match your role, seniority and department filters, each as a structured contact record with an optional verified business email.
    1
    220 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server that resolves a company domain to its registered legal entity, returning legal name, company number, jurisdiction, status, LEI, and VAT number via the Apify Legal Entity Resolver actor.
    1
    106 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for the Mamba Labs Bluesky Brand Presence Mapper actor on Apify. Resolve a company domain to its Bluesky account with exact follower, following and post counts.
    1
    108 npm
    MIT