Employer reviews, salaries & jobs
Pricing
from $1.00 / 1,000 reviews
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
Maintained by CommunityActor 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 Analytics | Benchmark your employer brand against direct competitors |
| Talent Acquisition | Track what candidates say about your hiring process |
| Market researchers | Analyse sentiment and pay across an industry or region |
| Compensation teams | Pull per-job-title salary ranges for DACH benchmarking |
| Data teams & developers | Feed employer data into dashboards, models or a warehouse |
| Sales & lead generation | Find 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
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | — | Kununu profile URLs. Any tab works (/kommentare, /gehalt, /jobs) — it's reduced to the company automatically. /de/, /at/, /ch/ all supported. |
searchQueries | array | [] | Company names to look up when you don't have the URL. |
resultsPerQuery | integer | 3 | How many matching profiles to keep per search term. |
scrapeReviews | boolean | true | Collect employer reviews. |
reviewTypes | array | ["employees"] | employees (staff reviews) and/or candidates (application experiences). |
scrapeSalaries | boolean | true | Collect per-job-title salary ranges. |
scrapeJobs | boolean | true | Collect job listings. |
maxReviewsPerCompany | integer | 0 | Cap reviews per company. 0 = no limit. |
maxSalariesPerCompany | integer | 0 | Cap salary ranges. 0 = no limit. |
maxJobsPerCompany | integer | 0 | Cap job listings. 0 = no limit. |
targetDate | string | — | YYYY-MM-DD. Stop once reviews older than this date are reached. |
proxyConfiguration | object | Residential DE | Proxy 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.
| Variable | Description |
|---|---|
KUNUNU_EMAIL | Kununu account email — recommended |
KUNUNU_PASSWORD | Password for that account |
KUNUNU_ACCESS_TOKEN | Alternative: 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_v1value, which contains anaccess_tokenJWT. 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
targetDatefor recurring runs instead of re-scraping the full archive every time. - Start with one company and a small
maxReviewsPerCompanyto 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
| Field | Description |
|---|---|
name, slug, url, website, logo | Company identity |
score | Overall kununu rating (1–5) |
industryAverageScore | Industry benchmark, for direct comparison |
recommendationRate | % of reviewers who recommend the employer |
totalReviews / totalEmployeeReviews / totalCandidateReviews | Review counts on kununu, not the number scraped |
totalSalaryEntries | Salary submissions behind the ranges |
isTopCompany, topCompanyYears | Kununu "Top Company" award history |
firstReviewYear | How far the archive goes back |
headquarters, totalLocations, employeeCount | Company footprint |
benefits | Perks with submission count and % of reviewers reporting them |
companyOverview | The 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 useapprenticeship*factor names.texts[]—{ kind, text }wherekindispositive,negativeorsuggestion.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
companyNameandcompanySlug, so filter on those if you only want the profile's own postings. An emptyjobsarray 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
- Open the Actor in Apify Console and click Try for free.
- 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. - 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. - Set your limits. Leave everything at
0for the full archive, or set Max reviews per company to keep the first run small. - Set proxy to Apify Residential, country Germany.
- Raise the run timeout to 900 seconds or more, and memory to 4 GB.
- Click Start. Watch the log — it reports each review page as it's collected.
- 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: falseandscrapeJobs: falsenoticeably 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_PASSWORDso 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.
⚖️ Legal & Fair Use
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.
- Email: me@ahmedhrid.com
- Issues: open an issue on the Actor's Apify page
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.