{
  "openapi": "3.0.1",
  "info": {
    "title": "Capterra Scraper - Software Reviews, Ratings & Leads",
    "description": "Scrape Capterra software products by category, keyword or URL: star rating, review count, ease-of-use, service, features and value ratings, pricing plans, features, integrations and verified user reviews. Monitor mode. Export CSV, JSON, Excel. Independent tool, not affiliated with Capterra.",
    "version": "0.1",
    "x-build-id": "IH9X0EeTwA6HixFEg"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapesage~capterra-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapesage-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/scrapesage~capterra-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapesage-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/scrapesage~capterra-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapesage-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",
        "properties": {
          "categories": {
            "title": "Categories",
            "type": "array",
            "description": "Capterra categories to scrape - every product listed is returned in Capterra's own ranking, with its full ratings. Use the slug from the category URL <code>capterra.com/<b>project-management-software</b>/</code>, a full category URL, or the category's name (<code>CRM</code>, <code>Email Marketing</code>, <code>Payroll</code>). Common shorthands work too: <code>crm-software</code>, <code>hr-software</code>, <code>erp</code>, <code>pos</code>, <code>lms</code>.",
            "items": {
              "type": "string"
            }
          },
          "searchTerms": {
            "title": "Search terms",
            "type": "array",
            "description": "Keywords such as <code>video conferencing</code>, <code>payroll</code> or <code>ai chatbot</code> when you don't know the category slug. Each keyword is matched to the closest of Capterra's ~1,000 category names and that category is scraped (the run's status message says which category was used).",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Capterra URLs: product pages (<code>/p/&lt;id&gt;/&lt;slug&gt;/</code>, also their <code>/reviews/</code> and <code>/pricing/</code> pages) and category pages (<code>/&lt;slug&gt;-software/</code>). Used in addition to the categories and search terms above.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "urlsFromFile": {
            "title": "Import URLs from a file",
            "type": "string",
            "description": "Paste a list of Capterra URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Google Sheet/Drive share links are handled automatically."
          },
          "maxResults": {
            "title": "Max results (products)",
            "minimum": 0,
            "type": "integer",
            "description": "Global cap on the number of products returned, shared fairly between your categories. Capterra lists 25 products on a category's first page and 50 on each page after it. 0 = no limit (a whole category, e.g. ~1,900 project-management products). In monitor mode this is the number of top-ranked products checked on every run.",
            "default": 100
          },
          "includeProductDetails": {
            "title": "Include product details",
            "type": "boolean",
            "description": "Open each product's page to add: every pricing plan with its features, starting-price unit, free trial / free version, credit card requirement, awards and every Capterra Shortlist the product is on, review sentiment, pros & cons themes, deployment / support / training options, target company sizes and market, integrations, top alternatives, FAQ and main categories. Slower (two pages per product) and billed per product (productDetails event).",
            "default": false
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Attach Capterra's verified user reviews to each product: title, date, overall and sub-ratings, likelihood to recommend, pros, cons, comments, reasons for choosing or switching, products considered, reviewer role / industry / company size / time used, incentive disclosure and the vendor's reply. Opens the product page too (implies 'Include product details') and is billed per product, not per review.",
            "default": false
          },
          "maxReviewsPerProduct": {
            "title": "Max reviews per product",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many reviews to attach to each product when 'Include reviews' is on. Up to 100 in Capterra's 'most relevant' order, up to 25 with 'Newest first'.",
            "default": 25
          },
          "reviewsSort": {
            "title": "Review order",
            "enum": [
              "relevance",
              "newest"
            ],
            "type": "string",
            "description": "<b>Most relevant</b> = Capterra's default review order (up to 100 per product, every review field). <b>Newest first</b> = the product's 25 most recent reviews, ideal for monitoring (these come without the value-for-money sub-rating and the reviewer's verification details).",
            "default": "relevance"
          },
          "minRating": {
            "title": "Minimum star rating",
            "enum": [
              "",
              "3",
              "3.5",
              "4",
              "4.5"
            ],
            "type": "string",
            "description": "Keep only products with at least this average rating. Leave on 'All ratings' for every product.",
            "default": ""
          },
          "minReviews": {
            "title": "Minimum review count",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only products with at least this many reviews (filters out brand-new or thin products). Leave empty for all."
          },
          "monitorMode": {
            "title": "Monitor mode (only new / changed)",
            "type": "boolean",
            "description": "Remember products across runs and return only NEW products or products whose rating, review count or starting price changed (each row says what changed). Great for watching a category for new entrants and rating moves - pair it with an Apify Schedule.",
            "default": false
          },
          "monitorKey": {
            "title": "Monitor key",
            "type": "string",
            "description": "Namespace for monitor memory. Use a distinct key per saved search so their states don't collide.",
            "default": "default"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Leave this on the default: Capterra only answers residential IP addresses, so the actor uses Apify residential proxies (US) automatically and the proxy traffic is included in the price. If you pick your own proxies or proxy groups, they are tried first and Apify residential takes over whenever Capterra refuses them.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          },
          "maxConcurrency": {
            "title": "Product pages in parallel",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many product / reviews pages to read in parallel when product details or reviews are on. 4-8 is a good balance.",
            "default": 6
          },
          "enrichVendorContacts": {
            "title": "Enrich vendor contacts (retired)",
            "type": "boolean",
            "description": "Retired: Capterra no longer publishes vendor websites (its 'Visit website' buttons are paid-click redirects), so there is nothing to enrich. Accepted for compatibility; never billed.",
            "default": false
          },
          "withWebsiteOnly": {
            "title": "Only products with a vendor website (retired)",
            "type": "boolean",
            "description": "Retired: Capterra no longer publishes vendor websites, so this filter can match nothing. A run with it on ends at once with an explanation, before any product is billed.",
            "default": false
          },
          "debugMode": {
            "title": "Debug mode",
            "type": "boolean",
            "description": "Save the first raw pages to the key-value store for troubleshooting.",
            "default": false
          },
          "headful": {
            "title": "Headful browser (retired)",
            "type": "boolean",
            "description": "Retired: the actor no longer uses a browser. Accepted for compatibility.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}