Personio Jobs Scraper: Any Company's Personio Careers Page avatar

Personio Jobs Scraper: Any Company's Personio Careers Page

Pricing

from $1.20 / 1,000 job listings

Go to Apify Store
Personio Jobs Scraper: Any Company's Personio Careers Page

Personio Jobs Scraper: Any Company's Personio Careers Page

Get every open job from any company's Personio careers page through Personio's public XML job feed: title, department, offices, employment type, creation date and description. Filter by keyword and location, and schedule it to get only new jobs. USD 1.50 per 1,000 jobs.

Pricing

from $1.20 / 1,000 job listings

Rating

0.0

(0)

Developer

JT Palms

JT Palms

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

15 days ago

Last modified

Share

Personio Jobs Scraper: every open job from any company on Personio

Give it a list of companies that hire with Personio (thousands of European companies do) and get back every open job as clean rows: title, department, office and additional offices, employment type, creation date, job link and the description as plain text. It reads Personio's public XML job feed, so there is no browser, no proxy and no blocking. Hundreds of jobs take a second or two.

USD 1.50 per 1,000 jobs. Companies that cannot be found are reported free.

What people use it for

  • Sales signals from hiring. Personio is the HR system of choice for small and mid-sized companies in Germany, Austria, Spain and beyond. Pull the open jobs of your target accounts every week, filter by department or keyword, and send new roles to your CRM, Clay or Slack.
  • Job boards and newsletters. Fill a regional or niche job board (DACH, startups, energy, tech) straight from the source, with a direct link for every job.
  • Recruiting market research. Compare hiring across competitors by department, office and seniority keywords, and track how open headcount changes over time.
  • Job alerts. Schedule it with Only new jobs turned on and receive only postings that appeared since the last run.

Sample output

A real row (description trimmed):

{
"source": "personio",
"company": "holidu",
"companyName": null,
"jobId": "2599598",
"title": "Account Manager Balearic Islands (all genders)",
"department": "Hosts - Sales & Account Management",
"team": null,
"location": "Palma de Mallorca, Spain",
"locations": ["Palma de Mallorca, Spain"],
"workplaceType": null,
"isRemote": false,
"employmentType": "full_time",
"compensation": null,
"postedAt": "2026-04-13T15:45:01.000Z",
"updatedAt": null,
"jobUrl": "https://holidu.jobs.personio.de/job/2599598",
"applyUrl": "https://holidu.jobs.personio.de/job/2599598",
"descriptionText": "Your future team\nHolidu offers a software and service solution which helps vacation rental owners manage and distribute their properties more efficiently. ...",
"scrapedAt": "2026-09-29T03:20:44.669Z"
}

Real runs: 1KOMMA5 returned 321 jobs in about 2 seconds (about 90 of them remote), ottonova 9, Taxdoo 8 and Holidu 6.

How to use it

  1. Add companies to Companies, one per line. Any of these work:
    • a company name: ottonova
    • a careers page URL: https://ottonova.jobs.personio.de (or .jobs.personio.com)
    • a job URL on it: https://taxdoo.jobs.personio.de/job/314758
  2. Optionally narrow the results:
    • Title keywords: engineer, Werkstudent, /product (manager|owner)/
    • Locations: Berlin, Hamburg, Remote
    • Remote jobs only
    • Departments: Tech, Sales (the recruiting category and subcompany count too)
    • Posted within (days): 7
    • Max jobs per company: newest first
  3. Click Start, then export as CSV, JSON or Excel, or read the dataset through the Apify API.

Finding the company name. It is the part before .jobs.personio.de (or .com) in the careers page address. If the company shows its jobs on its own website, Career Page Jobs Scraper finds the Personio name by itself.

Job alerts on a schedule

  1. Turn on Only new jobs and set your filters.
  2. Save the input as a task and add a schedule (daily or weekly).
  3. Connect the results to email, Slack, Google Sheets or a webhook in the task's Integrations tab.

The first run returns all matching jobs. Every later run returns only jobs that were not delivered before.

Input

FieldWhat it does
companiesCompany names or careers page URLs. Required.
keywordsKeep jobs whose title matches any keyword. Words match at their start (engineer finds "Engineering"); keywords of 3 letters or fewer must be a whole word. /regex/ is supported.
locationsKeep jobs whose office contains any of these texts. Additional offices count too.
remoteOnlyKeep only jobs that can be done remotely (an office or title that says remote).
departmentsKeep jobs whose department, recruiting category or subcompany contains any of these texts.
postedWithinDaysKeep jobs created in the last N days. 0 = any date.
maxJobsPerCompanyNewest jobs first, at most this many per company. 0 = no limit.
onlyNewJobsOutput only jobs not delivered by an earlier run (see FAQ).
includeDescriptionAdd the description as plain text, up to 5,000 characters. Default on.
maxConcurrencyCompanies processed in parallel. Default 5.

Output fields

FieldNotes
company, companyNamePersonio company name. companyName is null because the feed does not include it.
jobId, titlePersonio position ID and title, in the company's default language.
departmentThe job's department. team is always null.
location, locationsMain office, and the main plus additional offices.
workplaceType, isRemotePersonio's feed has no workplace field, so these come from office names and titles that say remote or hybrid.
employmentTypefull_time, part_time, temporary, internship (including working students and trainees), contract (freelance) or null.
compensationAlways null: the feed has no pay ranges.
postedAt, updatedAtWhen the position was created in Personio. Long-running roles keep their original date. updatedAt is null.
jobUrl, applyUrlThe job page on the Personio careers page, where candidates also apply.
descriptionTextAll description sections as plain text, capped at 5,000 characters. A job written only in English is read from the English version of the feed.
errorOnly on rows for companies that could not be read. These rows are free.

A SUMMARY record in the run's key-value store lists every company with its number of open jobs, matches, new jobs and errors.

Pricing

WhatPrice
Job listing in the resultsUSD 0.0015 (USD 1.50 per 1,000)
Company not found, feed turned off, or wrong URLFree

Example: 50 companies with 20 open jobs each is 1,000 jobs, USD 1.50. With Only new jobs on a daily schedule you pay only for new postings, usually a few cents a day.

Set a maximum cost per run in the run options and the actor stops cleanly when it gets there; everything saved so far stays in the dataset.

Limits

  • The actor identifies itself. Every request carries the user agent Mozilla/5.0 (compatible; personio-jobs/1.0; +https://apify.com/JTPalms/personio-jobs), with plain request headers. It never pretends to be a browser. Some sites block bots; a blocked request is reported as an error, not hidden.
  • The company must have Personio's XML job feed turned on (most do). When it is off, you get a free error row that says so.
  • No pay ranges and no company display name in the feed.
  • postedAt is the creation date of the position, so evergreen roles can look old. Use Only new jobs to catch new postings reliably.

FAQ

What does it read? Only Personio's public XML job feed (<company>.jobs.personio.de/xml), which Personio documents for publishing open positions on company websites and job boards. It sees published job postings only, collects no personal data, and never logs in or submits anything. If you republish jobs, link to jobUrl so candidates apply with the company.

How does Only new jobs work? The actor keeps, per company, the IDs of the jobs it has already delivered, in a key-value store named personio-jobs-monitor in your own Apify account. Each run outputs only matching jobs whose ID is not in that list, then adds them. Jobs left out only by Max jobs per company are marked as seen too, so they do not come back later. Jobs cut off by your cost limit stay new for the next run. Closed jobs are dropped from the list automatically. To start over, delete the store in Storage.

Does it work with personio.com careers pages? Yes. Both .jobs.personio.de and .jobs.personio.com are tried.

Are there sister actors? Yes. Greenhouse, Lever, Ashby, Workable, Recruitee and Breezy HR Jobs Scrapers give the same row format, and Career Page Jobs Scraper finds the right one from a company's website.

Something missing or wrong? Open an issue with the company name and what you expected.

Is this an official Personio product? No. It is an independent tool that reads Personio's public XML job feed. It is not affiliated with or endorsed by Personio.