# Capterra Reviews Scraper(Cheap) (`data_api/capterra-reviews-scraper-cheap`) 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/data\_api/capterra-reviews-scraper-cheap.md
- **Developed by:** [Data API](https://apify.com/data_api) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

![Capterra Reviews Scraper](cover.jpg)

Capterra holds thousands of first-hand reviews of business software, but copying them out one card at a time is slow and the page only loads more as you scroll. This scraper does the reading for you. Paste a Capterra product link and it returns each review as a clean row: the written text, the star rating, the breakdown scores, what the reviewer liked and disliked, and who they are. Point it at one product or run it across a shortlist of competitors.

### What you get

Each review comes back as one row with the same shape every time, so missing pieces arrive as `null` rather than disappearing and your columns stay tidy in a sheet or database. Three groups of data per review:

- **Ratings** — `overallScore`, `easeOfUseScore`, `supportScore`, `featureScore`, `valueScore`, and `recommendScore` (out of 10)
- **Review content** — `headline`, `reviewBody`, `prosText`, `consText`, `previousProduct`, and `datePosted`
- **Reviewer and source** — `productName`, `authorName`, `authorJobTitle`, `authorIndustry`, `usagePeriod`, `authorPhotoUrl`, `sourceUrl`, and `collectedAt`

### Quick start

1. Hit **Try for free** and open the input form.
2. Paste a Capterra product link into **Capterra product page** — the bare product URL or the `/reviews/` URL both work.
3. Set a **Review cap** to decide how many reviews to pull.
4. Press **Start**, then export the results as JSON, CSV, Excel, or XML when it finishes.

![How it works](how-it-works.jpg)

### Use cases

- **Competitor research** — pull reviews for two or three rival products and compare what users praise and complain about
- **Product feedback** — track your own listing, route fresh reviews to a spreadsheet or chat channel, and catch issues early
- **Feature planning** — mine the `consText` from low-scoring reviews to feed a backlog of real user requests
- **Sentiment and NLP work** — gather review text in bulk for scoring, tagging, or model training
- **Win/loss analysis** — read the `previousProduct` field to see which tools buyers leave behind
- **Market research** — measure how ratings and recommendation scores shift across a category over time

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `reviewPageUrl` | string | Yes | Capterra product or reviews page URL. Only `capterra.com` links are accepted; the scraper adds `/reviews/` when it is missing. Example: `https://www.capterra.com/p/186596/Slack/reviews/`. |
| `resultsLimit` | integer | No | Most reviews to collect. About 25 per page, so 200 walks roughly 8 pages. Default `50`; set a large value like `999999` to take everything. |
| `timeoutSeconds` | integer | No | Seconds to wait on each request before giving up. Default `45`; raise it on a slow connection. |

#### Example input

```json
{
    "reviewPageUrl": "https://www.capterra.com/p/186596/Slack/reviews/",
    "resultsLimit": 50,
    "timeoutSeconds": 45
}
````

### Output

Each review becomes one row, and every field is always present — anything Capterra did not show comes back as `null` so your dataset stays rectangular.

#### Example output

```json
{
    "productName": "Slack",
    "authorName": "Maria G.",
    "authorJobTitle": "Operations Manager",
    "authorIndustry": "Marketing and Advertising",
    "usagePeriod": "2+ years",
    "authorPhotoUrl": "https://reviews.capterra.com/cdn/profile-images/linkedin/xyz789.jpeg",
    "headline": "Keeps our whole team in sync.",
    "datePosted": "March 12, 2026",
    "overallScore": 4.0,
    "easeOfUseScore": 5.0,
    "supportScore": 4.0,
    "featureScore": 4.0,
    "valueScore": 4.0,
    "recommendScore": 9.0,
    "reviewBody": "We switched our internal chat over to Slack and adoption was painless. Channels keep projects separate and the search makes old decisions easy to find.",
    "prosText": "Threaded conversations keep channels tidy and the integrations save us a lot of tab-switching.",
    "consText": "Notifications can get noisy on busy days and the free tier hides older messages.",
    "previousProduct": "Microsoft Teams",
    "sourceUrl": "https://www.capterra.com/p/186596/Slack/reviews/",
    "collectedAt": "2026-05-20T09:30:00+00:00"
}
```

#### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `productName` | string | Name of the software product the review belongs to |
| `authorName` | string | Display name or initials of the reviewer |
| `authorJobTitle` | string | Role or job title the reviewer listed |
| `authorIndustry` | string | Sector or type of company the reviewer works in |
| `usagePeriod` | string | How long the reviewer says they have used the product |
| `authorPhotoUrl` | string | Link to the reviewer's avatar, or `null` when none was uploaded |
| `headline` | string | Short title the reviewer gave their review |
| `datePosted` | string | When the review went live on Capterra |
| `overallScore` | number | Headline star rating, out of 5 |
| `easeOfUseScore` | number | Sub-score for ease of use, out of 5 |
| `supportScore` | number | Sub-score for customer support, out of 5 |
| `featureScore` | number | Sub-score for the feature set, out of 5 |
| `valueScore` | number | Sub-score for value relative to price, out of 5 |
| `recommendScore` | number | How strongly the reviewer would recommend, out of 10 |
| `reviewBody` | string | The full written review |
| `prosText` | string | What the reviewer liked |
| `consText` | string | What the reviewer disliked |
| `previousProduct` | string | Product the reviewer switched from, when mentioned |
| `sourceUrl` | string | Address of the page the review came from |
| `collectedAt` | string | ISO 8601 timestamp of when the review was pulled |

### Tips for best results

- **Start with a small cap.** Run 25–50 reviews first to confirm the output fits your pipeline, then raise `resultsLimit` for the full batch.
- **Either URL works.** Paste the product page or the `/reviews/` link — the scraper normalizes it for you, and non-Capterra links fail with a clear message.
- **Big caps are safe.** Setting `resultsLimit` above the real review count is fine; the run stops on its own when the pages run out.
- **Short reviews skip pros and cons.** When a reviewer left only a headline, `prosText`, `consText`, and `previousProduct` come back as `null` — that is expected, not an error.
- **Raise `timeoutSeconds` to ~60** if a slow connection causes requests to drop.

### How can I use Capterra review data?

**How can I use the Capterra Reviews Scraper to compare competing software?**
Run the scraper on each competitor's product page and you get every review in the same structure — ratings, pros, cons, and recommendation scores side by side. Group the rows by `productName` to see which tool wins on ease of use, support, or value, and read the `prosText` and `consText` columns to learn why users prefer one over another.

**How can I export Capterra reviews to a spreadsheet for analysis?**
Set a `resultsLimit`, run the actor, and export the dataset as CSV or Excel straight from Apify. Each review is one row with the full text, sub-scores, reviewer role, and industry, so you can pivot on `authorIndustry`, filter by `overallScore`, or chart how `datePosted` ratings trend over time without any manual copy-paste.

**How can I track new Capterra reviews for my own product?**
Point the scraper at your listing and schedule it to run on a cadence. New reviews land as fresh rows you can route to a sheet or chat channel, and the `consText` from lower scores gives you a steady feed of real complaints to fold into your roadmap.

### Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses or private contact information. 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.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### Support

Questions, feature requests, or a field you'd like added? Reach out at <data.apify@proton.me> and we'll get back to you.

# Actor input Schema

## `reviewPageUrl` (type: `string`):

Link to the Capterra product whose reviews you want. Either the plain product page (e.g. https://www.capterra.com/p/186596/Slack) or the reviews link itself works — the scraper appends /reviews/ when it is missing.

## `resultsLimit` (type: `integer`):

How many reviews to bring back at most. A single page holds about 25, so 200 walks roughly 8 pages. Leave it at 50 for a quick sample, or push it to something like 999999 to grab everything on the listing.

## `timeoutSeconds` (type: `integer`):

Seconds to wait on each request before giving up. Bump it up if your connection is slow.

## Actor input object example

```json
{
  "reviewPageUrl": "https://www.capterra.com/p/186596/Slack/reviews/",
  "resultsLimit": 25,
  "timeoutSeconds": 45
}
```

# 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 = {
    "reviewPageUrl": "https://www.capterra.com/p/186596/Slack/reviews/"
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_api/capterra-reviews-scraper-cheap").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 = { "reviewPageUrl": "https://www.capterra.com/p/186596/Slack/reviews/" }

# Run the Actor and wait for it to finish
run = client.actor("data_api/capterra-reviews-scraper-cheap").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 '{
  "reviewPageUrl": "https://www.capterra.com/p/186596/Slack/reviews/"
}' |
apify call data_api/capterra-reviews-scraper-cheap --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Capterra Reviews Scraper(Cheap)",
        "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": "Pj3xO61AXNhJlpJl6"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data_api~capterra-reviews-scraper-cheap/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data_api-capterra-reviews-scraper-cheap",
                "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/data_api~capterra-reviews-scraper-cheap/runs": {
            "post": {
                "operationId": "runs-sync-data_api-capterra-reviews-scraper-cheap",
                "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/data_api~capterra-reviews-scraper-cheap/run-sync": {
            "post": {
                "operationId": "run-sync-data_api-capterra-reviews-scraper-cheap",
                "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": [
                    "reviewPageUrl"
                ],
                "properties": {
                    "reviewPageUrl": {
                        "title": "Capterra product page",
                        "pattern": "^https?://(www\\.)?capterra\\.com/",
                        "type": "string",
                        "description": "Link to the Capterra product whose reviews you want. Either the plain product page (e.g. https://www.capterra.com/p/186596/Slack) or the reviews link itself works — the scraper appends /reviews/ when it is missing."
                    },
                    "resultsLimit": {
                        "title": "Review cap",
                        "minimum": 1,
                        "type": "integer",
                        "description": "How many reviews to bring back at most. A single page holds about 25, so 200 walks roughly 8 pages. Leave it at 50 for a quick sample, or push it to something like 999999 to grab everything on the listing.",
                        "default": 25
                    },
                    "timeoutSeconds": {
                        "title": "Timeout (seconds)",
                        "minimum": 5,
                        "maximum": 120,
                        "type": "integer",
                        "description": "Seconds to wait on each request before giving up. Bump it up if your connection is slow.",
                        "default": 45
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
