# All-in-One Review Scraper: G2, Capterra & Trustpilot (`zen-studio/software-review-scraper`) Actor

Scrape reviews from G2, Capterra, TrustRadius, Gartner, and Trustpilot in one run. Just type a product name or domain. Get unified ratings, pros/cons, reviewer details, dates, and platform-specific sub-ratings. Filter by star rating and sort order. Export as JSON, CSV, or Excel.

- **URL**: https://apify.com/zen-studio/software-review-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** Integrations, Other, Lead generation
- **Features:** Limited permissions
- **Stats:** 579 total users, 112 monthly users, 91.5% runs succeeded, 7 bookmarks
- **User rating**: 4.00 out of 5 stars

## Pricing

from $3.99 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

## All-in-One Review Scraper: G2, Capterra, Trustpilot & More

[![Enter a product name. Scrape reviews from 5 platforms.](https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/software-review-scraper-readme-hero-v1.png)](https://console.apify.com/actors/9UyFQFcuwmvWG91uH/input)

From <strong>Zen Studio</strong>, creators of dedicated <a href="https://apify.com/zen-studio/g2-reviews-scraper">G2</a>, <a href="https://apify.com/zen-studio/capterra-reviews-scraper">Capterra</a> and <a href="https://apify.com/zen-studio/glassdoor-reviews-scraper">Glassdoor</a> review scrapers and the <a href="https://apify.com/zen-studio/place-review-aggregator">Place Review Aggregator</a>. Software reviews and local-business feedback are established parts of our scraping portfolio.

### Why choose this actor?

<strong>Enter the name. We find the review pages.</strong><br>Start with a product name such as Slack, a company domain or a supported review URL. The actor automatically finds matching pages across your selected platforms: G2, Capterra, TrustRadius, Gartner and Trustpilot. Availability depends on where the product is listed.

<strong>Compare feedback in one consistent dataset.</strong><br>Collect full review text, ratings, dates and source links together. Ratings use a common scale, with the original values preserved. Pros and cons, reviewer industry and company size add context where the platform supplies them.

<strong>Keep the detail behind the verdict.</strong><br>Retain platform-specific information such as Capterra ease-of-use scores, TrustRadius alternatives considered and Trustpilot company replies when available. Use it to compare products, research objections and understand who is leaving feedback.

<a href="https://console.apify.com/actors/9UyFQFcuwmvWG91uH/input"><img src="https://api.apify.com/v2/key-value-stores/pJ7iaZsTFhR3k9tjV/records/software-review-scraper-readme-cta-v1.svg" width="260" height="48" alt="Find your product’s reviews"/></a>

### Quick start

Search for Slack across all five platforms, requesting up to 100 reviews in total. Replace Slack with your product name.

```json
{
  "query": "Slack",
  "platforms": [
    "g2",
    "capterra",
    "trustradius",
    "gartner",
    "trustpilot"
  ],
  "maxResults": 100
}
```

<a href="https://console.apify.com/actors/9UyFQFcuwmvWG91uH/input">Open actor input</a> to choose your product, platforms and rating filters.

This example explicitly enables Trustpilot. The default selection is the other four platforms. One product per run; select at least two platforms and request at least 100 reviews. Results depend on matching pages and review availability.

<table><tr><td colspan="4" style="padding:10px 14px;background:#FF492C;color:#151515;font-size:13px;font-weight:700">Zen Studio · Review Scrapers</td></tr><tr><td style="padding:10px 12px;border:1px solid #E7E5E4;background:#FFDDD4;vertical-align:top;width:25.00%"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-9UyFQFcuwmvWG91uH-BWRrsdwsuQ-software-reviews-aggregator-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/software-review-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Software Reviews</a></span><br><span style="color:#57534E;font-size:12px;white-space:nowrap">You are here</span></td><td style="padding:10px 12px;border:1px solid #E7E5E4;background:#FFF0E8;vertical-align:top;width:25.00%"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-XQAkoDssJyWZmyR0W-aBi9woFm7e-g2-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/g2-reviews-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">G2 Reviews</a></span><br><span style="color:#57534E;font-size:12px;white-space:nowrap">Focus on G2 feedback</span></td><td style="padding:10px 12px;border:1px solid #E7E5E4;background:#FFF0E8;vertical-align:top;width:25.00%"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-x5wbchBdDewl20s3k-D82GiybXUd-capterra-review-scraper-logo.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/capterra-reviews-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Capterra Reviews</a></span><br><span style="color:#57534E;font-size:12px;white-space:nowrap">Ratings, pros &amp; cons</span></td><td style="padding:10px 12px;border:1px solid #E7E5E4;background:#FFF0E8;vertical-align:top;width:25.00%"><span style="white-space:nowrap"><img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/NWYsOG96fMDy8ycdf-actor-2EJcvIYcO9H0KQOIO-r9WyLYmWGc-place-review-aggregator.png" width="20" height="20" alt="" style="vertical-align:middle">&nbsp;&nbsp;<a href="https://apify.com/zen-studio/place-review-aggregator" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:13px">Place Reviews</a></span><br><span style="color:#57534E;font-size:12px;white-space:nowrap">Local reviews</span></td></tr></table>

#### Copy to your AI assistant

```text
Help me use zen-studio/software-review-scraper, a batch Actor on Apify. Read https://apify.com/zen-studio/software-review-scraper.md for documentation, input schema, pricing and limits. Choose settings for my requested outcome. If you cannot retrieve the page, ask me to paste the relevant sections. To reach the maintainers, add feedback="<what you needed and did not get>" to any run, including one that worked: feature requests, a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. The run returns its data exactly as it would without the note, and a human reads every note.
```

Key inputs: query (string, required), platforms (array), maxResults (integer). Pricing: $4.99 per 1,000 reviews on the Free plan (review-scraped $0.00499/review, lower on paid plans), plus Apify's platform start fee.

### How the All-in-One Review Scraper Works

1. **Enter a product name** (e.g., `Slack`, `Notion`, `Jira`), a company domain (e.g., `asana.com`), or paste a review page URL
2. The actor searches G2, Capterra, TrustRadius, Gartner, and Trustpilot to find the product
3. Reviews are collected in parallel from all platforms
4. Output is normalized into a single, consistent format

You can filter by star rating, sort by recency or helpfulness, and control how many reviews to collect. The actor distributes your requested count proportionally across platforms based on review availability.

### All-in-One Review Scraper Features

#### Automatic Product Discovery

- Type a product name, the actor finds it on all five platforms
- Paste a URL from any platform, the rest are resolved automatically
- Handles regional Capterra and Trustpilot domains (`.de`, `.fr`, `.co.uk`) automatically

#### Unified Output Schema

- Consistent field names across G2, Capterra, TrustRadius, Gartner, and Trustpilot
- Ratings normalized to a common scale with original values preserved
- Reviewer details (name, job title, company size, industry) in the same structure, with the unit each platform measures company size in
- The product's own figures on every review in one `product` object: its page on the platform, and where available its overall rating, review count, category, vendor and pricing, so you can put the product's Capterra and Gartner ratings side by side
- Platform-specific data (sub-ratings, feature scores, alternatives) kept in `platformData`

#### Cross-Platform Filtering

- Sort by most recent, highest rated, lowest rated, or most helpful
- Filter by star rating (1-5)
- Each filter is mapped to the equivalent option on each platform

### Extracted Data Fields

Each review includes:

- **Review content** -- title, full text, pros, cons
- **Rating** -- normalized rating + original platform rating + scale
- **Reviewer** -- name, job title, company, company size + its unit (employees or revenue), industry, verified status, each filled where the platform publishes it
- **Metadata** -- date, review URL, review ID, platform source, incentivized flag
- **Product** -- the product's page on the platform, plus its overall rating and scale, review count, category, vendor, logo, starting price, currency, pricing model, payment frequency, pricing description and free trial / free version flags, each filled where the platform provides it (`product`)
- **Platform extras** -- sub-ratings, feature scores, alternatives considered, vendor responses (varies by platform)

### Output Example

Every review is returned in the same shape, whichever platform it came from. A G2 review:

```json
{
  "platform": "g2",
  "reviewId": "9015972",
  "title": "Great email tool for tracking and automating email stuff",
  "text": "We are able to design our sales strategy based on the email tracking information we receive at a client level.",
  "pros": "The best thing about Polymail is the feature using which we can track if the email has been opened and/or the attachment has been viewed.",
  "cons": "There is nothing as such which we do not like about Polymail as of now.",
  "rating": 4.5,
  "ratingOriginal": 4.5,
  "ratingScale": "0-5",
  "date": "2023-12-15",
  "reviewUrl": "https://www.g2.com/products/polymail/reviews/polymail-review-9015972",
  "reviewer": {
    "name": "Verified User in Sporting Goods",
    "jobTitle": null,
    "company": null,
    "companySize": "Small-Business (50 or fewer emp.)",
    "companySizeUnit": "employees",
    "industry": "Sporting Goods",
    "verified": true
  },
  "productName": "Polymail",
  "product": {
    "url": "https://www.g2.com/products/polymail/reviews",
    "vendor": null,
    "logoUrl": null,
    "category": null,
    "rating": null,
    "ratingScale": null,
    "reviewCount": null,
    "startingPrice": null,
    "currency": null,
    "pricingModel": null,
    "paymentFrequency": null,
    "pricingText": null,
    "freeTrial": null,
    "freeVersion": null
  },
  "recommendationScore": null,
  "incentivized": true,
  "platformData": {
    "validatedReviewer": true,
    "validatedMethod": "Business Email",
    "verifiedCurrentUser": false,
    "reviewSource": "G2 invite"
  }
}
```

The same fields come back for Capterra, TrustRadius, Gartner, and Trustpilot reviews. Only `platformData` changes its keys by platform, and `ratingOriginal` / `ratingScale` keep each platform's native scale (TrustRadius rates out of 10, the rest out of 5). `companySizeUnit` says what the company-size band counts, because the platforms do not agree: G2, Capterra and TrustRadius publish employee bands, Gartner publishes annual-revenue bands, and Trustpilot publishes no reviewer firmographics. `pros` and `cons` are filled wherever the platform publishes them separately from the review body: always on G2, Capterra and TrustRadius, on the two spotlight reviews for Gartner, and not at all on Trustpilot, which asks for a single free-text review.

#### Reviewer Details by Platform

Every review carries the same reviewer block, but each platform decides how much it says about the reviewer, so some of those fields are empty by platform rather than by review:

| Field | G2 | Capterra | TrustRadius | Gartner | Trustpilot |
| --- | --- | --- | --- | --- | --- |
| `name` | name, or "Verified User in" + industry | first name + last initial | full name where the reviewer publishes it | -- | consumer display name |
| `jobTitle` | where published | yes | yes | yes | -- |
| `company` | -- | -- | where the reviewer publishes it | -- | -- |
| `companySize` | employee band | employee band | employee band | revenue band | -- |
| `industry` | yes | yes | yes | yes | -- |
| `verified` | yes | yes | yes | yes | yes |

TrustRadius is the only one of the five that publishes the reviewer's employer, and only on the reviews whose author shows it; G2, Capterra and Gartner identify the reviewer by industry and company size instead. None of the five publishes an employer domain or work email address, so there is no reviewer domain field to return.

#### Product Details by Platform

Every review also carries a `product` object describing the product itself, with the same keys on every platform and `null` where a value is not available, so CSV and Excel exports keep the same columns. All reviews from one platform in a run carry the same values. The product's name stays in `productName`. A Capterra review of Salesforce Sales Cloud:

```json
"product": {
  "url": "https://www.capterra.com/p/61368/Salesforce/reviews/",
  "vendor": null,
  "logoUrl": null,
  "category": "CRM Software",
  "rating": 4.4,
  "ratingScale": "1-5",
  "reviewCount": 18813,
  "startingPrice": 25,
  "currency": "USD",
  "pricingModel": "Per User",
  "paymentFrequency": "Per Month",
  "pricingText": null,
  "freeTrial": true,
  "freeVersion": false
}
```

Which keys each platform fills:

| Field | G2 | Capterra | TrustRadius | Gartner | Trustpilot |
| --- | --- | --- | --- | --- | --- |
| `url` | product reviews page | product reviews page | product reviews page | product reviews page | business page |
| `vendor` | -- | -- | yes | yes | -- |
| `logoUrl` | -- | -- | yes | yes | -- |
| `category` | -- | yes | primary category | Gartner market, where listed | -- |
| `rating`, `ratingScale` | -- | yes, 1-5 | -- | yes, 1-5 | -- |
| `reviewCount` | -- | yes | -- | yes | -- |
| `startingPrice`, `currency`, `pricingModel`, `paymentFrequency` | -- | yes | -- | -- | -- |
| `pricingText` | -- | -- | -- | pricing description, where Gartner has one | -- |
| `freeTrial`, `freeVersion` | -- | yes | -- | -- | -- |

`product.rating` is the product's overall rating on that platform and `product.reviewCount` its total number of reviews there, not the number of reviews in your run. `ratingScale` is `null` whenever `rating` is. In the rare Capterra run where the product's details are unavailable, only `url` is filled.

#### Platform-Specific Extras

- **G2**: validated reviewer badges, validation method, review source, reviewer recommendations to others
- **Capterra**: ease of use, customer support, functionality, and value for money sub-ratings, the product's Capterra category, why the reviewer chose the product or switched to it, who invited the review, if anyone, and whether an incentive was offered (`reviewSource`, plus `reviewSourceLabel`, the same source as plain text such as "No Incentive Offered" for spreadsheet exports), whether the reviewer posted anonymously, how the reviewer was verified (LinkedIn, business email), and a profile photo where the reviewer has one
- **TrustRadius**: feature ratings, alternatives considered, ROI data
- **Gartner**: anonymous reviews with market name and vendor name; `pros` / `cons` on the top favorable and top critical review
- **Trustpilot**: review language, likes count, company reply, reviewer country, verification level

### Input Parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `query` | String | Yes | -- | Product name, company domain, or review page URL |
| `platforms` | Array | No | G2, Capterra, TrustRadius, Gartner | Which platforms to collect from (Trustpilot available as opt-in) |
| `maxResults` | Integer | No | 100 | Total reviews to collect (distributed across platforms) |
| `sort` | String | No | `most_recent` | Sort order: `most_recent`, `highest_rated`, `lowest_rated`, `most_helpful` (G2 has no helpfulness ranking, so it returns most recent) |
| `starRatings` | Array | No | All | Filter by star rating (1-5) |

#### Accepted Input Formats

You can also enter a company domain or paste a review page URL:

- **Domain**: `asana.com`, `monday.com`, `www.notion.com`
- **G2**: `https://www.g2.com/products/slack/reviews`
- **Capterra**: `https://www.capterra.com/p/135003/Slack/reviews/`
- **TrustRadius**: `https://www.trustradius.com/products/slack/reviews`
- **Gartner**: `https://www.gartner.com/reviews/product/slack-1244000344` (add `?marketSeoName=...` to keep to one market)
- **Trustpilot**: `https://www.trustpilot.com/review/slack.com`

Domains are resolved to a product name automatically. URLs are used directly for that platform, with the rest auto-discovered.

### Quick Start

#### Minimal -- Just a Product Name

```json
{
  "query": "Notion"
}
```

#### From a Domain

```json
{
  "query": "asana.com"
}
```

#### With Filters

```json
{
  "query": "Slack",
  "maxResults": 500,
  "sort": "highest_rated",
  "starRatings": ["4", "5"]
}
```

#### Specific Platforms Only

```json
{
  "query": "Jira",
  "platforms": ["g2", "capterra"],
  "maxResults": 200
}
```

#### Researching the vendor, not just the product

This actor covers what customers say about a product. What employees say about
the company behind it lives on Glassdoor, which is a different subject and a
different entity, so it is a separate actor rather than a sixth platform here:
[Glassdoor Reviews Scraper](https://apify.com/zen-studio/glassdoor-reviews-scraper).
Run it on the vendor name when you need the employer side of a due-diligence
picture.

#### With Trustpilot

```json
{
  "query": "Notion",
  "platforms": ["g2", "capterra", "trustradius", "gartner", "trustpilot"],
  "maxResults": 500
}
```

#### From a URL

```json
{
  "query": "https://www.g2.com/products/hubspot-crm/reviews",
  "maxResults": 1000
}
```

### Integrations and scheduling

Run the software review reviews scraper on a schedule in Apify Console, weekly for review monitoring. Each run can call a webhook when it finishes, so n8n, Make and Zapier flows pick up new rows without polling. The Apify API and the Apify MCP server take the same input, for scripts and AI agents.

### Pricing

**$4.99 per 1,000 reviews on the Free plan**, plus Apify's platform start fee and a $0.01 per 1,000 dataset-item charge. Only successfully scraped reviews are charged; paid plans pay less per review.

| Apify Plan | Price per 1,000 reviews |
|------------|------------------------|
| Free | $4.99 |
| Bronze | $4.49 |
| Silver | $4.29 |
| Gold | $3.99 |
| Platinum | $3.99 |
| Diamond | $3.99 |

#### Cost Examples (Free Plan)

| Reviews | Cost |
|---------|------|
| 100 | $0.50 |
| 500 | $2.50 |
| 1,000 | $4.99 |

**Try it free:** new Apify users get $5 in platform credits. That's ~**1,000 reviews** at no cost.

### API Integration

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("your_api_token")

run = client.actor("zen-studio/software-review-scraper").call(
    run_input={
        "query": "Slack",
        "maxResults": 200,
        "sort": "most_recent",
    }
)

for review in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"[{review['platform']}] {review['rating']}/5 - {review['title']}")
```

#### JavaScript

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

const client = new ApifyClient({ token: "your_api_token" });

const run = await client.actor("zen-studio/software-review-scraper").call({
  query: "Slack",
  maxResults: 200,
  sort: "most_recent",
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((review) => {
  console.log(`[${review.platform}] ${review.rating}/5 - ${review.title}`);
});
```

### Data Export

Export results in any format from the Apify Console:

- **JSON** -- Full structured data with nested objects
- **CSV** -- Flat format for spreadsheets (nested fields are flattened)
- **Excel** -- Direct download for analysis
- **XML** -- For system integrations

### FAQ

**How does the actor find products across platforms?**
Enter a product name and the actor searches each platform's product directory. It uses multiple signals to match the correct product, even when names differ across platforms: an edition name (Zoom finds Zoom Workplace), a former name (Sendinblue finds Brevo, smartbnb finds Hospitable.com), many misspellings, or a listing filed under the vendor's name (Mailchimp finds Intuit Mailchimp). A same-name listing that belongs to a different product is skipped. On Trustpilot, which reviews every kind of business, only the page of the company that makes the software is used: "Monday" finds monday.com, never a shop called Monday. A platform that does not list the product is named in the run's status message. If you enter a company name that covers several products, none of them named after the company, enter the product's own name instead so every platform finds the same one.

**What happens if a product isn't found on one platform?**
The actor collects reviews from whichever platforms have the product. If only 2 of 4 platforms have it, you get reviews from those 2, and the run's log and status message name the platforms with no listing for it, for example "Collected 100 reviews (G2: 100). No listing on Capterra". A platform that could not be reached during the run is named as such instead, so a missing platform never reads as one that does not list the product.

**How are reviews distributed across platforms?**
Proportionally based on each platform's total review count. A platform with 10,000 reviews gets a larger share than one with 500.

**Can I scrape reviews for any software product?**
Yes, any product listed on G2, Capterra, TrustRadius, Gartner, or Trustpilot.

**Why isn't Trustpilot enabled by default?**
Trustpilot covers general business reviews, not just software. The default four platforms (G2, Capterra, TrustRadius, Gartner) are software-specific. Add Trustpilot via the platforms selector when you want broader review coverage.

**How fresh is the data?**
Reviews are collected in real time. You get the latest reviews available on each platform at the time of the run.

**Is there a limit on reviews?**
Up to 40,000 reviews per run. For very large datasets, use the `sort` parameter to prioritize which reviews you get first.

**Does the data include the reviewer's company name or domain?**
`reviewer.company` is filled wherever the platform publishes the reviewer's employer. TrustRadius is the only one of the five that does, and only on reviews whose author shows it. G2, Capterra and Gartner publish the reviewer's industry and company size in place of a name, and Trustpilot publishes no employer at all. No platform publishes an employer domain or work email address, so the dataset has no domain field; segment by `reviewer.industry` and `reviewer.companySize` where the name is absent.

**What does the `platformData` field contain?**
Platform-specific data that doesn't fit the unified schema. This varies by platform: G2 has validated reviewer badges, Capterra has sub-ratings (ease of use, support, etc.), the product's category, the reviewer's reasons for choosing or switching, who invited the review and whether an incentive was offered, and how the reviewer was verified, TrustRadius has feature ratings and ROI data, Gartner has market and vendor names, and Trustpilot has review language, likes, and company replies.

**Can I compare a product's overall rating across platforms?**
Yes, for the platforms that provide it. Every review carries `product.rating`, `product.ratingScale` and `product.reviewCount`, the product's overall rating and total review count on that platform. Capterra and Gartner fill them, both on a 1-5 scale; on G2, TrustRadius and Trustpilot they are `null`. Take one review per platform and you have the comparison; Product Details by Platform above lists every field.

### More Zen Studio & Clearpath review scrapers

- [Place Review Aggregator](https://apify.com/zen-studio/place-review-aggregator)
- [Hotel Review Aggregator API: Google, Booking, Expedia & More](https://apify.com/clearpath/hotel-review-aggregator)
- [Google Maps Reviews Scraper - Unlimited Reviews Per Place](https://apify.com/zen-studio/google-maps-reviews-scraper)
- [Google Maps Scraper - Every Place, Not Just the Top 250](https://apify.com/zen-studio/google-maps-scraper)
- [Foursquare & Swarm Scraper: Places, Reviews, Busy Hours](https://apify.com/zen-studio/swarm-place-reviews-scraper)

Also from the same studio (name, then `account/slug` for the URL `https://apify.com/account/slug`):

- Yelp Reviews Scraper - All Languages & Owner Replies (`clearpath/yelp-reviews-scraper`)
- Tripadvisor Reviews Scraper - Hotels, Restaurants, Attractions (`clearpath/tripadvisor-reviews-scraper`)
- Fast Business Leads Scraper - Up to 1,000 in 30 Seconds (`clearpath/local-business-lead-extractor`)
- TheFork Restaurant Reviews Scraper - Multi-Language (`clearpath/thefork-restaurant-reviews`)
- TheFork Scraper - Restaurants, Reviews & Menus (`clearpath/thefork-scraper`)
- Gartner Peer Insights Scraper - Reviews, Ratings & Profiles (`zen-studio/gartner-review-scraper`)
- Capterra Review Scraper - Real-Time with Star Filters (Fast) (`zen-studio/capterra-reviews-scraper`)
- G2 Reviews Scraper Real-Time (2026) (`zen-studio/g2-reviews-scraper`)

Full directory: [Zen Studio on Apify](https://apify.com/zen-studio)

### Legal Compliance

This actor collects publicly available review data. Users are responsible for complying with each platform's terms of service and applicable data protection regulations (GDPR, CCPA).

***

[**Start Collecting Software Reviews Now**](https://console.apify.com/actors/zen-studio~software-review-scraper)

# Actor input Schema

## `query` (type: `string`):

<b>Accepted formats:</b><br>• Product name: <code>Slack</code>, <code>Notion</code>, <code>Jira</code><br>• Domain: <code>asana.com</code>, <code>monday.com</code><br>• Platform URL from G2, Capterra, TrustRadius, Gartner, or Trustpilot<br><br>URLs are used directly for that platform. The rest are auto-detected by name.

## `platforms` (type: `array`):

Platforms to collect reviews from. Select at least 2. The Actor finds the product on each selected platform automatically.

## `maxResults` (type: `integer`):

Total reviews to collect, distributed across selected platforms proportionally based on availability. Each platform gets a share relative to its total review count.

## `sort` (type: `string`):

How to sort reviews on each platform. The Actor maps this to each platform's equivalent sort option automatically.<br><br>Note: G2 has no helpfulness ranking, so <b>Most Helpful</b> returns its most recent reviews.

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

Only collect reviews with these star ratings. Leave empty for all ratings.<br><br>Note: TrustRadius uses a 1-10 scale internally. A 5-star filter includes their 9-10 rated reviews.

## `feedback` (type: `string`):

For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns.

## Actor input object example

```json
{
  "query": "Slack",
  "platforms": [
    "g2",
    "capterra",
    "trustradius",
    "gartner"
  ],
  "maxResults": 1000,
  "sort": "most_recent",
  "starRatings": []
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "query": "Slack",
    "maxResults": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/software-review-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 = {
    "query": "Slack",
    "maxResults": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("zen-studio/software-review-scraper").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 '{
  "query": "Slack",
  "maxResults": 1000
}' |
apify call zen-studio/software-review-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zen-studio/software-review-scraper"
        }
    }
}
```

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/9UyFQFcuwmvWG91uH/builds/bM4LH5YyVXSyWcwNb/openapi.json
