When someone joins, moves or leaves in Employes, you want that change reflected in Microsoft Entra ID without anyone touching it by hand. To connect Employes to Microsoft Entra ID, Joinly reads each HR change in the werknemersdossier at the source — through the Employes REST API — and applies it automatically to the right account. Employes stays your source of truth for pay and HR; Joinly is the engine that keeps every account accurate and traceable.
Key takeaways
Employes stays your HR and payroll source of truth; Joinly applies every joiner, mover and leaver to Entra ID automatically.
Joinly reads the Employes REST API (v4) with a Bearer token, so there is no export file or manual CSV to maintain.
Joinly maps Employes departments (afdeling) and job types (functie) to the right Entra ID groups and licences — logic Employes itself does not provide, because it has no native identity or Entra integration.
Dutch name particles (the tussenvoegsel / surname_prefix) and multiple dienstverbanden per person are handled with explicit rules, so display names and UPNs stay clean and stable.
Every action is logged for a complete audit trail, aligned with NIS2 and ISO 27001, with data kept in an EU data centre.
Quick facts
Source system | Employes (werknemersdossier) |
Target system | Microsoft Entra ID (formerly Azure AD) |
Connection method | Employes REST API (v4) → Entra ID |
Supported events | Joiner, mover, leaver (incl. rehire and multiple employments) |
Synced attributes | Name, email / UPN, department (afdeling), job type (functie), employee number, manager, start and end date |
Authentication | Bearer token (generated in Employes settings, valid one year) |
Real-time or batch | Frequent scheduled sync, multiple times per day |
Compliance | ISO 27001, NIS2-ready, GDPR (EU data centre) |
How does Joinly sync Employes to Microsoft Entra ID?
Joinly reads each HR change in Employes through its REST API and applies it to the matching Entra ID account automatically. The Employes werknemersdossier holds the authoritative employment record, so it is the starting point for each identity action.
Joiner. HR completes the hire in Employes. Joinly reads the new werknemer and its dienstverband — including department, job type and start date — and determines the role. It then creates the account in Entra ID, assigns the right licences and maps the person into the correct groups, timed to the start date on the employment record.
Mover. When someone changes department (afdeling), job type (functie) or gets a new contract in Employes, Joinly updates their group membership, permissions and licences to match. Access that no longer fits the new position is revoked, so permissions stay aligned with the actual job.
Leaver. On the end date recorded on the Employes employment, Joinly disables the Entra ID account automatically. There are no orphaned accounts left active after someone has left, and where a person holds more than one dienstverband, access is only removed when the last active employment ends.
Example: A retail chain runs Employes for its shop and head-office staff. It hires a store assistant with a start date next Monday in the Rotterdam branch. Joinly reads the new employment record, waits until the start date, creates the Entra ID account, assigns a Microsoft 365 Business licence and adds the assistant to the Store-Rotterdam group. When that assistant later picks up extra weekend hours as a second dienstverband at head office, Joinly keeps a single, stable UPN and simply adds the extra group.
What manual user management costs
Without automation, every account starts as an email from the payroll administrator or a line in a spreadsheet that IT works through by hand. Because Employes has no native Entra or identity connector, the usual alternatives are a custom script against its REST API or a generic iPaaS flow — both of which still leave the part that actually decides access, the role-to-group mapping, to people to build and maintain.
Onboarding delays. New joiners wait for accounts, licences and group access while a request sits in someone’s inbox, losing productive days in their first week.
Permissions that don’t keep up (privilege creep). When movers change department or pick up a new contract, 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 — and with more than one dienstverband it is easy to disable an account while another employment is still active.
Joinly vs. a custom Employes API integration
Employes has no native Entra ID or identity connector, so the realistic alternative is a script or iPaaS flow your team builds against the Employes REST API. That is a fine way to move data, but it stops short of the part that actually decides — and safely maintains — access. Here’s how the two compare.
Joinly | Custom API script / iPaaS | |
|---|---|---|
Source | Reads the Employes REST API directly | Reads the Employes REST API directly |
Role-to-group mapping | Built in, rule-based on department and job type | You build and maintain every rule by hand |
Future-dated hires | Times account creation to the employment start date | You code the date-window logic yourself |
Licence assignment | Driven by role / attributes | Custom code or none |
On-premise AD | Yes, own agent plus the native Microsoft agent | Build and host your own connector |
Audit trail | Per-action logging tied to the HR source | Only what you log yourself |
Watch-outs when connecting Employes to Microsoft Entra ID
A few Employes-specific details decide whether this connection stays reliable at scale.
Dutch name particles (tussenvoegsel). Employes stores the surname prefix (van, van der, de) in a separate surname_prefix field. A naive display-name or UPN rule either drops it or mangles it. Joinly builds the display name, mail and UPN from explicit rules, so ‘Sanne van der Berg’ resolves to a clean, predictable identity every time.
Multiple employments per person. An employee can hold more than one dienstverband in Employes at the same time. Joinly picks the active/primary employment as the driver of the account and adds the extra access, so a second contract never creates a duplicate account or breaks sign-in — and ending one employment doesn’t disable someone who is still employed.
Poll-based sync and future dates. The Employes API has no webhooks, so provisioning runs on a frequent scheduled import rather than an instant push. Joinly reads the start and end dates on the employment record and times account creation and disabling to those dates, so access is ready on the right day rather than the moment the sync happens to run.
Mapping departments and job types to Entra groups. Employes departments (afdeling) and job types (functie) 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 manual assignment.
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 Employes 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.
Example case
Picture a retail chain with around 700 staff across forty stores and a head office, running Employes for payroll and HR while account creation lives in the office manager’s inbox. Seasonal hires, students on flexible contracts and people who pick up shifts at a second store keep breaking the routine — new joiners wait until day two or three for a Microsoft 365 account, and when someone leaves one store but keeps working at another, their account sometimes gets switched off by mistake.
Connect Employes to Microsoft Entra ID with Joinly and that work disappears. Joinly reads each HR change in Employes at the source and acts on it automatically: new hires have their account, Microsoft 365 licence and store group ready on their start date, a move between stores swaps the right groups the same day, a second contract just adds access on a single stable account, and leavers are disabled on their end date with a 30-day soft-delete grace window.
“Half our people work flexible or seasonal contracts, and staff at two stores used to break every account. Now an account is simply ready on the start date, a second contract just adds access, and we can show exactly which Employes change created it.” — Head of IT, retail chain
The outcome this setup is designed for: onboarding drops from days to zero touch, duplicate-contract errors 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 Employes 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 guide
Follow these steps to connect Employes 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.

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.

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 Employes integration in the Joinly marketplace
Open the Joinly marketplace and search for the Employes integration.
Don’t see your system listed? Get in touch at support@koppelhet.nl and we’ll help you out.

Search the marketplace for the Employes integration.
5. Follow the installation wizard
You may be redirected to integrations.joinly.app. Create an account there and enter your Employes connection details: the Bearer token you generate in Employes (click your name in the bottom-left, then the token option) and your company ID. The token is valid for one year. We only ask for the information needed to establish a successful connection with Employes. All data is encrypted and stored securely.

Enter your Employes Bearer token and company ID 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 Employes fields.
Frequently asked questions
How do I handle the Dutch surname prefix? Reference the
surname_prefix(tussenvoegsel) field in your Liquid template so it lands in the display name and mail exactly where you want it.How do I handle multiple employments? Pick the active/primary dienstverband as the driver for the account; Joinly exposes the employments so you can choose the primary one.
How do I prevent duplicate usernames? Use the
generateUniqueUsernamehelper, which falls back to the next pattern when the first one is already taken:{{ generateUniqueUsername: “{firstName}.{prefix}.{lastName}”, “{initials}.{prefix}.{lastName}” }}

Map Employes 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 Employes should run. Because the Employes API is poll-based, a frequent schedule keeps Entra ID close to real time.
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 Employes flows straight through to Entra ID. Finally, add a threshold workflow with the Entra soft delete action that runs a set period after the end date (for example 30 days) to retire accounts safely.

Create a trigger-based onboarding workflow.

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

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 Employes to Active Directory, or contact support at support@koppelhet.nl to request setup of the Joinly AD Agent.
Frequently asked questions
Does the Employes to Microsoft Entra ID connection work in real time?
It runs as a frequent scheduled sync that updates multiple times per day. The Employes API is poll-based (it has no webhooks), so Joinly reads it on a short interval — changes in Employes reach Entra ID quickly without waiting for a nightly batch.
How does Joinly connect to Employes?
Through the public Employes REST API (version 4). You generate a Bearer token in your Employes settings — valid for one year — and Joinly uses it to read employees, employments, departments and job types. No export files or manual CSVs are involved.
How does Joinly handle the Dutch surname prefix (tussenvoegsel)?
Employes stores the surname_prefix as its own field. Joinly references it in your Liquid mapping, so it appears in the display name, mail and UPN exactly where you want it rather than being dropped or mangled.
Which attributes sync from Employes to Entra ID?
Name (including surname prefix), email / UPN, department (afdeling), job type (functie), employee number, manager, and start and end date. Additional Employes fields can be mapped via Liquid templates.
Do I need to build a custom integration against the Employes API?
No. Employes has no native Entra or identity connector, so the alternative would be a script or iPaaS flow you build and maintain yourself. Joinly provides the connection, the role-to-group mapping and the joiner-mover-leaver logic out of the box.
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 Employes to Active Directory guide.


