# Capterra Reviews Scraper (`kawsar/capterra-reviews-scraper`) Actor

Capterra reviews scraper that collects verified user reviews, including ratings, pros, cons, and reviewer profiles, so businesses can monitor software reputation and track competitor feedback at scale.

- **URL**: https://apify.com/kawsar/capterra-reviews-scraper.md
- **Developed by:** [Kawsar](https://apify.com/kawsar) (community)
- **Categories:** Automation, Developer tools, Other
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Capterra Reviews Scraper

<p align="center">
  <img src="https://i.imgur.com/zbPIwFk.png" alt="Capterra Reviews Scraper" width="100%">
</p>

Scrapes verified user reviews from any Capterra product page and returns structured data. Each record includes review text, overall star rating, sub-category scores (ease of use, features, value for money, customer service), reviewer job title and industry, pros, cons, and the product the reviewer switched from.

Capterra reviews show up in buying decisions and analyst reports. If you're keeping tabs on a product — yours or a competitor's — checking the page manually doesn't scale. This actor handles pagination and URL normalization automatically. Give it a URL and a review count, and it does the rest.

---

### Why people use this

Some use it to monitor their own product. Run it on a schedule, route new reviews to Slack or a spreadsheet, and you stop finding out about problems weeks after they were posted.

Some use it for competitor research. Pull reviews for two or three competing products, look at what changed over the last quarter, and you get a clearer picture than any analyst summary.

Some run it specifically to find cons from 1-3 star reviews and route those directly into a feature backlog. Real complaints from paying users are better input than most internal feedback sessions.

Some need review text in bulk for NLP or sentiment analysis and don't want to scrape it by hand.

---

### What it collects

For each review, the actor returns:

| Field | Description |
|---|---|
| `softwareName` | Name of the software product |
| `reviewerName` | Reviewer name or initials |
| `reviewerTitle` | Job title of the reviewer |
| `reviewerIndustry` | Industry or company type |
| `usageDuration` | How long they have used the software |
| `reviewTitle` | Headline of the review |
| `reviewDate` | Date the review was submitted |
| `overallRating` | Overall star rating out of 5 |
| `easeOfUse` | Ease of use score out of 5 |
| `customerService` | Customer service score out of 5 |
| `features` | Features score out of 5 |
| `valueForMoney` | Value for money score out of 5 |
| `likelihoodToRecommend` | Score out of 10 |
| `reviewText` | Full body text of the review |
| `pros` | Positive points from the reviewer |
| `cons` | Negative points from the reviewer |
| `switchedFrom` | Previous software the reviewer left |
| `pageUrl` | Source page URL |
| `scrapedAt` | ISO 8601 timestamp of collection |

---

### Input

| Field | Required | Default | Description |
|---|---|---|---|
| `startUrl` | Yes | — | Capterra product or reviews page URL |
| `maxItems` | No | 25 | Maximum reviews to collect (up to 1,000) |
| `requestTimeoutSecs` | No | 30 | Per-request timeout in seconds |

#### URL formats accepted

The actor accepts any of these — `/reviews/` is added automatically if the path is missing:

````

https://www.capterra.com/p/150854/Apify/reviews/
https://www.capterra.com/p/150854/Apify/reviews
https://www.capterra.com/p/150854/Apify

````

Only URLs from `capterra.com` are accepted. Anything else fails with a clear error message.

#### Pagination

Each Capterra page shows 25 reviews. The actor calculates how many pages it needs and fetches them in order.

- `maxItems: 25` — 1 page (default)
- `maxItems: 100` — 4 pages
- `maxItems: 250` — 10 pages
- `maxItems: 1000` — up to 40 pages (stops when no more reviews exist)

---

### Example input

```json
{
  "startUrl": "https://www.capterra.com/p/150854/Apify/reviews/",
  "maxItems": 50
}
````

***

### Example output

```json
{
  "softwareName": "Apify",
  "reviewerName": "Saif R.",
  "reviewerTitle": "Founder",
  "reviewerIndustry": "Computer Software",
  "usageDuration": "1-2 years",
  "reviewTitle": "Apify saved us tons of time.",
  "reviewDate": "February 28, 2026",
  "overallRating": 5.0,
  "easeOfUse": 4.0,
  "customerService": 5.0,
  "features": 4.0,
  "valueForMoney": 5.0,
  "likelihoodToRecommend": 10.0,
  "reviewText": "We plugged Apify into our backend to pull Google Maps reviews for businesses on our platform. Took maybe a day to get the API integration working, which was faster than I expected.",
  "pros": "The API is dead simple. You send a request, you get structured JSON back. No need to manage proxies, headless browsers, or parsing logic.",
  "cons": "Some of the actors in the store aren't great. I tried a couple that had bad documentation.",
  "switchedFrom": "ScrapingBee",
  "pageUrl": "https://www.capterra.com/p/150854/Apify/reviews/",
  "scrapedAt": "2026-04-18T12:00:00+00:00"
}
```

***

### Running on a schedule

To track new reviews automatically, use Apify's scheduler:

1. Open the actor in Apify Console
2. Go to **Schedules** and create a new schedule
3. Set a cron expression — `0 8 * * 1` runs every Monday at 8am
4. Connect the output to a webhook, Google Sheets integration, or a downstream dataset

Your team gets updated review data without anyone running the actor by hand.

***

### Screenshots

<p align="center">
  <img src="https://i.imgur.com/BQrQLS9.png" alt="Sample output data in the Apify dataset view" width="100%">
  <br><em>Sample output data in the Apify dataset view</em>
</p>

<p align="center">
  <img src="https://i.imgur.com/QUVF3eR.png" alt="Sample output data in the Apify dataset view" width="100%">
  <br><em>Sample output data in the Apify dataset view</em>
</p>

***

### Notes

- Reviews with short text may not have pros or cons sections. Those fields will be `null`.
- The `switchedFrom` field is only populated if the reviewer mentioned a previous product.
- Setting `maxItems` higher than the actual review count is fine — the actor stops when pages run out.
- The actor only processes `capterra.com` URLs. Paste any product page URL and it adds `/reviews/` automatically.

# Actor input Schema

## `startUrl` (type: `string`):

URL of the Capterra product reviews page. You can paste the product page URL (e.g. https://www.capterra.com/p/150854/Apify) or the reviews URL directly (e.g. https://www.capterra.com/p/150854/Apify/reviews/). The /reviews/ path is added automatically if missing.

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

Maximum number of reviews to collect. Each page returns up to 25 reviews. For example, 250 will fetch 10 pages. Default is 25 (one page). Set a large number like 999999 to collect all available reviews.

## `requestTimeoutSecs` (type: `integer`):

Per-request timeout in seconds. Increase for slow connections.

## Actor input object example

```json
{
  "startUrl": "https://www.capterra.com/p/150854/Apify/reviews/",
  "maxItems": 25,
  "requestTimeoutSecs": 30
}
```

# 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 = {
    "startUrl": "https://www.capterra.com/p/150854/Apify/reviews/"
};

// Run the Actor and wait for it to finish
const run = await client.actor("kawsar/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 = { "startUrl": "https://www.capterra.com/p/150854/Apify/reviews/" }

# Run the Actor and wait for it to finish
run = client.actor("kawsar/capterra-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrl": "https://www.capterra.com/p/150854/Apify/reviews/"
}' |
apify call kawsar/capterra-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=kawsar/capterra-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Capterra Reviews Scraper",
        "description": "Capterra reviews scraper that collects verified user reviews, including ratings, pros, cons, and reviewer profiles, so businesses can monitor software reputation and track competitor feedback at scale.",
        "version": "0.0",
        "x-build-id": "wsFJk4ikJhEONh63z"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/kawsar~capterra-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-kawsar-capterra-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/kawsar~capterra-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-kawsar-capterra-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/kawsar~capterra-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-kawsar-capterra-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrl"
                ],
                "properties": {
                    "startUrl": {
                        "title": "Capterra review page URL",
                        "pattern": "^https?://(www\\.)?capterra\\.com/",
                        "type": "string",
                        "description": "URL of the Capterra product reviews page. You can paste the product page URL (e.g. https://www.capterra.com/p/150854/Apify) or the reviews URL directly (e.g. https://www.capterra.com/p/150854/Apify/reviews/). The /reviews/ path is added automatically if missing."
                    },
                    "maxItems": {
                        "title": "Max reviews",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of reviews to collect. Each page returns up to 25 reviews. For example, 250 will fetch 10 pages. Default is 25 (one page). Set a large number like 999999 to collect all available reviews.",
                        "default": 25
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Per-request timeout in seconds. Increase for slow connections.",
                        "default": 30
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
