# Capterra Reviews Scraper: All Reviews, Past the Page Limit (`alexmorain/capterra-reviews-scraper`) Actor

Scrape every Capterra review of a software product, also via Software Advice and GetApp: ratings, pros, cons, reviewer industry and company size, date. Gets past Capterra's 100-page limit. New-reviews-only monitoring and webhook. No login, no proxy.

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

## Pricing

from $0.60 / 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

### What does Capterra Reviews Scraper do?

Capterra Reviews Scraper exports the reviews of any software product listed on [Capterra](https://www.capterra.com), [Software Advice](https://www.softwareadvice.com) and [GetApp](https://www.getapp.com): overall and sub-ratings, pros, cons, the reviewer's industry and company size, how long they used the product, whether the review was incentivized, the vendor's reply and the date. Paste a product URL or type a product name, and you get one row per review plus one summary row per product.

It works as a **Capterra reviews API**: no login, no browser, no proxy, plain HTTP requests from Apify servers.

The three sites share one review database owned by Gartner, so a review has the same ID on all of them, and this Actor reads them all from one place.

#### All the reviews, not the first 2,500

Capterra lists 25 reviews per page and stops at page 100. Ask for page 101 and it sends page 1 again, with no error. Its sister sites stop at 10,000 reviews per listing. A scraper that simply pages through a product therefore gets a fraction of the big ones, and nothing tells you so.

This Actor splits a big product into slices that the site filters itself (star rating, then reviewer company size, then length of use, the last two with a "not specified" bucket so that no review falls between two slices), reads every slice, and removes duplicates. Measured on 18 October 2026:

| Product | Reviews on the site | Paging Capterra | Paging Software Advice | This Actor |
|---|---|---|---|---|
| Slack | 24,229 | about 2,500 | 10,000 | 24,229 |
| Trello | 23,636 | about 2,500 | 10,000 | 23,636 |
| Asana | 13,764 | about 2,500 | 10,000 | 13,764 |

You can check it yourself: run Slack with **Max reviews per product** set to `0` and compare the row count with the total on the product page.

### Why use Capterra Reviews Scraper?

- Competitive research: read what users of a competitor complain about, filtered on 1 and 2 star reviews from companies of your target size.
- Product feedback: export your own reviews into a spreadsheet, a BI tool or an LLM, with pros and cons in separate columns.
- Review monitoring: schedule a daily or weekly run in **New reviews only** mode and get only the reviews published since the last run, plus a webhook call you can route to Zapier, Make or n8n.
- Sales and marketing: find which industries and company sizes use a product, and pull quotes for case studies.

Apify adds scheduling, an API for every run, integrations with Google Sheets, Slack, Zapier and Make, and exports to JSON, CSV and Excel.

### What data can Capterra Reviews Scraper extract?

| Field | Example | Description |
|---|---|---|
| `rating` | `5` | Overall rating, 1 to 5 |
| `easeOfUseRating`, `customerSupportRating`, `valueForMoneyRating`, `functionalityRating` | `4` | The four sub-ratings |
| `title` | `Great for remote teams` | Review title |
| `pros`, `cons` | `Fast search` | What the reviewer liked and disliked |
| `overallComment` | `The team adopted it in a week` | Overall experience |
| `reasonsForChoosing`, `reasonsForSwitching` | `Better integrations` | Why they picked it, why they left their previous tool |
| `vendorReply` | `Thanks for the feedback` | The vendor's public answer |
| `publishedAt` | `2026-09-01T08:30:00Z` | Review date |
| `reviewerIndustry` | `Computer Software` | Reviewer's industry |
| `reviewerCompanySize` | `51-200 employees` | Reviewer's company size |
| `timeUsed`, `usageFrequency` | `More than 2 years`, `Daily` | Experience with the product |
| `incentivized`, `reviewSource` | `false`, `organic` | Whether the reviewer got a gift, who invited the review |
| `reviewerName` | `Alex D.` | First name and last initial, as Capterra shows it |
| `reviewId` | `Capterra___7000001` | Same ID on Capterra, Software Advice and GetApp |

The product summary row adds the average ratings, the rating breakdown, the share of reviewers who recommend the product, its categories, the site's own pros and cons summary, the total number of reviews and how many the run collected.

The reviewer's job title is shown on capterra.com but is not part of the data the sister sites publish, so it is not in the output.

### How to scrape Capterra reviews

1. Click **Try for free**.
2. In **Products**, paste a Capterra product URL such as `https://www.capterra.com/p/135003/Slack/`, a Software Advice or GetApp URL, or type a name such as `HubSpot CRM`.
3. Set **Max reviews per product**. `0` collects every review.
4. Optionally keep only some star ratings, company sizes or lengths of use, or only the last N days.
5. Click **Start**, then download the results as JSON, CSV or Excel.

The run log says which product each line was matched to. If a typed name lands on the wrong product, paste its Software Advice URL instead: it points at the product exactly.

### How much will it cost to scrape Capterra reviews?

You pay per result, nothing for the reviews filtered out by the site:

- $1.00 per 1,000 reviews on the Apify Free plan, down to $0.60 per 1,000 on Gold and above;
- $0.003 per product summary row ($0.002 on Gold), which you can turn off;
- $0.005 when the run starts.

The $5 of monthly credit in the Apify Free plan covers about 5,000 reviews. A full export of Slack, 24,229 reviews, costs about $24 on the Free plan and $15 on Gold. A weekly monitoring run on ten products that each got five new reviews costs about $0.08.

### Input

See the **Input** tab for every option. The ones worth knowing:

- **Products**: Capterra URLs (regional sites such as capterra.co.uk work too), Software Advice URLs, GetApp URLs or product names, one per line.
- **Star ratings**, **Reviewer company size**, **How long the reviewer used the product**: applied by the site itself.
- **Only reviews from the last N days** or **Only reviews published after**: the Actor reads newest first and stops at the first older review.
- **Reviews to return**: `New reviews only` keeps a registry per product and never returns or charges a review twice.
- **Webhook URL**: receives a JSON summary at the end of each run.

```json
{
    "products": ["https://www.capterra.com/p/135003/Slack/", "Asana"],
    "maxReviewsPerProduct": 500,
    "stars": [1, 2],
    "companySizes": ["D", "E", "F"]
}
```

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. A review row:

```json
{
    "type": "review",
    "reviewId": "Capterra___7000001",
    "productName": "Slack",
    "title": "Easy to use across devices",
    "rating": 5,
    "easeOfUseRating": 5,
    "customerSupportRating": 4,
    "valueForMoneyRating": 5,
    "functionalityRating": 5,
    "pros": "Switching between laptop and phone is seamless.",
    "cons": "Replies in threads do not always notify you.",
    "publishedAt": "2026-10-04T17:40:11Z",
    "reviewerName": "Chris S.",
    "reviewerIndustry": "Construction",
    "reviewerCompanySize": "51-200 employees",
    "timeUsed": "More than 2 years",
    "usageFrequency": "Daily",
    "incentivized": true,
    "reviewSource": "invited by the site, nominal gift"
}
```

A product row:

```json
{
    "type": "product",
    "productName": "Slack",
    "overallRating": 4.66,
    "totalReviews": 24229,
    "reviewsCollected": 24229,
    "recommendPercent": 86.1,
    "ratingBreakdown": {"5": 17407, "4": 5735, "3": 912, "2": 127, "1": 48}
}
```

The dataset has two views, **Reviews** and **Products**, so each can be exported on its own.

### Tips

- For monitoring, run once in **New reviews only** with **Max reviews per product** at `0` to read the full history, then schedule it. Later runs only read the reviews published since the last complete run, with a 60-day margin for reviews the site publishes late after moderation.
- A full export of Slack, 24,229 reviews, takes about four minutes. Small products take seconds.
- Several URLs that point to the same product (a Capterra URL and a GetApp URL, say) are collected once.

### FAQ

#### Can I scrape G2 reviews with this Actor?

No. G2 is a different company with its own reviews. This Actor covers Capterra, Software Advice and GetApp.

#### Why are reviews read from Software Advice?

Capterra, Software Advice and GetApp display the same reviews from the same database, with the same IDs. Software Advice answers plain HTTP requests, which keeps runs fast and cheap, and its filters are what makes the full history reachable.

#### Is it legal to scrape Capterra?

Our Actors are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

Reviewer names are cut to first name and last initial, the way Capterra shows them, and are left empty for anonymous reviews.

#### Something does not work

Open an issue in the **Issues** tab with the run link. To call the Actor from your own code, see the **API** tab.

# Actor input Schema

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

One product per line. Accepted forms:<br>• a Capterra URL such as <code>https://www.capterra.com/p/135003/Slack/</code> (regional Capterra sites too)<br>• a Software Advice URL such as <code>https://www.softwareadvice.com/collaboration/slack-profile/</code><br>• a GetApp URL such as <code>https://www.getapp.com/collaboration-software/a/slack/</code><br>• a product name such as <code>HubSpot CRM</code><br><br>The run log says which product each line resolved to. If a name is ambiguous, paste the Software Advice URL: it points at the product exactly.

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

Stop after this many reviews for each product. <code>0</code> collects every review.<br><br>Capterra itself stops listing reviews after 100 pages, and its sister sites after 10,000 reviews. This Actor gets past both limits by splitting big products into server-side slices, so <code>0</code> really means all of them: 24,229 reviews for Slack.

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

<code>most_recent</code>, the default, returns the newest reviews first. <code>recommended</code> uses the site's own ranking (most complete reviews first).<br><br>With a date filter or <b>New reviews only</b>, the Actor always reads newest first, because that is what lets it stop early.

## `includeProductSummary` (type: `boolean`):

One extra row per product: overall and sub-ratings, rating breakdown, share of reviewers who recommend it, categories, the site's pros and cons summary, total reviews and how many this run collected.

## `stars` (type: `array`):

Keep only reviews with these overall ratings. Leave empty for every rating.<br><br>Example: <code>\[1, 2]</code> for the complaints. Filtered by the site itself, so you never pay for the reviews left out.

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

Keep only reviewers from companies of these sizes. Leave empty for all.<br><br><code>A</code> self-employed, <code>B</code> 2-10, <code>C</code> 11-50, <code>D</code> 51-200, <code>E</code> 201-500, <code>F</code> 501-1,000, <code>G</code> 1,001-5,000, <code>H</code> 5,001-10,000, <code>I</code> 10,000+ employees, <code>Unspecified</code> for reviewers who did not say.

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

Keep only reviewers with this length of use. Leave empty for all.

## `lastDays` (type: `integer`):

Keep only reviews published in the last N days, for example <code>7</code> in a weekly scheduled run. The Actor reads newest first and stops at the first older review, so a weekly run is one or two pages per product.<br><br>If you also set <code>publishedAfter</code>, the more recent of the two dates wins.

## `publishedAfter` (type: `string`):

Keep only reviews published on or after this date, <code>YYYY-MM-DD</code>, read as midnight UTC.

## `reviewMode` (type: `string`):

<b>All matching reviews</b>, the default, returns every review that matches your input on every run.<br><br><b>New reviews only</b> keeps, for each product, a registry of every review previous runs delivered, and returns only the ones never delivered before. Schedule it daily or weekly and you get a feed of fresh reviews: a review you are not shown is a review you are not charged for. The first run reads the whole history (set <b>Max reviews per product</b> to <code>0</code> for that run); after that, each run only reads the reviews published since, plus a 60-day margin for reviews that the site publishes late after moderation.

## `registryKey` (type: `string`):

Only used by <b>New reviews only</b>. Leave empty and each product's registry is derived from the filters that change which reviews qualify (<code>stars</code>, <code>companySizes</code>, <code>timeUsed</code>): the same input always finds its registries again, and two feeds with different filters never pollute each other. Set it by hand to name the feed yourself; a new key starts from scratch.

## `webhookUrl` (type: `string`):

If set, the Actor POSTs a small JSON summary to this URL at the end of the run: <code>runId</code>, <code>datasetId</code>, <code>mode</code>, <code>status</code> (<code>succeeded</code>, <code>partial</code> or <code>failed</code>), <code>products</code>, <code>reviews</code>, <code>skippedAlreadySeen</code>, <code>targets</code>, <code>failedTargets</code> and <code>chargeLimitReached</code>. With <b>New reviews only</b> and a schedule, filter on <code>reviews</code> above 0 in Zapier, Make or n8n to be told only when something new landed.

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

Not needed: the source answers plain HTTP requests from Apify servers. Leave it off unless your runs get blocked.

## Actor input object example

```json
{
  "products": [
    "https://www.capterra.com/p/135003/Slack/"
  ],
  "maxReviewsPerProduct": 20,
  "sortBy": "most_recent",
  "includeProductSummary": true,
  "stars": [
    1,
    2
  ],
  "lastDays": 7,
  "publishedAfter": "2026-09-01",
  "reviewMode": "all",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per review

## `products` (type: `string`):

One summary row per product

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

Every row, reviews and products, with all fields

# 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/"
    ],
    "maxReviewsPerProduct": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("alexmorain/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/"],
    "maxReviewsPerProduct": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("alexmorain/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/"
  ],
  "maxReviewsPerProduct": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call alexmorain/capterra-reviews-scraper --silent --output-dataset

```

## MCP server setup

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