---
title: "Software Review Data Analysis for Competitive Research"
description: "What Capterra, Trustpilot and Google Play reviews can and can't tell you about a competitor, which fields to keep, the sampling bias, and a worked rating tally."
url: https://perceptlayer.com/blog/software-review-data-competitive-research
---

[Blog](https://perceptlayer.com/blog) / [Web data by industry](https://perceptlayer.com/blog/category/web-data)

# Software Review Data Analysis for Competitive Research

30 Sept 2026 Perceptlayer 7 min read

Software review data tells you what a competitor's vocal customers complain about and praise, how that changes over time, and how it differs by segment. It doesn't tell you market share, satisfaction across all customers, or why people stay quiet. For competitive research, keep each review's rating, date, segment fields (role, company size, time used where the site has them) and verification label, and compare competitors on trends and themes rather than on headline scores.

## Key takeaways

-   Reviewers select themselves: research on online reviews describes acquisition and under-reporting biases that make average ratings a biased measure of quality. Compare like with like, over time.
-   The recorded Trustpilot profile for amazon.com has 67.5% one-star and 17.9% five-star ratings out of 49,830: a simple mean of 2.0 stars against a TrustScore of 1.5, because TrustScore weights recent reviews.
-   Only 9,156 of those 49,830 reviews, 18.4%, are from the last 12 months, so a lifetime score mostly reflects older experiences.
-   Capterra's `products-reviews` filters by `company_size[]` and `time_used[]`. Pull one segment per call and store the filter you used, and you have segment labels without parsing reviewer fields.
-   Pulling 4 competitors × 3 sources × 5 pages is 60 credits; a monthly refresh of page 1 is 12.

## What can review data tell you about a competitor?

Three things, reliably. First, the themes: what customers bring up unprompted, such as onboarding, pricing changes, support response or a specific feature. Second, direction: whether complaints about a theme rise or fall after a release or a price change. Third, segment differences: on Capterra, whether small companies and large ones, or trial users and two-year users, rate a product differently.

It can't tell you how many customers a competitor has, how satisfied the silent majority is, or what churned customers would say, because those people mostly don't write reviews. Research on online product reviews names two self-selection effects: people who buy a product are already disposed to like it, and people with extreme opinions are more likely to review than people with moderate ones. Together they make the mean rating a biased measure of quality ( [Hu, Pavlou and Zhang, MIS Quarterly](https://ink.library.smu.edu.sg/sis_research/8012), 2017).

So treat reviews as a stream of qualitative evidence with known biases. They are good for "what do Product B's unhappy users say that Product A's don't", and poor for "Product A is better than Product B".

## Which sources cover which kind of software?

Each site reflects its own audience and review process, so the choice of source shapes the answer. Capterra is built around business software and records who the reviewer is in business terms. Trustpilot reviews companies, so a software company's profile mixes product, billing and support experiences. Google Play reviews one app on one platform, with very high volumes for consumer apps.

| Source | Endpoint | What it's good for | Segment fields |
| --- | --- | --- | --- |
| Capterra | [`/v1/capterra/products-reviews`](https://perceptlayer.com/apis/capterra/products-reviews) ( `id`) | B2B software, by buyer segment | Filters: `company_size[]` ( `A`– `I`), `time_used[]`, `countries[]`, `overall_rating_ge` |
| Trustpilot | [`/v1/trustpilot/company-reviews`](https://perceptlayer.com/apis/trustpilot/company-reviews) ( `company_domain`) | The whole company experience | `rating`, `language`, verification labels; filters `date_posted`, `verified`, `rating` |
| [Google Play](https://perceptlayer.com/apis/google-play) | [`/v1/google-play/product-reviews`](https://perceptlayer.com/apis/google-play/product-reviews) ( `product_id`) | One Android app | `rating`, `likes`, `iso_date`; filters `rating`, `sort_by`, `gl` |

All three cost 1 credit per successful call. We have recorded responses for Trustpilot and Google Play, so their field names below are real; for Capterra we have a recorded product list, where each product carries a `review_count`, but not a recorded reviews response, which is why the method for it relies on filters rather than parsing reviewer fields.

## Which fields should you keep?

Keep what lets you count, segment and date reviews, and drop what identifies people. A competitive analysis never needs a reviewer's name or avatar, and both sources return them. Here is one recorded Trustpilot review with the text cut and personal fields removed:

```json
{
  "id": "6adac54ca4e34a0e087ae2b2",
  "rating": 1,
  "title": "Ich war Jahrelang zufriedener Kunde von…",
  "language": "de",
  "isVerified": false,
  "labels": {
    "verification": {
      "isVerified": false,
      "reviewSourceName": "Organic",
      "verificationSource": "invitation",
      "verificationLevel": "not-verified",
      …
    }
  },
  "dates": { "experiencedDate": "2026-10-23T00:00:00.000Z", "publishedDate": "2026-10-23T04:24:12.000Z" },
  "likes": 0,
  …
}
```

| Field | Source | Why keep it |
| --- | --- | --- |
| `id` | Both | Deduplicate across pulls |
| `rating` | Both | The count you tally |
| `dates.publishedDate` / `iso_date` | Trustpilot / Google Play | Trends, and before/after a release |
| `dates.experiencedDate` | Trustpilot | When the experience happened, which can differ from posting |
| `language` | Trustpilot | Compare markets separately |
| `labels.verification.*`, `isVerified` | Trustpilot | Separate verified, invited and organic reviews |
| `likes` | Both | How many readers found a review useful; the recorded Google Play reviews have 491, 390 and 109 |
| Filter values you sent | Capterra | Segment labels: `company_size[]`, `time_used[]` |
| Review text | All | Themes; store it, but don't tally it raw |

Drop `consumer` details on Trustpilot and the `title` and `avatar` on Google Play reviews, where `title` holds the reviewer's name. For Capterra, check a page in the playground on the [Capterra API page](https://perceptlayer.com/apis/capterra) to see what it returns about each reviewer, and keep role and company size only if they're there.

## What does a worked tally show?

A tally of the recorded Trustpilot profile for amazon.com shows the shape that makes headline scores misleading. The response's `filters.reviewStatistics.ratings` gives counts by star, and `businessUnit` gives the TrustScore and recent volume. The shares below are computed from those counts.

| Stars | Reviews | Share |
| --- | --- | --- |
| 1 | 33,636 | 67.5% |
| 2 | 3,004 | 6.0% |
| 3 | 1,869 | 3.8% |
| 4 | 2,423 | 4.9% |
| 5 | 8,898 | 17.9% |
| **Total** | **49,830** |  |

Three readings follow. The distribution is U-shaped: 85.4% of ratings are one or five stars, and the middle is nearly empty, which is what under-reporting bias predicts. The simple mean is (1 × 33,636 + 2 × 3,004 + 3 × 1,869 + 4 × 2,423 + 5 × 8,898) ÷ 49,830 = 2.0 stars, yet `trustScore` is 1.5. Trustpilot says TrustScore isn't a simple average: it gives more weight to newer reviews and starts every company with seven 3.5-star reviews as a prior ( [Trustpilot Help Center](https://help.trustpilot.com/s/article/TrustScore-and-star-rating-explained), 2026). And `numberOfReviewsLast12Months` is 9,156, so 18.4% of the reviews are from the past year.

The same response lists `similarBusinessUnits`, Trustpilot's own comparison set: Temu at TrustScore 1.8 with 56,735 reviews, Amazon.co.uk at 1.4 with 34,369 and Amazon.de at 1.5 with 25,994. That's a ready-made competitor list, but compare their recent reviews, not these lifetime scores. Note also that the profile's rating counts total 49,830 while its review list reports 46,782; say which count you use.

## How do you tally competitors yourself?

Pull the same window for each competitor, tally by month and rating, and keep segment and verification labels. Use Trustpilot's `date_posted` filter ( `last_12_months`, `last_6_months`, `last_3_months`, `last_30_days`) so every company is measured over the same period. This script tallies Trustpilot reviews by month, rating and verification source for a list of domains, using only fields from the recorded response:

```python
import collections
import os
import requests

URL = "https://api.perceptlayer.com/v1/trustpilot/company-reviews"
HEADERS = {"X-API-Key": os.environ["API_KEY"]}
COMPETITORS = ["example-a.com", "example-b.com"]

tally = collections.Counter()
for domain in COMPETITORS:
    for page in range(1, 6):
        r = requests.get(URL, headers=HEADERS, timeout=60, params={
            "company_domain": domain, "page": page,
            "sort": "recency", "date_posted": "last_12_months"})
        if r.status_code != 200:
            print(domain, page, r.json()["error"]["code"])
            break
        reviews = r.json().get("reviews", [])
        for rv in reviews:
            month = rv["dates"]["publishedDate"][:7]
            source = rv["labels"]["verification"].get("verificationSource")
            tally[(domain, month, rv["rating"], source)] += 1
        if not reviews:
            break

for (domain, month, rating, source), n in sorted(tally.items()):
    print(domain, month, rating, source, n)
```

We haven't run this script live for this article. For Capterra, segment by the filter instead of parsing reviewer fields: call `products-reviews` once per `company_size[]` code or per `time_used[]` value, such as `FreeTrial` against `MoreThan2Years`, and store the value you sent with every review from that call. Comparing trial users' ratings with two-year users' is often the most useful B2B cut: it separates first impressions from what the product is like to live with.

## Which biases should you correct for?

Four, beyond self-selection. **Solicitation**: companies that invite reviews can collect a different mix of reviewers from those that don't, so check verification and invitation labels and compare like with like. **Removed reviews**: platforms remove reviews they judge fake; Trustpilot says it removed 4.5 million fake reviews in 2024, 7.4% of all reviews submitted that year ( [Trustpilot Trust Report](https://corporate.trustpilot.com/press/news/trust-report-2025), 2025). What you can read is what survived moderation.

**Platform mix**: Trustpilot reviews the company and Google Play the Android app, so a gap between the two may be about billing or support versus the app itself, not one product being better. **Volume**: a competitor with 20 reviews this quarter can swing on a handful, so show counts next to every share. For the mechanics of collecting and deduplicating reviews from all three sources, the guide to [review data for sentiment analysis](https://perceptlayer.com/blog/product-review-data-sentiment-analysis) has the code.

## What does a competitor review pull cost?

One credit per successful call on all three sources, so the cost is pages. Four competitors, three sources and five pages each is 4 × 3 × 5 = 60 credits for an initial pull. A monthly refresh of the first page of `recency`\-sorted reviews is 4 × 3 = 12 credits. Capterra segment pulls add one call per segment per product.

| Step | Calls | Credits |
| --- | --- | --- |
| Initial pull: 4 competitors × 3 sources × 5 pages | 60 | 60 |
| Capterra segments: 4 products × 5 `time_used[]` values | 20 | 20 |
| Monthly refresh: 4 × 3 × page 1 | 12 a month | 12 |

All of it fits inside the 1,000 free monthly credits. Failed calls cost nothing. The [credits docs](https://docs.perceptlayer.com/credits) explain the balance and [pricing](https://perceptlayer.com/pricing) has what packs cost. To see the fields for a competitor you care about, run `company-reviews` for its domain in the playground on the [Trustpilot API page](https://perceptlayer.com/apis/trustpilot).

## APIs in this post

-   [Capterra **1 credit per call** · 10 endpoints](https://perceptlayer.com/apis/capterra)
-   [Trustpilot **1 credit per call** · 6 endpoints](https://perceptlayer.com/apis/trustpilot)
-   [Google Play **1 credit per call** · 9 endpoints](https://perceptlayer.com/apis/google-play)

## Frequently asked questions

### Can review data show which competitor is better?

Not on its own. Reviewers select themselves, platforms moderate what's published, and companies differ in how hard they ask for reviews. Review data is good for themes, trends and segment differences within a product. For "who is better", compare the same segment over the same window, and treat the result as one input among several.

### Why is a TrustScore different from the average rating?

Trustpilot says TrustScore isn't a simple average: it weights newer reviews more and starts every company with seven 3.5-star reviews as a prior. In the recorded amazon.com profile, the mean of its star counts is 2.0 while the TrustScore is 1.5, which is what recency weighting does when recent reviews are worse.

### Which review fields matter for B2B competitive research?

Rating, date, and the reviewer's segment: role, company size and how long they've used the product, where the site records them. Capterra's review endpoint filters on company size and time used, so you can pull each segment separately. Add the review text for themes and the verification label for how the review was collected.

### Should I keep reviewers' names?

No. A competitive analysis needs ratings, dates, segments and text, not identities. Drop names, avatars and profile details at ingestion: Trustpilot returns them under `consumer`, and Google Play puts the reviewer's name in the review `title`. Never use review data to contact reviewers.

### How much does it cost to track competitors' reviews monthly?

One credit per successful call. Refreshing the newest page of reviews for 4 competitors on 3 sources is 12 credits a month, and an initial 5-page pull is 60 credits. Both fit inside the 1,000 free monthly credits. The [pricing page](https://perceptlayer.com/pricing) has what credit packs cost beyond that.

software reviews competitive research review analysis b2b software app reviews

## More from the blog

1.  [Web data by industry](https://perceptlayer.com/blog/category/web-data) 21 Oct 2026 Perceptlayer 8 min read
    
    ## [Job Posting Data for Labour-Market Research](https://perceptlayer.com/blog/job-posting-data-labour-market-research)
    
    Which Indeed posting fields support trend analysis, where postings mislead versus hires, and a weekly collection plan that costs 3,000 credits a month.
    
2.  [Web data by industry](https://perceptlayer.com/blog/category/web-data) 6 Oct 2026 Perceptlayer 7 min read
    
    ## [Salary Data from Job Sites: Reading Ranges Without Bias](https://perceptlayer.com/blog/salary-data-job-sites-bias)
    
    Glassdoor's salaries endpoint returns p10 to p90 total pay, a currency and a national count. How to read those ranges and the biases of self-reported pay.
    
3.  [Web data by industry](https://perceptlayer.com/blog/category/web-data) 28 Sept 2026 Perceptlayer 8 min read
    
    ## [Flight Price Data: What Fare Tracking Can and Cannot Show](https://perceptlayer.com/blog/flight-price-data-fare-tracking)
    
    What one recorded JFK to LAX call shows: price, stops, duration and CO2 per flight. Plus what a single snapshot can't tell you, and a daily tracker's cost.
