# kununu Employer Data & Reviews Scraper (DACH) (`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.

- **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, 100.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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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.

### 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

- 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`):

Optional. A proxy is not required — leave the defaults unless you run very large jobs.

## 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": false
  }
}
```

# 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"
    ]
};

// 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"] }

# 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("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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"
  ]
}' |
apify call perceptr0n/kununu-employer-data-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=perceptr0n/kununu-employer-data-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/H3IF8mmvoFOWcdRUL/builds/Is6xEt7aa62EYHqQY/openapi.json
