Personio Jobs Scraper: Job Listings, Salaries, Departments avatar

Personio Jobs Scraper: Job Listings, Salaries, Departments

Pricing

from $0.76 / 1,000 job ads

Go to Apify Store
Personio Jobs Scraper: Job Listings, Salaries, Departments

Personio Jobs Scraper: Job Listings, Salaries, Departments

Job ads from any company's Personio careers feed: title, department, office, employment type, schedule, seniority, salary when published, keywords and the full description in the language you choose. Add company names or links, filter by office, department or date, pay per job. No personal data.

Pricing

from $0.76 / 1,000 job ads

Rating

0.0

(0)

Developer

Rowcraft

Rowcraft

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

17 hours ago

Last modified

Share

Get every open job from the Personio career pages of the companies you choose, as clean, flat JSON, CSV or Excel. List as many companies as you like in one run. The actor reads each company's public Personio job feed, the XML feed Personio offers for showing jobs on websites, not a rendered page, so it is fast and does not break when a careers page changes its design.

For each job you get the title, legal entity, every office, department, employment type, seniority, schedule, years of experience, occupation category, keywords, creation date, the salary range when the employer publishes it, and the full description split into its sections ("Your tasks", "Your profile", "Benefits"…).

Input form of Personio Jobs Scraper: Job Listings, Salaries, Departments

What you get

One row per job:

  • Job: Personio job ID, title, job page, the company's careers page
  • Company: Personio name and legal entity (for groups with several companies on one account)
  • Place: main office, other offices, all offices as a list
  • Classification: department, recruiting category, employment type, seniority, schedule, years of experience, occupation and occupation category, keywords
  • Salary: minimum, maximum, currency and period (year, month, hour), when the employer publishes it
  • Dates and language: created, and the language of the delivered text
  • Texts: the description as sections (title + text) and as one text; optional HTML

Why this actor

  • Text in a language the ad actually has. Personio's feed comes in German unless you ask for another language, and an ad the employer wrote only in Spanish then comes with no text at all. In automatic mode the actor asks for German first, then for the other languages, until every ad has its text, and tells you the language of each row. In our tests a Spanish company's ads had text only in Spanish, a German company wrote all its ads only in English, and one group mixed German, English, French, Spanish and Portuguese ads.
  • Salary when it exists. About one Personio ad in eight carries a salary range (108 of 874 ads in our sample); the actor returns it as numbers you can sort and filter, and a filter keeps only jobs with a salary.
  • Sections kept apart. Tasks, profile, benefits and the rest come as separate texts, ready to analyse or display.
  • .de or .com, found for you. Companies sit on jobs.personio.de or jobs.personio.com; give the name and the actor finds the right one.
  • Contact persons removed. E-mail addresses, phone numbers, mailto: links and the names of contact persons written into the ads are removed. See the privacy section.
  • Clear results for every company. The run summary lists companies that are not on Personio, those with no open jobs, and job links that are no longer online.
  • You stay in control of cost. Pay per job. The run stops cleanly when your maximum charge is reached.

How to use it

  1. Open the Actor and fill in Companies (the other fields are optional filters).
  2. Set Maximum job ads to a small number for a first try (the default is a safe start).
  3. Click Start. The status line shows progress; the run stops cleanly at your limit or at the charge limit you set in the run options.
  4. Open the Dataset tab and download JSON, CSV, Excel, XML or HTML, or send the rows to Google Sheets, Slack, Make, n8n or Zapier with the Integrations tab.
  5. To run it on a schedule, use Schedules in Apify Console and turn on Only new rows since the last run below: every run then costs only the new rows, and a webhook URL tells you when something new came in.

Input

FieldWhat it does
companies, listsPersonio names (stark), careers addresses (https://lindalgroup.jobs.personio.com/) or job links (only that job); ready-made lists picked in the form
languageauto (default) or a language: de, en, es, fr, it, nl, pt, pl
languageFallbackOn (default): an ad without text in your language comes in the language the employer wrote. Off: your language only
includeDescription, includeHtmlDescriptionAd texts on or off; HTML as well
keywords, keywordsInDescriptionKeep jobs whose title or keywords contain any of these words (optionally the text too)
offices, departmentsKeep jobs in these offices or departments
employmentTypes, schedules, senioritiesPermanent, internship, working student…; full-time, part-time; entry level, experienced…
withSalaryOnlyOnly jobs with a published salary
postedAfter2026-10-01, yesterday, 7 days, 2 weeks
maxItems, maxItemsPerCompanyLimits. 0 = no limit. The newest jobs of each company come first
onlyNew, stateName, notifyUrl, notifyWhenEmptyOnly new rows, notifications: see Automation below

Finding a company's Personio name: open its careers page; if the address is <name>.jobs.personio.de (or .com), that is the name. You can also paste the address or any job link from it.

Example: full-time engineering jobs with a published salary, from three companies, created in the last month.

{
"companies": ["stark", "pmx", "https://lindalgroup.jobs.personio.com/"],
"keywords": ["engineer", "ingenieur"],
"schedules": ["full-time"],
"withSalaryOnly": true,
"postedAfter": "30 days"
}

Output

28 fields per row. Empty values are null, never missing, so CSV and Excel columns are stable.

FieldTypeExample
idstring2324258
companystringstark
companyNamestringSTARK
legalEntitystringSKD SE
titlestringJob title
officestringMunich
additionalOfficesarrayOther offices
officesarrayAll offices
departmentstringDepartment
recruitingCategorystringRecruiting category
employmentTypestringpermanent
senioritystringexperienced
schedulestringfull-time
yearsOfExperiencestring2-5
occupationstringOccupation
occupationCategorystringengineering
keywordsarrayKeywords
salaryMinnumberSalary from
salaryMaxnumberSalary to
salaryCurrencystringEUR
salaryPeriodstringyear
createdAtstring2026-09-14T08:12:44+00:00
languagestringde
urlstringJob page
careersPagestringCareers page
descriptionSectionsarrayDescription sections (title + text)
descriptionTextstringDescription
descriptionHtmlstringDescription (HTML)

Example rows

Two real rows from a run (long texts shortened here, complete in the dataset):

[
{
"id": "2822900",
"company": "munerio",
"companyName": "munerio consulting GmbH",
"legalEntity": "Munerio Consulting GmbH",
"title": "Area Sales Manager Antriebstechnik (all genders) Nord- und Mitteldeutschland",
"office": "Hamburg",
"additionalOffices": [
"Berlin, Brandenburg, Sachsen, Sachsen-Anhalt, Mecklenburg-Vorpommern, Thüringen (remote)",
"Ruhrgebiet"
],
"offices": [
"Hamburg",
"Berlin, Brandenburg, Sachsen, Sachsen-Anhalt, Mecklenburg-Vorpommern, Thüringen (remote)",
"Ruhrgebiet"
],
"department": "Antriebs & Fluidtechnik",
"recruitingCategory": "Festangestellte",
"employmentType": "permanent",
"seniority": "experienced",
"schedule": "full-time",
"yearsOfExperience": "2-5",
"occupation": "field_sales",
"occupationCategory": "sales_and_business_development",
"keywords": [
"Antriebstechnik",
"Thüringen",
"Sales",
"… 1 more"
],
"salaryMin": 75000,
"salaryMax": 95000,
"salaryCurrency": "EUR",
"salaryPeriod": "year",
"createdAt": "2026-10-01T09:45:42+00:00",
"language": "de",
"url": "https://munerio.jobs.personio.de/job/2822900?language=de",
"careersPage": "https://munerio.jobs.personio.de/",
"descriptionSections": [
{
"title": "Unser Mandant",
"text": "Für ein international tätiges Technologieunternehmen im Bereich Linear-, Antriebs- und Positioniertechnik suchen wir einen Gebietsverkauf…"
},
{
"title": "Ihre Aufgaben",
"text": "• Neukundenakquise sowie Betreuung bestehender Kunden im PLZ-Gebiet: 1*, 2* und 4*\n• Ziel ist die technische Beratung und Lösungssuche be…"
},
{
"title": "Ihr Profil",
"text": "• Vorzugsweise ein abgeschlossenes technisches Studium, eine Weiterbildung zum Techniker oder eine technische Ausbildung mit langjähriger…"
},
"… 4 more"
],
"descriptionText": "Unser Mandant\nFür ein international tätiges Technologieunternehmen im Bereich Linear-, Antriebs- und Positioniertechnik suchen wir einen…"
},
{
"id": "2823726",
"company": "munerio",
"companyName": "munerio consulting GmbH",
"legalEntity": "Munerio Consulting GmbH",
"title": "Konstrukteur:in Antriebstechnik & Elektromotoren (all genders)",
"office": "Nürnberg",
"additionalOffices": [],
"offices": [
"Nürnberg"
],
"department": "Antriebs & Fluidtechnik",
"recruitingCategory": "Festangestellte",
"employmentType": "permanent",
"seniority": "experienced",
"schedule": "full-time",
"yearsOfExperience": "2-5",
"occupation": "mechanical_engineering",
"occupationCategory": "engineering",
"keywords": [
"Konstruktion",
"Elektromotoren",
"Antriebstechnik",
"… 2 more"
],
"salaryMin": 65000,
"salaryMax": 75000,
"salaryCurrency": "EUR",
"salaryPeriod": "year",
"createdAt": "2026-10-01T16:05:35+00:00",
"language": "de",
"url": "https://munerio.jobs.personio.de/job/2823726?language=de",
"careersPage": "https://munerio.jobs.personio.de/",
"descriptionSections": [
{
"title": "Unser Mandant",
"text": "Für unseren Mandanten, einen etablierten mittelständischen Hersteller kundenspezifischer elektrischer Antriebslösungen, suchen wir zum nä…"
},
{
"title": "Ihre Aufgaben",
"text": "• Sie konstruieren und konfigurieren kundenspezifische Varianten bestehender Elektromotoren und Baugruppen.\n• Sie passen vorhandene Konst…"
},
{
"title": "Ihr Profil",
"text": "• Sie verfügen über ein abgeschlossenes Studium im Maschinenbau, eine Weiterbildung zum/zur Techniker oder eine vergleichbare technische…"
},
"… 4 more"
],
"descriptionText": "Unser Mandant\nFür unseren Mandanten, einen etablierten mittelständischen Hersteller kundenspezifischer elektrischer Antriebslösungen, suc…"
}
]

Results can be downloaded as JSON, CSV, Excel, XML or HTML from the Dataset tab, or read through the Apify API.

Results of Personio Jobs Scraper: Job Listings, Salaries, Departments in the Apify dataset view

Pricing

Pay per result. You pay for each job ad delivered to your dataset, nothing else: no subscription, no minimum, no charge for rows your filters drop or for the requests behind them.

Your Apify planPrice per 1,000 rowsPrice per row
Free plan$1.00$0.001
Starter plan$0.92$0.00092
Scale plan$0.84$0.00084
Business plan and above$0.76$0.00076

Example: 1,000 job ads cost $1.00 on the Free plan and $0.76 on the Business plan. The Apify platform usage of a run (compute, storage) is small for this actor — well under one cent per 1,000 rows — and is billed by Apify separately, as for every Actor. A start event of $0.00005 is charged once per run (Apify default). Cap your spend: set Maximum total charge in the run options. The actor stops cleanly when the cap is reached and you keep everything delivered until then. The run summary (RUN_SUMMARY in the key-value store) says why a run stopped.

Automation: only new rows, notifications, schedules

Only new rows since the last run. Turn on onlyNew and the actor remembers every job ad it delivered to you (in a key-value store named rowcraft-personio-jobs-scraper-state in your Apify account). The next run with the same stateName skips what you already have and you pay only for new rows. The first run delivers everything that matches. Use a different stateName for each schedule or search so they keep separate memories.

Notification when the run ends. Put a webhook address in notifyUrl and the actor sends one JSON POST with the number of new rows, links to the dataset (JSON and CSV) and the run. It works out of the box with Slack and Discord incoming webhooks (the message is in text and content), with Make, n8n and Zapier catch hooks, and with your own endpoint. By default it is sent only when there is at least one new row; notifyWhenEmpty sends it every time.

Schedules. Create a schedule in Apify Console (hourly, daily, weekly or cron) with onlyNew on. A daily schedule gives you a feed of new job ads for the price of the new rows only.

Integrations. Send the results to Make, n8n, Zapier, Google Sheets, Slack, Google Drive, Airtable or any webhooks from the Integrations tab of the Actor, with no code. Apify also offers native actions for Make, n8n and Zapier.

API, SDKs and AI agents. Every run is available through the Apify API and the official JavaScript and Python clients; the Actor can also be called by AI agents through the Apify MCP server. The example input in the API tab is a working call.

Use cases

  • Job boards and aggregators: a clean feed from DACH and European companies that hire through Personio, with salary and sections.
  • Recruiting and sales intelligence: who is hiring, for which roles, in which offices, from a list of target companies.
  • Market research: salary ranges, working-student and internship offers, seniority mix across companies.
  • Monitoring: schedule a daily run with postedAfter: "yesterday" to get only new jobs.

Ready-made examples, each with the input filled in (open one and press Start, or save it as your own task):

What this actor does not do

  • Search across all of Personio by keyword: you bring the company names or career-page addresses, or pick a ready-made list (Personio publishes no company list; ours holds the Personio companies we found). Keyword, office and department filters apply to the companies you read.
  • Applications, candidates or recruiter contacts: never read.
  • Companies that switched their public job feed off: they show as "not found" in the coverage report.
  • Career pages on other systems (Workable, Recruitee, Teamtailor, Greenhouse…): see the other Rowcraft actors.

Limits and fair use

  • One request per second by default (you can go down to 250 ms). A company takes one request, two when the actor has to try the other domain, plus one per extra language, made only while some ads still have no text. A company whose ads have no text in any language takes up to nine requests.
  • Personio has no public list of companies: you bring the company names or addresses.
  • The feed is the whole list of a company's published jobs; filters are applied after reading it, and only delivered jobs are charged.
  • A company that exists but publishes no jobs is listed in the run summary as an empty board; a name with no feed is listed as not found (also when the company has switched its feed off).
  • Personio has no field for remote work; a company that offers it usually names an office "Remote", which the office filter matches.
  • Dates are the creation date of the ad in Personio, not a publication date.
  • If Personio asks for a pause longer than 2 minutes, the actor stops at once, keeps the jobs already delivered (you pay only for those) and says so in the status message and in the run summary (stoppedByRateLimit).

Data source

Source: the public job feed on <company>.jobs.personio.de/xml (or .com). Personio's help center describes this feed as the way a company publishes its jobs on its own website; the company switches it on, and it needs no login or credentials. The careers sites' robots.txt allows all paths. The job ads belong to the employers who publish them; each row links to the original ad. This actor is independent and not affiliated with or endorsed by Personio.

Privacy: no personal data

Rowcraft actors are built not to collect personal data:

  • Personio's feed has no recruiter or contact fields.
  • E-mail addresses and phone numbers written inside the ads are replaced with [email removed] and [phone removed].
  • mailto: and tel: links and links to personal LinkedIn profiles are removed from texts and HTML.
  • Names of contact persons are replaced with [name removed] when they follow a title or a contact cue, as in "Ihre Ansprechpartnerin: Frau …", "Dein Kontakt …", "Your contact is …" or "please contact …". A name written anywhere else in an ad cannot be told apart from ordinary words reliably; turn off the ad texts if you only need structured data.

You are responsible for using the data in line with the law that applies to you.

Other Rowcraft actors

All Rowcraft actors read official or public sources, deliver flat rows without personal data and support only-new runs and notifications:

FAQ

Is this web scraping? It reads the public XML feed that Personio provides for each company's jobs, not the rendered pages. No login, cookies or API key.

Why do some rows have no description? The employer published the ad without text in any of the languages the actor tries, or you turned the language fallback off. The run summary counts these rows.

Why is the salary empty on most jobs? Most employers do not publish a range in Personio. When they do, the actor returns it.

Can I search all of Personio by keyword? No. The actor reads the feeds of the companies you list or of a ready-made list.

Can I read many companies without typing them? Yes. Pick one or more Ready-made company lists in the input form (Germany, DACH, Europe, remote jobs, every Personio company we know…) and the actor reads the Personio companies in them. The lists hold companies we found on the public job feeds, grouped by the countries of their open jobs; sizes are shown in the form. The coverage report says which list brought each company.

A company shows as "not found". Check the name in its careers address, or the company may have switched its job feed off.

How much does it cost? $1.00 per 1,000 job ads on the Free plan, less on paid plans (see Pricing). You pay only for rows delivered to your dataset; set a maximum total charge in the run options to cap a run.

Can I pay only for new job ads? Yes. Turn on Only new rows since the last run: the actor remembers what it delivered to you and later runs with the same state name deliver (and charge) only the new rows.

How do I get the results into Slack, Google Sheets, Make, n8n or Zapier? Use the Integrations tab of the Actor for the data, and the notifyUrl field for a message when a run ends (Slack and Discord webhooks work directly; catch hooks of Make, n8n and Zapier too).

Can I call it from code or from an AI agent? Yes: through the Apify API, the JavaScript and Python clients, and the Apify MCP server. The API tab shows a working example with the input of this Actor.

Is it legal to use this data? The actor reads the official API described in the Data source section and delivers company and job data without personal data. The licence of the source is described above. How you use the data is your responsibility under the law that applies to you.

Does it collect personal data? No. Contact persons, e-mails and phone numbers are removed and fields about people are never requested. See the Privacy section.

The run finished with 0 rows. Did I pay? No: with no rows delivered nothing is charged apart from the start event. Check the run summary (RUN_SUMMARY) for warnings, widen the filters, or run with Only new rows off if everything matching was already delivered to you.

Support and reviews

Problems, missing fields, questions: open an issue on the Issues tab of this Actor. We answer within one working day and fix confirmed bugs in the next release; the changelog lists every change.

If this Actor saved you time, a short review on its page helps other users find it and helps us keep improving it.