Collect structured Trustpilot reviews at scale from any public business profile and turn raw customer feedback into actionable insights. This scraper captures ratings, review text, metadata, and engagement signals in a clean, analysis-ready format. Ideal for market research, reputation monitoring, and customer experience analytics where a Trustpilot reviews scraper is essential.
Created by Bitbash, built to showcase our approach to Scraping and Automation!
If you are looking for trustpilot-reviews-scraper-pay-per-result you've just found your team — Let’s Chat. 👆👆
TrustPilot Reviews Scraper (Pay per Result) automates the collection of public reviews from Trustpilot business pages. Instead of manually copying feedback, you can run a single command and receive a fully structured dataset containing ratings, comments, dates, countries, and more.
This project is designed for:
- Data analysts and researchers who need large volumes of customer feedback.
- Brands and agencies monitoring reputation and customer satisfaction.
- Product teams using review data to prioritize features and improvements.
- Growth and marketing teams performing sentiment analysis and competitor benchmarking.
- Trustpilot hosts millions of verified reviews across virtually every consumer category.
- Public reviews provide real-world sentiment you can measure and track over time.
- Detailed review metadata (country, language, verification level) enables advanced segmentation.
- Long-form review text is ideal for NLP, topic modeling, and sentiment analysis.
- Tracking reviews at scale helps you detect brand risks and opportunities early.
| Feature | Description |
|---|---|
| Multi-URL support | Accepts one or many Trustpilot business URLs, processing them sequentially or in parallel. |
| Deep review extraction | Captures titles, full review text, ratings, verification flags, and platform metadata. |
| Pay-per-result friendly | Designed to count and return billable results precisely, ideal for usage-based billing. |
| Pagination handling | Automatically walks through all available review pages until the requested limit is reached. |
| Flexible result limits | Configure maximum number of reviews to fetch per run using maxResults. |
| Clean, structured output | Exports in JSON-first format, easily convertible to CSV, Excel, or databases. |
| Robust filtering flags | Includes fields such as filtered, pending, isVerified, and verificationLevel for precise filtering. |
| Time-based insights | Captures both creation and publication timestamps for trend and cohort analysis. |
| Language and region metadata | Extracts countryCode and language to enable geo- and locale-based segmentation. |
| Ready for pipelines | Output structure is optimized for ETL workflows, dashboards, and machine learning pipelines. |
| Field Name | Field Description |
|---|---|
| id | Unique identifier of the review entry in the scraped dataset. |
| inputUrl | The Trustpilot business URL from which the review was collected. |
| filtered | Indicates whether the review is flagged or filtered by the platform. |
| isVerified | Whether the review is marked as verified by the platform. |
| rating | Numeric star rating given by the reviewer (typically 1–5). |
| countryCode | ISO country code associated with the reviewer or review context. |
| numberOfReviews | Total number of reviews the business has on its Trustpilot profile at time of scraping. |
| pending | Shows if the review is still pending moderation or not fully published. |
| likes | Number of “helpful” or similar engagement votes on the review. |
| createdTime | Timestamp when the review was originally created. |
| title | Short headline/title of the review. |
| consumerId | Platform identifier of the reviewer (anonymous ID, not personally identifying on its own). |
| displayName | Display name or alias of the reviewer. |
| isVerifiedConsumer | Whether the reviewer themselves is marked as a verified consumer. |
| hasImage | Indicates if the review contains attached images. |
| language | Language code of the review content (for example, en). |
| location | Optional free-text location associated with the reviewer, if present. |
| verificationLevel | Type of verification for the review (for example, organic vs. invited). |
| reviewSourceName | Source channel of the review (for example, banner, email invite, organic). |
| publishedDate | Timestamp when the review was published on the platform. |
| text | Full textual content of the review. |
| productReviews | Array containing product-specific review details, when available (can be empty). |
Example:
[
{
"id": "66b904f1fec7e492d2918e20",
"inputUrl": "https://www.trustpilot.com/review/shopwagandtail.com",
"filtered": false,
"isVerified": true,
"rating": 5,
"countryCode": "GB",
"numberOfReviews": 60,
"pending": false,
"likes": 0,
"createdTime": "2024-08-11T20:37:37.000Z",
"title": "I come to Trustpilot to look for…",
"consumerId": "4fb551e20000640001198da2",
"displayName": "Ag",
"isVerifiedConsumer": false,
"hasImage": true,
"language": "en",
"location": null,
"verificationLevel": "invited",
"reviewSourceName": "BannerRedirect",
"publishedDate": "2024-08-11T20:37:37.000Z",
"text": "I come to Trustpilot to look for spurious companies, a great place to find if they are real or fake. Good results or bad make me decide if I buy or block.Thank you Trustpilot",
"productReviews": []
}
]
Example:
TrustPilot Reviews Scraper (Pay per Result)/
├── src/
│ ├── main.ts
│ ├── config/
│ │ ├── index.ts
│ │ └── schema.ts
│ ├── core/
│ │ ├── crawler.ts
│ │ ├── paginator.ts
│ │ └── rateLimiter.ts
│ ├── extractors/
│ │ ├── reviewParser.ts
│ │ └── metadataMapper.ts
│ ├── outputs/
│ │ ├── jsonWriter.ts
│ │ └── csvExporter.ts
│ └── utils/
│ ├── logger.ts
│ ├── httpClient.ts
│ └── timeUtils.ts
├── data/
│ ├── sample-input.json
│ └── sample-output.json
├── tests/
│ ├── crawler.test.ts
│ ├── extractor.test.ts
│ └── integration.test.ts
├── scripts/
│ ├── run-local.sh
│ └── export-csv.sh
├── docker/
│ └── Dockerfile
├── .env.example
├── package.json
├── tsconfig.json
├── README.md
└── LICENSE
- Market research teams use it to aggregate reviews across multiple brands and competitors, so they can quantify satisfaction trends and identify strengths or weaknesses in the market.
- Customer experience managers use it to monitor new reviews in key regions and languages, so they can react quickly to issues and improve service quality.
- Data scientists use it to build sentiment models and topic clusters from long-form review text, so they can unlock deeper insights beyond simple star ratings.
- SEO and reputation agencies use it to track clients’ review profiles over time, so they can demonstrate improvements and detect sudden drops in trust.
- Product managers use it to capture feature requests and recurring complaints directly from customers, so they can prioritize impactful roadmap items with evidence.
Q1: What kind of Trustpilot URLs does this scraper support?
The scraper is designed to work with public business review pages, typically in the form of https://www.trustpilot.com/review/<domain> or localized equivalents. As long as the profile is publicly accessible, it can navigate pagination and extract reviews.
Q2: How many reviews can it realistically collect in one run?
The actual number depends on the size of the profile and the maxResults setting. For most profiles, collecting several thousand reviews per run is feasible. The scraper stops either when it reaches the end of available pages or when it hits the configured maximum number of results.
Q3: Does this scraper handle invited vs. organic reviews differently?
Yes. It includes fields such as verificationLevel and reviewSourceName, which allow you to distinguish between invited and organic reviews. You can use these fields downstream to filter or weight reviews according to your own rules.
Q4: Is this tool compliant with legal and platform rules? The scraper only targets publicly available review pages and is intended for responsible, compliant use. You should always review local data regulations and the platform’s terms before large-scale collection, especially if you plan to store, share, or commercialize the resulting datasets.
Primary Metric: On mid-sized profiles with approximately 2,000 published reviews, the scraper typically processes 100–150 reviews per minute on a standard broadband connection, including pagination and HTML parsing.
Reliability Metric: With sensible rate limiting enabled, successful completion rates above 98% have been observed across repeated runs, even on profiles with heavy pagination.
Efficiency Metric: A single run usually stays within a few hundred megabytes of RAM usage and modest CPU consumption, making it suitable for running alongside other services on a shared server or container host.
Quality Metric:
Field-level completeness (for core attributes like rating, title, text, publishedDate, and countryCode) is consistently above 95%, with missing values occurring mostly in optional fields such as location or productReviews, depending on what the platform exposes for each review.
