Connect Employes to Microsoft Entra ID

Connect Employes to Microsoft Entra ID

Connect Employes to Microsoft Entra ID

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.

Employes

Joiner

Mover

Leaver

Microsoft Entra ID (formerly Azure AD)

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.

  1. 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.

  2. 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.

  3. 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 manual

Installation manual

Connect Employes to Microsoft Entra ID

Connect Employes to Microsoft Entra ID

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.


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 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.


Joinly marketplace showing available HR integrations


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.


Joinly installation wizard for entering Employes connection details


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 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 Employes attributes using Liquid templates


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.


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 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.

Request installation support