Employer reviews, salaries & jobs avatar

Employer reviews, salaries & jobs

Pricing

from $1.00 / 1,000 reviews

Go to Apify Store
Employer reviews, salaries & jobs

Employer reviews, salaries & jobs

Scrapes employer reviews, salary ranges and job listings from kununu.com profiles across Germany, Austria and Switzerland.

Pricing

from $1.00 / 1,000 reviews

Rating

0.0

(0)

Developer

Reviewly

Reviewly

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Kununu Scraper — Employer Reviews, Salary Data & Jobs (Germany, Austria, Switzerland)

Extract every employer review, salary range and job listing from any kununu company profile — the full archive, not just the first page.

Kununu is the dominant employer-review platform in the DACH region, with millions of reviews on German, Austrian and Swiss companies. This Apify Actor turns any kununu profile into clean, structured JSON you can analyse, monitor or load straight into your own database.

  • ✅ Complete review history — scrape back to a company's very first review (2008 for many profiles), not the 10 that kununu shows logged-out visitors
  • ✅ Three datasets in one run — reviews, salary ranges and job listings per company
  • ✅ 13 rated factors per review — with the reviewer's own free-text comment on each
  • ✅ Bot protection handled for you — kununu sits behind AWS WAF; the Actor clears it automatically
  • ✅ All of DACH — .com/de/, .com/at/ and .com/ch/ profiles all supported

📌 What This Actor Does

This kununu scraper takes a list of company profile URLs (or just company names) and returns one structured record per company, containing the employer's headline reputation metrics plus three nested arrays: reviews, salaries and jobs.

It is built for people who need employer data at scale rather than one page at a time:

You are…You use it to…
HR & People AnalyticsBenchmark your employer brand against direct competitors
Talent AcquisitionTrack what candidates say about your hiring process
Market researchersAnalyse sentiment and pay across an industry or region
Compensation teamsPull per-job-title salary ranges for DACH benchmarking
Data teams & developersFeed employer data into dashboards, models or a warehouse
Sales & lead generationFind companies hiring, growing, or with reputation problems

No coding is required to run it. Developers can call it through the Apify API and get the same JSON.


✨ Key Features

  • Full review pagination. With an account, the Actor walks every review page to the end of the archive — verified to page 242 on a 2,418-review profile.
  • Guaranteed newest-first ordering. Reviews are always fetched in true chronological order, so "the 100 most recent reviews" means exactly that.
  • Rich review detail. Overall score, recommendation flag, title, date, reviewer position and department, current/former status, city, employer replies, and helpful/agree counts.
  • 13 rated factors with comments — work atmosphere, image, work-life balance, career development, salary, environment, teamwork, leadership, working conditions, communication, equality, tasks and senior-colleague treatment — each with its own score and free text.
  • Positive / negative / suggestion blocks captured separately for easy sentiment work.
  • Salary ranges by job title — min, max, median, average in EUR gross annual, plus how many submissions back each range.
  • Job listings with title, city, region, employment type, posting date, link and kununu's salary benchmark for that role.
  • Company profile metrics — overall score, industry average, recommendation rate, review counts, Top Company awards, headquarters, employee count, benefits with percentages.
  • Search by company name if you don't have the profile URL.
  • Date cut-off to scrape only reviews newer than a given date — ideal for daily or weekly monitoring.
  • Automatic IP rotation when an exit IP gets challenged, up to 8 attempts per company.

🧠 Why This Actor Is Different

1. It gets past the login wall — most scrapers don't. Kununu shows logged-out visitors only the first 10 reviews per company. Its API quietly accepts a page parameter from anonymous callers, echoes it back, and then returns page 1 again — HTTP 200, no error, no warning. A naive scraper looks like it works and silently returns the same 10 reviews forever. This Actor detects that condition, warns you in the log, and unlocks the full archive when you supply credentials.

2. It sorts correctly. Kununu's default review order is not chronological — it descends within a page but jumps between them (page 100 can land in 2016 while page 150 lands in 2025). Any scraper relying on the default order will return an arbitrary slice and break date filtering. This Actor forces true newest-first ordering on every request.

3. It clears the bot wall properly. Kununu is protected by AWS WAF on CloudFront. The Actor launches a hardened Firefox (Camoufox), earns the clearance token, then replays it from a fingerprint-matched HTTP client for the rest of the run — fast scraping with browser-grade trust. No CAPTCHA-solving service required or used.

4. Salaries come from the right place. Kununu's salary API endpoint returns an empty array no matter what you send it. The real data is only in the server-rendered salary page. This Actor reads the correct source, so salary ranges actually come back populated.


⚙️ Input Configuration

Quick start

{
"startUrls": [{ "url": "https://www.kununu.com/de/audi" }],
"maxReviewsPerCompany": 200,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "DE"
}
}

All input fields

FieldTypeDefaultDescription
startUrlsarray—Kununu profile URLs. Any tab works (/kommentare, /gehalt, /jobs) — it's reduced to the company automatically. /de/, /at/, /ch/ all supported.
searchQueriesarray[]Company names to look up when you don't have the URL.
resultsPerQueryinteger3How many matching profiles to keep per search term.
scrapeReviewsbooleantrueCollect employer reviews.
reviewTypesarray["employees"]employees (staff reviews) and/or candidates (application experiences).
scrapeSalariesbooleantrueCollect per-job-title salary ranges.
scrapeJobsbooleantrueCollect job listings.
maxReviewsPerCompanyinteger0Cap reviews per company. 0 = no limit.
maxSalariesPerCompanyinteger0Cap salary ranges. 0 = no limit.
maxJobsPerCompanyinteger0Cap job listings. 0 = no limit.
targetDatestring—YYYY-MM-DD. Stop once reviews older than this date are reached.
proxyConfigurationobjectResidential DEProxy settings. Residential strongly recommended.

Kununu credentials are not run inputs. They are set once as environment variables on the Actor — see below.

🔑 Credentials (environment variables)

Without a kununu account you will get only the first 10 reviews per company. This is kununu's restriction, not a limitation of this Actor. Salaries and jobs work fine without an account.

Credentials are set once on the Actor, not per run. In Apify Console go to your Actor → Settings → Environment variables, add them, and tick Secret.

VariableDescription
KUNUNU_EMAILKununu account email — recommended
KUNUNU_PASSWORDPassword for that account
KUNUNU_ACCESS_TOKENAlternative: the full kununu_access_token_v1 cookie value from a logged-in browser

Which one should you use?

  • KUNUNU_EMAIL + KUNUNU_PASSWORD — recommended. The Actor logs in fresh at the start of every run and mints its own session, so nothing ever expires and nothing needs rotating. This is the only option that works unattended on a schedule.
  • Kununu's default sign-in emails you a one-time code, and accounts created that way have no password to automate with. If yours is one of them, set a password in your kununu account settings and use the option above.
  • Otherwise use KUNUNU_ACCESS_TOKEN. The JWT inside that cookie expires after about 3 hours, regardless of the long expiry date your browser shows for the cookie itself, so it suits one-off and supervised runs.

When the token expires, the run does not fail. The Actor detects it before scraping, says so in the log, and continues without an account — you still get salaries, jobs and the first 10 reviews per company. Nothing is silently wrong.

⚠️ Copy the right cookie. It must be the full kununu_access_token_v1 value, which contains an access_token JWT. A device or tracking id (a short base64 blob like {"id":"…","created":…}) will not work — kununu accepts it silently and returns page 1 forever. The Actor validates this on startup and stops with a clear message rather than quietly scraping 10 reviews.

To grab it: sign in to kununu, open DevTools → Application → Cookies → www.kununu.com, and copy the entire value of kununu_access_token_v1.

A free kununu account is enough. Marked as secret, these values are encrypted, hidden in the UI, and never written to the dataset, the logs, or the run's input record.

Tips for best results

  • Set the run timeout to at least 900 seconds. Clearing the bot wall takes roughly 60 seconds per company.
  • Use residential proxies, country DE. Datacenter IPs get challenged far more often.
  • Allocate at least 4 GB of memory — the Actor runs a real browser to clear the wall.
  • Use targetDate for recurring runs instead of re-scraping the full archive every time.
  • Start with one company and a small maxReviewsPerCompany to confirm your credentials work before launching a large batch.

📤 Output Format

One dataset record per company. Reviews, salaries and jobs are nested arrays.

Sample output (abridged)

{
"uuid": "4f61a38b-d9a1-4fcf-8cfb-17faa4e27e66",
"name": "AUDI AG",
"slug": "audi",
"countryCode": "de",
"url": "https://www.kununu.com/de/audi",
"website": "https://www.audi.com/de/careers/",
"score": 4,
"industryAverageScore": 3.5,
"recommendationRate": 80,
"totalReviews": 2569,
"totalEmployeeReviews": 2418,
"totalCandidateReviews": 151,
"totalSalaryEntries": 1464,
"isVerified": true,
"isTopCompany": true,
"topCompanyYears": [2026, 2025, 2024, 2023, 2022],
"firstReviewYear": 2008,
"headquarters": { "city": "Ingolstadt", "state": "Bayern", "countryCode": "de" },
"totalLocations": 29,
"employeeCount": "55.000",
"benefits": [
{ "id": "cantine", "count": 1768, "percentage": 73 },
{ "id": "pensionPlan", "count": 1655, "percentage": 68 }
],
"reviews": [
{
"id": "0359dc2e-6a49-495c-865c-94ce1b8957a5",
"url": "https://www.kununu.com/de/audi/bewertung/0359dc2e-...",
"title": "Top für Praktikanten im technischen Bereich",
"score": 4.8,
"recommended": true,
"createdAt": "2026-09-19T00:00:00+00:00",
"position": "intern",
"department": "research",
"employmentStatus": "former",
"city": "Neckarsulm",
"state": "Baden-Württemberg",
"ratings": [
{ "factor": "atmosphere", "score": 5, "text": "Ich wurde gut aufgenommen…" },
{ "factor": "salary", "score": 4, "text": null }
],
"texts": [
{ "kind": "positive", "text": "Gute Betreuung…" },
{ "kind": "negative", "text": "…" }
],
"employerResponses": [
{ "text": "Vielen Dank für Ihre Bewertung…", "createdAt": "2026-09-21T00:00:00+00:00", "authorName": "Audi Karriereberatung" }
],
"helpfulCount": 0,
"agreeCount": 0
}
],
"salaries": [
{
"jobTitle": "Ingenieur:in",
"jobTitleSlug": "ingenieur-in",
"currency": "EUR",
"min": 49100,
"max": 124500,
"median": 93500,
"average": 92600,
"entries": 80
}
],
"jobs": [
{
"id": "e618754e-ecbb-4050-93f0-7afde8043a3b",
"title": "Senior Consultant Digitalisierung für die Prozessindustrie (all genders)",
"url": "https://www.kununu.com/job-postings/de/e618754e-...",
"city": "Neumünster",
"region": "Schleswig-Holstein",
"employmentTypes": ["JOB_EMPLOYMENT_FULLTIME"],
"postedAt": "2026-09-22",
"companyName": "adesso SE",
"companySlug": "adesso",
"jobTitleSalaryAverage": 65700
}
]
}

Field reference

Company level

FieldDescription
name, slug, url, website, logoCompany identity
scoreOverall kununu rating (1–5)
industryAverageScoreIndustry benchmark, for direct comparison
recommendationRate% of reviewers who recommend the employer
totalReviews / totalEmployeeReviews / totalCandidateReviewsReview counts on kununu, not the number scraped
totalSalaryEntriesSalary submissions behind the ranges
isTopCompany, topCompanyYearsKununu "Top Company" award history
firstReviewYearHow far the archive goes back
headquarters, totalLocations, employeeCountCompany footprint
benefitsPerks with submission count and % of reviewers reporting them
companyOverviewThe employer's own profile description

Review level — id, url, title, score, recommended, createdAt, updatedAt, position, department, employmentStatus (current/former), employedUntil, city, state, helpfulCount, agreeCount, plus:

  • ratings[] — { factor, score, text } across the 13 rated factors (atmosphere, image, workLife, career, salary, environment, teamwork, oldColleagues, leadership, workConditions, communication, equality, tasks). Apprenticeship reviews use apprenticeship* factor names.
  • texts[] — { kind, text } where kind is positive, negative or suggestion.
  • employerResponses[] — official replies with text, date and author.

Salary level — jobTitle, jobTitleSlug, currency (EUR), min, max, median, average (gross annual), entries.

Job level — id, title, url, city, region, employmentTypes, postedAt, companyName, companySlug, and kununu's benchmark jobTitleSalaryAverage / Min / Max for that role.

Note on jobs: kununu's jobs tab pads itself with recommended listings from other companies. Every job carries its own companyName and companySlug, so filter on those if you only want the profile's own postings. An empty jobs array means the company genuinely has none listed.

Export as JSON, CSV, Excel, XML or RSS from the Apify console, or pull it via API.


▶️ How to Use

  1. Open the Actor in Apify Console and click Try for free.
  2. Add a company. Paste a kununu profile URL into Company profile URLs — for example https://www.kununu.com/de/sap. Or type a name into Company names to search.
  3. Set your kununu login once in Settings → Environment variables (KUNUNU_EMAIL, KUNUNU_PASSWORD, both marked secret) if you want more than 10 reviews per company. Skip this if you only need salaries and jobs.
  4. Set your limits. Leave everything at 0 for the full archive, or set Max reviews per company to keep the first run small.
  5. Set proxy to Apify Residential, country Germany.
  6. Raise the run timeout to 900 seconds or more, and memory to 4 GB.
  7. Click Start. Watch the log — it reports each review page as it's collected.
  8. Download your data from the Storage → Dataset tab in JSON, CSV or Excel.

Common workflows

Scrape one company completely

{ "startUrls": [{ "url": "https://www.kununu.com/de/sap" }] }

Weekly monitoring — only what's new

{ "startUrls": [{ "url": "https://www.kununu.com/de/sap" }],
"targetDate": "2026-09-01", "scrapeSalaries": false, "scrapeJobs": false }

Schedule this daily or weekly in Apify and you get a clean incremental feed.

Compare competitors

{ "searchQueries": ["Siemens", "Bosch", "Continental"], "resultsPerQuery": 1,
"maxReviewsPerCompany": 300 }

Salary benchmarking only — no account needed

{ "startUrls": [{ "url": "https://www.kununu.com/de/audi" }],
"scrapeReviews": false, "scrapeJobs": false }

📈 Use Cases

1. Employer brand benchmarking. Pull your company and five competitors, then compare score against industryAverageScore, recommendationRate, and the 13 rated factors. You'll see exactly which factor drags your rating down — usually salary, leadership or communication.

2. Salary benchmarking across DACH. Extract per-job-title ranges with median and average in EUR, weighted by submission count. Useful for compensation reviews and offer calibration without buying a commercial dataset.

3. Candidate-experience auditing. Scrape reviewTypes: ["candidates"] to read what applicants say about your interview process — response times, interviewer behaviour, ghosting — and fix the leaks in your funnel.

4. Reputation monitoring and alerting. Run daily with targetDate set to yesterday. Push new negative reviews (score <= 2 or recommended: false) into Slack so HR can respond within hours instead of weeks.

5. Sales intelligence and lead generation. Companies with active job listings are hiring and spending. Combine jobs with poor score or falling recommendationRate to find prospects for HR tech, recruiting services, employer branding or culture consulting.

6. Academic and market research. Longitudinal sentiment analysis over review archives reaching back to 2008, segmented by position, department, city and employmentStatus.


🛠️ Advanced Tips

Performance

  • The bot wall is cleared once per company, taking ~60 seconds. Scraping itself is fast — roughly 1 second per review page (10 reviews). A 2,400-review company takes about 5 minutes of pagination plus the one-time wall clearance.
  • Turn off what you don't need. scrapeSalaries: false and scrapeJobs: false noticeably shorten review-only runs.

Proxies

  • Residential proxies in Germany give the best clearance rate. Datacenter IPs are challenged much more aggressively.
  • If an IP gets challenged mid-run, the Actor rotates to a fresh proxy session automatically and retries — up to 8 IPs per company.

Scaling

  • Split large company lists across several scheduled runs rather than one enormous run. Each company needs its own wall clearance, so 100 companies means ~100 minutes of clearance alone.
  • Access tokens expire after ~3 hours. For any long or scheduled job, use KUNUNU_EMAIL + KUNUNU_PASSWORD so the Actor re-authenticates each run.
  • Use the Apify API or a webhook to stream results into your own storage as they're produced.

❓ FAQ & Troubleshooting

I only get 10 reviews per company. Why? You're running without credentials. Kununu limits logged-out visitors to the first 10 reviews of each company. Set the KUNUNU_EMAIL and KUNUNU_PASSWORD environment variables on the Actor. The run log warns you when this happens.

Do I need a paid kununu account? No. A free account is enough to unlock full review pagination.

Is my kununu password safe? Credentials live in secret environment variables, not in run inputs — encrypted at rest, hidden in the UI, and never written to the dataset, the log, or any run's stored input. If you'd rather not supply a password, use KUNUNU_ACCESS_TOKEN instead.

My access token stopped working mid-run. The JWT inside the cookie expires after about 3 hours — the long expiry date your browser shows for the cookie is not the token's lifetime. The Actor warns you at startup when under 30 minutes remain, and logs a clear message if the fence comes up mid-scrape. Use KUNUNU_EMAIL + KUNUNU_PASSWORD if your account has a password.

Kununu only emails me a login code — I have no password. What now? Kununu's default sign-in is a one-time emailed code, and those accounts have no password to automate. Either set a password in your kununu account settings and use KUNUNU_EMAIL + KUNUNU_PASSWORD, or paste a fresh KUNUNU_ACCESS_TOKEN before each run. There is no way to refresh or extend a token — kununu exposes no refresh endpoint.

The Actor exits immediately saying my token "does not contain a JWT". You copied the wrong cookie. It must be kununu_access_token_v1, whose value contains an access_token with three dot-separated parts. Device ids and tracking cookies look similar but carry no credentials.

The run failed with "AWS WAF challenged…" on every attempt. All 8 proxy IPs were blocked. Switch to residential proxies, set the country to DE, and make sure the run timeout is at least 900 seconds. Datacenter proxies frequently fail here.

The jobs array is empty. That's real data, not an error. Many profiles have no active listings. Check totalReviews and salaries — if those are populated, the scrape worked correctly.

Why are the reviews in German? Kununu is a DACH platform and reviews are written in German (occasionally English). The Actor returns the original text unmodified — translate downstream if you need to.

Can I scrape Austrian or Swiss companies? Yes. /at/ and /ch/ profile URLs work exactly the same way. Note that kununu's tab names stay German across all three countries (/gehalt, /kommentare, /jobs).

Can I get apprenticeship reviews separately? Kununu has no separate apprenticeship stream — they're employee reviews with position: "apprentice". Filter the reviews array on that field.

How far back does the data go? To the company's first review. Many large profiles reach back to 2008 — check firstReviewYear.

The run is slow. That's the bot wall, ~60 seconds per company, and it's unavoidable. Reduce the number of companies per run, or disable the sections you don't need.

Can I run this on a schedule? Yes. Use Apify Schedules with targetDate set to your last run date for efficient incremental scraping.


This Actor collects publicly available employer review data for research, benchmarking and analysis. You are responsible for how you use the data, including compliance with GDPR and kununu's terms of service. Review text may contain personal opinions — treat it accordingly, avoid attempting to identify individual reviewers, and don't republish content wholesale. Use reasonable limits rather than scraping aggressively.


📞 Support

Questions, bug reports or feature requests are welcome.

When reporting a problem, please include the run ID, your input configuration (with credentials removed), and the relevant part of the run log. That makes it much faster to diagnose.


Keywords

kununu scraper, kununu API, employer reviews scraper, Apify actor, web scraping, company reviews Germany, DACH employer data, salary data scraping, Gehalt scraper, employer branding data, HR analytics, job listings scraper, competitor benchmarking, Arbeitgeberbewertungen, employee reviews Austria, employee reviews Switzerland, leads scraping, recruitment data.