Vexaloom Labs

Use Trustpilot Company Review Extractor with Python

Pull reviews from any Trustpilot company page with star rating, reviewer details, verification status, and company replies, filterable by rating, language, and verification.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "filterDateRange": "all",
  "filterLanguage": "all",
  "filterStars": "",
  "maxCompanies": 5,
  "maxItems": 3,
  "maxReviews": 3,
  "mode": "reviews",
  "onlyVerified": false,
  "onlyWithReplies": false,
  "searchCountry": "US",
  "sortBy": "recency",
  "startUrls": [
    {
      "url": "https://www.trustpilot.com/review/notion.so"
    }
  ]
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
modestringrequiredWhat to collect. Reviews: scrape reviews. Companies: one profile record per company, with contacts and transparency data. Search companies: find companies by keyword.
startUrlsarrayoptionalTrustpilot company page URLs, e.g. https://www.trustpilot.com/review/notion.so. You can also paste a company's own website URL. Merged with 'Company domains or names'.
companiesarrayoptionalDomains (booking.com, notion.so) or company names (Nike, Notion). Names are resolved through Trustpilot search. Merged with 'Company URLs'.
searchQueriesarrayoptionalKeywords for mode=searchCompanies, e.g. plumber, dentist, CRM software.
searchCountrystringoptionalCountry context for company search. It affects ranking and localisation, not a strict country filter.
maxCompaniesintegeroptionalMaximum company results per search keyword (mode=searchCompanies).
maxReviewsintegeroptionalMaximum reviews per company. Values above 200 are collected by splitting Trustpilot's 200-review view across star, language, and topic slices.
maxItemsintegeroptionalMaximum reviews across all companies in one run.
filterStarsstringoptionalOnly include reviews with this star rating. Leave on 'All stars' to include every rating.
filterLanguagestringoptionalOnly include reviews in this language. Trustpilot only serves a language a company actually has; otherwise the run returns no reviews for that company instead of mixing languages.
filterDateRangestringoptionalOnly include reviews posted in this rolling window.
sortBystringoptionalHow Trustpilot orders reviews before collection.
onlyVerifiedbooleanoptionalOnly include reviews Trustpilot marks as verified purchases.
onlyWithRepliesbooleanoptionalOnly include reviews that already have a company reply.
searchKeywordstringoptionalOnly include reviews whose title or text contains this phrase. Applied by Trustpilot before collection. Works with mode=reviews.
filterReviewerCountriesarrayoptionalOnly keep reviews from reviewers in these ISO country codes, e.g. US, GB, DE. Applied after collection.
publishedAfterstringoptionalExact cutoff date (YYYY-MM-DD). Reviews older than this are skipped. Works with mode=reviews.
lastDaysintegeroptionalRolling cutoff for scheduled runs, e.g. 7 for weekly or 1 for daily. If both this and the exact date are set, the more recent cutoff wins.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/GxhFe08FWhhuHEcFZ/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

Trustpilot reviews, company profiles, and company search results with ratings, reviewer details, owner replies, contacts, and transparency data.

Questions before you run

Which inputs are required?

The published required fields are mode

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build EBDiJJKewcsfmWgXA and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.