Trustpilot Review Theme Miner avatar

Trustpilot Review Theme Miner

Pricing

Pay per usage

Go to Apify Store
Trustpilot Review Theme Miner

Trustpilot Review Theme Miner

Extracts public Trustpilot reviews and derives complaint and praise themes.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Brian Keefe

Brian Keefe

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

Production-oriented Apify Actor that reads public Trustpilot company review pages, extracts available review fields, and derives complaint themes, praise themes, sentiment, urgency, competitor mentions, product mentions, rating distributions, date distributions, and representative quotes.

Public-data posture

  • Trustpilot-first only.
  • Uses public company review pages only.
  • Does not require login.
  • Does not use private APIs, anti-bot bypasses, or hidden endpoints.
  • Gracefully reports public-access failures such as 403, 429, and network errors in output source evidence.

Input

The actor accepts either companyProfileUrls, domains, or both. Runtime validation enforces that at least one entry is provided.

{
"companyProfileUrls": [
"https://www.trustpilot.com/review/example.com"
],
"domains": [
"example.org"
],
"maxReviews": 25,
"ratings": [1, 2, 4, 5],
"dateFrom": "2024-01-01",
"dateTo": "2024-12-31",
"includeRawReviews": true,
"maxQuotesPerTheme": 2
}

Input fields

  • companyProfileUrls: array of Trustpilot company review profile URLs.
  • domains: array of bare domains, converted to https://www.trustpilot.com/review/<domain>.
  • maxReviews: maximum reviews to include per company, capped at 500.
  • ratings: allowed star ratings from 1 to 5.
  • dateFrom: inclusive ISO date lower bound.
  • dateTo: inclusive ISO date upper bound.
  • includeRawReviews: when true, includes the extracted raw review records in the final dataset item.
  • maxQuotesPerTheme: number of quotes kept per derived theme.

Output

Each dataset item contains:

  • input: normalized target domain and Trustpilot profile URL.
  • company: detected company name and canonical profile URL.
  • source: public-data evidence, page fetch statuses, retries, and stop reason.
  • summary: review counts and applied filters.
  • analysis.sentiment: positive, neutral, negative counts and average rating.
  • analysis.complaintThemes: negative-rating themes with evidence and representative quotes.
  • analysis.praiseThemes: positive-rating themes with evidence and representative quotes.
  • analysis.urgencySignals: urgent complaint evidence.
  • analysis.competitorMentions: mentions extracted from phrases like vs, versus, or compared to.
  • analysis.productMentions: recurring product or experience terms.
  • analysis.ratingDistribution: counts for ratings 1 through 5.
  • analysis.dateDistribution: monthly review counts in YYYY-MM form.
  • analysis.representativeQuotes: overall positive and negative quote samples.
  • reviews: included only when includeRawReviews is true.

See examples/sample-input.json and examples/sample-output.json.

Extraction notes

  • The parser prioritizes public Trustpilot review-card HTML and JSON-LD review nodes when present.
  • Extracted review fields include title, body, rating, date, reviewer metadata when available, and the source URL.
  • Pagination is attempted via ?page=<n> URLs while reviews remain and public pages continue to return content.

Limitations

  • Trustpilot can rate-limit or block public access. The actor surfaces those events in source.pageFetches and stops cleanly.
  • Public page structures can change. The parser is intentionally narrow and relies on public review cards and public JSON-LD.
  • Theme derivation is heuristic. It is deterministic and maintainable, but not a substitute for a bespoke NLP model.
  • Competitor and product mention extraction is pattern-based and may miss implicit references.

Local usage

Install dependencies:

$npm install

Run the deterministic smoke test:

$npm test

Run locally with Apify input storage or environment-provided input:

$npm start

Publish

With the Apify CLI authenticated:

$apify push