{
  "openapi": "3.0.1",
  "info": {
    "title": "Comparably $1💰 Ratings, Culture, Reviews & Salaries Scraper",
    "description": "From $1/1K. Extract rich company data from comparably.com using company names or profile URLs. Get ratings, culture scores, CEO approval, employee reviews, salary insights, awards, revenue, headquarters, and more in structured JSON, CSV, or Excel format.",
    "version": "1.1",
    "x-build-id": "Hem3pFcpcYvf0KT7o"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~comparably-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-comparably-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/abotapi~comparably-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-comparably-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/abotapi~comparably-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-comparably-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": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Start mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "How to choose companies. 'Search by name' resolves each company name to its Comparably profile. 'Direct URLs' takes Comparably company URLs you already have.",
            "default": "search"
          },
          "companies": {
            "title": "Company names",
            "type": "array",
            "description": "Search mode only. Company names to resolve, one per line (e.g. 'Google', 'Microsoft', 'Goldman Sachs'). Each is matched to its Comparably profile automatically.",
            "items": {
              "type": "string"
            }
          },
          "urls": {
            "title": "Company URLs",
            "type": "array",
            "description": "URL mode only. One company per line: a profile URL (/companies/google), a reviews URL (/companies/google/reviews), a reviews URL with ?page=N (the review walk starts at page N), a salaries URL (/companies/google/salaries), or a bare slug like 'netflix'. Every shape resolves to the company's single record. Leave untouched to scrape one example per shape.",
            "default": [
              "https://www.comparably.com/companies/google",
              "https://www.comparably.com/companies/microsoft/reviews",
              "https://www.comparably.com/companies/apple/reviews?page=2",
              "https://www.comparably.com/companies/amazon/salaries",
              "netflix"
            ],
            "items": {
              "type": "string"
            }
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Attach employee reviews to each company record (text, question, author, date, permalink).",
            "default": true
          },
          "maxReviews": {
            "title": "Max reviews per company",
            "minimum": 0,
            "maximum": 15000,
            "type": "integer",
            "description": "Cap on reviews collected per company (default 100, maximum 15000). Set 0 to skip reviews. Bounded by Max review pages.",
            "default": 100
          },
          "maxReviewPages": {
            "title": "Max review pages per company",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Safety cap on review pages to walk per company (~75 reviews per page).",
            "default": 5
          },
          "includeSalaries": {
            "title": "Include salaries",
            "type": "boolean",
            "description": "Attach salary entries (job title, amount, department) to each company record.",
            "default": true
          },
          "maxCompanies": {
            "title": "Max companies",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of companies to scrape across all inputs. Default 20. Set 0 for unlimited.",
            "default": 20
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Comparably admits US residential connections. Residential (US) is strongly recommended; datacenter is refused.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue an interrupted run without returning or charging for companies already collected there. For recurring monitoring of the same company list, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for recurring monitoring of the same company list. The first run returns every company as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED companies. A company is UPDATED when anything in its record changes: ratings and scores, counts, or a review or salary entry being added, removed or edited (changedFields names the top-level fields). Relative-date text (the review \"posted ago\" text and the salary posted date) is excluded from the comparison but still returned in the output, and so are any fields you list in \"Ignore fields when detecting changes\". Review order never matters. Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those companies returned (and billed). EXPIRED is only produced after a complete scan: not when Max companies capped the run, a pasted URL starts at a later results page, or Resume was used, and never for a company whose fetch failed. State is kept separately per company list and section toggles; use State key when you want to name or deliberately share a monitoring campaign (a shared key only expires companies tracked under the same list and settings). To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the company list and section settings — different lists then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged companies (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return companies that have not changed since the last run, marked UNCHANGED. This returns — and bills — extra rows you already have, so leave it off unless you specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired companies (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return companies that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked company list — not when Max companies capped it or when Resume was used. This returns — and bills — extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Incremental mode only. Fields that should never make a company UPDATED. They are still returned in the output. Use a top-level name such as cultureScore, or a nested path such as reviews[].author or salaries[].salary. Review posted-ago text and salary posted date are always ignored.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}