{
  "openapi": "3.0.1",
  "info": {
    "title": "RepVue Scraper: Company Reviews, Ratings & Sales Compensation",
    "description": "Scrape RepVue company profiles, RepVue Score, sales-rep reviews, and compensation by role (OTE, base, percentiles) plus jobs and community Q&A. One rich record per company. Search and filter, or paste company links. Fast, reliable, runs on any plan.",
    "version": "1.0",
    "x-build-id": "9YdSoVtVSGhslD4wF"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~repvue-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-repvue-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~repvue-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-repvue-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~repvue-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-repvue-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": "Mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "How to choose what to scrape. 'search' discovers companies from the RepVue index and applies the filters below; 'url' scrapes the specific company pages or slugs you paste.",
            "default": "search"
          },
          "search": {
            "title": "Company name contains",
            "type": "string",
            "description": "Optional keyword to narrow discovery to companies whose name/slug contains this text (case-insensitive). Leave empty to consider all companies. Only applies in 'search' mode."
          },
          "industries": {
            "title": "Industries",
            "type": "array",
            "description": "Keep only companies whose industry matches one of these terms (case-insensitive substring). RepVue industries are free text, for example: Software, Finance, Information Technology and Services, Retail / Automotive, Manufacturing, Media and Publishing, Transportation, Healthcare and Hospitals, Education, Medical Devices, Professional / Business Services. Leave empty for all. Only applies in 'search' mode.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minRepvueScore": {
            "title": "Minimum RepVue Score",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keep only companies with a RepVue Score at or above this value (0-100). Leave empty for no minimum. Only applies in 'search' mode."
          },
          "companySize": {
            "title": "Company size",
            "enum": [
              "",
              "to_250",
              "to_1000",
              "to_10000",
              "over_10001"
            ],
            "type": "string",
            "description": "Keep only companies in this headcount band. Leave empty for all sizes. Only applies in 'search' mode.",
            "default": ""
          },
          "sortBy": {
            "title": "Sort results by",
            "enum": [
              "name_asc",
              "name_desc",
              "repvue_score_desc",
              "ratings_count_desc"
            ],
            "type": "string",
            "description": "Order of the returned companies. 'Name (A-Z)' and 'Name (Z-A)' only reorder search-mode discovery and have no effect in 'url' mode, where output follows the order of the URLs/slugs you pasted. 'RepVue Score (high to low)' and 'Ratings count (high to low)' order the companies returned in this run in both modes, including 'url' mode.",
            "default": "name_asc"
          },
          "startUrls": {
            "title": "Company URLs or slugs",
            "type": "array",
            "description": "RepVue company links (https://www.repvue.com/companies/Klaviyo) or bare slugs (Klaviyo). A /reviews, /jobs, /salaries or /questions suffix, a ?tab= query and any ?page=N are accepted and normalized to the company, so the example links all resolve to one company row (all review pages up to your limit are fetched). Multiple supported. Only applies in 'url' mode.",
            "default": [
              "https://www.repvue.com/companies/Klaviyo"
            ],
            "items": {
              "type": "string"
            }
          },
          "includeReviews": {
            "title": "Include reviews",
            "type": "boolean",
            "description": "Attach sales-rep reviews to each company (pros/cons body, rating, verified flag, reviewer role & location tags, follow-up Q&A, company response, upvotes).",
            "default": true
          },
          "includeSalaries": {
            "title": "Include compensation",
            "type": "boolean",
            "description": "Attach compensation by sales role (median & average OTE, base, 75th-percentile, highest potential earnings) plus a pay summary.",
            "default": true
          },
          "includeJobs": {
            "title": "Include open jobs",
            "type": "boolean",
            "description": "Attach the company's currently listed sales jobs. Adds one extra request per company.",
            "default": false
          },
          "includeQuestions": {
            "title": "Include community Q&A",
            "type": "boolean",
            "description": "Attach community questions and answers about the company. Adds one extra request per company.",
            "default": false
          },
          "maxReviews": {
            "title": "Max reviews per company",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on reviews attached to each company. Set 0 for the maximum of 1000 reviews per company. This controls per-company depth, not how many companies the run returns.",
            "default": 100
          },
          "targetDate": {
            "title": "Reviews on or after (YYYY-MM-DD)",
            "type": "string",
            "description": "Optionally keep only reviews created on or after this date. Leave empty for all reviews."
          },
          "minReviewRating": {
            "title": "Minimum review rating",
            "minimum": 0,
            "maximum": 5,
            "type": "integer",
            "description": "Optionally keep only reviews whose average metric rating (the mean of the review's metric scores, 1 to 5, can be fractional) is at least this value. 0 keeps all reviews; unrated reviews are dropped when above 0. Applied before the max reviews cap.",
            "default": 0
          },
          "reviewSort": {
            "title": "Review order",
            "enum": [
              "default",
              "newest",
              "rating_desc",
              "rating_asc",
              "upvotes"
            ],
            "type": "string",
            "description": "Order of the reviews attached to each company. Default keeps RepVue's own order and stops at the cap; any other order reads all available pages (up to 1000 reviews) before applying the cap.",
            "default": "default"
          },
          "maxItems": {
            "title": "Max companies",
            "minimum": 0,
            "type": "integer",
            "description": "Stop after this many companies across the whole run. The default (20) keeps a trial run small and cheap; set 0 for no limit. This is the only run-wide cap; 'Max reviews per company' only controls per-company depth.",
            "default": 20
          },
          "proxy": {
            "title": "Proxy",
            "type": "object",
            "description": "Connection settings. The default runs on every Apify plan, including the free tier, and is the lowest-cost option. If Search mode cannot list companies, use URL mode with specific company links.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxResidentialMB": {
            "title": "Residential traffic budget (MB)",
            "minimum": 0,
            "type": "integer",
            "description": "Only applies when the proxy group is RESIDENTIAL. After this many MB of residential traffic, the run auto-downgrades to the Datacenter proxy group. 0 means no budget cap.",
            "default": 0
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Run id (or dataset id) of an earlier run of this actor. Companies that run already collected are skipped, so an interrupted run can continue without paying twice. Leave empty for a normal run."
          },
          "incrementalMode": {
            "title": "Incremental mode (only new and changed companies)",
            "type": "boolean",
            "description": "Remember what each company looked like on the previous run for this same company set. Every row gets changeType (NEW, UPDATED, UNCHANGED, REAPPEARED, EXPIRED), changedFields, firstSeenAt and lastSeenAt. Unchanged companies are not re-emitted or charged unless 'Emit unchanged' is on. Off by default; with it off the output is unchanged.",
            "default": false
          },
          "stateKey": {
            "title": "State key (incremental mode only)",
            "type": "string",
            "description": "Optional name for the saved baseline, so several schedules do not share one. Leave empty to derive it from your company set, filters and collect toggles (never from the caps)."
          },
          "emitUnchanged": {
            "title": "Emit unchanged companies (incremental mode only)",
            "type": "boolean",
            "description": "Also output (and charge for) companies that did not change since the last run, marked UNCHANGED.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired companies (incremental mode only)",
            "type": "boolean",
            "description": "After a complete scan, output a row marked EXPIRED for each previously tracked company that is no longer found. Each EXPIRED row is one charged dataset item and counts toward Max companies; turn this off to avoid them. Never emitted after a capped, resumed or partly failed scan.",
            "default": true
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Field names (top-level, or dotted such as compensation.summary) that must not count as a change, for example ratings_count. They stay in the output row.",
            "default": [],
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}