Personio Jobs Scraper
Pricing
from $2.50 / 1,000 results
Personio Jobs Scraper
Scrape open jobs from any company's Personio careers site: titles, departments, offices, employment type, seniority, schedule, experience, keywords, pay details and full descriptions in your language. Paste a careers site URL, get clean JSON. No login, no API key, no proxy.
Pricing
from $2.50 / 1,000 results
Rating
0.0
(0)
Developer
Anyx Solutions
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share

Personio Jobs Scraper
Every open job on any company's Personio careers site — with full descriptions, offices, employment details and pay sections — as clean JSON.
Personio is the HR platform behind the careers sites of tens of thousands of small and mid-sized companies across Germany and Europe, from XITASO and Cloover to ottonova and 1KOMMA5°. This Actor reads any of those careers sites and returns every open job: title, hiring company, department, recruiting category, main office and every additional office, employment type, seniority, schedule, years of experience, occupation, keywords, the creation date, and the full description as HTML, plain text and named sections, plus the pay section whenever the company publishes one. Pick the language you want the descriptions in; jobs the company has not translated come in the site's own language. Paste a careers site URL; there is no login, no API key, and no proxy to configure. Built for job aggregators, recruiting and talent-intelligence teams, salary benchmarking, and hiring-signal tracking across the European SME market.
⚡ Quick start
{"startUrls": [{ "url": "https://xitaso.jobs.personio.de/" }],"language": "en","maxItems": 5}
🧩 Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
startUrls | array | yes | — | Personio careers site URLs (https://<company>.jobs.personio.de/ or .com) or single job URLs from one (…/job/<id>). |
language | string | no | en | Description language: en, de, fr, es, it, nl, pt, pl, cs, sv, da, fi or no. Untranslated jobs come in the site's default language. |
maxItems | integer | no | — | Maximum number of jobs per start URL. The input form starts at 5; leave it empty to get the whole careers site. |
proxyConfiguration | object | no | { "useApifyProxy": false } | Proxy settings. Personio careers sites need no proxy. |
Finding a company's careers site. Every Personio customer has an address of the form
https://<company>.jobs.personio.de/ (the same site also answers on .jobs.personio.com). Many
companies link to it from the "Careers" or "Jobs" page of their own website; open any job there and
look for jobs.personio in the address bar or the apply link. Custom domains are not supported as
input, so use the <company>.jobs.personio.de address. A ?language=de (or any other language) on
a start URL overrides the Description language for that URL.
📤 Output
Each open job is one dataset row.
Fields
| Field | Type | Description |
|---|---|---|
id | number | Personio job ID. |
title | string | Job title, in the description's language. |
company | string | Hiring company: the legal entity the job is posted for, or the careers site's name when none is given. |
companySlug | string | The company's subdomain on jobs.personio.de. |
careersSiteUrl | string | The company's careers site on Personio. |
url | string | The job's public page. |
applyUrl | string | The job's application form. |
department | string | Department name. |
recruitingCategory | string | The company's own recruiting category for the job. |
office | string | Main office. |
additionalOffices | array | Other offices the job is open in. |
employmentType | string | Employment type, such as permanent, fixed_term, intern, working_student or trainee. |
seniority | string | Seniority, such as entry-level, experienced, executive or student. |
schedule | string | Schedule: full-time, part-time or full-or-part-time. |
yearsOfExperience | string | Years of experience asked for, such as lt-1, 1-2, 2-5, 5-7, 7-10 or 10-15. |
occupation | string | Occupation, such as software_and_web_development. |
occupationCategory | string | Occupation category, such as it_software. |
keywords | array | Keywords the company added to the job. |
createdAt | string | When the job was created (ISO 8601, UTC). |
salaryText | string | Plain text of the description section about pay ("Salary information", "Gehalt", …), when the job has one. |
descriptionHtml | string | Full job description as HTML, each section under an <h2> heading. |
descriptionText | string | Full job description as plain text, each section under its heading. |
sections | array | The description as the company wrote it: one { heading, html, text } object per section, such as "Your tasks". |
💡 Use cases
- Job aggregation — feed job boards, newsletters and niche listing sites with fresh postings from German and European SMEs.
- Salary benchmarking — collect the pay ranges companies publish under Germany's and the EU's pay-transparency push.
- Hiring signals — watch which departments and offices a company is growing, for sales prospecting or investment research.
- Recruiting intelligence — monitor competitors' open roles, seniority mix and how long they stay open.
❓ FAQ
- Do I need an API key or a Personio account? No. The Actor reads the same public careers sites any candidate sees.
- Do I need a proxy? No. It runs without one by default.
- Why is a description in German when I chose English? Companies translate jobs one by one. A job without an English version comes in the careers site's default language (or, failing that, in English or German), so you get a description whenever the company wrote one. The job's
urlopens it in the same language. - Why is
salaryTextempty? Personio has no separate salary field, so pay only appears when the company writes it into a section of the description, such as "Salary information" or "Gehalt".salaryTextisnullwhen no such section exists; the full description is still indescriptionText. - The company's careers page is on its own domain. Custom domains are not supported as input. Use the company's
https://<company>.jobs.personio.de/address; the jobs are the same. - Can I scrape many companies at once? Yes. Add one careers site URL per company to
startUrls;maxItemsapplies to each one separately. - Why did a run return no jobs? The company name in the URL may be wrong, the company may have no open jobs, or it may have switched its public job listing off; the log says when a careers site is not found. Open an issue if something looks off.
🔗 More scrapers by Anyx
🤝 Anyx Solutions
We build custom scrapers and data-extraction pipelines.
- Email: tantosthor@gmail.com
🖼 Image credit
Image credit: personio.com