---
title: "Capterra scraper"
description: "Scrape Capterra software listings as JSON: rating, review count, star split, pricing plans, features, alternatives and user reviews. One request from Python or MCP."
canonical: https://www.zenrows.com/scrape/capterra
updated: 2026-10-20
---

# Capterra scraper

The Zenrows Capterra scraper turns a Capterra product page into structured JSON: product name, category, overall rating, review count, star distribution, review sentiment, value and support ratings, starting price and plans, top pros and cons, rated features, integrations, alternatives and recent reviews. Fetch in Adaptive Stealth Mode opens the page, and Extract returns the fields. Run it from an API call, the CLI or an AI agent.

- Site: capterra.com
- Returns: Software ratings, pricing, features and reviews

## Run it: one Capterra product in, JSON out

```json Input
{
  "url": "https://www.capterra.com/p/135003/Slack/",
  "mode": "auto",
  "extract": "auto"
}
```

```json Output
{
  "product": {
    "name": "Slack",
    "url": "https://www.capterra.com/p/135003/Slack/",
    "category": "Team Communication Software",
    "last_updated": "October 19, 2026"
  },
  "rating_summary": {
    "overall_rating": 4.7,
    "review_count": 24229,
    "value_for_money": 4.5,
    "customer_service": 4.4,
    "sentiment_positive_pct": 96,
    "sentiment_neutral_pct": 4,
    "sentiment_negative_pct": 1
  },
  "pricing": {
    "starting_price": "$8.75",
    "pricing_unit": "Per User, Per Month",
    "free_trial": true,
    "free_version": true
  },
  "reviews": [
    {
      "title": "Slack simplifies team communication and real time incident notifications",
      "reviewer_name": "C. F.",
      "reviewer_role": "Software Engineer",
      "reviewer_industry": "Computer Software",
      "date": "October 10, 2026",
      "overall_rating": 5.0,
      "likelihood_to_recommend": "9/10",
      "pros": "Instant chat threads make discussing pull requests clean, while fast file sharing for log files keeps debugging moving…",
      "cons": "Notification overload during incident alerts can obscure urgent channels…"
    }
  ]
}
```

Sample output for a Capterra product page, built from a live request on Oct 20, 2026, trimmed for length. A field is returned when the page shows it.

## What data can you scrape from Capterra?

A Capterra product page is a full buyer's file on one tool: ratings, how reviewers feel, what it costs, what it does and what people pick instead. These are the fields teams use most, with the path where each lives in the JSON.

| Field | What it holds | Example |
|---|---|---|
| `product.name` | The software's name | `Slack` |
| `product.url` | The listing URL, with Capterra's product ID | `https://www.capterra.com/p/135003/Slack/` |
| `product.category` | The main category the listing sits in | `Team Communication Software` |
| `product.used_for[]` | The categories Capterra says the tool is used for | `["Team Communication", "Collaboration"]` |
| `rating_summary.overall_rating` | Average rating out of 5 | `4.7` |
| `rating_summary.review_count` | Number of reviews behind the rating | `24229` |
| `rating_summary.value_for_money` | Value for money rating | `4.5` |
| `rating_summary.customer_service` | Customer service rating | `4.4` |
| `rating_summary.sentiment_positive_pct` | Share of positive reviews, next to neutral and negative | `96` |
| `rating_distribution[]` | Reviews at each star level | `{ "stars": 5, "count": 17391 }` |
| `pricing.starting_price` | The lowest paid price shown | `$8.75` |
| `pricing.plans[]` | Each plan's name, price and unit | `{ "name": "Business+", "price": "$15.00" }` |
| `pros_cons[]` | Review themes with sentiment, share and review count | `{ "topic": "Resource-heavy and slow performance", … }` |
| `features[]` | Rated features with their score and number of ratings | `{ "name": "Real-Time Chat", "rating": 4.8 }` |
| `integrations[]` | Tools the listing integrates with | `["Google Drive", "Jira", "Trello"]` |
| `alternatives[]` | Competing products with rating, review count and starting price | `{ "name": "Wrike", "rating": 4.4 }` |
| `reviews[]` | Title, reviewer role and industry, date, rating, recommend score, pros and cons | `{ "likelihood_to_recommend": "9/10", … }` |

## How to scrape Capterra with Zenrows

1. **Create a free Zenrows account** and copy your API key from the dashboard.
2. **Pick the listing URL.** Every product lives at `/p/<id>/<Name>/`, and its reviews, pricing and alternatives pages hang under the same path. Category pages such as `/team-communication-software/` list the products in a market.
3. **Send it with the default configuration**: Adaptive Stealth Mode to open the page and Extract to return the fields.
4. **Read `parsed`** from the response. For a pricing tracker, keep only the `pricing` group; for a review pipeline, keep `reviews`.
5. **Run your product list in Batch** once one listing comes back the way you want, with Capterra's product ID as your own key.

```python Python
# pip install requests
import requests

params = {
    "apikey": "YOUR_ZENROWS_API_KEY",
    "url": "https://www.capterra.com/p/135003/Slack/",
    "mode": "auto",          # Adaptive Stealth Mode
    "extract": "auto",       # structured JSON
}
response = requests.get("https://api.zenrows.com/v1/", params=params, timeout=180)
response.raise_for_status()

data = response.json()["parsed"]
print(data["product"]["name"], data["rating_summary"]["overall_rating"], data["pricing"]["starting_price"])
for alt in data.get("alternatives", []):
    print("  vs", alt["name"], alt["rating"], alt.get("starting_price"))
```

```javascript Node.js
// Node 18+ (built-in fetch)
const params = new URLSearchParams({
  apikey: "YOUR_ZENROWS_API_KEY",
  url: "https://www.capterra.com/p/135003/Slack/",
  mode: "auto",
  extract: "auto",
});

const response = await fetch(`https://api.zenrows.com/v1/?${params}`, {
  signal: AbortSignal.timeout(180_000),
});
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);

const { parsed } = await response.json();
console.log(parsed.product.name, parsed.rating_summary.review_count);
console.table(parsed.pricing?.plans ?? []);
```

```bash cURL
curl "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.capterra.com%2Fp%2F135003%2FSlack%2F&mode=auto&extract=auto"

# Only the fields you need
curl "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.capterra.com%2Fp%2F135003%2FSlack%2F&mode=auto&extract=auto&extract_fields=product.name%2Crating_summary.overall_rating%2Crating_summary.review_count%2Cpricing"
```

```python Python SDK
# pip install zenrows
from zenrows import ZenRowsClient

client = ZenRowsClient("YOUR_ZENROWS_API_KEY")
for url in [
    "https://www.capterra.com/p/135003/Slack/",
    "https://www.capterra.com/p/76113/Wrike/",
]:
    response = client.get(url, params={"mode": "auto", "extract": "auto"})
    rating = response.json()["parsed"]["rating_summary"]
    print(url, rating["overall_rating"], rating["review_count"])
```

## Input

The scraper takes one Capterra URL per request, plus the options below. The same parameters go into every task of a Batch job, so the input for a whole software category is a list of listing URLs with these settings.

| Parameter | Type | Default | Description |
|---|---|---|---|
| `url` | string | required | A product listing (`/p/<id>/<Name>/`), its reviews, pricing or alternatives page, or a category page |
| `mode` | string | `auto` | Adaptive Stealth Mode: starts with the lightest setup and adds rendering and protected-site handling only when the page needs them |
| `extract` | string | `auto` | Returns the page's fields as JSON in `parsed`, next to the raw `html` |
| `extract_fields` | string | all fields | Comma-separated paths to keep, such as `product.name,pricing` |
| `proxy_country` | string | any | Two-letter country code. Capterra runs country sites (capterra.co.uk, capterra.com.au) with local prices and reviewers |
| `wait_for` | string | none | A CSS selector to wait for before the page is read, such as the reviews list |
| `session_id` | integer | none | Reuse the same session across several requests, up to 10 minutes |

```json Batch input
{
  "type": "regular",
  "status": "closed",
  "zenrows_params": {
    "mode": "auto",
    "extract": "auto"
  },
  "tasks": [
    { "url": "https://www.capterra.com/p/135003/Slack/", "external_id": "135003" },
    { "url": "https://www.capterra.com/p/147657/monday-com/", "external_id": "147657" },
    { "url": "https://www.capterra.com/p/76113/Wrike/", "external_id": "76113" }
  ]
}
```

## Output

Every response is JSON with two keys: `html`, the page as Capterra served it, and `parsed`, the structured record. The blocks below split one product page into the listing view and its reviews. Both are built from a live request to the Slack listing on Oct 20, 2026, with the values exactly as the page showed them.

```json Product listing
{
  "product": {
    "name": "Slack",
    "url": "https://www.capterra.com/p/135003/Slack/",
    "category": "Team Communication Software",
    "used_for": ["Team Communication", "Collaboration", "Remote Work"],
    "description": "Slack is where work happens for millions of people everyday. Slack transforms how work happens by bringing AI and automation to where people are already collaborating…",
    "last_updated": "October 19, 2026"
  },
  "rating_summary": {
    "overall_rating": 4.7,
    "review_count": 24229,
    "value_for_money": 4.5,
    "customer_service": 4.4,
    "sentiment_positive_pct": 96,
    "sentiment_neutral_pct": 4,
    "sentiment_negative_pct": 1
  },
  "rating_distribution": [
    { "stars": 5, "count": 17391 },
    { "stars": 4, "count": 5749 },
    { "stars": 3, "count": 913 },
    { "stars": 2, "count": 128 },
    { "stars": 1, "count": 48 }
  ],
  "pricing": {
    "starting_price": "$8.75",
    "pricing_unit": "Per User, Per Month",
    "free_trial": true,
    "free_version": true,
    "plans": [
      { "name": "Pro", "price": "$8.75", "unit": "Per User, Per Month" },
      { "name": "Business+", "price": "$15.00", "unit": "Per User, Per Month" },
      { "name": "Enterprise Grid", "price": "Contact Vendor for Pricing" }
    ]
  },
  "pros_cons": [
    { "topic": "Integrated team collaboration platform", "sentiment": "positive", "share_pct": 94, "review_count": 4446 },
    { "topic": "Resource-heavy and slow performance", "sentiment": "negative", "share_pct": 74, "review_count": 1458 }
  ],
  "features": [
    { "name": "Real-Time Chat", "rating": 4.8, "rating_count": 1790 },
    { "name": "Mobile Access", "rating": 4.7, "rating_count": 2037 },
    { "name": "Task Management", "rating": 4.2, "rating_count": 1404 }
  ],
  "integrations": ["Google Docs", "Google Drive", "Trello", "Dropbox", "Jira"],
  "alternatives": [
    { "name": "monday AI Work Platform", "rating": 4.6, "review_count": 6123, "starting_price": "$9.00", "url": "https://www.capterra.com/p/147657/monday-com/reviews/" },
    { "name": "Wrike", "rating": 4.4, "review_count": 3044, "starting_price": "$10.00", "url": "https://www.capterra.com/p/76113/Wrike/reviews/" }
  ]
}
```

```json Reviews
{
  "reviews": [
    {
      "title": "Slack - Excellent Tool for informal office communications",
      "reviewer_name": "K. L.",
      "reviewer_role": "Sr. Manager",
      "reviewer_industry": "Accounting",
      "date": "October 14, 2026",
      "overall_rating": 5.0,
      "likelihood_to_recommend": "10/10",
      "summary": "Overall, my experience with Slack is very positive. I would recommend this product as an informal communication tool for the Companies.",
      "pros": "Slack is user friendly. It is an excellent office communication tool. We can easily attached documents or excel files to share with team members…",
      "cons": "The price is relatively higher. Sometimes, we had issues connecting we use Slack to call a team member.",
      "review_source": "Incentivized review"
    },
    {
      "title": "Daily stand-ups get smoother here",
      "reviewer_name": "M. K.",
      "reviewer_role": "Senior Project Manager, Digital Services",
      "reviewer_industry": "Consumer Services",
      "date": "October 11, 2026",
      "overall_rating": 5.0,
      "likelihood_to_recommend": "8/10",
      "pros": "I love the huddle feature but sometimes the notification popups get a bit annoying, and the threaded replies keep conversations tidy…",
      "cons": "The search feature can be a bit slow, especially when pulling older threads, and the mobile app's UI feels cluttered at times…",
      "review_source": "Non-incentivized review"
    }
  ]
}
```

Prices come back as Capterra prints them, with the currency symbol, so strip the `$` before you compare plans. For a spreadsheet of reviews, `pd.json_normalize(parsed["reviews"])` in pandas gives one row per review; for an LLM, ask for the page as Markdown.

## Scrape Capterra from your coding agent

Claude Code, Cursor, Codex and any MCP client can research software on Capterra from a prompt.

The agent sends the same Fetch and Extract request a developer would, so it reads the JSON above. Connect the Zenrows MCP server once, or give the agent the CLI and let it run commands in the terminal.

```bash Connect the MCP server (Claude Code)
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp
```

```json MCP config (Cursor, Claude Desktop, Windsurf)
{
  "mcpServers": {
    "zenrows": {
      "command": "npx",
      "args": ["-y", "@zenrows/mcp"],
      "env": { "ZENROWS_API_KEY": "YOUR_ZENROWS_API_KEY" }
    }
  }
}
```

```bash Or run the CLI
npx -y @zenrows/cli init
zenrows extract "https://www.capterra.com/p/135003/Slack/"
```

```text Then ask your agent
Use Zenrows to open the Capterra listings of Slack, monday.com and
Wrike. Build a comparison table with rating, review count, starting
price and the top negative theme of each, then tell me which one
reviewers rate best for customer service.
```

## Scrape Capterra at scale with Batch and Crawl

**Batch** runs a list of Capterra URLs as one job, in parallel, with your own ID on each result. Put your product and its competitors in it each week to track ratings, review counts and list prices side by side.

**Crawl** finds the listings for you. Start it on a category page, keep the links that contain `/p/`, and it returns every product page it reaches.

```bash Batch (cURL)
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "regular",
    "status": "closed",
    "zenrows_params": { "mode": "auto", "extract": "auto" },
    "tasks": [
      { "url": "https://www.capterra.com/p/135003/Slack/", "external_id": "135003" },
      { "url": "https://www.capterra.com/p/153140/Connecteam/", "external_id": "153140" }
    ]
  }'

# Read the results when the job finishes
curl "https://async.api.zenrows.com/v1/jobs/JOB_ID/results?status=successful" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY"
```

```bash Batch (CLI)
# listings.jsonl: one {"url": "https://www.capterra.com/p/...", "external_id": "...", "extract": "auto"} per line
zenrows batch create listings.jsonl --wait
zenrows batch results <job-id> --out capterra.jsonl
```

```bash Crawl (cURL)
curl -X POST "https://api.zenrows.com/v1/crawls" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.capterra.com/team-communication-software/",
    "depth": 1,
    "max_pages": 200,
    "include_patterns": ["/p/"]
  }'
```

**Scheduled jobs** run the same Batch job on a timetable, on Zenrows' side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can tell your app when a run finishes, and you can pause or resume the schedule at any time, with no cron server to keep alive.

```bash Scheduled job (cURL)
# Runs every day on Zenrows' side; each run keeps its own results
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
      "type": "scheduled",
      "status": "closed",
      "schedule": {
        "rate": {
          "every": 1,
          "unit": "day"
        }
      },
      "zenrows_params": {
        "mode": "auto",
        "extract": "auto"
      },
      "tasks": [
        {
          "url": "https://www.capterra.com/p/135003/Slack/",
          "external_id": "capterra"
        }
      ]
    }'

# Or at set times: "schedule": { "calendar": { "times_of_day": ["09:00"],
#   "cadence": { "weekly": { "days": ["mon", "thu"] } } }, "timezone": "Europe/Madrid" }
```

## What teams do with Capterra data

| Use case | Data they pull | Who runs it |
|---|---|---|
| Competitive intelligence | Rating, review count, pros and cons themes and plans of every rival listing | Product marketing and strategy teams at SaaS companies |
| Pricing research | Starting price, plan names, units, free trial and free version flags | Pricing and revenue teams |
| Win and loss research | Cons and low-rated features in competitors' reviews | Product managers and sales enablement |
| Market mapping | Every listing in a category with rating, price and review volume | Analysts, VCs and SaaS founders |
| Technographic and lead data | Products, categories and integrations, joined to account lists | B2B sales and growth teams |
| Review analytics and RAG | Reviews with role, industry, rating and pros and cons | Data science and AI teams |

## Tips for scraping Capterra

- **Key on the product ID.** The number in `/p/135003/Slack/` identifies the listing even when the vendor renames it. Use it as `external_id` in Batch.
- **Request the sub-pages for depth.** The listing shows a handful of reviews and the main plans. The reviews, pricing and alternatives pages under the same path carry the longer lists.
- **Read reviewer context with the rating.** Role, industry and company size change what a review means. Keep them next to the rating instead of averaging stars alone.
- **Separate incentivized reviews.** Capterra marks each review's source. Split incentivized and non-incentivized reviews in your analysis.
- **Normalize prices before comparing.** Plans are priced per user, per month, per year or on request. Parse the unit together with the price.
- **Use the category page as your universe.** A category URL lists the products Capterra compares in a market, which is a better seed for a competitor set than a list from memory.

## Frequently asked questions

### Is it legal to scrape Capterra?

Collecting the public parts of Capterra, such as ratings, prices, features and review text that anyone can read, is common for competitive and market research. Reviewer names, roles and companies can be personal data under laws such as the GDPR and the CCPA, so keep only what you need for a legitimate purpose. Check Capterra's terms of use for your use case and ask a lawyer if you are unsure.

### Is there an official Capterra API?

Capterra does not offer a public API for listings or reviews. Software vendors manage their own listing and reviews through Capterra's vendor tools, which cover their own product only. Teams that need data on many products, including competitors, collect the public pages with a scraper.

### What Capterra pages can I scrape?

Product listings ( /p/<id>/<Name>/ ) and their reviews, pricing and alternatives pages, plus category pages that list the products in a market. The country sites, such as capterra.co.uk, go in the same way.

### Can I scrape Capterra reviews?

Yes. Each review comes back with title, reviewer name, role and industry, date, overall rating, likelihood to recommend, pros, cons and whether the review was incentivized. Request the listing's /reviews/ page for more of them.

### Can I scrape Capterra pricing?

Yes. The listing returns the starting price, its unit, the free trial and free version flags, and each plan with its name and price. Run the same products weekly to catch price changes.

### How do I scrape Capterra with Python?

Send a GET request to https://api.zenrows.com/v1/ with your API key, the Capterra URL, Adaptive Stealth Mode and Extract, as in the Python example above. The response's parsed key holds the product, ratings, pricing and reviews as a dictionary. The zenrows package on PyPI wraps the same request.

### How many Capterra listings can I scrape?

Send one URL per request, or a whole list as a Batch job that runs the URLs in parallel and keeps your own ID on each result. One Batch job accepts more than 10,000 URLs, inline or as a CSV file.

### Can AI agents scrape Capterra with Zenrows?

Yes. Connect the Zenrows MCP server to Claude, Cursor, Codex or any MCP client, or give your agent the Zenrows CLI. Name the products you want to compare and the agent calls Fetch and Extract for you.

### Can I scrape Capterra on a schedule?

Yes. Create a scheduled Batch job with your Capterra URLs and the same settings as a single request, and Zenrows runs it on its side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can notify your app when a run finishes, and the schedule can be paused or resumed at any time.

### Which integrations work with the Capterra scraper?

Zenrows works with n8n, Make, Zapier, Clay, Dify, LangChain, LlamaIndex, CrewAI and Mastra, plus the Python, Node.js and Go SDKs and any HTTP client. A weekly n8n or Make workflow can write competitor ratings and prices to a sheet. See the integrations page for the full list.

### What format does the data come in?

JSON by default, with the structured record in parsed and the original page in html . You can also ask for the page as Markdown or plain text, which is what most LLM and RAG pipelines want. For reviews of companies rather than software, see the Trustpilot scraper .

All scrapers: https://www.zenrows.com/scrape. Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
