# RepVue Scraper: Company Reviews, Ratings & Sales Compensation (`abotapi/repvue-scraper`) Actor

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.

- **URL**: https://apify.com/abotapi/repvue-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Categories:** Jobs, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 14 total users, 6 monthly users, 98.5% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 company results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## RepVue Scraper: Company Reviews, Ratings and Sales Compensation

RepVue turns sales-rep company reviews into structured data. Get one rich record per company: the full profile and RepVue Score, sales-rep reviews, compensation by role (OTE, base pay, percentiles, and highest potential earnings), open sales jobs, and community questions. Search and filter the whole RepVue company index, or paste specific company links, then export to JSON, CSV or Excel, or read the results through the API.

### Why This Scraper?

- **One rich record per company.** Profile, RepVue Score, ratings, reviews, and pay are merged into a single row, so you get the whole picture instead of stitching reviews back to companies yourself.
- **Compensation by sales role.** Median and average OTE, base pay, 75th-percentile pay, and highest potential earnings, plus a company-wide pay summary.
- **Full review detail.** Review body, numeric rating, verified flag, reviewer role and location tags, and upvotes, with a company response and a follow-up question and answer when RepVue recorded one.
- **Two ways to work.** Search and filter the whole RepVue company index, or paste specific company links or slugs.
- **Real filters.** Industry, minimum RepVue Score, and company size, with four sort options.
- **Optional add-ons.** Switch on open sales jobs and community Q\&A per company only when you need them, so you don't pay for requests you don't use.
- **Review depth control.** Cap or uncap reviews per company independently of the run-wide company cap, and keep only reviews from a chosen date onward.

### Use Cases

- **Recruiters and talent teams:** benchmark sales compensation and screen employer reputation before extending offers.
- **RevOps and sales leadership:** compare RepVue Scores, review sentiment, and pay bands across competitors.
- **Compensation analysts:** build OTE and base-pay benchmarks by role, industry, and company size.
- **Job seekers and sales reps:** research a company's reviews, pay ranges, and open sales roles before applying.
- **Market researchers:** track industry-wide rating and compensation trends across companies over time.

### Data You Get

> Sample shape: values are illustrative placeholders, not from a live company.

| Field | Example |
| --- | --- |
| `recordType` | `"company"` |
| `id` | `1` |
| `slug` | `"SampleCompany"` |
| `name` | `"Sample Company"` |
| `url` | `"https://www.repvue.com/companies/SampleCompany"` |
| `repvueScore` | `81.97` |
| `averageRating` | `3.5` |
| `ratings_count` | `715` |
| `verified_ratings_percent` | `91.19` |
| `industry` | `"Software"` |
| `size` / `sizeLabel` | `"to_10000"` / `"1001-10000"` |
| `funding_source` | `"Public"` |
| `last_headcount` | `2924` |
| `description` | `"Short company description text appears here."` |
| `website` / `careers_url` | `"https://www.example.com/"` / `"https://careers.example.com/"` |
| `compensation.summary` | `{ "highest_base": 165000, "lowest_base": 50000, "total_ratings_count": 212 }` |
| `compensation.roles[].role` | `"Account Executive"` |
| `compensation.roles[].median_ote` / `median_base_compensation` | `150000` / `75000` |
| `compensationRolesCount` | `1` |
| `reviewsCount` | `1` |
| `reviews[].body` / `rating` / `reviewer_role_tag` | `"Strong enablement..."` / `{ "score": 4, "type": "overall" }` / `"Account Executive"` |
| `reviews[].rating_verified` / `upvotes` | `true` / `0` |
| `jobsCount` | `0` (when Include jobs is on) |
| `questionsCount` | `0` (when Include questions is on) |
| `scrapedAt` | `"2026-01-01T00:00:00.000Z"` |

Every record is the same kind: a company profile with reviews, compensation, jobs, and community questions nested inside it, not separate rows you need to join yourself. Fields from the RepVue profile are passed through as-is alongside the computed convenience fields above, so an unusual company page can carry a few extra columns beyond this table.

### How to Use

1. Pick a **mode**: `search` discovers and filters companies from RepVue's index, `url` scrapes the specific company links or slugs you paste.
2. In search mode, set your filters (industry, minimum RepVue Score, company size) and a sort order. In URL mode, paste company links or slugs.
3. Switch on the detail you need: reviews, compensation, open jobs, community Q\&A, and set how many reviews per company.
4. Set **Max companies** to control run size and cost, then click **Start**.

**Scrape three companies by link, with reviews and compensation:**

```json
{
  "mode": "url",
  "startUrls": [
    "https://www.repvue.com/companies/Klaviyo",
    "https://www.repvue.com/companies/Wiz",
    "https://www.repvue.com/companies/GrafanaLabs"
  ],
  "includeReviews": true,
  "includeSalaries": true,
  "maxReviews": 50
}
```

**Find top-rated Software companies:**

```json
{
  "mode": "search",
  "industries": ["Software"],
  "minRepvueScore": 80,
  "sortBy": "repvue_score_desc",
  "maxItems": 25,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US" }
}
```

**Recent reviews only, for one company:**

```json
{
  "mode": "url",
  "startUrls": ["https://www.repvue.com/companies/Klaviyo"],
  "includeReviews": true,
  "maxReviews": 100,
  "targetDate": "2025-01-01"
}
```

**Profile and pay only, no reviews, largest companies:**

```json
{
  "mode": "search",
  "companySize": "over_10001",
  "includeReviews": false,
  "includeSalaries": true,
  "maxItems": 50
}
```

**Accepted link shapes in URL mode:** a bare slug (`Klaviyo`, case-sensitive), a numeric company id, `https://www.repvue.com/companies/<slug>`, and the same link with a `/reviews`, `/salaries`, `/jobs` or `/questions` suffix or a `?page=N` or `?tab=reviews` query; all normalize to the one company.

#### Run it from your code

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/repvue-scraper").call(run_input={"mode": "url", "startUrls": ["https://www.repvue.com/companies/Klaviyo"]})
for company in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(company["name"], company["repvueScore"])
```

JavaScript:

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/repvue-scraper').call({ mode: 'url', startUrls: ['https://www.repvue.com/companies/Klaviyo'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the **Integrations** tab.

### Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step **after** the scrape: the Apify dataset is never changed.

**What gets written to the connector:** a condensed, human-readable **summary** of each company record, not the full JSON. Each item becomes one entry with a **title** and its key fields flattened to plain text. The **complete record always stays in the Apify dataset**.

1. Authorize a connector once under **Apify, Settings, Integrations** (Notion, Linear, Airtable, or Apify).
2. Select it in the **"Pipe results into your apps"** input field. If the picker is empty, you haven't authorized a connector yet.
3. For **Notion**, also set `notionParentPageUrl` to the page where items should be created.
4. Optionally lower `maxNotifyListings` to cap how many companies get exported per run; it never changes what lands in the dataset.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

### Input Parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `search` | `search` discovers and filters companies from the index; `url` scrapes the links or slugs you paste. |
| `search` | string | (none) | Search mode: keep companies whose slug (the name in the RepVue URL) contains this text. |
| `industries` | array | `[]` | Search mode: keep only companies whose industry matches one of these terms. |
| `minRepvueScore` | integer | (none) | Search mode: minimum RepVue Score, 0 to 100. |
| `companySize` | string | `""` (any size) | Search mode: headcount band filter (`to_250`, `to_1000`, `to_10000`, `over_10001`). |
| `sortBy` | string | `name_asc` | Order of returned companies. Name sorts only reorder search-mode discovery; RepVue Score and ratings-count sorts also reorder the result set in URL mode. |
| `startUrls` | array | the example company page `https://www.repvue.com/companies/Klaviyo` | URL mode: company links, numeric ids or bare slugs. A /reviews, /jobs, /salaries or /questions suffix and any `?page=N` or `?tab=` query are normalized to the company, so they return the same company row as the plain link. If you leave the field out in URL mode, the example company is scraped instead of finishing with an empty dataset. Clear the list explicitly to scrape nothing. |
| `includeReviews` | boolean | `true` | Attach sales-rep reviews to each company. |
| `includeSalaries` | boolean | `true` | Attach compensation by sales role plus a pay summary. |
| `includeJobs` | boolean | `false` | Attach the company's currently listed sales jobs (one extra request per company). |
| `includeQuestions` | boolean | `false` | Attach community questions and answers (one extra request per company). |
| `maxReviews` | integer | `100` | Cap on reviews attached to each company. `0` for the maximum of 1000. Per-company depth, not a run cap. |
| `targetDate` | string | (none) | Keep only reviews created on or after this date (`YYYY-MM-DD`). |
| `minReviewRating` | integer | `0` | 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 with no rating are dropped when this is above 0. |
| `reviewSort` | string | `default` | Order of attached reviews: `default`, `newest`, `rating_desc`, `rating_asc`, `upvotes`. Non-default orders read all available review pages (up to 1000) before the cap. |
| `maxItems` | integer | `20` | Stop after this many companies across the whole run. This is the only run-wide cap; `0` for no limit. |
| `proxy` | object | `{ "useApifyProxy": true }` | Connection settings. |
| `maxResidentialMB` | integer | `0` | Only applies on the Residential proxy group: after this many MB, the run auto-downgrades to Datacenter. `0` means no cap. |
| `resumeFromRunId` | string | (none) | Run id or dataset id of an earlier run; companies it already collected are skipped. |
| `incrementalMode` | boolean | `false` | Remember each company between runs and add `changeType`, `changedFields`, `firstSeenAt`, `lastSeenAt`. Unchanged companies are not re-emitted and carry no enrichment charge. |
| `stateKey` | string | (none) | Name of the saved baseline; empty derives it from your company set, filters and collect toggles (never the caps). |
| `emitUnchanged` | boolean | `false` | Also output companies marked UNCHANGED. |
| `emitExpired` | boolean | `true` | After a complete scan, output EXPIRED rows for previously tracked companies no longer found. Each EXPIRED row is one charged dataset item and counts toward Max companies; turn this off to avoid them. |
| `ignoreFieldsForChanges` | array | `[]` | Field names that must not count as a change (they stay in the output). |
| `mcpConnectors` | array | (none) | Optional: send a summary of each company to apps you authorized under Integrations. |
| `notionParentPageUrl` | string | (none) | Notion connector only: page under which company pages are created. |
| `maxNotifyListings` | integer | `50` | Cap on items written to each connector per run. |

### Output Example

> Sample shape: values are illustrative placeholders, not from a live company.

```json
{
  "recordType": "company",
  "id": 1,
  "slug": "SampleCompany",
  "name": "Sample Company",
  "industry": "Software",
  "size": "to_10000",
  "sizeLabel": "1001-10000",
  "funding_source": "Public",
  "last_headcount": 2924,
  "description": "Short company description text appears here.",
  "website": "https://www.example.com/",
  "careers_url": "https://careers.example.com/",
  "url": "https://www.repvue.com/companies/SampleCompany",
  "repvueScore": 81.97,
  "averageRating": 3.5,
  "ratings_count": 715,
  "verified_ratings_percent": 91.19,
  "compensation": {
    "summary": { "highest_base": 165000, "lowest_base": 50000, "total_ratings_count": 212 },
    "availableBusinessUnits": ["Sales"],
    "roles": [
      { "role": "Account Executive", "median_ote": 150000, "median_base_compensation": 75000, "average_highest_potential_earnings": 309529, "ratings_count": 85 }
    ]
  },
  "compensationRolesCount": 1,
  "reviews": [
    { "id": 1, "body": "Strong enablement and supportive leadership.", "rating": { "score": 4, "type": "overall", "user_status": "current" }, "reviewer_role_tag": "Account Executive", "rating_verified": true, "upvotes": 0 }
  ],
  "reviewsCount": 1,
  "jobsCount": 0,
  "jobs": [],
  "questionsCount": 0,
  "questions": [],
  "scrapedAt": "2026-01-01T00:00:00.000Z"
}
```

### Plan Requirement

**URL mode** reads company data from RepVue's data service, which answers on the default (datacenter) connection setting, so no residential proxy is needed. The actor keeps a backup connection in reserve and switches to it automatically when a connection is refused; if your Apify plan has no proxy access at all, the run fails with a message saying a paid plan or your own proxy URLs are required.

**Search mode** lists companies from the site's public index pages. The site sometimes answers those pages with a security checkpoint; the actor retries each page several times on new connections, and discovery fails only when the checkpoint keeps appearing. In that case the run ends as failed with the message "Company discovery is unavailable: the site's public pages kept answering with a security checkpoint after repeated retries on new connections, so Search mode cannot list companies right now. Try again later, or use URL mode with specific company links or slugs instead." Switching the proxy group does not help; try again later or use URL mode.

### FAQ

#### How much does it cost?

You pay per company record pushed to the dataset, plus one `detail-enrichment` event per company that carries enriched detail (reviews, compensation, jobs or questions). In incremental mode, each EXPIRED row is also one charged dataset item that counts toward **Max companies**; turn off `emitExpired` to avoid them. Skipped, unmatched or failed companies are never charged. The **Pricing** tab shows the current rates. Use **Max companies** to cap the cost of any run.

#### Which dataset views are available?

The output tab offers Overview, Reviews, Jobs and Questions views; the last three unwind the nested lists into one row per review, job or question.

#### Is it legal to scrape RepVue?

This actor collects only publicly available company review and compensation data. You are responsible for how you use it: follow RepVue's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution.

#### Can I get only new or changed companies on a schedule?

Yes. Turn on **Incremental mode** and schedule the actor from the **Schedules** tab. Each company is marked NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED, with the changed field names. Unchanged companies are not output, and an unchanged company is not charged the `detail-enrichment` event. A company whose fetch failed keeps its previous baseline, and EXPIRED rows are only produced after a complete, uncapped, non-resumed scan. The Changes view of the dataset shows these columns. Use `ignoreFieldsForChanges` for fields such as `ratings_count` that you do not want to count as a change.

#### What's the difference between "Max companies" and "Max reviews per company"?

**Max companies** (`maxItems`) is the only run-wide cap: it stops the whole run after that many companies. **Max reviews per company** (`maxReviews`) only limits how many reviews are attached to each company already being returned; raising it does not add more companies.

#### Why did my run return no companies instead of failing?

If search-mode discovery can't read the site index, or no page could be loaded, the run ends as failed with a status message explaining why. If URL mode has no `startUrls`, or none of your companies matched, the run finishes with an empty dataset and a status message explaining why. No placeholder or error row is written to the dataset, so you are not charged for any result rows. Check the run's status message, loosen your filters, or use URL mode with specific company links.

#### Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the connector field to push company summaries into Notion, Linear, or Airtable.

### 🔗 Want more jobs data?

Pair this actor with these related scrapers from the same team:

<table>
<tr><td>📇 <a href="https://apify.com/abotapi/jobstreet-companies-reviews-scraper"><b>JobStreet</b></a><br>Pull JobStreet company profiles and employee reviews across Malaysia, Singapore...</td><td>📇 <a href="https://apify.com/abotapi/comparably-scraper"><b>Comparably</b></a><br>Extract rich company data from comparably.com using company names or profile URLs. Get...</td></tr>
<tr><td>💼 <a href="https://apify.com/abotapi/cwjobs-scraper"><b>Cwjobs UK</b></a><br>Scrape tech and IT jobs from CWJobs.co.uk into clean, structured data. Search by keyword...</td><td>💼 <a href="https://apify.com/abotapi/wellfound-jobs-scraper"><b>Wellfound Jobs Scraper</b></a><br>Scrape startup jobs from Wellfound.com by keyword, location, role, or remote status...</td></tr>
<tr><td>💼 <a href="https://apify.com/abotapi/remoteok-com-scraper"><b>RemoteOK Jobs Scraper</b></a><br>Scrape RemoteOK jobs by keyword or job URL. Extract title, company, location, remote...</td><td>💼 <a href="https://apify.com/abotapi/myworkdayjobs-scraper"><b>Workday Jobs Scraper</b></a><br>Scrape job postings from any Workday-hosted careers site on Myworkdayjobs.com. Paste...</td></tr>
</table>

👉 [Browse all abotapi scrapers](https://apify.com/abotapi)

### 💬 Support

- 🐞 **Found a bug or a missing field?** Open a ticket on the [Issues tab](https://apify.com/abotapi/repvue-scraper/issues/open). We usually reply within hours.
- 🛠️ **Need another site, extra fields or a private build?** Email <contact@abotapi.com>.
- ⭐ **Enjoying it?** A quick review on the actor page helps other users find it.

# Actor input Schema

## `mode` (type: `string`):

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.

## `search` (type: `string`):

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` (type: `array`):

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.

## `minRepvueScore` (type: `integer`):

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` (type: `string`):

Keep only companies in this headcount band. Leave empty for all sizes. Only applies in 'search' mode.

## `sortBy` (type: `string`):

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.

## `startUrls` (type: `array`):

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.

## `includeReviews` (type: `boolean`):

Attach sales-rep reviews to each company (pros/cons body, rating, verified flag, reviewer role & location tags, follow-up Q\&A, company response, upvotes).

## `includeSalaries` (type: `boolean`):

Attach compensation by sales role (median & average OTE, base, 75th-percentile, highest potential earnings) plus a pay summary.

## `includeJobs` (type: `boolean`):

Attach the company's currently listed sales jobs. Adds one extra request per company.

## `includeQuestions` (type: `boolean`):

Attach community questions and answers about the company. Adds one extra request per company.

## `maxReviews` (type: `integer`):

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.

## `targetDate` (type: `string`):

Optionally keep only reviews created on or after this date. Leave empty for all reviews.

## `minReviewRating` (type: `integer`):

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.

## `reviewSort` (type: `string`):

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.

## `maxItems` (type: `integer`):

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.

## `proxy` (type: `object`):

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.

## `maxResidentialMB` (type: `integer`):

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.

## `resumeFromRunId` (type: `string`):

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` (type: `boolean`):

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.

## `stateKey` (type: `string`):

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` (type: `boolean`):

Also output (and charge for) companies that did not change since the last run, marked UNCHANGED.

## `emitExpired` (type: `boolean`):

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.

## `ignoreFieldsForChanges` (type: `array`):

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.

## `mcpConnectors` (type: `array`):

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` (type: `string`):

URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "search",
  "industries": [],
  "companySize": "",
  "sortBy": "name_asc",
  "startUrls": [
    "https://www.repvue.com/companies/Klaviyo",
    "https://www.repvue.com/companies/Klaviyo/reviews",
    "https://www.repvue.com/companies/Klaviyo/reviews?page=2",
    "https://www.repvue.com/companies/Klaviyo/salaries",
    "https://www.repvue.com/companies/Klaviyo/jobs",
    "https://www.repvue.com/companies/Klaviyo/questions",
    "https://www.repvue.com/companies/Klaviyo?tab=reviews",
    "Klaviyo"
  ],
  "includeReviews": true,
  "includeSalaries": true,
  "includeJobs": false,
  "includeQuestions": false,
  "maxReviews": 100,
  "minReviewRating": 0,
  "reviewSort": "default",
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true
  },
  "maxResidentialMB": 0,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": true,
  "ignoreFieldsForChanges": [],
  "maxNotifyListings": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `reviews` (type: `string`):

No description

## `jobs` (type: `string`):

No description

## `questions` (type: `string`):

No description

## `changes` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search",
    "startUrls": [
        "https://www.repvue.com/companies/Klaviyo",
        "https://www.repvue.com/companies/Klaviyo/reviews",
        "https://www.repvue.com/companies/Klaviyo/reviews?page=2",
        "https://www.repvue.com/companies/Klaviyo/salaries",
        "https://www.repvue.com/companies/Klaviyo/jobs",
        "https://www.repvue.com/companies/Klaviyo/questions",
        "https://www.repvue.com/companies/Klaviyo?tab=reviews",
        "Klaviyo"
    ],
    "maxItems": 20,
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/repvue-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "startUrls": [
        "https://www.repvue.com/companies/Klaviyo",
        "https://www.repvue.com/companies/Klaviyo/reviews",
        "https://www.repvue.com/companies/Klaviyo/reviews?page=2",
        "https://www.repvue.com/companies/Klaviyo/salaries",
        "https://www.repvue.com/companies/Klaviyo/jobs",
        "https://www.repvue.com/companies/Klaviyo/questions",
        "https://www.repvue.com/companies/Klaviyo?tab=reviews",
        "Klaviyo",
    ],
    "maxItems": 20,
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/repvue-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search",
  "startUrls": [
    "https://www.repvue.com/companies/Klaviyo",
    "https://www.repvue.com/companies/Klaviyo/reviews",
    "https://www.repvue.com/companies/Klaviyo/reviews?page=2",
    "https://www.repvue.com/companies/Klaviyo/salaries",
    "https://www.repvue.com/companies/Klaviyo/jobs",
    "https://www.repvue.com/companies/Klaviyo/questions",
    "https://www.repvue.com/companies/Klaviyo?tab=reviews",
    "Klaviyo"
  ],
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call abotapi/repvue-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/repvue-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/nbrAvZYnru7vsVchJ/builds/9YdSoVtVSGhslD4wF/openapi.json
