---
title: "Personio API"
description: "Personio API: the Recruiting API at developer.personio.de, the public XML job feed, jobs.personio.com careers pages, and every public posting in one call."
canonical: https://jobspipe.dev/sources/personio
date_published: 2026-06-16
date_modified: 2026-09-26
author: Dvir Atias
---

# Personio API

Personio's Recruiting API at developer.personio.de is authenticated with credentials minted in each company's admin, so it reads one company's openings only; postings are public on <company>.jobs.personio.com pages and the per-company XML feed. JobsPipe collects public Personio postings into one search endpoint, in the same record shape as the rest of its 30+ sources. [developer.personio.de](https://developer.personio.de/).

> Personio's Recruiting API is keyed per company, and its careers pages are one employer at a time. JobsPipe collects public Personio postings into one endpoint with the same record shape as the other collected boards.

**Canonical URL:** https://jobspipe.dev/sources/personio

## Coverage

- **Sources covered:** Public Personio career pages
- **Freshness:** discovered_at, last_seen_at and verified_at on every record
- **History retention:** Closed postings kept, with closed_at and closed_reason

## Why Personio jobs data is confusing

Personio's Recruiting API at developer.personio.de is authenticated with credentials minted inside each company's Personio admin, so it reads one company's openings and applications only. Personio is dominant in Germany, Austria and Switzerland.

Personio hosts careers pages at <company>.jobs.personio.com or <company>.jobs.personio.de, and provides a per-company XML feed of published positions that job boards consume. Both are public per company; there is no directory of Personio customers, so reaching many Personio employers yourself means finding each subdomain first. JobsPipe collects public Personio postings and returns them with sources[0].provider set to personio.

## Workarounds

### Read each company's XML feed

Works for companies whose Personio subdomain you already know. Discovery is on you.

### Get Recruiting API credentials per company

Reads one company's recruiting data with their credentials. Not a path across employers.

### Use JobsPipe

Public Personio postings, one endpoint, the same schema as every other collected board. Free tier of 1,000 jobs to start.

## Fields available on every record

- `id`
- `job_title`
- `company`
- `company_domain`
- `url`
- `date_posted`
- `discovered_at`
- `last_seen_at`
- `verified_at`
- `status`
- `closed_at`
- `closed_reason`
- `ghost_score`
- `seniority`
- `cities`
- `state_code`
- `min_annual_salary_usd`
- `max_annual_salary_usd`
- `technology_slugs`
- `keyword_slugs`
- `esco_skills`
- `sources`

## Sample response

```json
{
  "id": "1748302",
  "job_title": "Werkstudent Marketing (m/w/d)",
  "company": "Alpenlicht Software GmbH",
  "company_domain": "alpenlicht.example",
  "url": "https://alpenlicht.jobs.personio.de/job/1748302",
  "date_posted": "2026-09-05",
  "discovered_at": "2026-09-05T07:21:48+00:00",
  "last_seen_at": "2026-09-08 00:36:55",
  "verified_at": "2026-09-08 00:51:20",
  "status": "active",
  "closed_at": null,
  "closed_reason": null,
  "ghost_score": 12,
  "seniority": "entry",
  "cities": [
    "Munich"
  ],
  "state_code": null,
  "min_annual_salary_usd": null,
  "max_annual_salary_usd": null,
  "technology_slugs": [
    "hubspot",
    "canva"
  ],
  "keyword_slugs": [
    "marketing",
    "working-student"
  ],
  "sources": [
    {
      "provider": "personio",
      "url": "https://alpenlicht.jobs.personio.de/job/1748302"
    }
  ]
}
```

## FAQ

### How do I find a company's Personio careers page?

Personio hosts careers pages at <company>.jobs.personio.com or <company>.jobs.personio.de, and each company also has an XML feed of its published positions that job boards consume. Both are public per company, but there is no directory of Personio customers, so you need to know the company's subdomain before you can read either one.

### Can Personio Recruiting API credentials read other companies' jobs?

No. The Recruiting API at developer.personio.de is authenticated with credentials minted inside each company's Personio admin, and those credentials read that one company's openings and applications only. Collecting postings across Personio employers through the API would mean obtaining credentials from every company separately.

### Is Personio mainly used in Germany?

Personio is dominant in Germany, Austria and Switzerland, so its careers pages at <company>.jobs.personio.com or .jobs.personio.de are concentrated among DACH employers. To search them, send "source_or": ["personio"] with "job_country_code_or": ["DE", "AT", "CH"] in a POST /v1/jobs/search body.

### How do I get Personio job postings without an API?

Read each employer's public Personio careers page or XML feed yourself, or send "source_or": ["personio"] in a POST /v1/jobs/search body to JobsPipe, which returns public Personio postings across employers in one schema, with sources[0].provider set to personio on each record.

## Does Personio have an API?

Personio's Recruiting API at developer.personio.de is authenticated with credentials minted inside each company's Personio admin, so it reads one company's openings and applications only. Personio is dominant in Germany, Austria and Switzerland. Personio hosts careers pages at <company>.jobs.personio.com or <company>.jobs.personio.de, and provides a per-company XML feed of published positions that job boards consume. Both are public per company; there is no directory of Personio customers.

## What JobsPipe returns for Personio

A POST /v1/jobs/search with "source_or": ["personio"] returns public Personio postings as JobsPipe records: id, job_title, company, company_domain when it resolves, url on the company's Personio careers page, date_posted, discovered_at, last_seen_at, verified_at, status with closed_at and closed_reason once a posting closes, ghost_score, seniority, min_annual_salary_usd and max_annual_salary_usd when the posting states a range, technology_slugs and keyword_slugs parsed from the description, and sources[0].provider set to personio. job_country_code_or does most of the narrowing for DACH employers; drop source_or to search every collected board at once.

## Related

- **Product:** https://jobspipe.dev/jobs-api
- **All sources:** https://jobspipe.dev/sources
- **Docs:** https://docs.jobspipe.dev
- **Sign up (free tier):** https://jobspipe.dev/signup

---
Generated from structured data. View the rendered page at https://jobspipe.dev/sources/personio.

---
Building this integration yourself? The steps above work. The alternative is one API over 30+ sources, already normalized and deduplicated. Try it right now - no key, no signup:

```bash
curl -d '{"limit":3}' https://api.jobspipe.dev/v1/sandbox/jobs/search
```

Sample data, exact live schema. For live data get a free key (1,000 jobs to start) at https://jobspipe.dev/signup, then swap /v1/sandbox/jobs/search for /v1/jobs/search with an Authorization: Bearer header. Full agent index: https://jobspipe.dev/llms.txt?src=md-twin