# Capterra Reviews Scraper (`heyitsgautham/software-reviews-scraper`) Actor

Paste Capterra product URLs or names such as Asana or ClickUp and get their reviews: ratings, sub-ratings, pros, cons, reviewer role, company size, vendor replies. Compare products in free summary and comparison rows: top pros, cons, price. Only-new mode. $1 per 1,000 reviews, failures free.

- **URL**: https://apify.com/heyitsgautham/software-reviews-scraper.md
- **Developed by:** [Gautham Krishna](https://apify.com/heyitsgautham) (community)
- **Categories:** Lead generation, E-commerce, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## Capterra Reviews Scraper

Get Capterra software reviews as clean rows, for product teams, competitor analysis and market research.

Use cases, each with a ready-to-run example:

- [Get Slack's Capterra reviews with pros, cons and ratings](https://apify.com/heyitsgautham/software-reviews-scraper/examples/capterra-reviews-slack)
- [Compare the reviews of Asana, monday.com and ClickUp](https://apify.com/heyitsgautham/software-reviews-scraper/examples/compare-asana-monday-clickup-reviews)
- [Pull only the 1 and 2 star reviews of a CRM](https://apify.com/heyitsgautham/software-reviews-scraper/examples/negative-capterra-reviews)
- [Read the most helpful reviews of a product first](https://apify.com/heyitsgautham/software-reviews-scraper/examples/most-helpful-capterra-reviews)

Paste product URLs or just name the products (Asana, monday.com, ClickUp), pick newest first or a star filter, and get one row per review with ratings, pros, cons, the reviewer's role and company size, the incentive flags and the vendor's reply.

You pay **$1 per 1,000 reviews** ($0.001 each), and less on Apify Store discount tiers (Bronze, Silver, Gold), down to $0.70 per 1,000 on Gold.
Failed URLs, missing products, unmatched names and products with no reviews are **never charged**.

### At a glance

| Topic | Details |
|---|---|
| Input | Capterra product or review page URLs, or product names such as Asana or monday.com |
| Output | One JSON row per review: overall and sub-ratings, pros, cons, reviewer role, industry and company size, incentive flags and the vendor's reply. Optional free summary row per product and comparison row per run |
| Price | $0.001 per review ($1 per 1,000), or $0.90 per 1,000 on Bronze, $0.80 on Silver and $0.70 on Gold. No start fee. Failed URLs, products without reviews, summary rows and comparison rows are free |
| Tested | Final test run: 63 of 63 products returned reviews, 1,860 in total. A separate run collected 3,000 Slack reviews in under 3 minutes. Name test: 82 of 90 software names returned reviews of the product they name. Small products: 30 of 30 products with 1 to 6 reviews returned all 78 of their reviews |
| Monitoring | `onlyNewSinceLastRun` returns only reviews you have not had before, and `publishedAfter` sets a date cutoff. Schedule it in Apify for a weekly feed |
| Limits | capterra.com only. `maxReviewsPerProduct` is 100 by default, raise it (up to 100,000) to get every review |

### What you get per review

| Field | What it holds |
|---|---|
| `productName`, `vendorName`, `productRating`, `productReviewCount`, `productCategory`, `productUrl` | Product summary, repeated on every row so each row stands alone. `vendorName` is empty for small products that have no reviews page yet |
| `reviewId`, `title`, `reviewDate` | Review ID, headline and date (YYYY-MM-DD) |
| `rating` | Overall rating, 1 to 5 |
| `easeOfUseRating`, `customerSupportRating`, `functionalityRating`, `valueForMoneyRating` | Sub-ratings, 1 to 5 |
| `recommendationScore` | How likely the reviewer is to recommend it, 0 to 10 |
| `pros`, `cons`, `overall` | The review text |
| `reviewerName` | The name exactly as Capterra shows it publicly (first name and initial). Empty for anonymous reviewers |
| `reviewerJobTitle`, `reviewerIndustry`, `reviewerCompanySize`, `timeUsedProduct` | Reviewer context as shown on Capterra |
| `isVerified`, `verificationMethods` | Whether Capterra validated the reviewer, and how (LinkedIn, business email, proof of use) |
| `isIncentivized`, `isVendorReferred`, `incentive`, `reviewSource` | Whether the reviewer got a gift card or was invited by the vendor, with Capterra's own explanation |
| `switchedFrom`, `alternativesConsidered` | Products the reviewer moved from or compared |
| `vendorResponse` | `{ "text", "date" }` when the vendor replied, otherwise `null` |
| `nameMatch` | Only on rows from a product name: the name you typed, how it matched (`exact`, `starts_with` or `contains`) and up to 3 other products it could mean |
| `status`, `input` | `ok` for reviews. See the FAQ for other statuses |

No emails, phone numbers or profile photos are collected.

### Input

```json
{
  "startUrls": [
    "https://www.capterra.com/p/135003/Slack/reviews/",
    "https://www.capterra.com/p/158833/ClickUp/"
  ],
  "maxReviewsPerProduct": 100,
  "sortBy": "newest",
  "starRatings": ["1", "2"]
}
```

| Option | Values |
|---|---|
| `startUrls` | Capterra product or review page links. Old `/reviews/<id>/<name>` links work too |
| `productNames` | Software names instead of links, such as `"Asana"`, `"monday.com"` or `"ClickUp"`. See Product names below. Empty by default |
| `maxReviewsPerProduct` | Default 100 |
| `sortBy` | `newest` (default), `most_helpful`, `highest_rated`, `lowest_rated` |
| `starRatings` | Any of `"1"` to `"5"`. Empty means all ratings |
| `onlyNewSinceLastRun` | Default `false`. See Monitoring below |
| `publishedAfter` | Empty by default. See Monitoring below |
| `productSummary` | Default `false`. One free summary row per product. See Compare products below |
| `compareProducts` | Default `false`. One free comparison row across all products in the run. See Compare products below |

`lowest_rated` with `starRatings: ["1", "2"]` is a quick way to collect a competitor's complaints.

### Product names instead of URLs

```json
{
  "productNames": ["Asana", "monday.com", "ClickUp"],
  "maxReviewsPerProduct": 100
}
```

Each name goes through Capterra's own search, one lookup per name, and the lookup is free.
A domain such as `asana.com` is searched as `asana`.
You can mix `productNames` and `startUrls` in one run.

The scraper then picks the product the name means.
A product counts as a match when its name equals yours, starts with yours, or holds yours as whole words.
Add-ons for a product, such as "SSIS Data Flow Components for Slack" or "SugarCRM Mailchimp Integration", never count.
Each match scores its review count plus one, times 10 for an exact name, times 1 when it starts with your name, and times 0.5 when your name comes later in it.
The highest score wins.

| Name | What happened in the test run |
|---|---|
| `Zoom` | Zoom Workplace (14,690 reviews). A listing called "ZooM" matches exactly, but with 63 reviews it scores 640 against 14,691 |
| `monday.com` | monday AI Work Platform, sold by monday.com |
| `Bill.com` | BILL Accounts Payable & Receivable |
| `MyCase` | 8am MyCase, the product's current name |
| `HubSpot` | Ambiguous. HubSpot Marketing Hub (6,258 reviews) and HubSpot CRM (4,491) score too close |

**Ties.** When the second-best match scores at least half the best one's score, the name is ambiguous.
The scraper then collects no reviews for it and returns a free `ambiguous` row listing up to 5 candidates with their URLs, rating and review count.
Pass the full product name, such as `HubSpot CRM`, or its URL on the next run.

Every review row from a name carries a `nameMatch` field.
This one is copied from a test run:

```json
"nameMatch": {
  "name": "monday.com",
  "matchType": "starts_with",
  "otherMatches": [
    { "productName": "monday CRM", "productUrl": "https://www.capterra.com/p/245800/Monday-CRM/", "productReviewCount": 467 },
    { "productName": "monday service", "productUrl": "https://www.capterra.com/p/10023357/monday-service/", "productReviewCount": 111 },
    { "productName": "monday dev", "productUrl": "https://www.capterra.com/p/10008569/monday-dev/", "productReviewCount": 67 }
  ]
}
```

A name that matches nothing comes back as a free `not_found` row.
When a name points at a product that another input in the same run already covers, its reviews are listed once, and the other input gets a free `duplicate` row.

Test run on 90 software names across CRM, project management, HR, accounting, help desk, marketing, retail, developer, design, field service, construction, legal, healthcare, church, education, property, security and website tools, 30 reviews each:

| Result | Names |
|---|---|
| Reviews of the product the name means, checked against each row's vendor | 82 |
| Ambiguous | 5: HubSpot, Square, RingCentral, Insightly, Qualtrics |
| No match | 3: Intercom (Capterra's search does not list it), Toggl Track (listed as Toggl), Kareo (now Tebra) |

### Monitoring: only new reviews and a date cutoff

Two optional inputs turn a scheduled run into a feed of new reviews.
Both are off by default, and a run without them works exactly as before.

| Option | What it does |
|---|---|
| `onlyNewSinceLastRun` | Returns only reviews this scraper has not returned to you before for the same product and filters, and none dated more than 14 days before the newest one it returned last time. Capterra checks reviews before they go live, so some appear days after their date, and the 14 days catch them. The first run returns the usual results and remembers them |
| `publishedAfter` | Only reviews published on or after a date: `2026-10-01`, `2026-10-01T12:00:00Z` (UTC), or a relative value such as `7 days` |

With `sortBy: "newest"` the run stops at the first page that holds nothing new, so a daily run reads only the pages it needs.
With other orders it still skips old reviews, but it reads further to find new ones.
You pay only for the reviews returned.
The memory is a key-value store named `software-reviews-scraper-monitor` in your own Apify account, one record per product and star filter.
Delete that store to start over.
A product with nothing new comes back as a free `no_reviews` row.

### Run it on a schedule

A weekly run with `onlyNewSinceLastRun: true` and `sortBy: "newest"` gives you a feed of new reviews for the products you follow.
We ran the same 65 product links on 15 Oct and again on 20 Oct.
The 20 Oct run returned 2 reviews that Capterra put live after the earlier runs but dated 13 Oct, and none that an earlier run had returned.
A second run straight after returned 0 reviews and 63 free `no_reviews` rows, so a run with nothing new costs you nothing.

1. Set your input with `onlyNewSinceLastRun: true` and click **Save as a new task**.
2. On the task page, click **Actions**, then **Schedule**, and pick how often it runs.
   [Apify's schedules guide](https://docs.apify.com/actors/running/schedules) covers cron times and time zones.
3. On the task's **Integrations** tab, choose where each run's results go.

| Integration | What it does |
|---|---|
| [Slack](https://docs.apify.com/integrations/slack) | Posts a message to your channel when a run finishes |
| [Google Drive](https://docs.apify.com/integrations/drive) | Saves each run's results as a file in your Drive |
| [Webhook](https://docs.apify.com/integrations/webhooks) | Sends the finished run, with its dataset ID, to your own URL |
| [Make](https://docs.apify.com/integrations/make), [Zapier](https://docs.apify.com/integrations/zapier), [n8n](https://docs.apify.com/integrations/n8n) | Adds each new row to a Google Sheet, a CRM or a database |

Each review has a stable `reviewId`, so a sheet or database can skip rows it already holds.

### Compare products: free summary and comparison rows

Two optional switches add free rows for tasks such as "compare Asana, monday.com and ClickUp".
Both are off by default, and a run without them returns the same rows as before.

```json
{
  "productNames": ["Asana", "monday.com", "ClickUp"],
  "maxReviewsPerProduct": 10,
  "productSummary": true,
  "compareProducts": true
}
```

`productSummary` adds one `summary` row per product, after its reviews.
`compareProducts` adds one `comparison` row at the end of the run.
Neither is charged.
Each product needs one more page read, its Capterra profile page.

The summary holds Capterra's own figures, which cover every review of the product, not only the ones you collected.

| Field | What it holds |
|---|---|
| `productRating`, `productReviewCount` | The rating and review count Capterra shows, the same as on review rows |
| `productRatingExact` | Capterra's unrounded average. The profile page's "Overall rating" box can show 0.1 more than `productRating`. Jira's 4.4469 shows there as 4.5 and elsewhere as 4.4 |
| `starDistribution` | How many reviews gave 1 to 5 stars. The counts add up to `productReviewCount` |
| `sentimentPercent` | Share of 4 and 5 star (`positive`), 3 star (`neutral`) and 1 and 2 star (`negative`) reviews. Capterra's "Reviews sentiment" box shows about the same numbers, rounded |
| `subRatings` | Ease of use, customer support, functionality and value for money, each with its average and how many reviews rated it |
| `recommendPercent` | Share of reviewers who rated their likelihood to recommend 8 to 10 out of 10. Reviewers who skipped the question are left out |
| `topPros`, `topCons` | Capterra's own pros and cons themes: the theme, Capterra's one-line description, the share of positive or negative mentions, and how many reviews mention it. Products without enough reviews have none |
| `pricing` | Starting price, currency and unit, and whether there is a free trial and a free version. The price is empty when Capterra says "Contact vendor" |
| `returnedReviews` | Figures from the reviews this run returned: count, oldest and newest date, average, star counts, share of 1 and 2 stars, recommend share, vendor reply share, the same for the last 90 days, and the products reviewers most often switched from or considered |

`returnedReviews` depends on `maxReviewsPerProduct`, `sortBy` and the filters.
With the newest 100 reviews, it describes recent opinion, while the other fields describe the product's whole history.

The comparison row lists every product side by side, in the order you gave them, with its rating, sub-ratings, recommend share, share of 1 and 2 star reviews, starting price, top pro and top con.
`leaders` names the best product on each figure, and ties share a place.
A product leads only when the figure rests on 20 or more reviews, so a product with one 5-star review does not top the list.
The overall rating uses `productRatingExact`, so 4.57 and 4.63 do not count as a tie.
`notCompared` lists inputs that gave no product, with their status, such as an `ambiguous` name.

This comparison row is copied from a test run on the input above, with the `products` list cut to its first entry:

```json
{
  "status": "comparison",
  "site": "capterra",
  "productCount": 3,
  "products": [
    {
      "productName": "Asana",
      "productId": "184581",
      "productUrl": "https://www.capterra.com/p/184581/Asana-PM/",
      "input": "Asana",
      "productRating": 4.5,
      "productRatingExact": 4.4866,
      "productReviewCount": 13764,
      "easeOfUse": 4.4,
      "customerSupport": 4.3,
      "functionality": 4.4,
      "valueForMoney": 4.4,
      "recommendPercent": 76.7,
      "negativePercent": 1.7,
      "startingPrice": 10.99,
      "currency": "$",
      "priceUnit": "Per User, Per Month",
      "freeVersion": true,
      "freeTrial": true,
      "topPro": "Comprehensive real-time project tracking",
      "topCon": "Overwhelming and excessive notifications",
      "returnedReviews": 10,
      "returnedAverageRating": 5,
      "returnedNegativePercentLast90Days": 0,
      "returnedVendorReplyPercent": 0
    }
  ],
  "leaders": {
    "productRating": ["ClickUp"],
    "easeOfUse": ["monday AI Work Platform"],
    "customerSupport": ["ClickUp"],
    "functionality": ["ClickUp"],
    "valueForMoney": ["ClickUp"],
    "recommendPercent": ["ClickUp"],
    "productReviewCount": ["Asana"],
    "fewestNegative": ["ClickUp"]
  },
  "notCompared": [],
  "message": "Capterra's figures for all reviews of each product, in input order. leaders names the best product on each figure among products with at least 20 reviews behind it, and ties share a place. The returned* fields cover only the reviews this run returned.",
  "input": null
}
```

Test runs with both switches on:

| Run | Result |
|---|---|
| 90 software names, 30 reviews each | All 82 products found got a summary row with star counts, sub-ratings and recommend share. 78 had pros and cons themes, 68 a starting price |
| 65 product URLs, 30 reviews each | All 63 products got a summary row with star counts, sub-ratings and recommend share |
| 10 products checked against their Capterra pages in a browser | Review count, top pro and top con with their shares and counts, starting price, free trial and free version matched on all 10. Sub-ratings with their review counts matched on the 9 pages that show them |

### Output example

This is a real row from a test run.

```json
{
  "status": "ok",
  "site": "capterra",
  "productId": "154664",
  "productName": "Tithe.ly",
  "vendorName": "Tithe.ly",
  "productRating": 4.7,
  "productReviewCount": 693,
  "productCategory": "Nonprofit CRM",
  "productUrl": "https://www.capterra.com/p/154664/Tithe-ly-Church-Giving/",
  "reviewId": "6761023",
  "title": "Great, easy-to-use software",
  "rating": 5,
  "easeOfUseRating": 5,
  "customerSupportRating": 5,
  "functionalityRating": 5,
  "valueForMoneyRating": 5,
  "recommendationScore": 10,
  "pros": "Tithely has been really easy to use. The learning curve is minimal and it helps keep our church connected.",
  "cons": "I can't think of anything I didn't like.",
  "overall": "Great support. Easy to use. Good end user experience",
  "reviewDate": "2025-03-29",
  "reviewerName": "Marcy C.",
  "reviewerJobTitle": "Communications and. Executive Assistant",
  "reviewerIndustry": "Non-Profit Organization Management",
  "reviewerCompanySize": "1-10 employees",
  "timeUsedProduct": "1-2 years",
  "isVerified": true,
  "verificationMethods": ["BusinessEmail", "ProofOfLink"],
  "isIncentivized": true,
  "isVendorReferred": true,
  "incentive": "VendorReferredIncentivized",
  "reviewSource": "Vendor Referred - Incentive Offered: This reviewer was invited by the software vendor to submit an honest review and offered a nominal incentive as a thank you.",
  "switchedFrom": ["Planning Center"],
  "alternativesConsidered": null,
  "vendorResponse": {
    "text": "Thank you Marcy for your feedback!",
    "date": "2025-04-01"
  },
  "input": "https://capterra.com/p/154664/Tithe-ly-Church-Giving/reviews/?page=2"
}
```

### Pricing

Prices are per 1,000 reviews.

| Event | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| Review returned | $1 | $0.90 | $0.80 | $0.70 |
| Name lookup, unmatched or ambiguous name, duplicate, missing product, product with no reviews, unsupported or invalid URL, failed fetch, summary row, comparison row | Free | Free | Free | Free |

Bronze, Silver and Gold are Apify Store discount tiers, and Apify's Pricing tab shows them as Starter, Scale and Business.
Apify decides which tier an account is on.

Set a maximum cost per run in the run options.
The scraper stops once that limit is reached.

### Speed

In tests, one product returned about 19 reviews per second, and 3,000 Slack reviews took under 3 minutes.
Several products run in parallel, 5 by default.

### Use it from AI agents

The scraper works as a tool through the [Apify MCP server](https://mcp.apify.com) in Claude, Cursor, VS Code and other MCP clients.
An agent can pass a few product names, such as Asana, monday.com and ClickUp, with `compareProducts` on, and get back their reviews plus one row that puts Capterra's figures for each product side by side.

You can also call it through the [Apify API](https://docs.apify.com/api/v2), schedule it, or connect it to Make, Zapier and n8n.

### More from heyitsgautham

Other actors from the same account.

- [Trustpilot Reviews & TrustScore Scraper](https://apify.com/heyitsgautham/trustpilot-reviews-scraper) for Trustpilot reviews and each company's TrustScore, for any business on any Trustpilot country site.
- [Hotel Reviews Scraper (Booking.com + Agoda)](https://apify.com/heyitsgautham/hotel-reviews-scraper) for guest reviews from Booking.com and Agoda, by hotel URL or hotel name.
- [Tripadvisor Reviews Scraper: Hotels, Restaurants, Tours](https://apify.com/heyitsgautham/tripadvisor-reviews-scraper) for Tripadvisor reviews of hotels, restaurants, attractions and tours, with sub-ratings and owner responses.
- [YouTube Video & Shorts Comments Scraper with Replies](https://apify.com/heyitsgautham/youtube-comments-scraper) for the comments and replies on a video or Short, for sentiment analysis and audience research.
- [Google Trends Scraper: Related Queries & Trending Searches](https://apify.com/heyitsgautham/google-trends-scraper) for Google Trends interest over time, related queries and Trending Now.

### FAQ

**What do the other statuses mean?**
`not_found` means Capterra has no product at that URL, or no product matches that name.
`ambiguous` means a name matches several products about equally well.
The row lists the candidates.
`duplicate` means a name points at a product another input already covers, so its reviews are listed once.
`no_reviews` means the product has no reviews, none match your filters, or, when monitoring, none are new. That row still carries the product summary.
`unsupported_site` is a G2 URL.
`invalid_input` is anything else that isn't a capterra.com product link.
When it looks like a product name, such as `Asana`, the message says to put it in `productNames`.
`error` means the page could not be fetched after several retries.
`summary` and `comparison` are the optional rows described under Compare products.
None of these rows are charged.

**Does it scrape G2?**
No.
G2 shows a CAPTCHA to automated visitors, and this scraper does not solve CAPTCHAs.
G2 URLs come back as `unsupported_site` at no cost.

**Does it work for small products?**
Yes.
Capterra gives a product with only a few reviews no reviews page and shows them on its profile page, and the scraper reads those too.
In a test, 30 of 30 products with 1 to 6 reviews returned all 78 of their reviews.
Capterra does not show the vendor on those pages, so `vendorName` is empty.

**Can I get every review of a big product?**
Yes. Set `maxReviewsPerProduct` above the product's review count.

**Does it log in?**
No. It reads the same public pages any visitor sees.

**Why is the product URL different from mine?**
Capterra routes by the numeric product ID and sometimes renames products, so the scraper follows Capterra to the current page.

### Limitations

- capterra.com only. Country sites such as capterra.co.uk are not supported.
- Product names rely on Capterra's search, which does not list every product. If a name comes back `not_found` but you know the product is on Capterra, pass its URL.
- Review text comes back as Capterra shows it, in the reviewer's language.
- If Capterra changes its site, sorting and star filters may stop working until the scraper is updated. The default order keeps working through a fallback.

# Actor input Schema

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

Capterra product or review page URLs, such as https://www.capterra.com/p/135003/Slack/reviews/. The product page URL works too. G2 URLs are recognised but not supported, and come back as unsupported_site at no cost. Leave it empty if you use Product names below.

## `productNames` (type: `array`):

Software names such as Asana, monday.com or ClickUp, instead of URLs. Each name is matched to one Capterra product through Capterra's own search, and every row from it carries a nameMatch field that says how it matched. A name that matches no product, or several products about equally well, comes back as a free not_found or ambiguous row. Empty by default.

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

Stop after this many reviews for each product.

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

Order in which reviews are collected. Combined with the limit above, this decides which reviews you get.

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

Keep only reviews with these overall ratings. Leave empty for all ratings.

## `onlyNewSinceLastRun` (type: `boolean`):

For scheduled runs. Returns only reviews this actor has not returned to you before for the same product and filters, and none dated more than 14 days before the newest one it returned last time, because Capterra publishes some reviews days after their date. The first run returns the usual results and remembers them. Works best with newest-first order, where the run stops at the first page with nothing new. The memory is a key-value store named software-reviews-scraper-monitor in your Apify account.

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

Only reviews published on or after this date. Use a date such as 2026-10-01, an ISO time such as 2026-10-01T12:00:00Z (UTC), or a relative value such as 7 days, meaning the last 7 days. With newest-first order the run stops as soon as it reaches older ones.

## `productSummary` (type: `boolean`):

Adds one free summary row per product, after its reviews. It holds Capterra's figures for all of the product's reviews (rating, review count, star counts, sub-rating averages, the share who would recommend it, Capterra's top pros and cons themes and the starting price), plus figures for the reviews this run returned (date range, average, share of 1 and 2 stars in the last 90 days, vendor reply share, products reviewers switched from). Summary rows are never charged.

## `compareProducts` (type: `boolean`):

Adds one free comparison row at the end of the run, with the key figures of every product side by side in input order and the leader on each figure. Use it for tasks such as comparing Asana, monday.com and ClickUp. Works with or without the summary rows. Never charged.

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

How many products to scrape in parallel.

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

Residential proxy is the default and the most reliable choice for Capterra.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.capterra.com/p/135003/Slack/reviews/",
    "https://www.capterra.com/p/158833/ClickUp/reviews/"
  ],
  "maxReviewsPerProduct": 100,
  "sortBy": "newest",
  "starRatings": [],
  "onlyNewSinceLastRun": false,
  "productSummary": false,
  "compareProducts": false,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One item per review with ratings, pros, cons, reviewer role, industry and company size, flags and vendor response, plus the product's name, vendor, rating, review count and category. Only items with status ok are charged.

# 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": [
        "https://www.capterra.com/p/135003/Slack/reviews/",
        "https://www.capterra.com/p/158833/ClickUp/reviews/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("heyitsgautham/software-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": [
        "https://www.capterra.com/p/135003/Slack/reviews/",
        "https://www.capterra.com/p/158833/ClickUp/reviews/",
    ] }

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

```

## MCP server setup

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