# Capterra Reviews Scraper — Software Reviews & Ratings (`tortuga/capterra-scraper`) Actor

Scrape Capterra software reviews and product profiles: ratings, pros and cons, reviewer role and industry, company size, pricing, features and alternatives. Works for any product or category page.

- **URL**: https://apify.com/tortuga/capterra-scraper.md
- **Developed by:** [Trevor Ortega](https://apify.com/tortuga) (community)
- **Categories:** Lead generation, Business
- **Features:** Limited permissions
- **Stats:** 5 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 reviews

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Capterra Reviews Scraper

Scrape Capterra software reviews and product profiles: overall and per-category ratings, pros and cons, likelihood to recommend, reviewer job title, industry and company size, time used, switched-from and alternatives-considered products, pricing plans, features, deployment options, integrations, awards and alternatives. Works for any product, category or search page, and also reads GetApp and Software Advice pages (the same Gartner Digital Markets data).

Built for reliability: plain HTTP with browser TLS fingerprinting, no headless browser, no login. Reviews come from the same JSON the site's own "Sort by" control uses, so you get 25 reviews per ~45 KB request instead of parsing 700 KB pages, with real sorting (most recent, most helpful, highest, lowest) and star filters. You pay per item, nothing else.

### What data does Capterra Reviews Scraper extract?

**Review items** (`mode: reviews`, default):

| Field | Description |
|---|---|
| `productId`, `productName`, `productUrl` | Capterra product id (`135003` in `/p/135003/Slack/`), name and URL |
| `reviewId` | Stable review id, e.g. `Capterra___7189737` (GetApp / Software Advice reviews share the same pool) |
| `title` | Review title |
| `overallRating` | 1-5 |
| `easeOfUse`, `customerService`, `features`, `valueForMoney` | Sub-ratings 1-5 (`null` when the reviewer skipped one) |
| `likelihoodToRecommend` | 0-10 |
| `pros`, `cons`, `overall` | Pros, cons and the "Overall experience" text |
| `adviceToOthers` | Advice text when present |
| `switchedFrom`, `reasonsForSwitching` | Products the reviewer switched from and why. Since November 2026 Capterra's public review feed no longer includes these, so they are usually empty |
| `alternativesConsidered`, `reasonsForChoosing` | Alternatives considered and why this product was chosen |
| `usedFor` | Time used: "Less than 6 months", "6-12 months", "1-2 years", "2+ years", "Free trial" |
| `frequency` | Usage frequency (Software Advice pages only: "Daily", "Weekly", ...) |
| `reviewerName` | Reviewer name as the review card shows it: first name and last initial ("Lorenzo F."), or the site's label for anonymous reviewers ("Verified Reviewer", "Anonymous User"). `null` on GetApp pages (see below) |
| `reviewerRole`, `reviewerIndustry`, `companySize` | Job title, industry and company size band ("11-50 employees"). Since November 2026 industry and company size come from Software Advice's copy of the same review, which shows them for a product's newest reviews (roughly the latest 10 to 25); older reviews leave them empty |
| `reviewDate` | ISO date (`2026-07-25`) |
| `source` | Where the review was collected: "Capterra", "GetApp" or "Software Advice" |
| `isVerified` | Reviewer identity was validated (LinkedIn / business email / proof of use). Neither Capterra nor Software Advice publishes this any more (November 2026), so it is currently empty |
| `isIncentivized`, `incentive` | Whether a nominal gift card was offered (`NominalGift`). Filled from Software Advice for a product's newest reviews |
| `vendorResponse` | Vendor reply text when present |
| `url` | Page the review was collected from |

Only the shortened name the sites display is exported: Software Advice embeds the full last name in its page data but shows only the initial, so only the initial is kept. GetApp pages carry full names without the reviewer's anonymity choice, so `reviewerName` is `null` for reviews read from GetApp. Reviewer photos are not collected. Capterra has no public reviewer profiles, so there is no reviewer profile URL, reviewer id or LinkedIn URL to export.

**Product items** (`mode: products`): `name`, `vendor`, `description`, `overallRating`, `reviewCount`, `ratings` (ease of use, customer service, features, value for money, likelihood to recommend), `ratingDistribution` (1-5 star counts), `recommendPercent`, `startingPrice`, `currency`, `pricingModel`, `paymentFrequency`, `freeTrial`, `freeVersion`, `creditCardRequired`, `pricingDescription`, `pricingPlans` (name, price, model, included features), `categories`, `features` (105+ features with per-feature rating and review count), `topFeatures`, `deployment`, `platforms`, `supportOptions`, `trainingOptions`, `targetCompanySizes`, `alternatives` (name, URL, rating, review count), `integrations`, `integrationCount`, `awards` (Shortlist, Top Rated, Best Ease of Use, ...), `prosSummary`, `consSummary`, `topIndustries`, `companySizeBreakdown`, `jobFunctions`, `comparisons`, `logoUrl`, `screenshots`, `websiteUrl` (GetApp / Software Advice pages), `lastUpdated`.

**Category cards** (`mode: category`): `position`, `name`, `url`, `category`, `overallRating`, `reviewCount`, `ratings`, `ratingDistribution`, `tagline`, `description`, `startingPrice`, `freeTrial`, `freeVersion`, `vendor`, `topFeatures`, `segmentReviewCounts` (small / mid-size / enterprise), `isSponsored`, `badges`, `logoUrl`.

### How to use Capterra Reviews Scraper

1. Paste one or more URLs into **Start URLs**: a product page (`https://www.capterra.com/p/135003/Slack/`), its reviews page, a category page (`https://www.capterra.com/project-management-software/`) or a search page (`https://www.capterra.com/search/?query=crm`). Or type product names into **Product names** and the top Capterra search hit is used.
2. Pick **What to scrape**: reviews (default), product profiles, or category cards.
3. Set **Max items** and, for category runs, **Max reviews per product** so the budget is spread across products.
4. Choose **Sort reviews** (most recent by default) and optionally **Only these star ratings** (e.g. `1, 2` for complaints).
5. Click **Start**. Results appear in the **Dataset** tab; export as JSON, CSV or Excel, or read them through the API.

### Input example

```json
{
  "startUrls": [
    { "url": "https://www.capterra.com/p/135003/Slack/reviews/" },
    { "url": "https://www.capterra.com/customer-relationship-management-software/" }
  ],
  "searchTerms": ["Asana"],
  "mode": "reviews",
  "maxItems": 500,
  "maxReviewsPerProduct": 100,
  "sortReviews": "most_recent",
  "ratingFilter": []
}
```

### Output example

```json
{
  "type": "review",
  "productId": "135003",
  "productName": "Slack",
  "productUrl": "https://www.capterra.com/p/135003/Slack/",
  "reviewId": "Capterra___7209621",
  "title": "Can't work without",
  "overallRating": 4,
  "easeOfUse": 5,
  "customerService": 3,
  "features": 5,
  "valueForMoney": 4,
  "likelihoodToRecommend": 8,
  "pros": "Its ease of use and flexibility. The way you can open a new chat and a channel to share with others is the best",
  "cons": "Just as a personal point of view, the UI is not as modern as other tools are made. Some changes could help improve.",
  "overall": "I use Slack as a professional live chat tool. Not only with colleagues, but also to communicate with external partners.",
  "switchedFrom": ["Discord"],
  "reasonsForSwitching": "Many features were under expensive plans",
  "alternativesConsidered": [],
  "usedFor": "2+ years",
  "reviewerName": "Lorenzo F.",
  "reviewerRole": "Marketing and sales manager",
  "reviewerIndustry": "Computer Software",
  "companySize": "11-50 employees",
  "reviewDate": "2026-09-05",
  "source": "Capterra",
  "isVerified": true,
  "isIncentivized": true,
  "incentive": "NominalGift",
  "vendorResponse": null,
  "url": "https://www.capterra.com/p/135003/Slack/reviews/"
}
```

### Proxy note

Capterra now serves a Cloudflare challenge to datacenter and residential proxies alike, so this Actor uses **Apify's Unblocker proxy** by default. Unblocker is billed to your Apify account per successful request (10 Unblocker units, about $0.0015 on the free plan and less on paid plans), and one request returns up to 25 reviews, so proxy cost stays well under the per-review price. In Unblocker mode reviews come in Capterra's default (most helpful) order; the sort and star-rating filters need the site's internal sort endpoint, which only works if you switch the proxy to residential and Capterra is not challenging at the time.

### How much does it cost?

Pay per item: $0.002 per review, $0.004 per product profile (two page fetches), $0.001 per category card, plus normal Apify platform usage (a few cents per thousand reviews). No start fee, no subscription. 1,000 reviews cost about $2 all-in on the free plan.

### How do I scrape all reviews of a product?

Use the product's reviews URL and raise **Max items** and **Max reviews per product**. Reviews are paged 25 at a time with a cursor, so products with tens of thousands of reviews (Slack has 24,000+) can be collected in full in one run. Sorting by **most recent** and scheduling the actor weekly is the cheapest way to keep a review feed up to date; deduplicate on `reviewId`.

### Monitor changes on a schedule

Turn on **Only new or changed items** and save the input as a task with a Schedule (Apify Console: **Saved tasks** -> **Schedule**, for example daily). Each run then remembers what earlier runs of the same input returned and outputs only what is new: reviews no earlier run saved in `reviews` mode, products whose rating or starting price changed in `products` mode, and products that are new to the list or whose rating or price changed in `category` mode. Unchanged items are skipped before they are saved, so they are not charged. Reviews are then read newest first: through the default Unblocker proxy that is the product page, which shows Capterra's 25 newest reviews, so a daily check of a product is one request (if more than 25 reviews arrive between two runs, the run notes it as `moreNewThanShown`; schedule busy products more often). Add **Only reviews newer than** (`2 days`, `24 hours` or a date like `2026-10-01`) to bound how far back a run reads. Monitored items carry `changeType` (`new` or `changed`) and, for changed products, `previousValues` with the old values of the fields that changed (e.g. `{"startingPrice": 8.75}`); use **Monitoring key** to keep several schedules on the same input apart.

### Can I get only negative reviews?

Yes. Set **Only these star ratings** to `1, 2` (or any subset of 1-5) and **Sort reviews** to "Lowest rating". The filter is applied by Capterra itself, so you do not pay for reviews you do not want.

### Does it work with category pages?

Yes. A category URL such as `https://www.capterra.com/customer-relationship-management-software/` is paginated automatically (25 products per page). In reviews mode every product in the category is opened and up to **Max reviews per product** reviews are saved per product; in products mode each product gets a full profile; in category mode you get the ranking cards only (cheapest way to list a whole category with ratings, review counts and pricing flags).

### Does it support GetApp and Software Advice?

Partly. GetApp product and category pages and Software Advice profile / reviews pages are read directly (product profiles are complete and include the vendor website). Those sites only embed a sample of reviews though (6 on GetApp, 25 on Software Advice) and have no public review pager, so for the full review list use the Capterra URL of the same product; the review pool and ids are shared across the three sites.

### Does it work without login or a browser?

Yes. Everything comes from public pages served to anonymous visitors, read with plain HTTP requests and Chrome TLS fingerprinting. No account, cookies or headless browser, which keeps runs fast (about 1 second per 25 reviews) and cheap.

### Integrations and API

Use the run in Zapier, Make, n8n, Google Sheets, or call it from Python/Node with the Apify client. See the **API** tab for ready-made snippets. Schedule it to monitor new reviews of your product or your competitors.

### Is it legal to scrape Capterra?

This actor collects only publicly available data: review texts and ratings, the reviewer name exactly as the review shows it publicly (first name and last initial, or "Verified Reviewer" for anonymous reviews), reviewer job title, industry and company size band, and product / vendor business information. Reviewer names are personal data, so if you store or process them, data-protection law such as the GDPR may apply to you. The actor does not collect reviewer photos, full last names or any contact details. You are responsible for how you use the data and for complying with Capterra's terms and applicable law.

### Support

Found a bug or need a field added? Open an issue in the **Issues** tab; it is usually answered within a day.

### Related scrapers

- [G2 Reviews Scraper](https://apify.com/tortuga/g2-scraper): Software Reviews & Ratings
- [TrustRadius Scraper](https://apify.com/tortuga/trustradius-scraper): Reviews, Scores, Pros & Cons
- [Clutch Scraper](https://apify.com/tortuga/clutch-scraper): Agency Leads, Rates & Reviews
- [GoodFirms Scraper](https://apify.com/tortuga/goodfirms-scraper): Agencies, Rates & Reviews
- [Trustpilot Scraper](https://apify.com/tortuga/trustpilot-scraper): Reviews, TrustScore & Companies

### Found it useful?

A ★ review on this Actor's Apify Store page helps other users find it and tells us what to improve. Issues and feature requests are welcome in the Actor's **Issues** tab.

# Actor input Schema

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

Capterra product pages (https://www.capterra.com/p/135003/Slack/), review pages (…/Slack/reviews/), category pages (https://www.capterra.com/project-management-software/) or search pages (https://www.capterra.com/search/?query=crm). GetApp and Software Advice product/review pages are accepted too but embed only a sample of reviews; use the Capterra URL for the full list. Category and search pages are paginated automatically and every product on them is processed in the selected mode.

## `searchTerms` (type: `array`):

Product names to look up on Capterra search, e.g. "HubSpot CRM". The top search result is used in reviews/products mode; in category mode all search results are saved as cards.

## `mode` (type: `string`):

reviews: one item per user review (default). products: one detailed profile item per product (pricing, features, alternatives, deployment, awards…). category: one card per product on category/search pages (name, rating, review count, tagline, pricing flags).

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

Stop after this many items in total (reviews, products or cards across all start URLs). Keeps cost predictable.

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

Reviews mode only: cap per product, so a category run spreads the budget across products instead of spending it all on the first one.

## `sortReviews` (type: `string`):

Order in which Capterra reviews are collected (matters when a cap is set). most_recent is best for monitoring; most_helpful is the site's default order.

## `ratingFilter` (type: `array`):

Optional: keep only Capterra reviews with these overall ratings, e.g. \[1, 2] for complaints. Leave empty for all.

## `reviewsNewerThan` (type: `string`):

Only reviews newer than: a date (YYYY-MM-DD) or a period such as '7 days' or '24 hours'. Reviews are then read newest first and collection stops where older reviews begin; through the Unblocker proxy the first request is the product page, which shows Capterra's 25 newest reviews, so a daily run costs one request per product. Leave empty for no date limit. `reviews` mode only.

## `onlyNewOrChanged` (type: `boolean`):

Remember what earlier runs of this input returned and output only what is new: in `reviews` mode, reviews no earlier run output (read newest first; through the Unblocker proxy that is the 25 newest reviews per product per run, one request); in `products` mode, products whose rating or starting price / free trial / free version changed (an unchanged product also skips its second request); in `category` mode, products new to the list or whose rating or starting price changed (review counts and positions are not compared). Use with a Schedule; unchanged items are not charged.

## `monitoringKey` (type: `string`):

Name for this watch, so several schedules on the same search stay separate; defaults to a key derived from the search input. Only used with **Only new or changed items**.

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

Capterra sits behind a Cloudflare challenge that blocks datacenter and residential proxies, so the default is Apify's Unblocker proxy (group UNBLOCKER), which is billed per successful request to your account (about $0.0015 each on the free plan; one request returns up to 25 reviews). In this mode reviews come in the site's default order.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.capterra.com/p/135003/Slack/reviews/"
    }
  ],
  "searchTerms": [],
  "mode": "reviews",
  "maxItems": 10,
  "maxReviewsPerProduct": 10,
  "sortReviews": "most_recent",
  "ratingFilter": [],
  "onlyNewOrChanged": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# 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/reviews/"
        }
    ],
    "searchTerms": [],
    "maxItems": 10,
    "maxReviewsPerProduct": 10,
    "ratingFilter": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "UNBLOCKER"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("tortuga/capterra-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/reviews/" }],
    "searchTerms": [],
    "maxItems": 10,
    "maxReviewsPerProduct": 10,
    "ratingFilter": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["UNBLOCKER"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("tortuga/capterra-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/reviews/"
    }
  ],
  "searchTerms": [],
  "maxItems": 10,
  "maxReviewsPerProduct": 10,
  "ratingFilter": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}' |
apify call tortuga/capterra-scraper --silent --output-dataset

```

## MCP server setup

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