# TrustRadius Product Ratings & Feature Score Extractor (`dataspryva/trustradius-product-ratings-and-feature-score`) Actor

Extract TrustRadius product pages by direct URL, search term, or category: pricing, aggregate ratings, feature scorecards, award badges, and related products for B2B software comparison.

- **URL**: https://apify.com/dataspryva/trustradius-product-ratings-and-feature-score.md
- **Developed by:** [Dataspryva](https://apify.com/dataspryva) (community)
- **Categories:** Automation, Lead generation, Other
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## TrustRadius Products, Reviews & Pricing Scraper

Collect the evidence B2B buyers use on **TrustRadius**: product profiles, thousands of verified reviews, feature-by-feature scores, pricing plans, FAQs, alternatives and side-by-side comparisons. Choose a mode, point it at a product, keyword, category or comparison, and get clean structured records instead of opening dozens of browser tabs.

### What this actor does

- **Four modes:** `product` for profile pages, `reviews` for the review archive, `discover` for category and keyword listings, and `compare` for two-product comparisons
- **Complete review filtering:** star rating, company size, reviewer country, buying role, job type, department, minimum experience, recency and four sort orders
- **Commercial context:** vendor, starting price, plan names and billing terms, free version/trial flags, feature scorecards, awards and competitor cards
- **Review depth:** reviewer name, job title, department, company, company size, experience, LinkedIn profile when public, pros, cons, use cases, likelihood to recommend, plus optional ROI and full Q\&A
- **Reliable pagination:** reviews arrive 10 per page, category browsing follows TrustRadius's 1,000-product ceiling, and keyword discovery can walk the full directory result set
- **Empty fields are omitted** at every level, so records never contain null, blank strings or empty lists

### Output per record

The dataset contains one record per product, review, discovery card or comparison.

#### Product records (`recordType: "product"`)

- `sourceUrl`, `canonicalUrl`, `slug`, `title`, `description`, `about`
- `applicationCategory`, `category`, `vendorName`, `vendorUrl`, `logoUrl`
- `ratingValue`, `ratingNormalized`, `ratingCount`, `reviewCount`, `reviewPageCount`, `ratingBreakdown[]`
- `price`, `priceCurrency`, `pricingPlans[]`, `hasFreeVersion`, `hasFreeTrial`
- `awards[]`, `featureList[]`, `topReviews[]`, `positiveNotes[]`, `negativeNotes[]`
- `topPerformingFeatures[]`, `areasForImprovement[]`, `featureGroups[]`
- `technicalDetails{}`, `faqs[]`, `screenshots[]`, `videos[]`, `mediaUrls[]`
- `alternatives[]`, `relatedProducts[]`
- `recordType`, `scrapedAt`

#### Review records (`recordType: "review"`)

- `reviewUrl`, `productName`, `productSlug`, `title`, `rating`, `ratingNormalized`, `publishedAt`
- `reviewSource`, `incentivized`, `reviewer{}` with name, job title, department, company, company size, experience, profile URL, LinkedIn URL and verified flag
- `useCase`, `pros[]`, `cons[]`, `likelihoodToRecommend{}`, `sections[]`
- `roi[]`, `alternativesConsidered`, `otherSoftwareUsed`
- `productAggregate{}`, `recordType`, `scrapedAt`

#### Discovery records (`recordType: "productCard"`)

- `source` (`search` or `category`), `rank`, `productName`, `slug`, `productUrl`, `canonicalUrl`
- `category`, `rating`, `ratingNormalized`, `ratingCount`, `reviewCount`, `description`, `tags[]`, `logoUrl`
- `recordType`, `scrapedAt`

#### Comparison records (`recordType: "compare"`)

- `compareUrl`, `title`, `products[]` with name, slug, URLs, rating, review count, starting price, summary, most-used-by segment and logo
- `pricing` plan names, prices and billing terms per product, plus free-version/free-trial flags
- `featureGroups[]` with group scores and per-feature scores for both products
- `alternatives[]`, `userRatings[]`, `communityPulse[]`
- `recordType`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `product` | `product`, `reviews`, `discover` or `compare` |
| `productUrls` | array | `["https://www.trustradius.com/products/asana"]` | Product URLs, review URLs or bare slugs; compare mode also accepts a comparison URL or two products |
| `searchQueries` | array | `[]` | Keywords for the directory search (mode=discover) |
| `categoryUrls` | array | `[]` | Category URLs or slugs (mode=discover) |
| `maxItems` | integer | `25` | Cap on emitted rows (1–5,000) |
| `maxReviewsPerProduct` | integer | `100` | Reviews per product; `0` means the whole archive (mode=reviews) |
| `reviewSort` | string | `newest` | `newest`, `oldest`, `highestRated` or `lowestRated` |
| `starRatings` | array | `[]` | Keep ratings 1–5 |
| `companySizes` | array | `[]` | `small`, `medium`, `large` |
| `countries` | array | `[]` | ISO3 reviewer countries such as `USA`, `CAN`, `GBR` |
| `reviewerRoles` | array | `[]` | `user`, `manager`, `support`, `decisionMaker`, `consultant`, `implementer` |
| `jobTypes` | array | `[]` | Job types such as `Engineer`, `Manager`, `Director` |
| `departments` | array | `[]` | Departments such as `Marketing`, `Engineering` |
| `minYearsExperience` | integer | `0` | Minimum reviewer experience (0–20) |
| `lastUpdated` | string | `any` | `any`, `month`, `3months`, `6months`, `year` |
| `publishedAfter` | string | `""` | Keep reviews on or after this `YYYY-MM-DD` date |
| `includeReviewDetails` | boolean | `false` | Open each review for ROI, alternatives and full Q\&A |
| `includeProductDetails` | boolean | `true` | Collect feature scores, pricing, details, FAQs and alternatives with product records |

#### Example: product profile with every detail page

```json
{
  "mode": "product",
  "productUrls": ["https://www.trustradius.com/products/asana"],
  "includeProductDetails": true,
  "maxItems": 1
}
```

#### Example: lowest-rated reviews from small companies

```json
{
  "mode": "reviews",
  "productUrls": ["asana"],
  "maxReviewsPerProduct": 50,
  "starRatings": [1, 2],
  "companySizes": ["small"],
  "reviewSort": "oldest"
}
```

#### Example: browse a category and a keyword

```json
{
  "mode": "discover",
  "categoryUrls": ["crm"],
  "searchQueries": ["project management"],
  "maxItems": 200
}
```

#### Example: compare two products

```json
{
  "mode": "compare",
  "productUrls": ["https://www.trustradius.com/compare-products/asana-vs-monday"]
}
```

### Use cases

- **Software selection** — collect every product in a category with ratings, pricing and feature scores before a shortlist meeting
- **Competitive tracking** — monitor a competitor's rating, review volume, awards and weakest feature areas over time
- **Voice-of-customer research** — export filtered reviews with reviewer firmographics, pros, cons and ROI statements
- **Sales enablement** — build comparison sheets from TrustRadius's own side-by-side data and alternative-product cards
- **Procurement analysis** — compare pricing plans, billing terms, free-trial availability and support details across vendors
- **Market mapping** — discover all software matching a keyword, then enrich the shortlist with full product profiles

### FAQ

**Is this affiliated with TrustRadius?**
No. This is an independent, third-party actor that reads publicly available TrustRadius pages. It is not operated by or affiliated with TrustRadius.

**Which mode should I use?**
Use `product` when you already know the products, `reviews` for the review archive and reviewer detail, `discover` to find products by keyword or category, and `compare` for a two-product page.

**How many reviews can I collect?**
TrustRadius serves 10 reviews per page, and the actor follows pagination until your `maxReviewsPerProduct`, `maxItems` or the end of the matching archive. Some products have thousands of reviews.

**Why does category discovery stop at 1,000 products?**
TrustRadius itself caps a single category listing at 1,000 products. Split large categories with keyword searches or narrower subcategories to reach more products.

**Can I combine several review filters?**
Yes. Star ratings, company sizes, roles, job types, departments, countries, experience and recency can be combined, and the chosen sort order is applied to the result.

**Why are some fields missing from a record?**
TrustRadius does not publish every field for every product or review. Missing values are omitted rather than returned as null, and optional detail pages that do not exist are skipped.

**Does `includeReviewDetails` cost more time?**
Yes. It opens each review to collect ROI, alternatives and the full Q\&A. Leave it off when the listing fields are enough.

**Will my saved tasks from the previous version keep working?**
Yes. Existing product URLs, keyword searches, category inputs and page caps are still accepted and mapped to the matching mode. Old proxy settings are ignored because no proxy setup is needed.

**Do I need a proxy or a TrustRadius account?**
No. The actor connects to TrustRadius automatically and only uses publicly visible pages. No cookies, login or proxy configuration are required.

# Actor input Schema

## `mode` (type: `string`):

What to collect: product profiles, individual reviews, product discovery cards or a side-by-side comparison.

## `productUrls` (type: `array`):

TrustRadius product URLs, review URLs or bare slugs. Used by product and reviews modes; compare mode accepts a /compare-products/a-vs-b URL or two products.

## `searchQueries` (type: `array`):

(mode=discover) Keywords to search in the TrustRadius software directory.

## `categoryUrls` (type: `array`):

(mode=discover) TrustRadius category URLs or slugs, such as https://www.trustradius.com/categories/crm or crm.

## `maxItems` (type: `integer`):

Hard cap on emitted products, reviews, discovery cards or comparisons.

## `maxReviewsPerProduct` (type: `integer`):

(mode=reviews) Reviews to collect per product. Use 0 for the entire archive.

## `reviewSort` (type: `string`):

(mode=reviews) Order in which reviews are collected.

## `starRatings` (type: `array`):

(mode=reviews) Only reviews with these ratings (1-5), for example \["1","2"]. Leave empty for all ratings.

## `companySizes` (type: `array`):

(mode=reviews) Reviewer company sizes: small, medium or large. Leave empty for all sizes.

## `countries` (type: `array`):

(mode=reviews) Reviewer country codes in ISO3 form, for example USA, CAN or GBR.

## `reviewerRoles` (type: `array`):

(mode=reviews) Roles reviewers played: user, manager, support, decisionMaker, consultant or implementer.

## `jobTypes` (type: `array`):

(mode=reviews) Job types such as Engineer, Manager, Director or Analyst.

## `departments` (type: `array`):

(mode=reviews) Departments such as Marketing, Engineering or Information Technology.

## `minYearsExperience` (type: `integer`):

(mode=reviews) Minimum reviewer experience in years. Use 0 for no minimum.

## `lastUpdated` (type: `string`):

(mode=reviews) Only include reviews updated within this window.

## `publishedAfter` (type: `string`):

(mode=reviews) Keep reviews published on or after this date (YYYY-MM-DD). Leave empty for no cutoff.

## `includeReviewDetails` (type: `boolean`):

(mode=reviews) Open each review to collect ROI, alternatives and the full Q\&A. Adds one request per review.

## `includeProductDetails` (type: `boolean`):

(mode=product) Also collect feature scorecards, pricing plans, product details, FAQs and alternatives.

## Actor input object example

```json
{
  "mode": "product",
  "productUrls": [
    "https://www.trustradius.com/products/asana"
  ],
  "searchQueries": [],
  "categoryUrls": [],
  "maxItems": 1,
  "maxReviewsPerProduct": 3,
  "reviewSort": "newest",
  "starRatings": [],
  "companySizes": [],
  "countries": [],
  "reviewerRoles": [],
  "jobTypes": [],
  "departments": [],
  "minYearsExperience": 0,
  "lastUpdated": "any",
  "publishedAfter": "",
  "includeReviewDetails": false,
  "includeProductDetails": false
}
```

# Actor output Schema

## `software` (type: `string`):

Dataset containing TrustRadius product, review, discovery and comparison records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "product",
    "productUrls": [
        "https://www.trustradius.com/products/asana"
    ],
    "searchQueries": [],
    "categoryUrls": [],
    "maxItems": 1,
    "maxReviewsPerProduct": 3,
    "reviewSort": "newest",
    "starRatings": [],
    "companySizes": [],
    "countries": [],
    "reviewerRoles": [],
    "jobTypes": [],
    "departments": [],
    "minYearsExperience": 0,
    "lastUpdated": "any",
    "publishedAfter": "",
    "includeReviewDetails": false,
    "includeProductDetails": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("dataspryva/trustradius-product-ratings-and-feature-score").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "product",
    "productUrls": ["https://www.trustradius.com/products/asana"],
    "searchQueries": [],
    "categoryUrls": [],
    "maxItems": 1,
    "maxReviewsPerProduct": 3,
    "reviewSort": "newest",
    "starRatings": [],
    "companySizes": [],
    "countries": [],
    "reviewerRoles": [],
    "jobTypes": [],
    "departments": [],
    "minYearsExperience": 0,
    "lastUpdated": "any",
    "publishedAfter": "",
    "includeReviewDetails": False,
    "includeProductDetails": False,
}

# Run the Actor and wait for it to finish
run = client.actor("dataspryva/trustradius-product-ratings-and-feature-score").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "product",
  "productUrls": [
    "https://www.trustradius.com/products/asana"
  ],
  "searchQueries": [],
  "categoryUrls": [],
  "maxItems": 1,
  "maxReviewsPerProduct": 3,
  "reviewSort": "newest",
  "starRatings": [],
  "companySizes": [],
  "countries": [],
  "reviewerRoles": [],
  "jobTypes": [],
  "departments": [],
  "minYearsExperience": 0,
  "lastUpdated": "any",
  "publishedAfter": "",
  "includeReviewDetails": false,
  "includeProductDetails": false
}' |
apify call dataspryva/trustradius-product-ratings-and-feature-score --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dataspryva/trustradius-product-ratings-and-feature-score"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Bi0XIucr8FdHafeVw/builds/MOtSZIbzqqhW2xiv8/openapi.json
