# Review Intelligence — G2, Trustpilot, Glassdoor & Capterra (`ramsford/review-intelligence-agent`) Actor

Aggregate any company's reviews across G2, Trustpilot, Glassdoor, and Capterra into one executive intelligence report. Sentiment scoring, recurring themes, star-rating trend, complaint clusters, and an AI-written narrative — per company. Pay per report.

- **URL**: https://apify.com/ramsford/review-intelligence-agent.md
- **Developed by:** [Don Johnson](https://apify.com/ramsford) (community)
- **Categories:** Business, Marketing
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1,250.00 / 1,000 review intelligence reports

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## Review Intelligence Agent — G2, Trustpilot, Glassdoor & Capterra in One Report

**Turn scattered customer and employee reviews into a one-page intelligence report. No NLP service required, no per-API key, no glue code.**

Most teams need to know one thing fast: **what are real customers and employees saying about a company right now — and how is that changing?** Browsing G2, Trustpilot, Glassdoor and Capterra by hand is hours of work for a single company; scaling it across a target list is a week.

This actor does it in one call. Feed it any company plus the public URLs of its review pages, and it returns:

- **An aggregated star rating** across every connected source
- **Star-NPS proxy score** (4–5 share minus 1–2 share, the way investors actually look at SaaS reviews)
- **Star trend** — last 30, 90, 180 days vs all-time
- **Sentiment breakdown** — positive / mixed / negative / neutral
- **Top complaint themes** — pricing, support, performance, onboarding, UI/UX, feature gaps, integrations, mobile, docs, data accuracy
- **Top praise themes** — ease of use, value, speed, reliability, feature breadth, integrations, onboarding, support
- **Notable positive and negative reviews** with star, source, and date
- **Recurring phrase cloud** mined from the actual review text
- **An AI-written executive narrative** that ties it all together in plain English

Pay-per-report pricing. No subscription. No surprises.

***

### Who this is for

- **Investors & due-diligence teams** — vet a SaaS or DTC target in 30 seconds before deeper diligence
- **Competitive intelligence teams** — track 50 competitors across 4 review sources without hiring an analyst
- **Sales reps** — walk into a pitch already knowing what your prospect's customers love and hate
- **Product teams** — spot complaint clusters around your competitor's last release
- **CX leaders** — benchmark your own brand against the field
- **Agencies** — sell a "review intelligence" deliverable to clients without building it yourself

***

### How it works

1. You provide an array of `companies`. Each company is just `{ name }` plus any subset of `g2Url`, `trustpilotUrl`, `glassdoorUrl`, `capterraUrl`.
2. The actor pulls reviews from each provided source (capped per source for speed).
3. It dedupes across sources, scores sentiment, mines complaint and praise themes, computes star trends, and writes a narrative.
4. Each company produces **one report**. You are charged per report (PPE).

Provide more sources = stronger signal. The minimum useful setup is one URL.

***

### Input

```json
{
    "companies": [
        {
            "name": "Acme Corp",
            "g2Url": "https://www.g2.com/products/acme/reviews",
            "trustpilotUrl": "https://www.trustpilot.com/review/acme.com",
            "glassdoorUrl": "https://www.glassdoor.com/Reviews/Acme-Reviews-E12345.htm",
            "capterraUrl": "https://www.capterra.com/p/123456/Acme/"
        }
    ],
    "maxReviewsPerSource": 75,
    "reportStyle": "full"
}
```

| Field | Required | Default | Description |
|---|---|---|---|
| `companies[].name` | Yes | — | Company name (used in the report headline) |
| `companies[].g2Url` | No | — | Public G2 reviews URL |
| `companies[].trustpilotUrl` | No | — | Public Trustpilot review page |
| `companies[].glassdoorUrl` | No | — | Public Glassdoor reviews page |
| `companies[].capterraUrl` | No | — | Public Capterra product page |
| `maxReviewsPerSource` | No | 75 | Per-source cap. 10–300 |
| `reportStyle` | No | `full` | `full` (detailed markdown) or `brief` (one-page exec summary) |

***

### Output — one record per company

Each company in `companies` produces one row in the dataset. Key fields:

```jsonc
{
    "company": "Acme Corp",
    "scrapedAt": "2026-05-16T12:00:00.000Z",
    "totalReviews": 187,
    "averageStars": 4.31,
    "starNpsProxy": 58,
    "starDistribution": { "1": 6, "2": 9, "3": 18, "4": 64, "5": 90 },
    "sentimentBreakdown": { "positive": 121, "mixed": 30, "negative": 32, "neutral": 4 },
    "topComplaints": [ ["Pricing & billing", 19], ["Customer support", 12], ... ],
    "topPraise": [ ["Ease of use", 33], ["Customer support", 21], ... ],
    "recentTrend": { "last30d": 4.40, "last90d": 4.36, "last180d": 4.33, "last30dCount": 11, ... },
    "sourceSummary": [ { "source": "g2", "count": 75 }, ... ],
    "notablePositiveReviews": [ ... ],
    "notableNegativeReviews": [ ... ],
    "aiNarrative": "Acme Corp averages 4.31/5 across 187 aggregated reviews. Star-NPS proxy is 58 (strong). Sentiment: 65% positive, 17% negative. Recurring complaints: Pricing & billing (19), Customer support (12). Praise themes: Ease of use (33), Customer support (21).",
    "intelligenceReport": "# Review Intelligence Report — Acme Corp\n…"
}
```

`intelligenceReport` is a fully formatted markdown report you can drop straight into a CRM, Slack, Notion, or PDF generator.

***

### Pricing

**$1.25 per company report** (pay-per-event). One company in `companies` = one report = one charge. You only pay for completed reports.

Why this is a steal: collecting and analyzing reviews for a single company across 4 sources by hand is roughly 60–90 minutes of analyst time. Even at $40/hour, that's $40–60 of labor per company. This actor delivers the same artifact for **$1.25**, in under a minute, with a consistent format you can compare across hundreds of companies.

***

### Common workflows

- **Build a competitive matrix.** Run 20 competitors in one input. Export the dataset to CSV. Sort by `starNpsProxy`. You now have a ranked SaaS leaderboard.
- **Pre-call sales intel.** Run a prospect 10 minutes before the demo. Open the `topComplaints` field — you now know what to lead with.
- **M\&A diligence shortlist.** Run your target list. Filter by `recentTrend.last90d` falling vs `averageStars`. That's your "review velocity is bad" alert.
- **Brand alarm system.** Schedule weekly. Diff the `topComplaints` field. New theme appearing? That's your investigation.

***

### Tips for high-quality reports

- **Provide all four URLs when possible.** Cross-source dedupe is what lets the report reach "executive" quality.
- **Use `maxReviewsPerSource: 150+` for deep dives** on a small list. Use the default 75 for fast triage runs across many companies.
- **For B2B SaaS**, G2 and Capterra usually carry the highest-signal reviews. For DTC and consumer brands, Trustpilot. For employer-brand work, Glassdoor.
- **Run it on yourself first.** The report often surfaces complaint themes your own team has been brushing off.

***

### What this actor does **not** do

- It does **not** scrape behind login walls. Provide public review URLs only.
- It does **not** translate reviews — non-English reviews are analyzed at lower precision.
- It does **not** call an external LLM. The narrative is built from on-device heuristics, which is what makes the per-report cost so low.

If you need true LLM-summarized review reports at scale, contact us — we run a parallel actor for that workflow.

***

### Limits & honesty

Public review pages change layouts. We use multiple selector fallbacks per source and degrade gracefully — if one source returns 0 reviews, the report continues and clearly labels that source as empty.

Built and maintained by **Johnson AI Consulting** — the same shop that ships the Hiring Signal Intelligence Agent and the Competitor Intelligence Monitor on Apify Store.

# Actor input Schema

## `companies` (type: `array`):

List of company objects. Each needs at minimum: name. Provide any subset of: g2Url, trustpilotUrl, glassdoorUrl, capterraUrl. More sources = stronger signal.

## `maxReviewsPerSource` (type: `integer`):

Maximum number of reviews to collect from each source per company. Higher = richer signal, longer run time.

## `reportStyle` (type: `string`):

'full' produces a detailed markdown report. 'brief' produces a one-page executive summary.

## Actor input object example

```json
{
  "companies": [
    {
      "name": "Acme Corp",
      "g2Url": "https://www.g2.com/products/acme/reviews",
      "trustpilotUrl": "https://www.trustpilot.com/review/acme.com",
      "glassdoorUrl": "https://www.glassdoor.com/Reviews/Acme-Reviews-E12345.htm",
      "capterraUrl": "https://www.capterra.com/p/123456/Acme/"
    }
  ],
  "maxReviewsPerSource": 25,
  "reportStyle": "brief"
}
```

# 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 = {
    "companies": [
        {
            "name": "Notion",
            "g2Url": "https://www.g2.com/products/notion/reviews",
            "trustpilotUrl": "https://www.trustpilot.com/review/notion.so",
            "capterraUrl": "https://www.capterra.com/p/178356/Notion/"
        }
    ],
    "maxReviewsPerSource": 25,
    "reportStyle": "brief"
};

// Run the Actor and wait for it to finish
const run = await client.actor("ramsford/review-intelligence-agent").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 = {
    "companies": [{
            "name": "Notion",
            "g2Url": "https://www.g2.com/products/notion/reviews",
            "trustpilotUrl": "https://www.trustpilot.com/review/notion.so",
            "capterraUrl": "https://www.capterra.com/p/178356/Notion/",
        }],
    "maxReviewsPerSource": 25,
    "reportStyle": "brief",
}

# Run the Actor and wait for it to finish
run = client.actor("ramsford/review-intelligence-agent").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 '{
  "companies": [
    {
      "name": "Notion",
      "g2Url": "https://www.g2.com/products/notion/reviews",
      "trustpilotUrl": "https://www.trustpilot.com/review/notion.so",
      "capterraUrl": "https://www.capterra.com/p/178356/Notion/"
    }
  ],
  "maxReviewsPerSource": 25,
  "reportStyle": "brief"
}' |
apify call ramsford/review-intelligence-agent --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ramsford/review-intelligence-agent"
        }
    }
}

```

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/dGpHTf9C7wugVhNGp/builds/UxIAIeG3qGhlQLTXd/openapi.json
