{
  "openapi": "3.0.1",
  "info": {
    "title": "Software Reviews Scraper — Capterra, GetApp, TrustRadius",
    "description": "Scrape B2B software reviews from Capterra, Software Advice, GetApp and TrustRadius into one schema: pros, cons, sub-ratings, reviewer job title, industry and company size, vendor replies and incentive flags. Ratings are normalized to a 5-point scale, so sites compare directly.",
    "version": "0.1",
    "x-build-id": "OuVD9FdoFRN8siJOm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lergassy~software-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lergassy-software-reviews-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/lergassy~software-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lergassy-software-reviews-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/lergassy~software-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lergassy-software-reviews-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": {
          "searchTerms": {
            "title": "🔍 Product names",
            "type": "array",
            "description": "Names of the products you want reviews for, one per line — for example <code>Slack</code>. Each name is looked up on the sites chosen below and the best match is scraped. Leave empty if you already have product URLs.",
            "items": {
              "type": "string"
            }
          },
          "searchSites": {
            "title": "Sites to search",
            "type": "array",
            "description": "Where to look the names up. Search works on Software Advice and TrustRadius. GetApp has no search page of its own, and Capterra's search refuses automated requests even through a residential proxy — reach both of those with a product URL in \"Product review URLs\" instead. Their product pages are served normally.",
            "items": {
              "type": "string",
              "enum": [
                "capterra",
                "softwareadvice",
                "trustradius"
              ],
              "enumTitles": [
                "Capterra",
                "Software Advice",
                "TrustRadius"
              ]
            },
            "default": [
              "trustradius",
              "softwareadvice"
            ]
          },
          "maxProductsPerTerm": {
            "title": "Products per name",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many matching products to scrape for each name on each site. Keep it at 1 for the exact product; raise it to compare a name against its closest alternatives.",
            "default": 1
          },
          "productUrls": {
            "title": "📊 Product review URLs",
            "type": "array",
            "description": "Product pages on Capterra, Software Advice, GetApp or TrustRadius. Paste the product URL — the Actor adds the reviews path itself. Mix sites freely: every source comes back with the same field names.",
            "items": {
              "type": "string"
            }
          },
          "maxReviews": {
            "title": "💯 Max reviews per product",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "How many reviews to collect for each product. Reviews arrive 25 per page in the order the site lists them, which is not strictly by date; add 'Published on or after' to get only recent ones. Reviews are paged a screen at a time: expect roughly 3-4 seconds per page, so 100 reviews take about 3 minutes per product.",
            "default": 100
          },
          "minRating": {
            "title": "Minimum star rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only reviews at or above this rating, on a 1-5 scale. TrustRadius scores out of 10 are converted before filtering."
          },
          "maxRating": {
            "title": "Maximum star rating",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "Keep only reviews at or below this rating, on a 1-5 scale. Set it to 3 to collect complaints only."
          },
          "publishedAfter": {
            "title": "📅 Published on or after",
            "type": "string",
            "description": "Keep only reviews published on or after this date, in <code>YYYY-MM-DD</code> format."
          },
          "publishedBefore": {
            "title": "📅 Published on or before",
            "type": "string",
            "description": "Keep only reviews published on or before this date, in <code>YYYY-MM-DD</code> format."
          },
          "sortReviews": {
            "title": "Sort reviews by",
            "enum": [
              "as_published",
              "newest",
              "oldest",
              "rating_high",
              "rating_low"
            ],
            "type": "string",
            "description": "Order the reviews come back in. The sites publish no sort of their own, so this orders what the run collected; to decide <i>which</i> reviews are collected use the rating and date filters above.",
            "default": "as_published"
          },
          "includeProductRow": {
            "title": "Include a product summary row",
            "type": "boolean",
            "description": "Add one row per product with the average rating, the total review count and the star breakdown. It has different columns from the review rows, so the table shows blanks where a column does not apply — switch it on when you want that summary next to the reviews.",
            "default": false
          },
          "maxConcurrency": {
            "title": "⚡ Max concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many products to scrape at the same time.",
            "default": 3
          },
          "requestTimeoutSecs": {
            "title": "⏱️ Request timeout (seconds)",
            "minimum": 10,
            "maximum": 300,
            "type": "integer",
            "description": "How long to wait for one page before giving up on it.",
            "default": 45
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. The Actor works without a proxy; add one only if the sites start refusing your runs.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}