Discover/Trustpilot API
live

Trustpilot APIuk.trustpilot.com

Access Trustpilot UK company reviews, trust scores, star ratings, categories, and blog posts via 9 structured endpoints. Filter reviews by date, language, and stars.

Endpoints
9
Updated
2mo ago

What is the Trustpilot API?

This API provides structured access to Trustpilot UK data across 9 endpoints, covering company search, paginated reviews, trust scores, category listings, and blog content. The get_company_reviews endpoint alone supports filtering by star rating (1–5), date range, language code, and sort order, returning individual review text, consumer details, and company reply fields in a single response.

Try it
Page number
Max results per page
Search keyword (e.g. 'John Lewis')
api.parse.bot/scraper/bb2e1c0f-26df-4ad6-b6a0-874d5bc47c6f/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/bb2e1c0f-26df-4ad6-b6a0-874d5bc47c6f/search_companies?page=1&limit=20&query=Amazon' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace uk-trustpilot-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
Trustpilot Data API Client

Comprehensive API for Trustpilot review data, company insights, categories, and blog content.
Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Any, Optional


class ParseClient:
    """Client for interacting with the Trustpilot Data API through Parse."""

    def __init__(self, api_key: Optional[str] = None):
        """Initialize the Parse API client.
        
        Args:
            api_key: API key for authentication. If not provided, reads from PARSE_API_KEY env var.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "bb2e1c0f-26df-4ad6-b6a0-874d5bc47c6f"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")
        
        if not self.api_key:
            raise ValueError("API key must be provided or set in PARSE_API_KEY environment variable")

    def _call(self, endpoint: str, method: str = "POST", **params) -> dict[str, Any]:
        """Make a request to the Parse API.
        
        Args:
            endpoint: API endpoint name
            method: HTTP method (GET or POST)
            **params: Query parameters or request body
            
        Returns:
            API response as dictionary
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {
            "X-API-Key": self.api_key,
            "Content-Type": "application/json"
        }
        
        if method == "GET":
            response = requests.get(url, headers=headers, params=params)
        else:  # POST
            response = requests.post(url, headers=headers, json=params)
        
        response.raise_for_status()
        return response.json()

    def search_companies(self, query: str, limit: int = 20, page: int = 1) -> dict[str, Any]:
        """Search for companies by name or keyword.
        
        Args:
            query: Search keyword (e.g., 'John Lewis')
            limit: Max results per page (default: 20)
            page: Page number (default: 1)
            
        Returns:
            Dictionary containing matching companies with basic info
        """
        return self._call(
            "search_companies",
            method="GET",
            query=query,
            limit=limit,
            page=page
        )

    def get_company_overview(self, domain: str) -> dict[str, Any]:
        """Get the summary/overview for a company by its domain.
        
        Args:
            domain: Company domain (e.g., 'www.johnlewis.com')
            
        Returns:
            Dictionary containing trust score, star rating, review count, and AI summary
        """
        return self._call(
            "get_company_overview",
            method="GET",
            domain=domain
        )

    def get_company_reviews(
        self,
        domain: str,
        language: Optional[str] = None,
        stars: Optional[str] = None,
        page: int = 1,
        date: Optional[str] = None,
        sort: str = "recency"
    ) -> dict[str, Any]:
        """Get paginated reviews for a company with optional filtering.
        
        Args:
            domain: Company domain
            language: ISO language code (e.g., 'en')
            stars: Filter by star rating (1-5)
            page: Page number (default: 1)
            date: Date filter (last30days, last3months, last6months, last12months)
            sort: Sort order (recency or relevance)
            
        Returns:
            Dictionary containing reviews and pagination info
        """
        params = {
            "domain": domain,
            "page": page,
            "sort": sort
        }
        if language:
            params["language"] = language
        if stars:
            params["stars"] = stars
        if date:
            params["date"] = date
            
        return self._call("get_company_reviews", method="GET", **params)

    def get_reviews_for_month(
        self,
        domain: str,
        month: int = 7,
        year: int = 2025,
        max_pages: int = 50
    ) -> dict[str, Any]:
        """Get all reviews for a specific month and year.
        
        Args:
            domain: Company domain
            month: Target month (1-12)
            year: Target year
            max_pages: Max pages to scan
            
        Returns:
            Dictionary containing reviews from the specified month
        """
        return self._call(
            "get_reviews_for_month",
            method="GET",
            domain=domain,
            month=month,
            year=year,
            max_pages=max_pages
        )

    def get_categories(self) -> dict[str, Any]:
        """Get the hierarchical category structure of Trustpilot.
        
        Returns:
            Dictionary containing category hierarchy
        """
        return self._call("get_categories", method="GET")

    def get_category_companies(self, category_id: str, page: int = 1) -> dict[str, Any]:
        """Get companies listed under a specific category.
        
        Args:
            category_id: Category ID (slug) e.g., 'bank'
            page: Page number (default: 1)
            
        Returns:
            Dictionary containing companies in the category
        """
        return self._call(
            "get_category_companies",
            method="GET",
            category_id=category_id,
            page=page
        )

    def get_company_top_mentions(
        self,
        domain: Optional[str] = None,
        business_unit_id: Optional[str] = None
    ) -> dict[str, Any]:
        """Get top mention tags/topics extracted from reviews for a company.
        
        Args:
            domain: Company domain (will be resolved to ID if provided)
            business_unit_id: Business Unit ID (hash)
            
        Returns:
            Dictionary containing top topics/mentions
        """
        params = {}
        if domain:
            params["domain"] = domain
        if business_unit_id:
            params["business_unit_id"] = business_unit_id
            
        return self._call("get_company_top_mentions", method="GET", **params)

    def get_similar_companies(self, domain: str) -> dict[str, Any]:
        """Get similar companies users also viewed.
        
        Args:
            domain: Company domain
            
        Returns:
            Dictionary containing similar business units
        """
        return self._call(
            "get_similar_companies",
            method="GET",
            domain=domain
        )

    def get_blog_posts(self) -> dict[str, Any]:
        """Get recent blog posts from the Trustpilot blog.
        
        Returns:
            Dictionary containing featured article and pillar articles
        """
        return self._call("get_blog_posts", method="GET")


def main():
    """Practical workflow: Compare companies within a category and analyze their reviews."""
    client = ParseClient()
    
    print("=" * 70)
    print("Trustpilot Data API - Competitive Analysis Workflow")
    print("=" * 70)
    
    # Step 1: Get all available categories
    print("\n[Step 1] Fetching Trustpilot categories...")
    categories = client.get_categories()
    
    # Find a specific category (e.g., banks or department stores)
    target_category = None
    for category in categories.get("categories", []):
        if category["categoryId"] == "department_store":
            target_category = category
            break
    
    if target_category:
        print(f"✓ Found category: {target_category['displayName']}")
    
    # Step 2: Get top companies in the category
    print(f"\n[Step 2] Getting top companies in '{target_category['displayName']}'...")
    category_companies = client.get_category_companies(
        category_id=target_category["categoryId"],
        page=1
    )
    
    companies_list = category_companies["businessUnits"]["businesses"][:3]
    print(f"✓ Retrieved {len(companies_list)} top companies")
    
    # Store company data for comparison
    company_analysis = []
    
    # Step 3: For each company, gather detailed insights
    for idx, company in enumerate(companies_list, 1):
        print(f"\n[Step 3.{idx}] Analyzing {company['displayName']}...")
        
        domain = company["identifyingName"]
        company_id = company["businessUnitId"]
        
        # Get company overview
        overview = client.get_company_overview(domain=domain)
        
        # Get recent reviews
        reviews_data = client.get_company_reviews(
            domain=domain,
            page=1,
            sort="recency"
        )
        
        # Get top mentions
        mentions = client.get_company_top_mentions(domain=domain)
        
        # Compile analysis
        analysis = {
            "name": company["displayName"],
            "domain": domain,
            "unit_id": company_id,
            "reviews_count": company["numberOfReviews"],
            "stars": company.get("stars"),
            "trust_score": company.get("trustScore"),
            "recent_reviews": reviews_data.get("reviews", [])[:3],
            "top_topics": mentions.get("topics", [])[:5]
        }
        
        company_analysis.append(analysis)
        
        print(f"  ✓ Rating: {analysis['stars']}⭐ | Trust Score: {analysis['trust_score']}")
        print(f"  ✓ Total Reviews: {analysis['reviews_count']:,}")
        print(f"  ✓ Retrieved {len(analysis['recent_reviews'])} recent reviews")
        print(f"  ✓ Identified {len(analysis['top_topics'])} top discussion topics")
    
    # Step 4: Comparative analysis
    print("\n" + "=" * 70)
    print("COMPARATIVE ANALYSIS")
    print("=" * 70)
    
    print("\n[Ratings Comparison]")
    for company in company_analysis:
        print(f"  {company['name']:30} {company['stars']}⭐ ({company['trust_score']} trust score)")
    
    print("\n[Review Volume]")
    for company in company_analysis:
        print(f"  {company['name']:30} {company['reviews_count']:,} reviews")
    
    print("\n[Recent Review Sentiment]")
    for company in company_analysis:
        if company["recent_reviews"]:
            ratings = [r.get("rating", 0) for r in company["recent_reviews"]]
            avg_rating = sum(ratings) / len(ratings) if ratings else 0
            print(f"  {company['name']:30} Last 3 reviews avg: {avg_rating:.1f}⭐")
    
    print("\n[Top Discussion Topics]")
    for company in company_analysis:
        topics = ", ".join([t.get("displayName", "Unknown") for t in company["top_topics"][:3]])
        print(f"  {company['name']:30} {topics}")
    
    # Step 5: Deep dive into best-performing company
    best_company = max(company_analysis, key=lambda x: x["stars"] if x["stars"] else 0)
    print("\n" + "=" * 70)
    print(f"DEEP DIVE: {best_company['name']}")
    print("=" * 70)
    
    print(f"\n[Filtering reviews by rating...]")
    positive_reviews = client.get_company_reviews(
        domain=best_company["domain"],
        stars="5",
        page=1
    )
    
    print(f"  5-star reviews found: {len(positive_reviews.get('reviews', []))}")
    
    # Check for similar companies
    print(f"\n[Finding competitors...]")
    similar = client.get_similar_companies(domain=best_company["domain"])
    
    if similar.get("similarBusinessUnits"):
        print(f"  Users also compared with:")
        for comp in similar["similarBusinessUnits"][:3]:
            comp_name = comp.get("businessUnitDisplayName", "Unknown")
            comp_rating = comp.get("stars", "N/A")
            print(f"    - {comp_name} ({comp_rating}⭐)")
    
    # Step 6: Blog insights
    print(f"\n[Latest Trustpilot Insights]")
    blog = client.get_blog_posts()
    
    if blog.get("featuredArticle"):
        featured = blog["featuredArticle"]
        print(f"  Featured: {featured.get('title', 'N/A')}")
        print(f"  Published: {featured.get('date', 'N/A')}")
    
    print("\n" + "=" * 70)
    print("✓ Analysis complete! Use this data for competitive benchmarking.")
    print("=" * 70)


if __name__ == "__main__":
    main()
All endpoints · 9 totalmissing one? ·

Search for companies by name or keyword. Returns list of matching companies with basic info, trust score, and review count.

Input
ParamTypeDescription
pageintegerPage number
limitintegerMax results per page
queryrequiredstringSearch keyword (e.g. 'John Lewis')
Response
{
  "type": "object",
  "fields": {
    "totalHits": "integer total number of matching companies",
    "totalPages": "integer total number of pages",
    "businessUnits": "array of company objects with businessUnitId, displayName, identifyingName, score, numberOfReviews, categories"
  },
  "sample": {
    "data": {
      "totalHits": 480,
      "searchMode": "keyword",
      "totalPages": 24,
      "businessUnits": [
        {
          "score": {
            "stars": 4,
            "trustScore": 4.1
          },
          "categories": [
            {
              "id": "department_store",
              "name": "Department store",
              "primary": true
            }
          ],
          "displayName": "John Lewis ",
          "businessUnitId": "46d5517e000064000500ceba",
          "identifyingName": "www.johnlewis.com",
          "numberOfReviews": 101650
        }
      ]
    },
    "status": "success"
  }
}

About the Trustpilot API

Company Search and Overview

The search_companies endpoint accepts a keyword query and returns matching companies with their businessUnitId, displayName, score, numberOfReviews, and category assignments. For deeper company data, get_company_overview takes a domain string (e.g. www.johnlewis.com) and returns the full businessUnit object including contact info, activity data, an AI-generated aiSummary with modelVersion, and a similarBusinessUnits array. The trustScore and rating fields are exposed at the top level of the overview response, making it straightforward to compare companies without additional calls.

Review Retrieval and Filtering

get_company_reviews is the primary reviews endpoint. It accepts domain, optional stars (1–5), language (ISO code), date (one of last30days, last3months, last6months, last12months), sort (recency or relevance), and page. The reviews array in the response includes id, title, text, rating, multiple date fields, a consumer object, and any company reply. The pagination object exposes currentPage, totalPages, and totalReviews. For time-bounded collection, get_reviews_for_month accepts a year, month (1–12), and optional max_pages cap, returning all reviews posted in that calendar month.

Categories and Company Discovery

get_categories returns the full Trustpilot category hierarchy with categoryId, displayName, and nested subCategories — no inputs required. get_category_companies then accepts a category_id slug (e.g. bank, department_store) and a page number, returning a paginated list of businesses in that category including totalHits and perPage metadata. get_similar_companies takes a domain and returns companies users also viewed, with trustScore, stars, and numberOfReviews for each.

Mentions and Blog Content

get_company_top_mentions returns review-derived topic tags for a company. It accepts either a domain or a business_unit_id directly (the latter is available from search_companies results), returning an array of topic objects with id and displayName. get_blog_posts requires no inputs and returns Trustpilot's blog content organised by pillar category (trendsintrust, reviewsmatter, buywithconfidence, trustpilotstories), plus a featuredArticle object with title, slug, date, thumbnail, and pillar.

Reliability & maintenance

The Trustpilot API is a managed, monitored endpoint for uk.trustpilot.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when uk.trustpilot.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official uk.trustpilot.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Aggregate competitor trust scores and review counts by querying multiple domains via get_company_overview.
  • Monitor negative reviews in near-real time by filtering get_company_reviews with stars=1 and date=last30days.
  • Build a category-browsing tool that lists top-reviewed UK businesses using get_categories and get_category_companies.
  • Extract recurring customer pain points from review-derived topics using get_company_top_mentions.
  • Pull all reviews for a specific month for trend analysis using get_reviews_for_month with year and month inputs.
  • Surface AI-generated company summaries from the aiSummary field in get_company_overview for comparison dashboards.
  • Identify market adjacencies by pulling similarBusinessUnits for a target company domain.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Trustpilot have an official developer API?+
Yes. Trustpilot offers an official Business API documented at https://developers.trustpilot.com. It is gated behind a business account and not freely accessible for arbitrary company lookups. This Parse API covers review data, company overviews, categories, and blog content without requiring a Trustpilot business account.
What does `get_company_reviews` return and how does filtering work?+
The endpoint returns a reviews array and a pagination object. Each review includes id, title, text, rating, date fields, a consumer object, and a company reply if one exists. You can narrow results with the stars parameter (1–5), language (ISO code), date (last30days, last3months, last6months, last12months), and sort (recency or relevance). Combine any subset of these filters in a single request.
Can I retrieve reviews posted in a specific calendar month?+
get_reviews_for_month handles this. Pass domain, year, and month (1–12). The endpoint paginates through recent reviews and returns only those matching the target month, with a count and a filtered reviews array. The optional max_pages parameter bounds how far back it scans, which matters for companies with high review volume.
Does the API expose individual reviewer profiles or review verification status?+
Not currently. Each review includes a consumer object with basic identity data, and review text, rating, and dates are present, but detailed reviewer profiles or verification badges are not surfaced as distinct fields. You can fork this API on Parse and revise it to add an endpoint targeting that data if it becomes a requirement.
Is review data available for non-UK Trustpilot domains (e.g. www.trustpilot.com)?+
The API targets uk.trustpilot.com. Companies listed there are typically UK-facing, though many global brands appear on both regional and international Trustpilot domains. Reviews for companies only listed on non-UK Trustpilot versions are not covered. You can fork this API on Parse and revise the base domain to target international Trustpilot if you need broader geographic coverage.
Page content last updated . Spec covers 9 endpoints from uk.trustpilot.com.
Related APIs in Reviews RatingsSee all →
trustpilot.com API
Access company reviews, ratings, and user profiles from Trustpilot to research businesses, compare ratings across categories, and analyze customer feedback and company responses. Find detailed company overviews and review summaries to make informed decisions about products and services.
clutch.co API
clutch.co API
moo.com API
Retrieve product listings, categories, pricing details, and search results from MOO.com. Access Trustpilot ratings and detailed pricing calculations across product types and quantity tiers.
resellerratings.com API
Search for trusted retailers and explore thousands of verified store reviews, ratings, and detailed seller information to make informed shopping decisions. Browse product categories, read reviewer profiles, and access business highlights to compare stores before you buy.
amazon.co.uk API
Access data from amazon.co.uk.
airbnb.co.uk API
Search Airbnb UK listings and access detailed information including pricing, availability calendars, and guest reviews. Plan your trips by comparing properties and experiences across locations with real-time data on rates and booking availability.
cultbeauty.co.uk API
Browse and search Cult Beauty's product catalog by category or brand, view detailed product information including ingredients and loyalty points, and read customer reviews. Discover new arrivals, sale items, and filter products to find exactly what you're looking for.
trustmrr.com API
Search a verified database of profitable startups and businesses for sale with real revenue data authenticated by Stripe and other payment processors, then filter results by category, performance metrics, and acquisition status to find investment opportunities. Access detailed company information including leaderboard rankings, growth statistics, and acquisition listings all in clean JSON format.