{
  "openapi": "3.0.1",
  "info": {
    "title": "Capterra Reviews Scraper — Star & Date Filters · $0.9/1K 💰",
    "description": "Capterra reviews scraper: paste product, reviews, category or compare URLs (capterra.com or regional sites). Sort newest or lowest rated; filter by stars, company size and date. Every review with pros, cons, 4 sub-ratings, NPS, reviewer role and company. From $0.9/1K. No browser.",
    "version": "0.1",
    "x-build-id": "4nSe2DEqQtWpfA3Bs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~capterra-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-capterra-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/memo23~capterra-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-capterra-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/memo23~capterra-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-capterra-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "Capterra URLs",
            "type": "array",
            "description": "Capterra pages to scrape, any mix, one per line. Each entry is auto-classified:\n• Reviews URL `https://www.capterra.com/p/{id}/{slug}/reviews/` → one row per review\n• Product URL `https://www.capterra.com/p/{id}/{slug}/` → one product row (add its reviews with \"Also scrape reviews for product URLs\")\n• Category URL `https://www.capterra.com/{slug}-software/` → one row per listed product\n• Compare URL `https://www.capterra.com/compare/{ids}/{slug-a}-vs-{slug-b}/` → one compare row\n\nRegional sites work for product and review pages, e.g. `https://www.capterra.co.uk/software/135003/slack` or `https://www.capterra.in/software/135003/slack/reviews/`; they resolve to the matching capterra.com product. Bare product IDs (`135003`) and category slugs (`project-management`) also work. Anything else gets a `url-not-supported` row explaining why.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max dataset rows",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on total dataset rows for the whole run, across all URLs. A reviews URL emits one row per review, a category URL one row per listed product, product and compare URLs one row each. Example: 500. Default 1000. Free Apify plans are capped at 100 rows per run.",
            "default": 1000
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum review rows per product. Example: 500. Default 100. Set 0 for every review the product has (large products have tens of thousands; maxItems still caps the run).",
            "default": 100
          },
          "includeReviews": {
            "title": "Also scrape reviews for product URLs",
            "type": "boolean",
            "description": "When on (default), every product URL also returns that product's reviews, as if its /reviews/ URL had been pasted too, using the sort, filters and Max reviews per product below. Turn it off to get only the one product row per product URL. Default on.",
            "default": true
          },
          "reviewsSort": {
            "title": "Sort reviews by",
            "enum": [
              "MOST_HELPFUL",
              "MOST_RECENT",
              "HIGHEST_RATED",
              "LOWEST_RATED"
            ],
            "type": "string",
            "description": "Order in which reviews are collected, which decides the set you get when Max reviews per product is lower than the product's total. MOST_HELPFUL is Capterra's default (most complete reviews first), MOST_RECENT is newest first, HIGHEST_RATED and LOWEST_RATED sort by stars. Default MOST_HELPFUL.",
            "default": "MOST_HELPFUL"
          },
          "reviewStarRatings": {
            "title": "Only these star ratings",
            "type": "array",
            "description": "Keep only reviews with these overall star ratings. Example: [\"1\", \"2\"] for complaints only. Leave empty for all ratings (default).",
            "items": {
              "type": "string",
              "enum": [
                "5",
                "4",
                "3",
                "2",
                "1"
              ],
              "enumTitles": [
                "★★★★★ 5 stars",
                "★★★★ 4 stars",
                "★★★ 3 stars",
                "★★ 2 stars",
                "★ 1 star"
              ]
            }
          },
          "reviewCompanySizes": {
            "title": "Only reviewers from these company sizes",
            "type": "array",
            "description": "Keep only reviews written by people at companies of these sizes (Capterra's own buckets). Example: [\"201-500\", \"501-1000\"] for mid-market. Leave empty for all sizes (default).",
            "items": {
              "type": "string",
              "enum": [
                "Self-employed",
                "1-10",
                "11-50",
                "51-200",
                "201-500",
                "501-1000",
                "1001-5000",
                "5001-10000",
                "10001+"
              ],
              "enumTitles": [
                "Self-employed",
                "1-10 employees",
                "11-50 employees",
                "51-200 employees",
                "201-500 employees",
                "501-1,000 employees",
                "1,001-5,000 employees",
                "5,001-10,000 employees",
                "10,001+ employees"
              ]
            }
          },
          "reviewsPostedAfter": {
            "title": "Only reviews posted on or after",
            "type": "string",
            "description": "Keep only reviews posted on or after this date (YYYY-MM-DD), e.g. 2026-09-01. Sorts newest first and stops at the first older review, which makes scheduled \"new reviews since last run\" monitoring cheap. Leave empty for no date limit (default)."
          },
          "maxProductsPerCategory": {
            "title": "Max products per category",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum category-product rows per category URL. A category page lists up to about 100 products. Example: 25. Default 50. Set 0 for every product on the page.",
            "default": 50
          },
          "enrichEmails": {
            "title": "Enrich with contact emails (experimental, billed per email)",
            "type": "boolean",
            "description": "If enabled, finds a contact email for each product and category-product row from the vendor's own website (or by discovering it from the product name). Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Billed per contact email found; never charged for misses. Default off.",
            "default": false
          },
          "qualifyByPayment": {
            "title": "💳 Qualify by payment (flag businesses that take money online)",
            "type": "boolean",
            "description": "Requires \"Enrich with contact emails\". Scans each business's website — reusing the pages already fetched for email discovery, so no extra cost or time — for payment processors and e-commerce platforms (Stripe, Shopify, PayPal, Paddle, Lemon Squeezy, WooCommerce, Square, Chargebee and more). Adds takesPayments, paymentProcessors, stripeLiveKey (the public key if exposed) and paymentConfidence. No extra charge. Default off.",
            "default": false
          },
          "reviewInsights": {
            "title": "📊 Review insights — instant digest per product (no AI, billed per product)",
            "type": "boolean",
            "description": "Adds one `review_insights` row per product: rating breakdown and sentiment split, the recurring software complaint themes (bugs, pricing, support, missing features, onboarding, integrations), top negative-review terms, and feature-request snippets. Deterministic, instant, no AI. Billed per product analyzed. Default off.",
            "default": false
          },
          "painPointAnalysis": {
            "title": "Run AI pain-point analysis (one report per product)",
            "type": "boolean",
            "description": "Adds a single `painPointAnalysis` row per product alongside the reviews: the top complaint themes (each with a severity score and how often it recurs), the missing features users keep asking for, quick wins, overall sentiment, and a short summary, straight from real reviews. Analyzes up to 200 reviews per product. Requires a paid Apify plan; billed per product analyzed. Default off.",
            "default": false
          },
          "reviewGapReport": {
            "title": "Run AI review-gap report (one report per run)",
            "type": "boolean",
            "description": "Adds a single `reviewGapReport` row comparing the subject product against the other products scraped in this run (up to 4 competitors, biggest first). Needs at least 2 products with 3+ reviews each. Billed once via the `review-gap-report` event; never charged when the report can't be built. Default off.",
            "default": false
          },
          "gapReportSubject": {
            "title": "Gap-report subject product",
            "type": "string",
            "description": "Which of the scraped products is YOURS (the report subject). Use part of the product name or slug, e.g. `monday` or `Asana`. If empty, the first product scraped is the subject."
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Inert. Capterra needs one warm sticky session, so the actor processes URLs one after another. Kept only so existing run configs keep validating. Default 1.",
            "default": 1
          },
          "minConcurrency": {
            "title": "Min concurrency",
            "minimum": 1,
            "type": "integer",
            "description": "Inert, see Max concurrency. Default 1.",
            "default": 1
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum retries per URL inside the warm session before giving up on it. Example: 8. Default 8.",
            "default": 8
          },
          "proxy": {
            "title": "Proxy configuration (optional override)",
            "type": "object",
            "description": "Leave empty: every run already goes through the actor's built-in residential proxy at no extra cost to you. Set it only to use Apify Proxy or your own proxy URLs instead."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}