# kununu Scraper - $1/1K Reviews, Salaries, Benefits (`perceptr0n/kununu-employer-data-scraper`) Actor

Employer ratings, category scores, benefits, salary ranges per job role and full reviews from kununu - Germany, Austria and Switzerland. Structured JSON, no login, no personal data. Requires Apify Proxy with residential IPs (preselected): kununu serves datacenter IP addresses an interactive CAPTCHA.

- **URL**: https://apify.com/perceptr0n/kununu-employer-data-scraper.md
- **Developed by:** [Thomas Ehrler](https://apify.com/perceptr0n) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 90.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.02 / actor start

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## kununu Employer Data & Reviews Scraper (Germany, Austria, Switzerland)

Turn any **kununu** employer profile into structured data — ratings, category
scores, benefits, **salary ranges per job role** and complete reviews including
the comment written for every single rating factor.

kununu is the leading employer-review platform in the German-speaking market
(part of New Work / XING) with millions of reviews. It has **no public API**.
This actor gives you one.

### Before you run it: residential proxy is required

kununu sits behind AWS WAF. Since September 2026 it answers **datacenter IP
addresses with an interactive CAPTCHA** (`x-amzn-waf-action: captcha`) that no
unattended scraper can pass, while residential IPs get the automatic JavaScript
challenge that clears itself in about two seconds.

Measured on 10 September 2026:

| Where the request comes from | kununu's answer | Result |
|---|---|---|
| Apify, no proxy | `captcha` | blocked, run stops in ~20 s |
| Apify, datacenter proxy | `challenge` | never clears within 90 s |
| Residential IP, real browser | `challenge` | solved in 1.4 s |

The input therefore comes with **Apify Proxy + the RESIDENTIAL group preselected**.
Leave it that way. Residential traffic is billed by Apify on top of this actor's
per-event price — budget roughly 1–3 MB per company page. If your plan has no
residential proxy, the run stops immediately and tells you so instead of
returning empty rows.

### What makes this actor different

Most employer-review scrapers return a company name and a star rating. This one
returns the data an HR-tech product or an employer-branding analysis actually
needs:

- ⭐ **Category scores with sub-factors** — not just "3.8", but career (salary,
  image, career development), culture (atmosphere, communication, teamwork,
  management…), work environment, diversity — each with its own review count
- 💶 **Salary ranges per job role** — min, max, median and average per position,
  with the number of entries behind each figure, plus the salary-satisfaction
  split and how compensation compares to the industry
- 🎁 **Benefits with confirmation rates** — "68 % of reviewers confirm a canteen"
- 📈 **Industry benchmark built in** — `industryAverageScore` and the ready-made
  `scoreVsIndustry` delta, so a company is instantly comparable to its sector
- 💬 **Employer responsiveness** — response rate and average response time in
  days: a strong signal for employer-branding sales
- 🗣 **Reviews in full depth** — positive / negative / suggestion text, plus each
  factor rating *with its individual comment*, and the employer's replies
- 🇩🇪🇦🇹🇨🇭 **All three DACH countries** in one actor

### Use cases

- **HR tech & employer branding** — enrich company records with employer scores,
  benefits and salary bands
- **Competitive talent intelligence** — how does your employer rating compare to
  the companies you compete with for candidates?
- **Recruiting & market research** — salary benchmarks per job role and region
- **Sentiment analysis** — thousands of structured review texts, ready for NLP
- **Lead scoring for HR vendors** — low score + low response rate + unclaimed
  profile = a company with an employer-branding problem
- **AI agents** — clean schema, callable via MCP

### Input example

```json
{
    "companies": [
        "https://www.kununu.com/de/siemens",
        "sap",
        "at/red-bull"
    ],
    "country": "de",
    "include_salary": true,
    "include_reviews": true,
    "review_type": "employee",
    "max_reviews_per_company": 100,
    "output_type": "company"
}
```

Companies can be full kununu URLs or plain slugs. Prefix a slug with a country
(`at/red-bull`) to mix markets in one run.

### Output example (shortened)

```json
{
    "companyName": "Siemens AG",
    "profileUrl": "https://www.kununu.com/de/siemens",
    "score": 3.8,
    "industryAverageScore": 3.4,
    "scoreVsIndustry": 0.4,
    "recommendationRate": 85,
    "totalReviews": 6151,
    "totalReviewsEmployees": 5813,
    "employerResponseRate": 11,
    "employerResponseTimeDays": 55,
    "firstReviewYear": 2007,
    "isClaimed": false,
    "scoreBreakdown": [
        {
            "category": "career",
            "score": 3.9,
            "totalReviews": 5511,
            "factors": [
                { "factor": "salary", "score": 4.1 },
                { "factor": "image", "score": 3.9 },
                { "factor": "career", "score": 3.7 }
            ]
        }
    ],
    "benefits": [
        { "benefit": "cantine", "confirmedBy": 3930, "percentage": 68 },
        { "benefit": "homeOffice", "confirmedBy": 3173, "percentage": 55 }
    ],
    "salaryRanges": [
        {
            "jobTitle": "Projektmanager:in",
            "salaryMin": 41300,
            "salaryMax": 117600,
            "salaryMedian": 75000,
            "salaryAverage": 78900,
            "basedOnEntries": 223
        }
    ],
    "salarySatisfaction": { "positivePercentage": 76, "neutralPercentage": 15, "negativePercentage": 9 },
    "compensationVsIndustryPercent": 21,
    "reviews": [
        {
            "title": "Meine Erfahrung als langjähriger Mitarbeiter",
            "score": 4.5,
            "recommended": true,
            "createdAt": "2026-07-30T00:00:00+00:00",
            "positionGroup": "student",
            "department": "it",
            "positiveText": "Alle Benefits und die Kollegen …",
            "negativeText": "…",
            "suggestionText": "…",
            "factorRatings": [
                { "factor": "atmosphere", "score": 5, "comment": "Sehr lockere Atmosphäre" }
            ],
            "employerResponses": []
        }
    ]
}
```

Prefer a flat table? Set `output_type: "reviews"` to get one row per review with
the company data attached — ideal for Excel, Google Sheets or a database import.

### Performance & cost

The actor opens one browser session per run and reuses it for every page, so
after a ~2 second start each company profile loads in well under a second.
Reviews are paginated 10 per page — set `max_reviews_per_company` to control
run time and cost. Turn `include_reviews` off for a fast company-level scan of
hundreds of employers.

### Rating factor reference

Rating keys are stable and locale-independent — the same keys come back for
Germany, Austria and Switzerland, so a dashboard built on them keeps working.

| Category | Factors |
|---|---|
| `career` | `salary`, `image`, `career` |
| `culture` | `atmosphere`, `communication`, `teamwork`, `management`, `colleagues`, `interestingTasks` |
| `work_environment` | `workConditions`, `environment` |
| `diversity` | `equality`, `oldColleagues` |

### Limitations — honestly stated

- **Datacenter IPs do not work at all.** This is not a tuning issue and no
  code change fixes it; see the table at the top. Without residential proxy the
  actor cannot reach kununu.

- kununu publishes **no official API**; this actor reads the public website, so
  a site redesign can require an update. A daily automated health check runs
  against it and fixes ship quickly.

- **Reviews load 10 per page.** A company with 5,000 reviews needs 500 page
  loads — use `max_reviews_per_company` deliberately.

- Culture-compass data is empty for companies with too few submissions —
  kununu itself hides it, so no actor can return it.

- Review texts are in **German**, as written by reviewers. Field names, rating
  keys and all metadata are English.

- If kununu's bot protection ever blocks a run, the actor **fails visibly**
  instead of writing empty rows — a silent empty dataset is worse than an error.

### Legal & data protection

Only **public, aggregate and anonymous** data is collected:

- kununu reviews are anonymous by design — no reviewer identity exists on the
  platform and none is extracted. No user profiles are visited.
- **No individual salary entries** tied to a person — only the aggregated
  ranges kununu publishes, each with its sample size (`basedOnEntries`).
- No login-protected content, no employer dashboards.
- **robots.txt:** kununu allows the first review page per company and disallows
  the paginated ones. Set `respect_robots_txt: true` to stay strictly within
  those rules. No other kununu actor offers this switch.

Legal basis for B2B market research is typically legitimate interest
(Art. 6(1)(f) GDPR); as the operator of the run you are the controller of the
data you extract. Not affiliated with or endorsed by kununu GmbH or New Work SE.

### Kununu-Daten exportieren (Deutsch)

Dieser Actor exportiert **Arbeitgeberbewertungen von kununu.com** als
strukturierte Daten — für Deutschland, Österreich und die Schweiz.

Enthalten sind der kununu-Score inklusive **Branchenvergleich**, die
Bewertungen je Kategorie mit allen Unterfaktoren, bestätigte **Benefits** mit
Prozentwerten, **Gehaltsspannen je Jobtitel** (Minimum, Maximum, Median,
Durchschnitt und Anzahl der Angaben), die Gehaltszufriedenheit sowie auf Wunsch
**einzelne Bewertungen** mit Volltext, Faktor-Bewertungen samt Kommentar und den
Antworten des Arbeitgebers.

Typische Anwendungsfälle: Employer-Branding-Monitoring, Wettbewerbsanalyse im
Recruiting, Gehaltsbenchmarks, Anreicherung von CRM- oder Bewerberdaten sowie
Sentiment-Analysen. Export als JSON, CSV oder Excel — oder direkt per API.

### FAQ

**Is there an official kununu API?**
No. kununu offers no public API or data feed. This actor is the practical
alternative for programmatic access.

**Do I need proxies?**
No. The actor handles kununu's bot protection itself. Apify Proxy can be
enabled optionally for very large jobs.

**How do I get the data into Excel or Google Sheets?**
Run the actor, then export the dataset as CSV or XLSX from the Apify console —
or use `output_type: "reviews"` for a flat one-row-per-review table.

**Can I monitor employers continuously?**
Yes. Schedule the actor (daily, weekly) with the companies you care about and
send the dataset to a webhook, Google Sheets, Slack or your database.

**What does a run cost?**
Pricing is pay-per-event: a small start fee plus a price per record. A
company-level scan of 100 employers therefore costs a fraction of a dollar;
see the Pricing tab for the current rates.

### What does a run cost?

| What you export | Cost |
|---|---|
| 100 companies, company level | $0.12 |
| 1,000 companies, company level | $1.02 |
| 1 company with 1,000 reviews | $1.02 |
| 100 companies with 100 reviews each | $10.02 |

$0.02 per run start plus $0.001 per record. In `output_type: "company"` one
company is one record; in `"reviews"` each review is a record.

### Related actors

| Actor | What it does |
|---|---|
| [Arbeitsagentur Jobs](https://apify.com/perceptr0n/arbeitsagentur-jobs-scraper) | Open positions at the same employers, via the official job-board API |
| [Messe München Exhibitors](https://apify.com/perceptr0n/messe-muenchen-exhibitor-list-scraper) | Trade-fair exhibitors with address, e-mail and phone |
| [EU Public Tenders (TED)](https://apify.com/perceptr0n/eu-tenders-ted-scraper) | Public contracts across all 27 EU member states |

### Support

Need another field, country, filter or export shape? Open an issue in the
**Issues** tab — response within 1–2 business days.

# Actor input Schema

## `companies` (type: `array`):

kununu company URLs or plain slugs — e.g. `https://www.kununu.com/de/siemens` or just `siemens`. Add as many as you like.

## `country` (type: `string`):

Country profile to use when a company is given as a plain slug.

## `include_salary` (type: `boolean`):

Adds salary ranges per job role (min / max / median / average and number of entries), salary-satisfaction split and the compensation score vs. industry. One extra page load per company.

## `include_reviews` (type: `boolean`):

Adds single reviews with full text, per-factor ratings including their comments, and employer responses. Reviews load 10 per page, so large companies take longer.

## `review_type` (type: `string`):

Which review group to collect when reviews are included.

## `max_reviews_per_company` (type: `integer`):

Upper limit of reviews collected per company.

## `output_type` (type: `string`):

How reviews are laid out in the dataset.

## `respect_robots_txt` (type: `boolean`):

kununu's robots.txt allows the first review page of a company but disallows the paginated ones. Turn this on to stay strictly within those rules — the actor then collects only the first page of reviews (10) per company. Company profile, scores, benefits and salary data are unaffected.

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

Required. kununu is behind AWS WAF and serves an interactive CAPTCHA to datacenter IP addresses, which no unattended scraper can pass. Residential proxy is the only configuration that works — it is preselected here. Residential traffic is billed by Apify on top of this Actor's price; expect roughly 1–3 MB per company page. If your plan has no residential proxy, the run will stop immediately with a clear message.

## Actor input object example

```json
{
  "companies": [
    "https://www.kununu.com/de/siemens"
  ],
  "country": "de",
  "include_salary": true,
  "include_reviews": false,
  "review_type": "employee",
  "max_reviews_per_company": 100,
  "output_type": "company",
  "respect_robots_txt": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "companies": [
        "https://www.kununu.com/de/siemens"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("perceptr0n/kununu-employer-data-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 = {
    "companies": ["https://www.kununu.com/de/siemens"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("perceptr0n/kununu-employer-data-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 '{
  "companies": [
    "https://www.kununu.com/de/siemens"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call perceptr0n/kununu-employer-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,perceptr0n/kununu-employer-data-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/H3IF8mmvoFOWcdRUL/builds/LkNgjVeUGddW9i3us/openapi.json
