DEV Community

agenthustler
agenthustler

Posted on • Originally published at apify.com

Scraping Trustpilot in 2026: Reviews, Ratings & Business Data via API

Trustpilot has 300M+ reviews across 1M+ businesses. That data is gold for reputation monitoring, competitor analysis, and sentiment tracking. Here's how to scrape it efficiently in 2026.

Why Scrape Trustpilot?

Three common use cases:

  • Reputation monitoring — Track your own reviews in real time. Get alerts when negative reviews drop. Feed them into your CRM.
  • Competitor analysis — Compare your ratings against competitors. Spot trends in their customer complaints.
  • Sentiment analysis — Run NLP on review text to extract themes. "Shipping" mentioned in 40% of 1-star reviews? That's actionable.

The Challenge

Trustpilot is server-rendered HTML. No public-facing GraphQL endpoint, no easy JSON feed. Their rate limiting kicks in at roughly 1 request per second. Go faster and you get blocked.

The official Trustpilot API exists but is restricted to business accounts and only surfaces your own reviews. No competitor data. No search. Limited for research purposes.

Three Approaches

1. Official API (Limited)

Only available if you're a paying Trustpilot Business customer. You get access to your own reviews, invitation management, and reply endpoints. Can't search. Can't access competitor data. Not useful for market research.

2. Manual Scraping (Slow)

You can parse the HTML yourself. Trustpilot renders reviews server-side, so requests + BeautifulSoup works. But you'll need to handle:

  • Pagination (20 reviews per page)
  • Rate limiting (1 req/sec or you get 429s)
  • Selector changes (they update their HTML regularly)
  • Star rating extraction from CSS classes
  • Date parsing from relative timestamps

It works, but maintaining selectors is a constant tax.

3. Apify Actor (Recommended)

The Trustpilot Scraper on Apify handles all of the above. It rotates proxies, respects rate limits, and outputs clean JSON. Three modes:

Review mode — Scrape all reviews for a specific business:

Input: { "startUrls": ["https://www.trustpilot.com/review/example.com"] }
Enter fullscreen mode Exit fullscreen mode

Search mode — Find businesses by keyword:

Input: { "search": "web hosting", "maxItems": 50 }
Enter fullscreen mode Exit fullscreen mode

Batch mode — Scrape multiple businesses in one run:

Input: { 
  "startUrls": [
    "https://www.trustpilot.com/review/company-a.com",
    "https://www.trustpilot.com/review/company-b.com",
    "https://www.trustpilot.com/review/company-c.com"
  ]
}
Enter fullscreen mode Exit fullscreen mode

Python Example

Install the client:

pip install apify-client
Enter fullscreen mode Exit fullscreen mode

Scrape reviews in 15 lines:

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("cryptosignals/trustpilot-scraper").call(
    run_input={
        "startUrls": ["https://www.trustpilot.com/review/example.com"],
        "maxItems": 100,
    }
)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['rating']}★ — {item['title']}")
    print(f"  By: {item['reviewer']['name']} on {item['date']}")
    print(f"  {item['text'][:120]}...")
    print()
Enter fullscreen mode Exit fullscreen mode

What Data You Get

Each review object includes:

Field Example
rating 5
title "Great customer service"
text "They resolved my issue within..."
date "2026-03-15T10:30:00Z"
reviewer.name "John D."
reviewer.reviewCount 12
companyReply "Thank you for your feedback..."
isVerified true

Business profile data includes overall score, total reviews, star distribution, categories, and location.

Use Case: Brand Monitoring Pipeline

Here's a practical setup for monitoring your own brand:

from apify_client import ApifyClient
from datetime import datetime, timedelta

client = ApifyClient("YOUR_APIFY_TOKEN")

# Run daily via cron
run = client.actor("cryptosignals/trustpilot-scraper").call(
    run_input={
        "startUrls": ["https://www.trustpilot.com/review/yourbrand.com"],
        "maxItems": 20,  # recent reviews only
    }
)

yesterday = datetime.now() - timedelta(days=1)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    review_date = datetime.fromisoformat(item["date"].replace("Z", "+00:00"))
    if review_date.date() >= yesterday.date():
        if item["rating"] <= 2:
            # Send alert — negative review detected
            print(f"⚠️ {item['rating']}★ review: {item['title']}")
Enter fullscreen mode Exit fullscreen mode

Schedule this on Apify (built-in scheduler) or your own cron. Pipe alerts to Slack, email, or your CRM.

Getting Started

  1. Create a free Apify account
  2. Go to the Trustpilot Scraper actor
  3. Enter your target URL and hit Start
  4. Download results as JSON, CSV, or Excel

The actor includes a free tier. For production workloads, paid plans start at $49/month for the platform with the actor itself at $4.99/month.


Built for developers who need Trustpilot data without maintaining brittle scrapers. Questions? Drop them in the comments.

Top comments (0)