Guides / Scrape Trustpilot

How to Scrape Trustpilot in 2026

Trustpilot is one of the most popular business review platforms, used for brand monitoring, competitor analysis, and reputation management. Browser7 handles the anti-bot protection and JavaScript rendering so you can extract review data with a single API call.

What makes Trustpilot hard to scrape

Anti-bot protection

Trustpilot uses bot detection and rate limiting to prevent automated access. Datacenter IPs and headless browsers are identified and blocked through fingerprinting and behavioral analysis.

JavaScript-rendered reviews

Review content, star ratings, and reviewer information are rendered via JavaScript. A simple HTTP request returns a page shell without the actual review data.

Paginated results

Companies with thousands of reviews spread their reviews across hundreds of pages. Collecting complete review data requires handling pagination reliably without getting rate-limited.

Scrape Trustpilot reviews

Browser7 handles proxy rotation, anti-bot bypass, and JavaScript rendering automatically. This example scrapes reviews for Amazon on Trustpilot.

from browser7 import Browser7

client = Browser7(
    api_key="b7_your_api_key",
    base_url="https://ca-api.browser7.com/v1"
)

result = client.render(
    "https://www.trustpilot.com/review/amazon.com",
    country_code="US"
)

print(result.html)

Data you can extract

The rendered HTML contains all the review data Trustpilot shows to visitors:

Review content

  • Full review text
  • Review title
  • Star rating (1-5)
  • Date posted
  • Verified purchase status

Reviewer info

  • Reviewer name
  • Number of reviews written
  • Profile link
  • Location (when available)

Company info

  • Overall rating
  • Total number of reviews
  • Rating distribution
  • Company response rate

Metadata

  • Review filtering options
  • Sort order
  • Pagination info
  • Review reply from business

Complete example: parse reviews

Extract structured review data including author name, star rating, date, and review text. The rating is parsed from the star image's alt text.

from browser7 import Browser7
from bs4 import BeautifulSoup
import json, re

client = Browser7(
    api_key="b7_your_api_key",
    base_url="https://ca-api.browser7.com/v1"
)

result = client.render(
    "https://www.trustpilot.com/review/amazon.com",
    country_code="US"
)

soup = BeautifulSoup(result.html, "html.parser")

reviews = []
for article in soup.select("article"):
    author = article.select_one("span[data-consumer-name-typography]")
    if not author:
        continue

    review = {
        "author": author.get_text(strip=True),
        "rating": None,
        "date": None,
        "text": None,
    }

    star_img = article.select_one(
        "img.CDS_StarRating_starRating__614d2e"
    )
    if star_img:
        match = re.search(r"Rated (\d) out of 5", star_img.get("alt", ""))
        if match:
            review["rating"] = int(match.group(1))

    time_el = article.select_one("time[data-service-review-date-time-ago]")
    if time_el:
        review["date"] = time_el.get("datetime", "")[:10]

    text_el = article.select_one("p[data-relevant-review-text-typography]")
    if text_el:
        review["text"] = text_el.get_text(strip=True)[:150]

    reviews.append(review)

print(json.dumps(reviews[:10], indent=2))

CSS selectors may change if Trustpilot updates their page structure. Inspect the current page if any fields return null.

Sample output:

[
  {
    "author": "Tony S",
    "rating": 2,
    "date": "2026-04-08",
    "text": "I have been a loyal Amazon customer for years and purchase not only small ticket items..."
  },
  {
    "author": "Paul Burns",
    "rating": 1,
    "date": "2026-04-04",
    "text": "As soon as you write a negative review, uh-oh something went wrong!..."
  },
  ...
]

Scrape page 2 and beyond

Trustpilot uses the page query parameter for pagination. Page 1 is the default, page 2 is ?page=2, page 3 is ?page=3, and so on.

from browser7 import Browser7
from bs4 import BeautifulSoup

client = Browser7(
    api_key="b7_your_api_key",
    base_url="https://ca-api.browser7.com/v1"
)

# Page 2: add ?page=2 to the URL
result = client.render(
    "https://www.trustpilot.com/review/amazon.com?page=2",
    country_code="US"
)

soup = BeautifulSoup(result.html, "html.parser")
for article in soup.select("article"):
    author = article.select_one("span[data-consumer-name-typography]")
    if author:
        print(author.get_text(strip=True))

Take a screenshot of reviews

Capture Trustpilot review pages as images for brand monitoring dashboards, competitor analysis reports, or historical tracking.

import base64
from browser7 import Browser7

client = Browser7(
    api_key="b7_your_api_key",
    base_url="https://ca-api.browser7.com/v1"
)

result = client.render(
    "https://www.trustpilot.com/review/amazon.com",
    country_code="US",
    block_images=False,
    include_screenshot=True,
    screenshot_full_page=True,
    screenshot_format="png"
)

with open("trustpilot-reviews.png", "wb") as f:
    f.write(base64.b64decode(result.screenshot))

print("Screenshot saved")

What this costs

Every Trustpilot page render costs $0.01 - the same as any other website. Residential proxies, JavaScript rendering, and screenshots are all included. There are no per-domain surcharges, no credit multipliers, and no bandwidth fees.

Scraping 100 pages of reviews (about 2,000 reviews) costs $1. You know this before you start.

Try it yourself

100 free renders - enough to test Trustpilot scraping with no payment required.