{
  "openapi": "3.0.1",
  "info": {
    "title": "G2 & Capterra Reviews Scraper: Ratings & Products",
    "description": "Export public G2 and Capterra software reviews with ratings, pros, cons and dates, plus product data. Filter by stars, date, company size, role or region, reach older G2 reviews and get only new ones on repeat runs. No login.",
    "version": "0.1",
    "x-build-id": "tZ4f3COXpSgW1Kgqq"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cliqtomedia~software-reviews-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cliqtomedia-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/cliqtomedia~software-reviews-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cliqtomedia-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/cliqtomedia~software-reviews-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cliqtomedia-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": {
          "mode": {
            "title": "What to collect",
            "enum": [
              "reviews",
              "products",
              "search",
              "category",
              "compare"
            ],
            "type": "string",
            "description": "Choose reviews, product details, product search, category products, or a comparison of the products you add.",
            "default": "reviews"
          },
          "platform": {
            "title": "Review platform",
            "enum": [
              "g2",
              "capterra",
              "auto"
            ],
            "type": "string",
            "description": "Choose G2 or Capterra. Choose Auto to mix product URLs from both sites in one run.",
            "default": "g2"
          },
          "productUrls": {
            "title": "Product URLs or G2 slugs",
            "maxItems": 20,
            "type": "array",
            "description": "Add up to 20 product URLs. G2 slugs such as slack and numeric Capterra product IDs also work. Use Auto for mixed URLs. Capterra reads public regional pages; their review list can differ from the US site.",
            "items": {
              "type": "string"
            }
          },
          "searchQuery": {
            "title": "Product search",
            "maxLength": 200,
            "type": "string",
            "description": "In Product search mode, add a G2 product name or keyword, for example Slack or CRM. Discovery uses G2; choose G2 or Auto."
          },
          "categoryUrls": {
            "title": "Category URLs",
            "maxItems": 20,
            "type": "array",
            "description": "In Category products mode, add public G2 category URLs, for example https://www.g2.com/categories/crm. Capterra category discovery is not included.",
            "items": {
              "type": "string"
            }
          },
          "maxReviews": {
            "title": "Maximum reviews per product",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Return up to this many matching reviews per product. G2 shows 100 reviews per filter combination, so a larger request reads many filtered pages: older reviews become available, order is no longer strict, and coverage is reported in REPORTS. Deep G2 speed varies a lot, so above about 100 raise the run Timeout from 300 seconds. Capterra regional pages can differ from the US list. Each successfully checked source page is billed, including pages with no new reviews.",
            "default": 10
          },
          "maxProducts": {
            "title": "Maximum products",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "In search and category modes, return details for up to this many products.",
            "default": 10
          },
          "sortReviews": {
            "title": "Review order",
            "enum": [
              "newest",
              "helpful",
              "rating_high",
              "rating_low"
            ],
            "type": "string",
            "description": "Choose newest, helpful, or rating order. Only new reviews uses newest first. Capterra rating order reads separate star groups. A date cutoff can request newest order.",
            "default": "newest"
          },
          "starRatings": {
            "title": "Star ratings",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep reviews in these star groups. G2 half stars use the next whole-star group: 3.5 and 4.0 are in group 4. Leave empty for all ratings.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5"
              ]
            },
            "default": []
          },
          "publishedAfter": {
            "title": "Reviews on or after",
            "type": "string",
            "description": "Keep reviews dated on or after this UTC date. Use YYYY-MM-DD."
          },
          "publishedBefore": {
            "title": "Reviews on or before",
            "type": "string",
            "description": "Keep reviews dated on or before this UTC date. Use YYYY-MM-DD. On G2 an old date makes the run read filtered pages, so it can cost more pages than maxReviews suggests."
          },
          "reviewSearch": {
            "title": "Words in review",
            "type": "string",
            "description": "Keep reviews that contain every word in the title or full text. G2 also sends the words to its source filter."
          },
          "companySize": {
            "title": "Company size contains",
            "type": "string",
            "description": "Keep reviews whose company size contains this text, for example Small-Business or Mid-Market. On G2 these segment names are applied at the source; other text checks downloaded reviews."
          },
          "reviewerRole": {
            "title": "Reviewer role contains",
            "type": "string",
            "description": "Keep reviews whose public job title or role contains this text. Reviews with no role do not match."
          },
          "industry": {
            "title": "Industry contains",
            "type": "string",
            "description": "Keep reviews whose public industry contains this text. Reviews with no industry do not match."
          },
          "region": {
            "title": "Region contains",
            "type": "string",
            "description": "Keep reviews from this region. On G2 an exact region name (North America, Asia, Europe, Latin America, Middle East, Africa, ANZ) is applied at the source and fills the field. Other values check downloaded reviews, and empty values do not match."
          },
          "includeInsights": {
            "title": "Add review statistics",
            "type": "boolean",
            "description": "Add one free statistics row per product after reviews are saved. It uses only this run’s delivered reviews and includes rating counts and frequent complaint words.",
            "default": true
          },
          "onlyNew": {
            "title": "Only new reviews",
            "type": "boolean",
            "description": "Remember the review IDs each run reads in a named store. Later runs return only reviews not seen before and stop at the first page with a known review. The first run builds the history. Use one store name per search.",
            "default": false
          },
          "stateName": {
            "title": "History store name",
            "pattern": "^[a-z0-9][a-z0-9-]{0,60}$",
            "type": "string",
            "description": "Optional name for your review history. Use the same name for repeat runs. If the store is not accessible, the Actor uses its own separate store."
          },
          "maxPages": {
            "title": "Maximum pages per product",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Stop after this many source pages for each product. A partial result states PAGE_LIMIT. Without a value it is maxReviews / 4, at least 20. A rare filter on review text or a very old date window may need more pages, and each page read is charged."
          },
          "transport": {
            "title": "Connection route",
            "enum": [
              "auto",
              "direct",
              "unblocker"
            ],
            "type": "string",
            "description": "Auto is the best choice: Apify Unblocker for G2, and direct HTTP for Capterra with Unblocker if a page is blocked. Other choices force one route and can fail.",
            "default": "auto"
          },
          "deliveryConnector": {
            "title": "Send results to (optional)",
            "type": "string",
            "description": "Your Slack, Notion or other MCP connector. After the run the Actor posts a short summary there. Connect services once in Apify Console → MCP connectors."
          },
          "deliveryTarget": {
            "title": "Notion page or channel (optional)",
            "type": "string",
            "description": "Where to post the summary: a Notion page link (each run is added on top of that page) or a Slack channel ID. Leave empty to let the connector decide."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}