Connect Personio to Microsoft Entra ID

Connect Personio to Microsoft Entra ID

Connect Personio to Microsoft Entra ID

When someone joins, moves or leaves in Personio, you want that change reflected in Microsoft Entra ID without anyone touching it by hand. To connect Personio to Microsoft Entra ID, Joinly reads each HR change at the source — through the Personio REST API — and applies it automatically to the right account. Personio stays your source of truth; Joinly is the engine that keeps every action accurate, traceable and inside EU data centres.

Key takeaways

  • Personio stays your source of truth; Joinly applies every joiner, mover and leaver to Entra ID automatically.

  • Joinly maps Personio attributes — department, team, office, position, employment type and legal entity — to the right Entra ID groups and licences, the exact step Personio’s own Entra integration leaves out (it doesn’t add users to groups).

  • Joinly reads the Personio API and handles the v1-to-v2 transition, so your connection keeps working as Personio retires the classic v1 endpoints in 2026.

  • Employment types — permanent, fixed-term, working student, intern, freelancer — drive different access, so a working student doesn’t get a full-employee licence by default.

  • European by design: data stays in an EU data centre and every action is logged for GDPR, NIS2 and ISO 27001, which matters for works-council sign-off.

Personio

Joiner

Mover

Leaver

Microsoft Entra ID (formerly Azure AD)

Quick facts

Source system

Personio (HR core)

Target system

Microsoft Entra ID (formerly Azure AD)

Connection method

Personio REST API (v1/v2) → Entra ID

Supported events

Joiner, mover, leaver (incl. employment-type change, rehire, contract end)

Synced attributes

Name, email / UPN, department, team, position, office, supervisor, employment type, legal entity, hire and termination date

Authentication

Client ID / client secret (Bearer token, v1; OAuth 2.0 client_credentials, v2)

Real-time or batch

Frequent sync, multiple times per day

Compliance

ISO 27001, NIS2-ready, GDPR (EU data centre)

How does Joinly sync Personio to Microsoft Entra ID?

Joinly reads each HR change in Personio through the REST API and applies it to the matching Entra ID account automatically. Personio holds the authoritative employee record, so it is the starting point for each identity action.

  1. Joiner. HR completes the hire in Personio. Joinly reads the new employee record and determines the role from attributes like department, position, office and employment type. It then creates the account in Entra ID, assigns the right licences and maps the person into the correct groups — timed to the hire date held in Personio.

  2. Mover. When someone changes position, department, office or legal entity in Personio, Joinly updates their group membership, permissions and licences to match. Access that no longer fits the new role is revoked, so permissions stay aligned with the actual job — including when a fixed-term contract converts to permanent.

  3. Leaver. On the termination date recorded in Personio, Joinly disables the Entra ID account automatically. There are no orphaned accounts left active after someone has left, and a fixed-term contract ending is treated the same as any other departure, so working students and interns are offboarded on schedule too.

Example: A European SaaS scale-up hires a customer-success manager in Personio with a hire date next Monday, in its German legal entity. Joinly reads the record, waits until the hire date, creates the Entra ID account, assigns a Microsoft 365 E3 licence and adds the new joiner to the DE-CustomerSuccess group. When a working student in the same team is later given a fixed-term permanent contract, Joinly reads the employment-type change and swaps the limited licence for a full one the same day.

What manual user management costs

Without automation, every account starts as a Personio note or a line in a spreadsheet that IT works through by hand. Personio’s own Marketplace integration for Entra ID can create, update and deactivate users, but it explicitly does not add them to groups and has no role-to-group logic — so the part that actually decides access still falls to people.

  • Onboarding delays. New joiners wait for accounts, licences and group access while a request sits in a queue, losing productive days in their first week.

  • Permissions that don’t keep up (privilege creep). When movers change position or legal entity, old access often stays attached, so people accumulate rights they no longer need.

  • Forgotten offboarding. Accounts that aren’t disabled on time are both a security and audit risk, and unused licences keep costing money — fixed-term and working-student contracts that simply end are especially easy to miss.

Joinly vs. the native Personio Entra integration

Personio’s Marketplace integration for Microsoft Entra ID is a fine baseline for pushing employee records, but it stops short of the part that actually decides access. Here’s how the two compare for a Personio-driven setup.


Joinly

Personio Marketplace Entra integration

Source

Reads the Personio REST API directly

Reads Personio directly

Role-to-group mapping

Built in, rule-based on department / position / office

Not supported — does not add users to groups

Licence assignment

Driven by role and employment type

Not handled

Employment types

Working student / intern / fixed-term get distinct access

Single flat treatment

API version

Handles v1 and the newer v2 OAuth flow

Vendor-managed; tied to its own scope

On-premise AD

Yes, own agent plus the native Microsoft agent

Cloud Entra only

Audit trail

Per-action logging tied to the HR source

Limited

Watch-outs when connecting Personio to Microsoft Entra ID

A few Personio-specific details decide whether this connection stays reliable at scale.

  • Employment types drive different access. Personio distinguishes permanent, fixed-term, working student, intern and freelancer. A naive rule gives them all the same access. Joinly reads the employment type and assigns the right licence and groups, so a working student doesn’t get a full-employee Microsoft 365 plan.

  • Mapping department, position and legal entity to Entra groups. Department, team, office, position and legal entity don’t translate one-to-one to Entra ID groups. Joinly builds explicit mapping rules from those structures to the correct groups and licences, so role drives access rather than the manual assignment the native integration leaves to you.

  • The v1-to-v2 API transition. Personio is retiring the classic v1 endpoints in 2026 in favour of a v2 OAuth 2.0 API. Joinly handles both and keeps the connection working across the change, so you don’t have to re-plumb your provisioning when the old endpoints are switched off.

  • UPN format with duplicate names. When two employees share a name, a naive UPN rule produces collisions. Joinly applies custom transformation rules — a suffix, legal-entity code or controlled tiebreaker — so every UPN is unique and predictable from day one.

  • Custom attributes and EU data residency. Personio custom attributes aren’t all exposed by default, and as a European HR system it carries works-council and GDPR expectations about what leaves it. Joinly maps the custom fields you need via Liquid templates and keeps all data in an EU data centre, so only the attributes you choose are synced.

Joinly handles each of these by default with custom mapping and transformation.

Always audit-ready

Every account action Joinly performs is logged: who was affected, when it happened, which access changed and which Personio change triggered it. For NIS2 that matters directly: access can be traced back to an authorised HR source rather than an ad-hoc request. Joinly is ISO 27001 certified, runs in an EU data centre in Amsterdam, applies least-privilege by default, and is built to meet NIS2 and ISO 27001 — and EU data residency makes works-council sign-off far easier.

Example case

Picture a European SaaS scale-up with around 900 employees across Germany, the Netherlands and Spain, running Personio as its HR core while its identity provisioning never quite keeps up. The native Personio-to-Entra integration creates the accounts, but because it doesn’t add users to groups, IT still hand-assigns every licence and security group — and with a steady mix of working students, interns and fixed-term contracts, the wrong people end up with full Microsoft 365 plans.

Connect Personio to Microsoft Entra ID with Joinly and that work disappears. Joinly reads each HR change in Personio at the source and acts on it automatically: new hires have their account, the right licence and group access ready on their hire date, role changes swap the right groups the same day, working students get a limited plan that upgrades automatically when their contract converts, and leavers are disabled on their termination date with a 30-day soft-delete grace window — all inside EU data centres.

“The native sync put people in Entra but not in any groups, so IT did the access by hand for every working student and intern. Now the right groups and the right licence are simply there on the hire date, and our works council is comfortable because nothing leaves the EU.” — Head of People Operations, European SaaS scale-up

The outcome this setup is designed for: onboarding drops from days to zero touch, employment-type licence mistakes stop entirely, and the team can walk into its next NIS2 assessment with a complete, source-backed audit trail.

More than a connector

A standalone Personio to Entra ID connection is a good start, but identity rarely stops at one target. Joinly manages the complete chain from joiner to leaver across all your systems, with logging and governance built in. You review the exceptions; Joinly maintains the chain.

Schedule a demo

Installation manual

Installation manual

Connect Personio to Microsoft Entra ID

Connect Personio to Microsoft Entra ID

Installation guide

Follow these steps to connect Personio to Microsoft Entra ID with Joinly. The entire cloud setup happens in the platform, with no scripts or local software required.

1. Create your account

Go to platform.joinly.app and create your account.

Note: charges may apply for using the platform after the trial period ends.


Joinly account creation screen at platform.joinly.app


Sign up at platform.joinly.app to get started.

2. Connect your Microsoft account

Open platform.joinly.app/settings/provisioning/idp-setup and connect your Microsoft tenant. Select the scopes you need. For provisioning you don’t need any additional scopes.


Joinly identity provider setup screen for connecting a Microsoft Entra tenant


Connect your Microsoft tenant and pick your scopes.

3. Import your existing accounts from Entra ID

Import all existing accounts from Entra ID at platform.joinly.app/settings/provisioning/entra-import. This gives Joinly a baseline of every account that already exists, so it can match people to their current account instead of creating duplicates.

4. Find the Personio integration in the Joinly marketplace

Open the Joinly marketplace and search for the Personio integration.

Don’t see your system listed? Get in touch at support@koppelhet.nl and we’ll help you out.


Joinly marketplace showing available HR integrations


Search the marketplace for the Personio integration.

5. Follow the installation wizard

You may be redirected to integrations.joinly.app. Create an account there and enter your Personio connection details: your API client ID and client secret from the Personio API Credentials page. We only ask for the information needed to establish a successful connection with Personio. All data is encrypted and stored securely in an EU data centre.


Joinly installation wizard for entering Personio connection details


Enter your Personio client ID and client secret in the wizard.

6. Configure your field mapping

Set up all your field mappings here. Templates support Liquid, so you can build your display name, UPN and other attributes dynamically from Personio fields.

Frequently asked questions

  • How do I map the manager? Reference the supervisor on the Personio record and Joinly resolves the link to the right manager automatically.

  • How do I handle employment types? Use the employment-type attribute as a condition in your workflows, so working students, interns and fixed-term staff get different licences and groups.

  • How do I prevent duplicate usernames? Use the generateUniqueUsername helper, which falls back to the next pattern when the first one is already taken:
    {{ generateUniqueUsername: “{firstName}.{prefix}.{lastName}”, “{initials}.{prefix}.{lastName}” }}


Joinly field mapping screen for Personio attributes using Liquid templates


Map Personio fields to Entra ID attributes with Liquid templates.

7. Configure the scheduled import

At platform.joinly.app/settings/import-configs, configure how often the import from Personio should run.

8. Configure your workflows

Workflows are where Joinly turns each HR change into the right action in Entra ID. Create an onboarding (joiner) and offboarding (leaver) workflow with trigger-based execution, then an Identity updated workflow with a Create/update employee in Entra action so every change in Personio flows straight through to Entra ID. Finally, add a threshold workflow with the Entra soft delete action that runs a set period after the termination date (for example 30 days) to retire accounts safely.


Joinly workflow editor creating an employee onboarding workflow


Create a trigger-based onboarding workflow.


Adding the create or update employee in Entra action to a workflow


Add the create/update action, then set your matching strategy and field mapping.


Adding the Entra soft delete action to remove accounts on employee leave


Add the Entra soft delete action to retire accounts safely.

## AD on-premise support

Need to provision to an on-premise Active Directory as well? See our dedicated guide on connecting Personio to Active Directory, or contact support at support@koppelhet.nl to request setup of the Joinly AD Agent.

Frequently asked questions

Does the Personio to Microsoft Entra ID connection work in real time?
It runs as a frequent sync that updates multiple times per day, so changes in Personio reach Entra ID quickly without waiting for a nightly batch.

Does Joinly add users to Entra ID groups, unlike the native Personio integration?
Yes. Personio’s own Entra integration creates, updates and deactivates users but explicitly does not add them to groups. Joinly maps department, position, office and employment type to the right groups and licences automatically.

How does Joinly handle Personio employment types?
Joinly reads the employment type — permanent, fixed-term, working student, intern or freelancer — and uses it as a condition, so each type gets the licence and group access it should and nothing more.

What happens when Personio retires the v1 API in 2026?
Joinly supports both the classic v1 endpoints and the newer v2 OAuth 2.0 API, so your connection keeps working through the transition with no re-plumbing on your side.

Where is my Personio data stored?
In an EU data centre in Amsterdam. Joinly is ISO 27001 certified and built for GDPR and NIS2, so only the attributes you map leave Personio and they stay within the EU — which makes works-council sign-off easier.

Does Joinly also support AD on-premise or hybrid provisioning?
Yes. Joinly has its own AD on-premise agent and also supports the native Microsoft Entra provisioning agent, so you can provision users to your on-premise AD environment as well. See the Personio to Active Directory guide.

Request installation support