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

⭐ Scrape any software product on Capterra by name, URL, search or category: every review with 4 sub-ratings, pros/cons, reviewer profile and vendor response, or the full product record with ratings, pricing plans, feature scores, integrations, awards and alternatives. No page cap. Pay per result.

- **URL**: https://apify.com/scrapifier/capterra-reviews-scraper.md
- **Developed by:** [Scrapifier](https://apify.com/scrapifier) (community)
- **Categories:** Business, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.04 / 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.
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

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

Mine software reviews, benchmark competitors or build a SaaS market dataset from [Capterra](https://www.capterra.com) — the reference B2B software review site (its review feed merges Capterra, GetApp and Software Advice), with 2M+ verified reviews across 1,000+ categories.

⚡ **Scrape any software product on Capterra by name, URL, search query or category. Reviews mode: every review the site exposes, one row each — overall and the four sub-ratings (ease of use, customer support, functionality, value for money), likelihood to recommend, pros / cons / comments / advice, the reviewer profile (name, job title, industry, company size, time used, LinkedIn verification), alternatives considered, switched-from products and the vendor response — sorted and filtered server-side (rating, company size, reviewer role, length and frequency of use), with no page limit. Products mode: the full product record — rating breakdown, review counts by segment, pricing and plans, feature ratings, integrations, deployment / support / training options, awards, alternatives. No browser rendering per page, pay per result.**

### What you get

#### Reviews mode — one row per review

| Field | Example |
|---|---|
| `reviewId`, `source`, `title`, `date`, `url` | Capterra___7202161, Capterra, "Corporate Social Media platform", 2026-08-20 |
| `overallRating`, `easeOfUseRating`, `customerSupportRating`, `functionalityRating`, `valueForMoneyRating`, `likelihoodToRecommend` | 5, 5, 5, 5, 5, 10 |
| `pros`, `cons`, `generalComments`, `adviceToOthers`, `reasonsForChoosing`, `reasonsForSwitching` | full texts |
| `alternativesConsidered`, `switchedFrom` | \["Microsoft Teams"], \["Skype"] |
| `reviewerName`, `reviewerJobTitle`, `reviewerIndustry`, `reviewerCompanySize`, `reviewerTimeUsed` | Abhishek M., Subject Matter Expert, Financial Services, 201-500 employees, 2+ years |
| `reviewerVerifiedLinkedIn`, `reviewerValidated`, `reviewerValidations`, `reviewerAnonymous`, `reviewerPhotoUrl` | true, true, \["LinkedIn", "ProofOfLink"], false |
| `incentive`, `reviewSourceCode`, `reviewSourceNote`, `vendorResponse`, `vendorResponseDate` | NoIncentive, NO, "submitted organically" |
| Product context: `productName`, `productSeoId`, `productSlug`, `productUrl`, `productRating`, `productReviewCount`, `productCategories`, `productStartingPrice`, `productPricingModel`, `productHasFreeTrial`, `productHasFreeVersion`, `matchedInput` | Slack, 135003, 4.7, 24221, \["Collaboration", "Team Communication"…], 8.75, Per User |

#### Products mode — one row per product

- **Identity**: `name`, `seoId`, `slug`, `url`, `logoUrl`, `category`, `categorySlug`, `categories`, `description`, `shortDescription`, `longDescription`, `vendor`, `operatingSystems`.
- **Ratings**: `rating`, `reviewCount`, `ratingBreakdown` (per star, from category listings), `easeOfUseRating`, `customerSupportRating`, `functionalityRating`, `valueForMoneyRating`, `likelihoodToRecommend`, `ratingCounts`, `reviewSentiment` (positive / neutral / negative %), `reviewsByCompanySize` (small / mid-size / enterprise), `reviewsPast6Months`, `reviewsPast12Months`, `reviewsParticipation`.
- **Pricing**: `startingPrice`, `currency`, `priceUnit`, `pricingModel`, `paymentFrequency`, `hasFreeTrial`, `hasFreeVersion`, `pricingDescription`, `plans` (name, starting price, model, frequency).
- **Recognition**: `awards`, `shortlistBadges`, `easeOfUseBadges`, `valueBadges`.
- **Capabilities**: `features` (each with its rating, review count and summary), `featureCount`, `categoryFeatures`, `integrations` (name, Capterra URL, review count), `integrationCount`, `deploymentOptions`, `supportOptions`, `trainingOptions`, `targetCompanySizes`.
- **Market**: `alternatives` (name, rating, review count, URL).

Turn on **Flatten rows** for spreadsheet-ready columns (`reviewSentiment_positive`, `features` as a joined list plus `features_json`…).

### Inputs

| Field | Type | Default | Meaning |
|---|---|---|---|
| Products | `products` | `["Slack"]` | Product names ("HubSpot CRM", "monday.com") resolved through Capterra's own search, or product URLs. |
| Search queries | `searchQueries` | — | Free-text searches; the top results become products (see `maxProductsPerSearch`, max 20). |
| Categories | `categories` | — | Category slugs or URLs ("human-resource-software"); the listed products become products (see `maxProductsPerCategory`, 0 = whole category). |
| Data type | `dataType` | reviews | reviews / products. |
| Review order | `reviewSort` | most_helpful | most_helpful / most_recent / highest_rated / lowest_rated. |
| Review filters | `ratings`, `companySizes`, `reviewerRoles`, `usageLengths`, `usageFrequencies` | — | Applied by Capterra itself; you only pay for matching reviews. |
| Max reviews per product | `maxReviewsPerProduct` | 100 | 0 = every review the site exposes. |
| Product details | `includeProductDetails` | on | Products mode: read the product and reviews pages of each product (two requests) for the full record. Off = listing facts only (a 1,700-product category in ~40 requests). |
| Maximum rows | `maxItems` | 200 | Total cap — the number of results you pay for. 0 = everything. |
| Flatten rows | `flatten` | off | Flat columns for CSV/Excel. |
| Input status report | `emitInputStatus` | on | OUTPUT lists each input, the product it resolved to, Capterra's review count and what was collected. |

### Examples — all live-verified

**1. The 500 most recent Slack reviews**

```json
{ "products": ["Slack"], "reviewSort": "most_recent", "maxReviewsPerProduct": 500 }
```

**2. Critical reviews from small companies, spreadsheet export**

```json
{ "products": ["monday.com"], "ratings": ["1", "2"], "companySizes": ["1_10", "11_50"], "reviewSort": "most_recent", "maxReviewsPerProduct": 200, "flatten": true }
```

**3. Every review of a product, from its URL**

```json
{ "products": ["https://www.capterra.com/p/135003/Slack/"], "maxReviewsPerProduct": 0, "maxItems": 0 }
```

**4. Full product records for the top CRM search results and two named products**

```json
{ "dataType": "products", "products": ["Notion", "Asana"], "searchQueries": ["crm"], "maxProductsPerSearch": 5 }
```

**5. A whole category as a market dataset (one request per listing page, ~50 products each)**

```json
{ "dataType": "products", "categories": ["human-resource-software"], "maxProductsPerCategory": 0, "includeProductDetails": false, "maxItems": 0 }
```

### Why this scraper

- **Complete** — Capterra's page numbers stop at 100; this Actor follows the site's own review cursor instead, so a product with 24,000 reviews is read in full (25 reviews per request, ~60 reviews/second).
- **Every filter wired** — sort and filters are sent to Capterra as server-side filters, so you pay only for matching reviews.
- **Four ways in** — product names, product URLs, search queries and whole categories, deduplicated by product.
- **Honest reporting** — the `input_status` report in OUTPUT shows, per input, the product it resolved to, Capterra's review count and what was collected.
- **Fast and cheap** — the session is prepared once in a few seconds and refreshed automatically; everything else is plain HTTP.

### FAQ

**Is this legal?** The Actor reads only publicly displayed reviews and product pages, the same ones any visitor sees. Reviewer names are the public display names Capterra shows. You are responsible for using the output in compliance with applicable laws and Capterra's terms.

**A product name resolves to the wrong product?** Give the product URL instead (`https://www.capterra.com/p/{id}/{slug}/`) — the `input_status` report shows which product each name resolved to.

**Which reviews are included?** Everything Capterra shows in the product's review feed, which merges Capterra, GetApp and Software Advice reviews (see the `source` field).

**Why does `ratingBreakdown` only appear for category inputs?** Capterra publishes the per-star breakdown on category listings; product pages show the overall rating, sub-ratings and sentiment instead.

***

Looking for more review data? See the rest of the family: [Trustpilot](https://apify.com/scrapifier/trustpilot-reviews-scraper), [Glassdoor Reviews](https://apify.com/scrapifier/glassdoor-reviews-scraper), [Indeed Reviews](https://apify.com/scrapifier/indeed-reviews-scraper), [Kununu](https://apify.com/scrapifier/kununu-scraper), [Levels.fyi](https://apify.com/scrapifier/levels-fyi-scraper).

# Actor input Schema

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

Product names as they appear on Capterra ("Slack", "HubSpot CRM", "monday.com") or product URLs (https://www.capterra.com/p/135003/Slack/). Names are resolved through Capterra's own search.

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

Free-text searches ("crm", "project management", "hubspot"); the top results of each search become products to scrape (see Max products per search).

## `categories` (type: `array`):

Category slugs or URLs ("human-resource-software", "https://www.capterra.com/crm-software/"); every product listed in the category becomes a product to scrape (see Max products per category).

## `dataType` (type: `string`):

Reviews: every review the site exposes for each product (overall + 4 sub-ratings, likelihood to recommend, pros/cons/comments, reviewer profile, alternatives considered, vendor response). Products: ratings and breakdown, review counts by segment, pricing and plans, feature ratings, integrations, options, awards, alternatives.

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

Server-side order of the review feed. Combine with Max reviews per product to get e.g. the 100 most recent or the 50 most critical reviews.

## `ratings` (type: `array`):

Keep only reviews with these overall ratings. Empty = all.

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

Keep only reviews written at companies of these sizes. Empty = all.

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

Keep only reviews from these roles. Empty = all.

## `usageLengths` (type: `array`):

Keep only reviewers who used the product for these durations. Empty = all.

## `usageFrequencies` (type: `array`):

Keep only reviewers using the product this often. Empty = all.

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

Stop after this many reviews for each product. 0 = every review the site exposes (25 reviews per request; a product with 20,000 reviews takes a few minutes).

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

In products mode, read the product page and the reviews page of each product (two requests) for the full record: pricing plans, feature ratings, integrations, options, awards, alternatives, rating breakdown. Off = only the facts carried by the search / category card (rating, review counts, pricing flags, descriptions) — one request per 25 products.

## `maxProductsPerSearch` (type: `integer`):

How many of the top search results to scrape for each query (Capterra returns up to 20).

## `maxProductsPerCategory` (type: `integer`):

How many products of each category to scrape, in Capterra's order (one listing page holds up to ~50). 0 = the whole category.

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

Stop after this many rows in total — the number of results you pay for. 0 = no limit.

## `flatten` (type: `boolean`):

Emit flat columns (ratingBreakdown_5, reviewSentiment_positive, features as a joined list...) instead of nested objects, for spreadsheet-friendly exports.

## `emitInputStatus` (type: `boolean`):

Write an input_status report to OUTPUT: which names resolved to which product, how many rows each returned, the review count Capterra shows, and why any returned nothing.

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

Keep the default residential proxy settings for reliable results; datacenter proxies are refused by Capterra.

## Actor input object example

```json
{
  "products": [
    "Slack"
  ],
  "dataType": "reviews",
  "reviewSort": "most_helpful",
  "maxReviewsPerProduct": 100,
  "includeProductDetails": true,
  "maxProductsPerSearch": 5,
  "maxProductsPerCategory": 25,
  "maxItems": 200,
  "flatten": false,
  "emitInputStatus": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `rows` (type: `string`):

All review / product rows extracted by this run.

# 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": [
        "Slack"
    ],
    "maxReviewsPerProduct": 100,
    "maxItems": 200,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapifier/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": ["Slack"],
    "maxReviewsPerProduct": 100,
    "maxItems": 200,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapifier/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": [
    "Slack"
  ],
  "maxReviewsPerProduct": 100,
  "maxItems": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call scrapifier/capterra-reviews-scraper --silent --output-dataset

```

## MCP server setup

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