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

Scrape Capterra software reviews by product URL, name or category: ratings, pros and cons, comments, vendor reply, reviewer job title, country, industry and company size. Goes past 10,000 reviews per product. Filter by stars, company size, country and dates; monitor new reviews. JSON, CSV or Excel.

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

## Pricing

from $0.53 / 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 is Capterra Reviews Scraper?

**Capterra Reviews Scraper** extracts **software reviews from [Capterra](https://www.capterra.com)**: **overall rating, the 4 sub-ratings, pros, cons, comments, reasons for choosing or switching, vendor reply, reviewer job title, country, industry and company size**, for any product, by URL, by name or by category. The same reviews are shown on Software Advice and GetApp: paste a link from any of the three. It works as a **Capterra API alternative**: run it on a schedule, call it from your code, or plug it into Make, Zapier or n8n.

Paste a **product link** (`https://www.capterra.com/p/135003/Slack/`) or type a **product name**, click **Start**, and download the reviews in JSON, CSV or Excel. No login, nothing to set up, and it is **fast: about 100 reviews in 10 seconds, 1,000 in about 5 minutes** (measured on Apify), from **$0.53 per 1,000 reviews**. Products with more than 10,000 reviews are read in pieces, so the older reviews are reached too (see Known limitations).

### 📋 What data can you extract from Capterra?

One item per review, 43 fields:

| Category | What you get |
| --- | --- |
| ⭐ **Ratings** | overall rating 1-5, ease of use, customer support, functionality, value for money, likelihood to recommend 0-10 |
| 📝 **Review text** | title, pros, cons, overall comment, why they chose the software, why they switched, how often they use it |
| 👤 **Reviewer** | name (first name and initial), job title, country, industry, company size, how long they used the software, validated reviewer or not |
| 🏷️ **Review origin** | Capterra, GetApp or Software Advice, gift or incentive offered or not, how the review was collected |
| 💬 **Vendor reply** | the software vendor's answer and its date |
| 🕒 **Dates and history** | the day it was written, the earlier versions of a review its author edited |
| 📦 **Product** | name, ids, links, number of reviews; with **Product details**: average rating, stars breakdown, average sub-ratings, share of reviewers who recommend, category, logo, alternatives, starting price |

Every field, with an example, is listed in the **Output** section below.

The reviewer's **job title, country and likelihood to recommend** come from the Capterra UK review pages and are filled when **Reviewer job title, country and recommendation** is on (default). Turn it off for a faster run: those 3 fields are then `null` (with the reviewer country filter they are always filled: that filter reads the Capterra UK pages themselves).

### ✅ Why use Capterra Reviews Scraper?

- 📚 **Past 10,000 reviews**: a product with more reviews than one list can hold is read in pieces (by stars, company size, time used) to reach the older ones; Known limitations names the rare reviews left out.
- 🧾 **The full review**: sub-ratings, pros, cons, overall comment, reasons for choosing and switching, vendor reply and the earlier versions of an edited review — in the same layout as capterra.com.
- 👤 **Who wrote it**: industry, company size and time used, plus job title and country when the review is found on Capterra UK (see Known limitations).
- 🎯 **Type the product, not a URL**: by name, by link (Capterra in English and German, Software Advice, GetApp) or by category, several products in one run, each read once.
- 🔔 **Monitoring built in**: tick **Only new reviews**, schedule the Actor, and each run returns (and charges) only what it has never delivered before.
- 🔎 **Filters**: stars, company size, time used, reviewer country, dates, keywords, reviewer industry, verified reviewers, incentivized reviews, reviews with a vendor reply.
- 🔌 API, scheduling, monitoring, integrations (Make, Zapier, n8n, Google Sheets…), proxy rotation and JSON/CSV/Excel export via the Apify platform.

### 🚀 How to scrape Capterra reviews

1. Create a free Apify account.
2. Open **Capterra Reviews Scraper** and paste a product link into **Product or category URLs** (e.g. `https://www.capterra.com/p/135003/Slack/`).
3. Or type a **Product name** (e.g. `Slack`), or several in **More product names**.
4. Set **Max reviews** (100 by default, 0 = no limit) — and **Max reviews per product** when you read several products — then click **Start**.
5. Download the dataset in JSON, CSV, Excel or via API.

### 💰 How much does it cost to scrape Capterra reviews?

This Actor uses **pay per event** pricing: you pay for the reviews you get, plus a small fee per run start. Higher Apify plans pay less.

| What | Free | Bronze | Silver | Gold |
| --- | --- | --- | --- | --- |
| ⭐ **Review** saved (one row) | **$0.77** per 1,000 | $0.71 | $0.62 | $0.53 |
| 🚀 **Run start** | $0.01 per run | $0.01 | $0.01 | $0.01 |
| 📦 **Product details** (option, off by default), once per product | $0.89 per 1,000 products | $0.88 | $0.87 | $0.86 |
| 🔎 **Filter check**: a review read and dropped by a filter of the Actor | $0.05 per 1,000 | $0.045 | $0.04 | $0.035 |

Examples:

- **1,000 reviews of one product** on the Gold plan: $0.53 + $0.01 = **$0.54** ($0.78 on the Free plan).
- **The same with Product details**: + $0.00086 for the product, still **$0.54**: the product figures are added to every review for less than a tenth of a cent.
- **A daily monitor** (**Only new reviews**) that finds 20 new reviews a day on the Free plan: about **$0.025 a day**, $0.76 a month.

Reviews the site filters itself (stars, company size, time used, reviewer country) are never read, so never charged. The other filters (dates, keywords, reviewer industry, verified reviewers, incentivized reviews, vendor reply) are applied by the Actor on every review it reads: a review you keep costs its normal price, a review a filter drops costs only the filter check — filtering never costs more than taking everything. A review **Only new reviews** already delivered costs nothing. Platform usage (compute, proxy) is included in the price.

### ⚙️ Input

```json
{
    "query": "Slack",
    "maxItems": 200
}
```

Several products by name, only recent 4 and 5 star reviews, only the ones not delivered before:

```json
{
    "searchQueries": ["Salesforce Sales Cloud", "HubSpot CRM"],
    "maxItemsPerQuery": 500,
    "starRatings": ["5", "4"],
    "postedAfter": "30 days",
    "onlyNew": true,
    "stateKey": "crm-watch"
}
```

Or with your own URLs, a product and a category:

```json
{
    "startUrls": [
        { "url": "https://www.capterra.com/p/135003/Slack/" },
        { "url": "https://www.capterra.co.uk/directory/30021/crm/software" }
    ],
    "maxProductsPerCategory": 5,
    "maxItemsPerQuery": 300
}
```

Reviews from small companies, with the job title and the country of the reviewer:

```json
{
    "query": "Asana",
    "companySizes": ["A", "B"],
    "includeReviewerDetails": true,
    "sortBy": "highest_rating",
    "maxItems": 100
}
```

| Field | Notes |
| --- | --- |
| `startUrls` | Product pages of Capterra (capterra.com, .co.uk, .ca, .com.au, .in, .com.de), Software Advice or GetApp (`https://www.softwareadvice.com/product/154669-slack/`), and Capterra category pages of those sites (`https://www.capterra.com/directory/30021/crm/software`; the first **Max products per category** products are read). |
| `query`, `searchQueries` | Product name as shown on Capterra (`Salesforce Sales Cloud`); `searchQueries` adds more products (max 100). The best match of the site's own search is used and named in the log. |
| `maxProductsPerCategory` | Products read for each category URL, in the site's order (`10`). |
| `maxItems` | Stop after this many reviews for the whole run (`0` = unlimited). |
| `maxItemsPerQuery` | Cap for EACH product, so the first one cannot use up the whole budget (`0` = all its reviews). |
| `sortBy` | The order reviews are read and saved: `most_recent`, `most_helpful`, `highest_rating` or `lowest_rating`. |
| `includeReviewerDetails` | Job title, country and likelihood to recommend of the reviewer (default on). |
| `includeProductDetails` | Product rating, stars breakdown, sub-ratings, category, logo and alternatives on every review of the product, charged once per product. |
| `starRatings` | Only these overall ratings, filtered by the site: `5`, `4`, `3`, `2`, `1`. Empty = all. |
| `companySizes` | Only reviewers from companies of these sizes, filtered by the site: `A` (self-employed), `B` (2-10 employees) to `I` (10,000+ employees). Empty = all. |
| `timeUsed` | Only reviewers who used the software this long, filtered by the site: `FreeTrial`, `LessThan6Months`, `LessThan12Months`, `LessThan2Years`, `MoreThan2Years`. Empty = all. |
| `reviewerCountries` | Reviewer country, 2-letter codes (`gb`, `us`): read from Capterra UK, which does not give the reasons for choosing or switching, the vendor reply, the usage frequency or earlier versions. |
| `postedAfter`, `postedBefore` | Date range of the day the review was written (its latest version, for an edited review): `2026-09-01`, or a period before now (`7 days`, `2 weeks`, `1 month`, `24 hours`). |
| `keywords`, `excludeKeywords` | Keep only / drop the reviews whose title, pros, cons or comments contain one of these words (case and accents ignored). |
| `reviewerIndustries` | Keep only the reviews whose reviewer industry contains one of these words (`Retail`, `Hospital`). |
| `verifiedOnly`, `excludeIncentivized`, `withResponseOnly` | Only validated reviewers, drop reviews written for a gift or incentive, keep only the reviews the vendor answered. |
| `onlyNew`, `stateKey`, `resetState` | Monitoring: only the reviews never delivered under this memory key (`crm-watch`); `resetState` forgets the memory. |
| Advanced | `proxyConfiguration` (Apify proxy by default, included in the price; the residential proxy is not available), `maxConcurrency`, `maxRequestsPerMinute`, `minRequestIntervalMs`, `maxRequestRetries`, `debugLog`. |

### 📦 Output

A review (shortened: the product details, empty without **Product details**, are not shown):

```json
{
    "id": "Capterra___7220603",
    "reviewId": "Capterra___7220603",
    "url": "https://www.capterra.com/p/61368/Salesforce/reviews/",
    "reviewUrl": "https://www.capterra.co.uk/software/61368/salesforce?review=Capterra___7220603",
    "sourceSite": "Capterra",
    "title": "great centralised sales crm, Highly recommend (abundance of tools and features is great)",
    "writtenOn": "2026-09-28T09:19:14.000Z",
    "overallRating": 5,
    "easeOfUseRating": 4,
    "customerSupportRating": 5,
    "functionalityRating": 5,
    "valueForMoneyRating": 4,
    "recommendationRating": 8,
    "prosText": "Very useful features, top of the sales CRM softwares for a reason.",
    "consText": "Some parts did feel quite difficult to set up.",
    "generalComments": "I am happy, I used it to build out my outreach and sales infrastructure.",
    "chosenReasons": null,
    "switchingReasons": null,
    "frequencyOfUse": "Weekly",
    "incentivized": "NoIncentive",
    "reviewSource": { "code": "NoIncentive", "tooltip": "This review was submitted organically." },
    "anonymityOn": false,
    "reviewer": {
        "fullName": "Arran D.",
        "jobTitle": "Director",
        "country": "UK",
        "industry": "Retail",
        "companySize": "2-10 employees",
        "companySizeCode": "B",
        "timeUsedProduct": "6-12 months",
        "timeUsedCode": "LessThan12Months",
        "isValidated": true,
        "profilePicUrl": null,
        "anonymityOn": false
    },
    "vendorResponse": null,
    "previousVersions": [],
    "productName": "Salesforce Sales Cloud",
    "productId": "61368",
    "productUrl": "https://www.capterra.com/p/61368/Salesforce/",
    "productReviewCount": 18811,
    "sourceInput": "https://www.capterra.com/p/61368/Salesforce",
    "scrapedAt": "2026-10-06T01:24:37.832Z"
}
```

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

#### All 43 fields

| Fields | What you get |
| --- | --- |
| `id`, `reviewId`, `globalReviewId` | `Capterra___7220603` (the same id on Capterra, Software Advice and GetApp; the prefix is the site the review was written on) |
| `url`, `reviewUrl`, `sourceSite` | the product's reviews page, the link to this review on Capterra UK, `Capterra` / `GetApp` / `SoftwareAdvice` |
| `title`, `writtenOn` | the title, `2026-09-28T09:19:14.000Z`: the date of the latest version of the review, what the date filters read (the day alone, `2026-09-28`, with the reviewer country filter) |
| `overallRating`, `easeOfUseRating`, `customerSupportRating`, `functionalityRating`, `valueForMoneyRating` | 1 to 5 (the 4 sub-ratings are `null` when the reviewer gave none) |
| `recommendationRating` | likelihood to recommend, 0 to 10 (with **Reviewer job title, country and recommendation**) |
| `prosText`, `consText`, `generalComments` | the review text |
| `chosenReasons`, `switchingReasons`, `frequencyOfUse` | why they chose or switched, `Daily` / `Weekly` / `Monthly` / `Other` |
| `incentivized`, `reviewSource` | `NoIncentive`, `NominalGift`…; the code and the text of how the review was collected |
| `anonymityOn`, `reviewer` | whether the reviewer is anonymous; name, job title, country, industry, company size and its code, time used and its code, validated or not |
| `vendorResponse`, `previousVersions` | the vendor's reply with its date; the earlier versions of the review (title, date, ratings, texts) |
| `productName`, `productId`, `productSlug`, `productUrl`, `softwareAdviceId` | the product, its Capterra id and its Software Advice id |
| `productReviewCount` | all the reviews of the product, filters not applied |
| `productRating`, `productRatingBreakdown`, `productSubRatings`, `productRecommendPercent` | with **Product details**: average rating, reviews per star, average sub-ratings, average likelihood to recommend (out of 100: 70.9 = 7.09 / 10) |
| `productStartingPrice`, `productPriceCurrency`, `productCategory`, `productLogoUrl`, `productAlternatives` | with **Product details**: lowest price shown, category, logo, the top alternatives |
| `sourceInput`, `scrapedAt` | the link or name you gave that led to the product, ISO timestamp |

### 💡 Tips

#### How to get more results

Set `maxItems` to `0` and leave `maxItemsPerQuery` at `0`: every review of every product is read. A product with more than 10,000 reviews is read in pieces — by stars, then by company size, then by time used — and the pieces are put together, each review once.

#### How to reduce costs

The price is per review, so the levers are `maxItems`, `maxItemsPerQuery`, the filters made by the site (`starRatings`, `companySizes`, `timeUsed`: the reviews they leave out are never read), and `onlyNew` for recurring runs (you never pay twice for the same review). Leave `includeProductDetails` off unless you need the product figures: it is charged once per product.

#### Several products in one run

Paste several links into `startUrls`, or fill `searchQueries`: the Actor reads each product once, even if it is reached by a link, a name and a category. Set `maxItemsPerQuery` to give every product its own cap: without it the first products can use up the whole `maxItems` budget. A category link adds its first `maxProductsPerCategory` products.

#### Monitoring: only the new reviews

Tick **Only new reviews** (`onlyNew`) and schedule the Actor. The first run returns everything; each later run skips the reviews already delivered: they are not saved and not charged. The memory lives in a named key-value store of your account (`capterra-reviews-scraper-seen`, up to 150,000 reviews per key) and is only updated with reviews that really reached the dataset, so a failed run never hides anything. Give each schedule its own `stateKey` (two schedules sharing a key would hide each other's reviews), and tick `resetState` once to start over. With the **Most recent** order a product stops being read at its first review you already have (with the reviewer country filter, whose pages put edited reviews back on top, the reviews you have are skipped one by one instead). A review keeps its id when its author edits it, so it is not delivered again. A review that does not pass a time-dependent filter yet (a relative "posted before" date) is checked again on the next run.

#### Filter by date

`postedAfter` and `postedBefore` take a date (`2026-09-01`, the whole day is included) or a period before now (`7 days`, `2 weeks`, `1 month`; via the API also `24 hours` or a full ISO date-time). The filter reads `writtenOn`. Filtered-out reviews are not saved and do not count in `maxItems` (each review dropped costs the filter fee, see Pricing); the run summary tells how many were filtered. With the **Most recent** order, a product stops being read at the first review that is too old.

### 🔌 Integrations and API

Call the Actor via the Apify API, the JavaScript or Python clients, or connect it with integrations and webhooks (Make, Zapier, n8n, Google Sheets, Slack, Airtable…). The dataset can be fetched as JSON or CSV from any tool.

### 🤖 Use with AI agents (MCP)

AI agents (Claude, ChatGPT, Cursor…) can find and run this Actor through the [Apify MCP server](https://mcp.apify.com), billed to their Apify account like any run. It returns one item per Capterra review. Actor id: `nice_dev/capterra-reviews-scraper`; MCP server with this Actor only: `https://mcp.apify.com/?tools=fetch-actor-details,nice_dev/capterra-reviews-scraper`.

Smallest input, for a cheap first call:

```json
{
    "query": "Slack",
    "maxItems": 10
}
```

Key output fields: `title`, `overallRating`, `writtenOn`, `prosText`, `consText`, `generalComments`, `reviewer` and `productName`.

Cost: $0.77 per 1,000 reviews on the Free plan ($0.53 on Gold), plus $0.01 per run start; **Product details** adds $0.89 per 1,000 products. Cap each call with `maxItems` and, through the API, with the run option `maxTotalChargeUsd`.

### ❓ FAQ

#### Is it legal to scrape Capterra?

The Actor only reads what Capterra, Software Advice and GetApp show publicly to any anonymous visitor. It logs in to nothing. Reviews can contain personal data (a reviewer's name, job title, country), which is protected by GDPR: do not store it without a legitimate reason. You are responsible for using the data in compliance with the sites' Terms of Use and applicable law. This Actor is not affiliated with Capterra, Software Advice or GetApp.

#### Does it need a login or a proxy?

No login. The proxy is included in the price: leave the default setting (the residential proxy is not available). A request the site turns away is retried at once on a new proxy session, up to 10 times on top of the retries (without a proxy, after a pause of 5 seconds, doubled at each retry up to 150 seconds).&#x20;

#### Is the data safe to open in Excel or to show on a web page?

Titles and review texts are the reviewers' own words, copied as they are. A text can begin with `-`, `+`, `=` or `@`: Excel and Google Sheets may read such a cell of a CSV file as a formula or as a number. The Actor leaves the text as it is, so that the JSON and the API give the real value: when you open a CSV, import these columns as text. On a web page, escape every field like any text written by a stranger.

#### Known limitations

- A review that has no company size and no time used, beyond the 10,000 most recent of its star rating on a product with more than 10,000 reviews of that rating, cannot be reached by the pieces the Actor reads (the run log says when a product is read in pieces).
- With the reviewer country filter (`reviewerCountries`), the reasons for choosing / switching, the vendor reply, the usage frequency and the earlier versions are `null`: the pages that filter reads do not give them.
- The job title, country and recommendation are read from the Capterra UK pages: a review that is not found there goes out with those 3 fields `null`, and the run log counts them.
- The job title, country and recommendation need the Capterra id of the product: give its Capterra URL (a name, a Software Advice or a GetApp URL does not carry it; the log says so). The reviewer country filter needs it too. With the **Most helpful** order those 3 fields are left empty (the two sites do not give that order alike).
- With **Highest rating** or **Lowest rating** and the reviewer details on, each star is read in turn, newest first inside a star.
- Under a cap (`maxItems`, `maxItemsPerQuery`), two cases read several lists side by side and keep the reviews of each as they come, not strictly the newest of the whole product: a product with more than 10,000 reviews and a cap above 10,000 (read in pieces), and the reviewer country filter with several countries or several values of a filter (Capterra UK takes one value at a time).
- `onlyNew` remembers review ids, not their content.
- Two runs sharing the same `stateKey` at the same time may both return the same new review.

**A run that reaches its timeout** stops itself about 45 seconds before it: no new page is asked, what it read is saved and, with `onlyNew`, remembered, and the run ends *Succeeded* with "Stopped before the run's timeout". Resurrect it to go on from there, or give the next run a longer timeout (Run options). At about 200 reviews a minute (1,000 in 4.5 minutes, measured on Apify), the default hour holds several thousand reviews.

**A run the platform stops without warning** (out of memory)

- Resurrect it: it goes on from where it stood at most a minute before the stop. What it had read since is read again, and the reviews already saved are skipped: none is delivered or charged twice, and `maxItems` still counts them.
- With `onlyNew`, the memory is saved after each write (at most once every 2 seconds): resurrect the stopped run and the reviews it had saved meanwhile join the memory; leave it stopped for good, and the next run may return the reviews of its last 2 seconds once more.

#### Something doesn't work?

The last line of the log counts the reviews saved, filtered out, and the requests that failed after every retry. Those requests are listed, with the reason, in the `FAILED_REQUESTS` record of the run's key-value store. A run that saved nothing and had failed requests fails, and its last message gives the cause (a link to a product that does not exist says so, instead of "run it again"). A product name the site does not know, or a link that gives no product, is named in the log.

If Capterra changes its pages, you are told instead of paying for blank rows. If the first 20 reviews read all lack their overall rating, the day they were written or their title (a review written on GetApp, often a rating alone, is not counted for the title), or if the Capterra UK pages show reviews none of which can be read, the run saves nothing more, stops and fails, and its last message names the missing field: at most those first reviews are charged. A run of fewer reviews (a scheduled `onlyNew` run that finds a few new ones, a small **Max reviews**) is checked at its end, from 5 reviews: its reviews are already saved, and the run fails with the missing field instead of ending green.&#x20;

### 🛟 Support

Open an issue in the **Issues** tab with a link to your run: the run log and the `FAILED_REQUESTS` record of the key-value store show exactly which URLs failed and why.

# Actor input Schema

## `startUrls` (type: `array`):

Capterra product pages (`https://www.capterra.com/p/135003/Slack/`, `/reviews/` too, or capterra.com, .co.uk, .ca, .com.au, .in, .com.de: `https://www.capterra.co.uk/software/135003/slack`), Software Advice product pages (`https://www.softwareadvice.com/product/154669-slack/`) or GetApp product pages. A Capterra category (`https://www.capterra.com/directory/30021/crm/software`) adds its first **Max products per category** products. Max 1 000 URLs.

## `query` (type: `string`):

Software name as shown on Capterra (e.g. `Salesforce Sales Cloud`): the best match of the site's own search is used, and named in the log.

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

Several products in one run, by name. Added to **Product name** and to the URLs; a product reached twice is read once.

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

For category URLs: how many products of the category (in the site's order) are read. Each product then gets up to **Max reviews per product** reviews.

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

Maximum number of reviews to save for the whole run (after deduplication and filters). 0 = no limit.

## `maxItemsPerQuery` (type: `integer`):

Cap for EACH product, so that the first product cannot use up the whole **Max reviews** budget. 0 = all its reviews (beyond 10 000 the Actor splits the product by stars, company size and time used to reach the older ones; see Known limitations in the README).

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

Order in which reviews are read (and saved).

## `includeReviewerDetails` (type: `boolean`):

Adds the reviewer's job title, country and 0-10 likelihood to recommend, read from Capterra UK review pages (about one more page per 25 recent reviews, more for older ones; same price). Off = faster, those 3 fields are null (always filled with Reviewer countries, which reads the Capterra UK pages). Needs the product's Capterra URL (a product name, a Software Advice or a GetApp URL leaves them null) and is not given with the **Most helpful** order.

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

Adds the product's overall rating, rating breakdown (1-5 stars), average sub-ratings, category, logo and top alternatives to every review of that product (one more page per product). Charged once per product (see Pricing).

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

Only reviews with these overall ratings. Empty = all.

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

Only reviews written by people from companies of these sizes. Empty = all (reviews without a company size included).

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

Only reviews from people who used the product for this long. Empty = all.

## `reviewerCountries` (type: `array`):

Only reviews written from these countries: 2-letter codes (`gb`, `us`, `in`, `ca`, `fr`…). Filtered by Capterra UK, which does not give the reasons for choosing / switching, the vendor reply, the usage frequency or earlier versions: those fields are null when this filter is set. Needs the product's Capterra URL: a product given by name, Software Advice or GetApp URL is skipped with this filter. Empty = all countries.

## `postedAfter` (type: `string`):

Only reviews written on or after this date (`writtenOn`, the date of the latest version of an edited review): `2026-09-01`, or a period before now such as `7 days`, `2 weeks`, `1 month` (API: `24 hours` and full ISO date-times work too). With **Most recent** order, reading stops at the first older review.

## `postedBefore` (type: `string`):

Only reviews written on or before this date (the whole day is included), or older than a period such as `30 days`.

## `keywords` (type: `array`):

Keep only the reviews whose title, pros, cons or comments contain at least one of these words (whole words; case and accents ignored).

## `excludeKeywords` (type: `array`):

Drop the reviews whose title, pros, cons or comments contain one of these words (case and accents ignored).

## `reviewerIndustries` (type: `array`):

Keep only the reviews whose reviewer industry contains one of these words, as whole words (e.g. `Hospital`, `Retail`, `Computer Software`: `Hospital` does not keep `Hospitality`). Case ignored. Reviews without an industry are dropped.

## `verifiedOnly` (type: `boolean`):

Keep only reviews whose reviewer was validated by the site (`reviewer.isValidated`). With Reviewer countries, Capterra UK shows the mark on some validated reviewers only: the others are dropped.

## `excludeIncentivized` (type: `boolean`):

Drop the reviews written in exchange for a gift or invited with an incentive (`incentivized` other than `NoIncentive`).

## `withResponseOnly` (type: `boolean`):

Keep only the reviews the software vendor answered. Not with Reviewer countries: the pages of a country do not show the vendor reply.

## `onlyNew` (type: `boolean`):

Skip the reviews that a previous run (same **Memory key**) already delivered: they are not saved and not charged. With **Most recent** order, reading of a product stops at its first known review. First run = everything is new.

## `stateKey` (type: `string`):

Name of the memory used by **Only new reviews**. Give each schedule / task its own key (e.g. `crm-watch`) so that they do not share their memory. Letters, digits, `-` and `_`.

## `resetState` (type: `boolean`):

Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every review again. Untick it afterwards.

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

Apify Proxy or your own proxies. Keep the default: it is included in the price. The residential Apify proxy is not available in this Actor.

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

Maximum number of requests processed in parallel.

## `maxRequestsPerMinute` (type: `integer`):

Most requests to the sites in any 60 seconds, all of them counted (review pages, product pages, searches). Lower it if the log shows HTTP 429 / 403.

## `minRequestIntervalMs` (type: `integer`):

Smallest gap between two requests, in milliseconds. 0 = no gap.

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

Retries per request before it is marked as failed. Behind a proxy, a request the site turns away is also retried on a new proxy session up to 10 times without using up these retries.

## `debugLog` (type: `boolean`):

Include debug messages in the run log.

## `productUrls` (type: `array`):

Accepted for compatibility: same as Product or category URLs (strings or {url}).

## `productUrl` (type: `string`):

Accepted for compatibility: one product URL.

## `profileUrls` (type: `array`):

Accepted for compatibility: same as Product or category URLs.

## `categoryUrls` (type: `array`):

Accepted for compatibility: category URLs.

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

Accepted for compatibility: product names.

## `productName` (type: `string`):

Accepted for compatibility: one product name.

## `maxResults` (type: `integer`):

Accepted for compatibility.

## `maxReviews` (type: `integer`):

Accepted for compatibility.

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

Accepted for compatibility.

## `maxReviewsPerProfile` (type: `integer`):

Accepted for compatibility.

## `sort` (type: `string`):

Accepted for compatibility: also MOST_RECENT, HIGHEST_COMPLETENESS_SCORE, HIGHEST_RATED, LOWEST_RATED.

## `sortOrder` (type: `string`):

Accepted for compatibility.

## `starRating` (type: `array`):

Accepted for compatibility.

## `minRating` (type: `integer`):

Accepted for compatibility: turned into Star ratings.

## `maxRating` (type: `integer`):

Accepted for compatibility: turned into Star ratings.

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

Accepted for compatibility.

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

Accepted for compatibility.

## `fromDate` (type: `string`):

Accepted for compatibility.

## `publishedBefore` (type: `string`):

Accepted for compatibility.

## `toDate` (type: `string`):

Accepted for compatibility.

## `timeUsedProduct` (type: `array`):

Accepted for compatibility.

## `onlyVerified` (type: `boolean`):

Accepted for compatibility.

## `incremental` (type: `boolean`):

Accepted for compatibility.

## `monitorKey` (type: `string`):

Accepted for compatibility.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.capterra.com/p/135003/Slack/"
    }
  ],
  "searchQueries": [],
  "maxProductsPerCategory": 10,
  "maxItems": 100,
  "maxItemsPerQuery": 0,
  "sortBy": "most_recent",
  "includeReviewerDetails": true,
  "includeProductDetails": false,
  "starRatings": [],
  "companySizes": [],
  "timeUsed": [],
  "reviewerCountries": [],
  "keywords": [],
  "excludeKeywords": [],
  "reviewerIndustries": [],
  "verifiedOnly": false,
  "excludeIncentivized": false,
  "withResponseOnly": false,
  "onlyNew": false,
  "stateKey": "default",
  "resetState": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 4,
  "maxRequestsPerMinute": 120,
  "minRequestIntervalMs": 0,
  "maxRequestRetries": 5,
  "debugLog": false
}
```

# Actor output Schema

## `results` (type: `string`):

No description

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

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

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

```

## MCP server setup

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