{
  "openapi": "3.0.1",
  "info": {
    "title": "Capterra Reviews Scraper - Pros, Cons & Ratings",
    "description": "Scrape Capterra software reviews: overall and five dimension ratings, a 0-10 recommendation score, separate pros and cons, incentivised-review flag, plus the reviewer's company size, industry, job title and tenure. Every row is checked against the product you asked for.",
    "version": "0.1",
    "x-build-id": "8HrtKSFQ9Tu1HF5Ly"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/s-r~capterra-reviews/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-s-r-capterra-reviews",
        "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/s-r~capterra-reviews/runs": {
      "post": {
        "operationId": "runs-sync-s-r-capterra-reviews",
        "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/s-r~capterra-reviews/run-sync": {
      "post": {
        "operationId": "run-sync-s-r-capterra-reviews",
        "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": [
          "products"
        ],
        "properties": {
          "products": {
            "title": "Capterra products",
            "type": "array",
            "description": "Paste the address of each Capterra product page, one per line. The reviews page address works too, and so does an id and slug pair like 135003/Slack. Capterra resolves a product on the number alone and ignores the name after it, so every row states the product name the page actually returned and the run summary flags any product whose name did not match what you asked for.",
            "items": {
              "type": "string"
            }
          },
          "maxReviewsPerProduct": {
            "title": "Reviews per product",
            "minimum": 1,
            "maximum": 2500,
            "type": "integer",
            "description": "Stop after this many reviews for each product. Capterra publishes at most 100 pages of 25 reviews, so 2500 is the ceiling the site itself imposes and asking for more cannot produce more. That ceiling is per product, not shared across the run, so ten products can return 25000 reviews. A full 2500 takes six to seven minutes for one product.",
            "default": 100
          },
          "maxProducts": {
            "title": "Maximum products",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Stop after this many products, counted once duplicates are removed. Each product is up to 100 page requests, so this is the ceiling on how long the run can take.",
            "default": 10
          },
          "sortBy": {
            "title": "Sort reviews by",
            "enum": [
              "asServed",
              "mostRecent",
              "oldest",
              "highestRated",
              "lowestRated",
              "mostRecommended"
            ],
            "type": "string",
            "description": "Order of the rows in the dataset. Capterra ignores its own sort parameter when the page is requested directly, so the ordering is applied to the reviews this run collected rather than asked of the site. As served keeps Capterra's own default order, which is its Most Helpful ranking.",
            "default": "asServed"
          },
          "minRating": {
            "title": "Minimum overall rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only reviews rated at least this many stars overall. Applied to the rating carried on each review, so it is checkable against the row you receive."
          },
          "maxRating": {
            "title": "Maximum overall rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only reviews rated at most this many stars overall. Set it to 2 or 3 with no minimum to read the complaints."
          },
          "companySizes": {
            "title": "Reviewer company size",
            "type": "array",
            "description": "Keep only reviewers from companies of these sizes. Reviewers who did not state a company size are left out when this is set, and the run summary reports how many rows the filters removed. Leave empty for every size.",
            "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"
              ]
            }
          },
          "timeUsedProduct": {
            "title": "How long the reviewer used it",
            "type": "array",
            "description": "Keep only reviewers with this much time on the product. Useful for separating first impressions from long-term experience. Reviewers who did not state it are left out when this is set.",
            "items": {
              "type": "string",
              "enum": [
                "free-trial",
                "less-than-6-months",
                "6-12-months",
                "1-2-years",
                "2-years-plus"
              ],
              "enumTitles": [
                "Free trial only",
                "Less than 6 months",
                "6-12 months",
                "1-2 years",
                "2+ years"
              ]
            }
          },
          "sourceSites": {
            "title": "Review source",
            "type": "array",
            "description": "Capterra publishes reviews collected on its sibling directories alongside its own. Restrict to one source here, or leave empty to keep all of them. Every row carries the source it came from either way.",
            "items": {
              "type": "string",
              "enum": [
                "capterra",
                "getapp",
                "softwareadvice"
              ],
              "enumTitles": [
                "Capterra",
                "GetApp",
                "Software Advice"
              ]
            }
          },
          "excludeIncentivized": {
            "title": "Drop incentivized reviews",
            "type": "boolean",
            "description": "Leave out reviews where the reviewer was offered something in return, such as a gift card. Capterra discloses this per review and every row carries the disclosure, so you can also keep them and weight them yourself.",
            "default": false
          },
          "requireProsAndCons": {
            "title": "Only reviews with both pros and cons",
            "type": "boolean",
            "description": "Keep only reviews that filled in both the pros field and the cons field. The quickest way to drop one-line reviews when you are feeding the text to something.",
            "default": false
          },
          "writtenAfter": {
            "title": "Written on or after",
            "type": "string",
            "description": "Keep only reviews written on or after this date, as YYYY-MM-DD. Reviews whose date could not be read are left out when this is set."
          },
          "writtenBefore": {
            "title": "Written on or before",
            "type": "string",
            "description": "Keep only reviews written on or before this date, as YYYY-MM-DD."
          },
          "searchText": {
            "title": "Text contains",
            "type": "string",
            "description": "Keep only reviews whose title, pros, cons, overall comments or advice mention this text. Plain case-insensitive matching, no wildcards. Use it to find every review that mentions pricing, onboarding or a competitor by name."
          },
          "maxPagesPerProduct": {
            "title": "Maximum pages per product",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "A ceiling on requests per product, for when a narrow filter would otherwise walk all 100 pages to find a handful of matches. Capterra serves at most 100 pages per product and re-serves page one beyond that, which this Actor detects and refuses to return.",
            "default": 100
          },
          "requestDelaySeconds": {
            "title": "Delay between page requests",
            "minimum": 1,
            "maximum": 15,
            "type": "integer",
            "description": "Seconds to wait between requests, plus a small random amount. A full product is 100 sequential requests, so the default is set to be a good guest rather than to be fast. Raise it if a long run starts reporting pages it could not fetch.",
            "default": 2
          },
          "retries": {
            "title": "Attempts per page",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "How often to retry a page that came back without review data. Capterra's checks are intermittent rather than permanent, so a second or third attempt usually succeeds.",
            "default": 3
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}