# Trustradius Reviews Scraper (`reviewly/trustradius-reviews-scraper`) Actor

TrustRadius reviews scraper with automatic Cloudflare bypass. Scrape B2B software ratings, pros & cons, reviewer job titles, and product TR Scores. Supports full pagination, date cutoff, and bulk product URLs. Ready-to-use JSON output

- **URL**: https://apify.com/reviewly/trustradius-reviews-scraper.md
- **Developed by:** [Reviewly](https://apify.com/reviewly) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 1 total users, 1 monthly users, 87.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 record scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## TrustRadius Reviews Scraper

Extract verified B2B software reviews from any TrustRadius product page — automatically, at scale, with full Cloudflare bypass built in.

**Perfect for:** competitor intelligence, market research, sentiment analysis, lead generation, and review monitoring.

***

### 📌 What This Actor Does

[TrustRadius](https://www.trustradius.com) hosts tens of thousands of verified B2B software reviews written by real users. This Apify Actor lets you scrape those reviews programmatically — bypassing Cloudflare protection automatically, paginating through every page, and returning clean structured JSON ready for analysis or enrichment.

**Who it's for:**

- **Product managers** benchmarking competitors
- **Sales teams** building prospect intelligence from reviewer job titles
- **Researchers** analyzing B2B software sentiment at scale
- **Marketers** monitoring their own product's reviews over time

***

### ✨ Key Features

- **Automatic Cloudflare bypass** — uses a real stealth Chromium browser; no manual cookie copying required
- **Full pagination** — scrapes every page of reviews, not just the first
- **Date-based cutoff** — stop at reviews older than a target date, ideal for incremental monitoring
- **Structured output** — product metadata (TR Score, review count, category, logo) + reviews array in one record
- **Flexible URL input** — accepts `/products/<slug>`, `/products/<slug>/reviews`, or `/products/<slug>/reviews/all`
- **Session-pinned proxy** — browser and fetch requests share one residential IP so Cloudflare clearance stays valid throughout the run

***

### 🧠 Why This Actor Is Different

Most TrustRadius scrapers fail silently against Cloudflare Bot Management. This actor:

- Uses **`playwright-extra` + stealth plugin** to spoof a real browser fingerprint (`navigator.webdriver`, Chrome runtime, permission API, and more)
- **Pins the proxy session** — the same IP is used for the browser challenge and all subsequent page fetches, keeping the `cf_clearance` cookie valid
- **Handles non-200 responses gracefully** — the browser continues executing challenge JS even when the initial navigation technically "fails"

***

### ⚙️ Input Configuration

| Field | Type | Required | Description |
|---|---|---|---|
| `startUrls` | Array | ✅ | TrustRadius product URLs to scrape |
| `maxReviews` | Integer | ❌ | Max reviews per product (0 = no limit) |
| `targetDate` | String | ❌ | ISO 8601 date — skip reviews older than this |
| `proxyConfiguration` | Object | ❌ | Residential proxy strongly recommended |

#### Example Input

```json
{
  "startUrls": [
    { "url": "https://www.trustradius.com/products/hubspot-crm/reviews/all" },
    { "url": "https://www.trustradius.com/products/salesforce-crm" }
  ],
  "maxReviews": 500,
  "targetDate": "2024-01-01",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
```

#### Tips for Best Results

- **Residential proxy is required for production.** TrustRadius's Cloudflare configuration blocks datacenter IPs reliably. Use the `RESIDENTIAL` proxy group.
- **Use `targetDate` to cut runtime.** If you only need recent reviews, set it to 90 or 30 days ago — the actor stops paginating as soon as it hits the cutoff.
- **Free plan cap.** Free users are limited to 100 reviews per day. The counter resets at UTC midnight.

***

### 📤 Output Format

One dataset record per product URL:

```json
{
  "name": "HubSpot CRM",
  "productUrl": "https://www.trustradius.com/products/hubspot-crm/reviews",
  "logoUrl": "https://media.trustradius.com/product-logos/xx/xx/XXXXX-180x180.PNG",
  "trScore": 8.5,
  "reviewCount": 1240,
  "category": "CRM Software",
  "reviews": [
    {
      "reviewUrl": "https://www.trustradius.com/reviews/hubspot-crm-2024-11-15",
      "title": "Best CRM for growing teams",
      "rating": 9,
      "date": "2024-11-15T10:30:00.000Z",
      "useCases": "We use HubSpot CRM to manage our entire sales pipeline and automate follow-ups...",
      "pros": ["Easy to use", "Great integrations", "Affordable pricing"],
      "cons": ["Reporting could be more flexible"],
      "likelyToRecommend": "Highly recommend for SMBs looking for a scalable CRM.",
      "authorName": "Verified User",
      "authorJob": "Sales Manager in Technology (51-200 employees)",
      "vetted": true
    }
  ]
}
```

#### Field Reference

| Field | Description |
|---|---|
| `name` | Product name |
| `productUrl` | Canonical TrustRadius product URL |
| `logoUrl` | Product logo image URL |
| `trScore` | TrustRadius Score (out of 10) |
| `reviewCount` | Total reviews on TrustRadius |
| `category` | Primary software category |
| `reviews[].rating` | Reviewer score (1–10) |
| `reviews[].date` | Review date in ISO 8601 |
| `reviews[].pros` | Array of pros listed by the reviewer |
| `reviews[].cons` | Array of cons listed by the reviewer |
| `reviews[].useCases` | How the reviewer uses the product |
| `reviews[].likelyToRecommend` | Reviewer's recommendation statement |
| `reviews[].authorJob` | Reviewer's job title, industry, and company size |
| `reviews[].vetted` | Whether the review is vetted by TrustRadius |

***

### ▶️ How to Use

1. **Find a product** on [trustradius.com](https://www.trustradius.com) and copy its URL
2. **Open the actor** and paste the URL into **Start URLs**
3. **Configure proxy** — select Apify Residential proxy in the Proxy configuration field
4. **Set limits** (optional) — add a `targetDate` to only collect recent reviews, or set `maxReviews` to cap results
5. **Click Start** — the actor opens a stealth browser, bypasses Cloudflare, and scrapes all pages
6. **Download results** — export as JSON, CSV, or connect via the Apify API

***

### 📈 Use Cases

1. **Competitor intelligence** — scrape reviews of competing products to identify feature gaps, pricing complaints, and switching triggers
2. **Market research** — analyze sentiment across a software category to spot emerging trends before your competitors do
3. **Lead generation** — reviewer profiles include job titles and company size, letting you identify prospects actively evaluating your space
4. **Product improvement** — mine your own product's TrustRadius reviews to surface recurring pain points and unmet needs
5. **Review monitoring** — run on a schedule with `targetDate` set to last week to automatically catch every new review as it's published

***

### 🛠️ Advanced Tips

**Scrape multiple products in one run**\
Add several URLs to `startUrls`. The actor processes them sequentially, using a fresh proxy session and Cloudflare bypass for each.

**Weekly review monitoring with the scheduler**\
Combine the [Apify Scheduler](https://docs.apify.com/schedules) with a `targetDate` computed dynamically (set to 7 days ago). You get only net-new reviews on every run.

**Export to Google Sheets**\
Use Apify's built-in Google Sheets integration or export CSV from the dataset view. Each row is one review; product metadata is repeated for easy filtering.

**Access via API**

```
GET https://api.apify.com/v2/datasets/{datasetId}/items?format=json&clean=true
```

***

### ❓ FAQ / Troubleshooting

**Why am I getting 403 errors?**\
TrustRadius uses Cloudflare Bot Management. Make sure you're using a residential proxy (`RESIDENTIAL` group) — datacenter IPs are blocked by default.

**The actor timed out during the browser step.**\
The stealth browser typically solves Cloudflare in under 30 seconds. If it times out, the site may be temporarily more aggressive. Re-run the actor — a different proxy IP is assigned each time.

**I'm on the free plan — why did it stop early?**\
Free plan users are capped at 100 reviews per day. The counter resets at UTC midnight. Upgrade to remove the limit entirely.

**Can I scrape multiple products at once?**\
Yes — add multiple URLs to `startUrls` and the actor processes them in sequence within a single run.

**Does it work with all TrustRadius URL formats?**\
Yes. The actor normalises `/products/<slug>`, `/products/<slug>/reviews`, and `/products/<slug>/reviews/all` to the correct endpoint automatically.

**Will this break if TrustRadius updates its HTML?**\
The scraper targets stable semantic selectors (data-testid attributes and structural class patterns). Minor UI updates are unlikely to break it, but if TrustRadius does a major redesign, reach out and I'll update the actor.

***

### 📞 Support

Found a bug or need help? [**Email**](mailto:me@ahmedhrid.com) or open an issue in the **Issues** tab on the actor's Apify page. I typically respond within 24 hours.

# Actor input Schema

## `startUrls` (type: `array`):

TrustRadius product URLs to scrape. Accepts /products/<slug>, /products/<slug>/reviews, or /products/<slug>/reviews/all.

## `maxReviews` (type: `integer`):

Maximum number of reviews to scrape per product URL. 0 means no limit.

## `targetDate` (type: `string`):

Stop scraping reviews older than this date (ISO 8601, e.g. 2025-01-01). Leave empty to scrape all reviews.

## `proxyConfiguration` (type: `object`):

Residential proxy is required — the same session is used for both the browser (Cloudflare bypass) and fetch requests.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.trustradius.com/products/intuit-enterprise-suite/reviews/all"
    }
  ],
  "maxReviews": 0,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Each record contains product info (name, trScore, reviewCount, category, logoUrl) and a reviews array with title, rating, date, pros, cons, author details and more.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.trustradius.com/products/intuit-enterprise-suite/reviews/all"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("reviewly/trustradius-reviews-scraper").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 = {
    "startUrls": [{ "url": "https://www.trustradius.com/products/intuit-enterprise-suite/reviews/all" }],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("reviewly/trustradius-reviews-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.trustradius.com/products/intuit-enterprise-suite/reviews/all"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call reviewly/trustradius-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=reviewly/trustradius-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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