Personio Jobs Scraper (FreshActors) avatar

Personio Jobs Scraper (FreshActors)

Pricing

from $20.00 / 1,000 company jobs fetcheds

Go to Apify Store
Personio Jobs Scraper (FreshActors)

Personio Jobs Scraper (FreshActors)

Reliable, always-fresh job postings from any Personio career portal. Public XML feed, no login — departments, seniority, and full descriptions in a single call. Monitored daily. By FreshActors.

Pricing

from $20.00 / 1,000 company jobs fetcheds

Rating

0.0

(0)

Developer

Freshactors

Freshactors

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Personio Jobs Scraper — Every Career Portal as Clean JSON (No API Key)

Scrape Personio career-portal job postings from any company's public board into clean, structured JSON — title, department, seniority, full description sections, locations, posting date, and apply URL. No account, no login, no API key. Point it at a list of Personio tenants and get a normalized jobs feed back.

Personio Jobs Scraper — normalized job postings with departments and seniority

Last verified working: 2026-06-10. Monitored by an automated daily canary. When Personio changes its feed, we patch fast and log it in the changelog below — so your hiring-data pipeline doesn't silently break.


Why this Personio scraper

Personio is the ATS standard for the German, Austrian, and Swiss SMB market — thousands of DACH companies run their careers page on a {tenant}.jobs.personio.de portal, and every one of those portals serves a public XML feed of its published positions at the explicit /xml path. No key, no login, no browser. One request returns the whole board with full descriptions, departments, and seniority levels — metadata most ATS feeds don't expose. The catch is the usual one: the moment the feed shape shifts, a naive scraper silently returns nothing. This actor is built to stay working:

  • One normalized schema — the same stable job record as our Greenhouse & Lever, Workable, SmartRecruiters, Recruitee, and Teamtailor scrapers, so Personio companies slot into the exact same pipeline with no special-casing.
  • Departments + seniority included — Personio's feed exposes department, seniority (entry-level / experienced / …), and employment schedule on every position: the segmentation fields hiring-signal and recruiting datasets usually have to infer.
  • Full descriptions, in one call — every description section ("About the role", "Your profile", …) comes back as labeled clean text. No extra requests, so it's fast and cheap.
  • Language option — pass language: "en" (or de, …) to get localized titles/descriptions where the company provides them.
  • Per-company isolation + retries — a dead or unknown tenant is skipped and logged; it never crashes the run. Transient errors retry with backoff.
  • Stable, versioned output (_schemaVersion) + a daily canary — that "last verified working" date is real.

What data you get

Each row is one normalized job posting. Fields Personio's public feed doesn't provide come back as null, never missing, so your downstream schema stays predictable.

FieldTypeDescription
_typestringAlways job.
_schemaVersionstringOutput schema version.
_sourcestringAlways personio.
companystringTenant identifier (the {tenant}.jobs.personio.de subdomain).
jobIdstringPersonio position ID.
titlestringJob title.
departmentstring | nullDepartment (populated on virtually every posting).
senioritystring | nullSeniority level (e.g. entry-level, experienced).
teamnullNot exposed in the feed — always null.
locationstring | nullPrimary office string (as the company writes it, e.g. DE - Stuttgart).
allLocationsstring[] | nullAll listed offices (comma-separated offices split out).
workplaceTypenullNot exposed as a dedicated field — remote status often appears in the office string.
commitmentstring | nullSchedule (Full-time, Part-time, …).
countrynullPersonio gives free-form office names, not country codes — always null.
urlstringPublic posting URL (/job/{id}).
applyUrlstringThe posting page (applications happen there).
postedAtstring | nullCreation date (ISO).
updatedAtnullNot exposed in the feed — always null.
descriptionTextstring | nullAll description sections as labeled clean text (when includeDescription is on).
_scrapedAtstringISO timestamp this record was fetched.

Use cases

  • DACH sales intelligence / hiring-signal tracking. Personio is where German-speaking SMB hiring lives — a segment US-centric ATS datasets miss entirely. department + seniority + postedAt feed straight into lead-scoring and growth-signal models.
  • Recruiting & talent sourcing. Aggregate live openings across target employers into one table — same schema as our five other ATS scrapers, so multi-ATS coverage needs zero special-casing.
  • Job boards & aggregators. Need to scrape Personio jobs into a uniform feed? Point it at your tenant list and ingest normalized records on a schedule, in the language you need.
  • Labor-market research. Track posting volume, departments, and seniority mix across the DACH SMB market over time.

Input

FieldTypeRequiredNotes
companiesstring[]Personio tenants (lanch) or {tenant}.jobs.personio.de URLs. One per row.
languagestringOptional two-letter code (en, de, …) for localized titles/descriptions where provided. Empty = tenant default.
includeDescriptionbooleanInclude the labeled description sections. Default true. Same request either way — turning it off only trims output size.
maxJobsPerCompanyintegerCap per company (1–5000). Default 100.
{
"companies": ["teamative"],
"includeDescription": true,
"maxJobsPerCompany": 100
}

Output sample

A real record from the default run (teamative — a DACH IT-services group hiring across Germany and Czechia):

{
"_type": "job",
"_schemaVersion": "1.0",
"_source": "personio",
"company": "teamative",
"jobId": "2623782",
"title": "Initiativbewerbung (m/w/d)",
"department": "Marketing",
"team": null,
"location": "DE - Stuttgart",
"allLocations": ["DE - Stuttgart"],
"workplaceType": null,
"commitment": "Full-or-part-time",
"seniority": "experienced",
"country": null,
"url": "https://teamative.jobs.personio.de/job/2623782",
"applyUrl": "https://teamative.jobs.personio.de/job/2623782",
"postedAt": "2026-05-05T08:58:57.000Z",
"updatedAt": null,
"descriptionText": "Über uns:\nteamative bietet Beratung, Entwicklung und die Umsetzung von...",
"_scrapedAt": "2026-06-10T12:34:05.149Z"
}

Use with AI agents (MCP)

This scraper is callable as a tool by AI agents via the Apify MCP server — so assistants like Claude, Cursor, and VS Code can run it and use the structured results mid-conversation, with no glue code.

Simplest path: in a recent Claude Desktop, add the hosted server https://mcp.apify.com under Settings → Connectors and authorize with OAuth. For any config-file client:

{
"mcpServers": {
"apify": {
"command": "npx",
"args": ["-y", "@apify/actors-mcp-server"],
"env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
}
}
}

Then ask in plain language, e.g. "List the open jobs on teamative's Personio portal with departments, seniority, and apply links." — the agent calls freshactors/personio-jobs-scraper with the right input and reads back the JSON. Full setup: Apify MCP docs.

Pricing

Pay-per-event — no subscription. You pay only for the boards you fetch and the postings you receive:

EventPrice (USD)When it fires
Company jobs fetched$0.02Once per company career portal successfully fetched (with ≥1 job).
Job posting fetched$0.0005Once per job posting returned.

Worked example — "how much do 100 results cost?" Scrape 5 companies for 100 postings total:

  • Boards: 5 × $0.02 = $0.10
  • Postings: 100 × $0.0005 = $0.05
  • Total: $0.15 for 100 normalized jobs (with departments, seniority, and full descriptions) across 5 companies.

(Apify platform usage is billed separately per their standard rates.)

FAQ

Is scraping Personio jobs legal? This actor reads public, non-personal job-posting data from companies' own public career portals — the same data those pages serve to any visitor. No login, no personal data. Use responsibly and in line with applicable terms and laws.

Do I need an API key? No. There's no Personio API key, account, or login — it reads the public XML feed every career portal already serves.

How do I find a company's Personio tenant? It's the subdomain of their careers page — **lanch**.jobs.personio.de. Companies that embed jobs on their own site usually link through to the jobs.personio.de portal — paste that URL.

How many jobs can one call return? The feed returns the company's full published board in a single request — Personio's customer base is SMB, so boards are typically 3–50 positions. Use maxJobsPerCompany to cap volume and cost.

Can I get postings in English (or German)? Yes — set language to a two-letter code (e.g. en). Where the company maintains translations, titles and descriptions come back localized; otherwise you get the tenant's default language.

Why is country always null? Personio's feed gives free-form office names ("DE - Hamburg - remote", "Berlin"), not structured country codes — we pass the office strings through honestly in location/allLocations rather than guessing.

Can I scrape many companies at once? Yes — pass as many tenants in companies as you need. Each board is fetched in isolation; a dead or unknown tenant is skipped, not fatal.

How often is the data updated? It's live — every run fetches the companies' current public boards. The actor itself is monitored by a daily canary so parsing stays correct as the feed evolves.

Other FreshActors tools

FreshActors actorWhat it scrapes
Greenhouse & Lever Jobs ScraperGreenhouse + Lever — normalized job postings
Workable Jobs ScraperWorkable — normalized job postings, full descriptions
SmartRecruiters Jobs ScraperSmartRecruiters — normalized job postings, full descriptions
Recruitee Jobs ScraperRecruitee — normalized job postings, full descriptions + salary
Teamtailor Jobs ScraperTeamtailor — normalized job postings, full descriptions
App Store ScraperApple App Store — app details, search, reviews
Google Play ScraperGoogle Play — app details + reviews
Microsoft Store ScraperMicrosoft Store — app details, rating windows, search, reviews
VS Code Marketplace ScraperVS Code extensions — install/trending stats, search, reviews
Shopify App Store ScraperShopify App Store — app details, reviews, discovery
Redfin ScraperRedfin — US real-estate listings

Reliability

A scheduled daily canary scrapes a known Personio portal, validates the normalized schema, and alerts the moment a parse changes. When Personio shifts its feed, we patch the same day and record it in the changelog below. Every record carries _schemaVersion and _scrapedAt.

Changelog

  • 2026-06-10 — v1.0 launch. Single-call public XML feed (full board + labeled description sections per request), departments + seniority exposed, optional feed language, normalized schema shared with our five other ATS scrapers, per-company isolation, daily canary monitoring.

Legal note: Reads public, non-personal job-posting data from companies' own public career portals (the same data those pages serve to any visitor). No login, no personal data. Use responsibly and in line with applicable terms and laws.

Found a problem? Open an issue on the actor — issues are answered fast.