# Capterra Reviews Scraper - Pros, Cons & Ratings (`rel8ble/capterra-reviews-scraper`) Actor

Use this to get software reviews from Capterra, GetApp and Software Advice. Input: product URLs or names, max reviews, optional star, company-size, keyword, date filters. One result = one review: rating, title, pros, cons, sub-ratings, reviewer industry, company size, date. $1.50 per 1,000 reviews.

- **URL**: https://apify.com/rel8ble/capterra-reviews-scraper.md
- **Developed by:** [Giovanni Rich](https://apify.com/rel8ble) (community)
- **Stats:** 4 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

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?

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

## Capterra Reviews Scraper - Software Reviews, Pros & Cons API

This **Capterra scraper** extracts **B2B software reviews** from Capterra, GetApp and Software Advice into clean JSON, CSV or Excel: star rating, title, pros, cons, overall comments, the four sub-ratings (ease of use, customer service, features, value for money), reviewer industry, company size, time used, review date and vendor response. Paste a Capterra product URL or just a product name, filter by stars, company size or keyword, and get newest reviews first at **$1.50 per 1,000 reviews**.

Capterra, GetApp and Software Advice are all owned by Gartner and share **one review database**. This actor reads that database through Software Advice's public pages over plain HTTP, with **no headless browser**. That's why it's fast (about 25 reviews per request, 600 reviews in under 5 seconds in our tests) and cheap to run. Every review keeps its original ID (`Capterra___7209621`), so you can match it against what you see on capterra.com.

### What you get

- **The review**: title, overall rating (1-5), pros, cons, overall comments, reasons for choosing the product and reasons for switching from a competitor.
- **Sub-ratings**: ease of use, customer service, features, value for money.
- **The reviewer**: first name and last initial (as shown on Capterra), industry, company size, verified flag, time used, usage frequency, and whether the review was incentivized.
- **Vendor response** text and date, when the vendor replied.
- **Product summary on every row**: product name, category, logo, overall rating, total reviews, 1-to-5-star breakdown, average sub-ratings and likelihood-to-recommend score.
- **Filters that run on the site's side**, so you only pay for what you want: star ratings, company size, time used, and a keyword search inside the review text.
- **Newest-first sorting with a date cutoff** (`reviewedAfter`), so scheduled monitoring runs stop as soon as they reach reviews they've already seen.

### How to use the Capterra Reviews Scraper

1. **Enter products**: paste Capterra product URLs (for example `https://www.capterra.com/p/135003/Slack/`), GetApp or Software Advice URLs, or product names like `Asana`. Optionally set filters and a max number of reviews per product.
2. **Click Start.** A few hundred reviews usually take seconds, because no browser runs.
3. **Download the reviews** as JSON, CSV, Excel or HTML from the Storage tab, or pull them straight into your app through the Apify API.

### Use cases

- Competitor research: what users like and hate about a competitor, straight from the pros and cons
- Product and UX research: mine negative reviews (`starRatings: ["1","2"]`) for feature gaps
- Sales battlecards: "reasons for switching" shows why buyers left a competitor
- Review monitoring: a daily schedule with `reviewedAfter` picks up new reviews of your product
- Sentiment analysis and LLM training sets, segmented by industry or company size

### Input

| Field | Default | Description |
|---|---|---|
| `products` | - | Capterra URL (`https://www.capterra.com/p/135003/Slack/`), GetApp URL, Software Advice URL, or a product name (`"Asana"`). One per line. |
| `maxReviewsPerProduct` | 100 | Reviews per product. `0` = every review matching your filters. |
| `sortBy` | `newest` | `newest` or `recommended` (the site's default: most detailed reviews first) |
| `starRatings` | all | e.g. `["1", "2"]` for negative reviews only |
| `companySizes` | all | Codes `A` (self-employed), `B` (2-10), `C` (11-50), `D` (51-200), `E` (201-500), `F` (501-1,000), `G` (1,001-5,000), `H` (5,001-10,000), `I` (10,001+) |
| `timeUsed` | all | `FreeTrial`, `LessThan6Months`, `LessThan12Months`, `LessThan2Years`, `MoreThan2Years` |
| `keyword` | - | Only reviews that mention this word or phrase |
| `reviewedAfter` | - | `YYYY-MM-DD`. Skips older reviews. With `newest` sorting, the scraper stops early. |
| `proxyConfiguration` | Apify Proxy | Switch to RESIDENTIAL if the log shows repeated blocks |

### Input example

Every 1- and 2-star review of Jira and Asana from mid-size companies since 2025:

```json
{
    "products": ["https://www.capterra.com/p/19319/Jira/", "Asana"],
    "maxReviewsPerProduct": 0,
    "sortBy": "newest",
    "starRatings": ["1", "2"],
    "companySizes": ["D", "E", "F"],
    "reviewedAfter": "2025-01-01"
}
```

### Output example

One dataset item per review. This one is from a real run (Slack, newest first):

```json
{
    "input": "https://www.capterra.com/p/135003/Slack/",
    "productName": "Slack",
    "reviewId": "Capterra___7209621",
    "reviewSource": "Capterra",
    "reviewSourceId": "7209621",
    "title": "Can’t work without",
    "rating": 4,
    "pros": "Its ease of use and flexibility. The way you can open a new chat and a channel to share with others is the best",
    "cons": "Just as a personal point of view, the UI is not as modern as other tools are made. Some changes could help improve.",
    "overallComments": "I use Slack as a professional live chat tools. Not only using it with the colleagues, but also to communicate with external partners.",
    "reasonsForChoosing": null,
    "reasonsForSwitching": "Many features were under expensive plans",
    "easeOfUseRating": 5,
    "customerServiceRating": 3,
    "featuresRating": 5,
    "valueForMoneyRating": 4,
    "date": "2026-09-05",
    "dateTime": "2026-09-05T05:47:19Z",
    "reviewerName": "Lorenzo F.",
    "reviewerIndustry": "Computer Software",
    "reviewerCompanySize": "11-50 employees",
    "reviewerCompanySizeCode": "C",
    "reviewerVerified": true,
    "reviewerAnonymous": false,
    "timeUsed": "More than 2 years",
    "usageFrequency": "Daily",
    "incentive": "Nominal gift (e.g. gift card)",
    "vendorResponse": null,
    "vendorResponseDate": null,
    "productId": "964a02e4-2901-4992-aea5-a6d200b696d4",
    "productSeoId": "154669",
    "productSlug": "slack",
    "productUrl": "https://www.softwareadvice.com/remote-support/slack-profile/",
    "productReviewsUrl": "https://www.softwareadvice.com/remote-support/slack-profile/reviews/",
    "productLogo": "https://gdm-catalog-fmapi-prod.imgix.net/ProductLogo/91f64896-759a-41ae-8d14-d540f90c5870.png",
    "productCategory": "Team Communication",
    "productOverallRating": 4.66,
    "productTotalReviews": 24209,
    "productEaseOfUseRating": 4.61,
    "productCustomerServiceRating": 4.43,
    "productFeaturesRating": 4.56,
    "productValueForMoneyRating": 4.55,
    "productLikelihoodToRecommend": 8.6,
    "productRatingBreakdown": { "1star": 48, "2star": 127, "3star": 912, "4star": 5731, "5star": 17391 },
    "page": 1,
    "scrapedAt": "2026-09-24T05:24:16.141Z"
}
```

The dataset has two ready-made views: **Overview** (product, rating, title, pros, cons, date, reviewer, industry, company size) and **Ratings** (all sub-ratings side by side).

#### Field fill rates (real test run: 600 reviews of Slack, Asana, Jira, Docusign, monday.com and QuickBooks Online)

| Field | Fill rate |
|---|---|
| reviewId, rating, title, pros, cons, date, reviewer name, industry, company size, time used, frequency, incentive | 100% |
| easeOfUseRating, featuresRating | 100% |
| customerServiceRating | 88% (some reviewers skip it) |
| valueForMoneyRating | 89% |
| overallComments | 81% |
| reasonsForSwitching | 10% (only reviewers who switched from another tool) |
| reasonsForChoosing | 5% |
| vendorResponse | only when the vendor replied (rare on large products) |
| all product summary fields | 100% |

### Pricing

**Pay per result: $1.50 per 1,000 reviews.** No start fee, no monthly rental.

- 1,000 reviews = $1.50
- 10,000 reviews = $15

You're never charged for duplicates or for reviews skipped by your filters, and products that aren't found cost nothing. If you set a maximum cost per run, the scraper stops cleanly when it reaches it. The Apify free plan includes $5 of monthly platform credit, enough to try the actor on real products.

### Integrations

- **Apify API**: start runs and fetch results over REST, or with the official JavaScript and Python clients.
- **No-code tools**: Make, Zapier and n8n, plus a direct export to Google Sheets.
- **Webhooks**: get notified (or trigger your own pipeline) when a run finishes.
- **Schedules**: run daily or weekly to monitor new reviews of your product or your competitors.
- **MCP for AI agents**: through the Apify MCP server (https://mcp.apify.com), Claude, ChatGPT, Cursor and other agents can call this actor and read Capterra reviews directly.

### Limits (read before large runs)

- **Coverage is the Software Advice catalog.** Most Capterra products are on it: Slack, Asana, Jira, monday.com, Notion, QuickBooks Online, Docusign, Canva, Shopify, Microsoft Teams and Google Workspace all worked in testing. A few big vendors aren't listed there, for example Salesforce Sales Cloud, HubSpot CRM, Zendesk and Mailchimp. Those products come back as "product not found" with a list of close matches, and you're not charged.
- **Product names are matched exactly, never guessed.** `"Salesforce"` won't silently turn into "Salesforce Backup". If a name isn't found, the log and `RUN_SUMMARY` suggest the closest product URLs. URLs are always the most reliable input.
- **Reviewer job titles aren't included**, because the source doesn't publish them. You get industry and company size instead.
- **Reviewer names are first name + last initial**, the way Capterra displays them. Anonymous reviewers come back as `"Anonymous"`.
- **Review sources**: almost all reviews are Capterra-collected. Some older ones come from GetApp or Software Advice (`reviewSource` tells you which).

### FAQ

**Does it need a browser or cookies?**
No. It makes plain HTTPS requests to the same review endpoint the website uses. That's why it's fast and cheap.

**Why not scrape capterra.com directly?**
capterra.com sits behind an aggressive Cloudflare challenge that needs a real browser, which is slow and fails often. The same reviews are served from Software Advice without that challenge. You get the same review IDs and text, much faster and more reliably.

**How do I monitor new reviews?**
Schedule the actor daily with `sortBy: "newest"` and `reviewedAfter` set to yesterday's date. Each run reads only the first page or two. `reviewId` is stable, so you can deduplicate across runs.

**Which proxy should I use?**
Start with the default Apify Proxy. Blocked requests are retried automatically on a fresh session with a new IP. If you still see repeated "Blocked" warnings, switch the proxy group to UNBLOCKER or RESIDENTIAL.

**Why did a product return fewer reviews than `maxReviewsPerProduct`?**
Fewer reviews matched your filters, or the product has fewer reviews. `RUN_SUMMARY` in the key-value store shows each product's matched count and stop reason.

**Is it legal to scrape Capterra reviews?**
The actor collects only publicly available reviews, with no login, and shows reviewers the way the site does (first name and last initial). You're responsible for using the data in line with the site's terms and privacy laws such as GDPR. This isn't legal advice; if you're unsure, check with a lawyer.

**How does it avoid blocks?**
It runs through Apify Proxy with a session pool: a blocked response (HTTP 401, 403, 429 or a challenge page) retires that session and retries on a fresh one with a new IP, and other errors retry with exponential backoff, up to 6 retries per request by default (`maxRequestRetries`). Page requests for one product run in order, so traffic stays light.

**What are the limits?**
Coverage is the Software Advice catalog (a few big vendors such as Salesforce Sales Cloud, HubSpot CRM, Zendesk and Mailchimp aren't listed there), product names must match exactly, and reviewer job titles aren't published by the source. There's no hard cap on reviews per product: `maxReviewsPerProduct: 0` returns every review that matches your filters. See "Limits" above for details.

### How it works (for developers)

Software Advice is a Next.js app. The first page of a product's reviews is embedded in the HTML as React Server Components "flight" data. Further pages, sorting and filters go through the site's `getReviewsPaginated` server action, which returns 25 reviews per call. The scraper reads the action ID from the site's own JavaScript at run time, so it keeps working after the site redeploys. If the action can't be found, it falls back to plain `?page=N` URLs (recommended order only). The flight parser handles text rows with UTF-8 byte lengths and resolves `$ref` links, and every field is read defensively.

Run it locally:

```bash
npm install
npm test                                  # parser tests on saved fixtures
APIFY_LOCAL_STORAGE_DIR=./storage node src/main.js   # input in storage/key_value_stores/default/INPUT.json
```

# Actor input Schema

## `products` (type: `array`):

List of products, one string each: a Capterra product URL ("https://www.capterra.com/p/135003/Slack/"), a GetApp or Software Advice product URL, or an exact product name ("Asana"). URLs are most reliable; unknown names return free match suggestions.

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

Optional. Maximum reviews per product, integer >= 0. Default 100; 0 = every matching review. You pay per review, so use 10-20 for a quick answer.

## `sortBy` (type: `string`):

Optional. "newest" = most recent first (default, best for monitoring); "recommended" = site default order, most detailed first.

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

Optional. Keep only these overall star ratings, as a list of strings "1"-"5", e.g. \["1", "2"] for negative reviews. Omit or \[] for all.

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

Optional. Keep only reviewers from these company sizes (employees), list of codes: "A" self-employed, "B" 2-10, "C" 11-50, "D" 51-200, "E" 201-500, "F" 501-1,000, "G" 1,001-5,000, "H" 5,001-10,000, "I" 10,001+. Omit for all.

## `timeUsed` (type: `array`):

Optional. Keep only reviewers who used the product this long, list of: "FreeTrial", "LessThan6Months", "LessThan12Months", "LessThan2Years", "MoreThan2Years". Omit for all.

## `keyword` (type: `string`):

Optional. Only reviews whose text mentions this word or phrase, e.g. "pricing", "support". Omit for all reviews.

## `reviewedAfter` (type: `string`):

Optional. Only reviews written after this date, format YYYY-MM-DD, e.g. "2025-01-01". With sortBy "newest" the run stops at the first older review, so monitoring stays cheap.

## `maxConcurrency` (type: `integer`):

Optional, advanced. Number of parallel requests, integer 1-20. Default 5. Leave unset unless the run is very large.

## `maxRequestRetries` (type: `integer`):

Optional, advanced. Retries per failed or blocked request, integer 0-20; each retry uses a new proxy session. Default 6. Leave unset.

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

Optional, advanced. Apify Proxy settings object, e.g. {"useApifyProxy": true}. Default: Apify Proxy on (datacenter). Leave unset; switch to {"useApifyProxy": true, "apifyProxyGroups": \["RESIDENTIAL"]} only if the run log shows repeated blocks.

## Actor input object example

```json
{
  "products": [
    "https://www.capterra.com/p/135003/Slack/",
    "Asana"
  ],
  "maxReviewsPerProduct": 10,
  "sortBy": "newest",
  "maxConcurrency": 5,
  "maxRequestRetries": 6,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `reviews` (type: `string`):

All reviews found, with ratings, pros, cons, reviewer details and product summary.

## `summary` (type: `string`):

Per-product counts, matched product and stop reasons.

# 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 = {
    "products": [
        "https://www.capterra.com/p/135003/Slack/",
        "Asana"
    ],
    "maxReviewsPerProduct": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rel8ble/capterra-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 = {
    "products": [
        "https://www.capterra.com/p/135003/Slack/",
        "Asana",
    ],
    "maxReviewsPerProduct": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("rel8ble/capterra-reviews-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 '{
  "products": [
    "https://www.capterra.com/p/135003/Slack/",
    "Asana"
  ],
  "maxReviewsPerProduct": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call rel8ble/capterra-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rel8ble/capterra-reviews-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/JNZaSZm69688BAsjM/builds/WjK4h7DMtHNlQoQXo/openapi.json
