When someone joins, moves or leaves in SD Worx, you want that change reflected in Microsoft Entra ID without anyone touching it by hand. To connect SD Worx to Microsoft Entra ID, Joinly reads each HR change at the source — through the SD Worx REST API — and applies it automatically to the right account. SD Worx stays your source of truth for the dienstverband; Joinly is the engine that keeps every action accurate and traceable.
Key takeaways
SD Worx stays your source of truth; Joinly applies every joiner, mover and leaver to Entra ID automatically from the werknemer record.
Joinly maps SD Worx structures — afdeling (department), kostenplaats (cost center), paritair comité and werkgever entity — to the right Entra ID groups and licences, something a plain API integration or middleware can’t do on its own.
Joinly reads future-dated in- and uit-diensttredingen, so new hires are provisioned exactly on their start date and leavers are disabled on their end date.
As a Benelux social secretariat, SD Worx spans multiple Company IDs and countries; Joinly resolves the correct active employment so the right entity drives the UPN.
Every action is logged for a complete audit trail, aligned with NIS2 and ISO 27001.
Quick facts
Source system | SD Worx (Payroll & HR / eBlox) |
Target system | Microsoft Entra ID (formerly Azure AD) |
Connection method | SD Worx REST API (SD Connect) → Entra ID |
Supported events | Joiner, mover, leaver (incl. rehire, transfer between werkgever entities, multi-country employment) |
Synced attributes | Name, email / UPN, afdeling (department), job title, manager, kostenplaats (cost center), werkgever entity, personeelsnummer, start and end date |
Authentication | OAuth 2.0 (access / refresh token), scoped by SD Worx Company ID |
Real-time or batch | Frequent sync, multiple times per day |
Compliance | ISO 27001, NIS2-ready, GDPR (EU data centre) |
How does Joinly sync SD Worx to Microsoft Entra ID?
Joinly reads each HR change in SD Worx through the REST API and applies it to the matching Entra ID account automatically. SD Worx holds the authoritative dienstverband, so it is the starting point for each identity action.
Joiner. HR completes the hire in SD Worx. Joinly reads the new werknemer record and determines the role from attributes like afdeling, kostenplaats and paritair comité. It then creates the account in Entra ID, assigns the right licences and maps the person into the correct groups — timed to the effective in-diensttreding (start date).
Mover. When someone changes function, afdeling or kostenplaats in SD Worx — or transfers to another werkgever entity — 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 uit-diensttreding (end date) recorded in SD Worx, Joinly disables the Entra ID account automatically. There are no orphaned accounts left active after someone has left, and where a person still holds another active employment, access is only removed when the last dienstverband ends.
Example: A Belgian retail group hires a store assistant in SD Worx with a start date next Monday, under the werkgever entity that runs its shops in Flanders. Joinly reads the future-dated record, waits until the start date, creates the Entra ID account, assigns a Microsoft 365 licence and adds the assistant to the Retail-Stores-BE group based on the kostenplaats. When that assistant later moves to the head-office payroll under a different Company ID, Joinly keeps a single stable UPN and swaps the groups the same day.
What manual user management costs
Without automation, every account starts as an email from HR or a line in a spreadsheet that IT works through by hand. A direct SD Worx REST integration or a middleware flow can move attributes across, but it maps departments and cost centers to groups through hand-written rules and has no notion of the werkgever entity or a future-dated dienstverband — so the part that actually decides access still falls to people.
Onboarding delays. New joiners wait for accounts, licences and group access while a ticket sits in a queue, losing productive days in their first week.
Permissions that don’t keep up (privilege creep). When movers change afdeling, kostenplaats or werkgever 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 — and when a person holds employments under more than one Company ID it is easy to disable an account while another dienstverband is still active.
Joinly vs. a direct SD Worx API integration
SD Worx exposes a solid REST API, but there’s no first-party Entra ID connector, so most teams build a direct integration or wire it through middleware. That baseline moves data; it stops short of the part that actually decides access. Here’s how the two compare for an SD Worx-driven setup.
Joinly | Direct API / middleware integration | |
|---|---|---|
Source | Reads the SD Worx REST API directly | Reads the SD Worx REST API directly |
Role-to-group mapping | Built in, rule-based on afdeling, kostenplaats and PC | Hand-written per project; no role-to-group out of the box |
Future-dated hires and leavers | Times account creation and disable to the in-/uit-diensttreding | Needs custom date-window logic |
Multi-entity / multi-country | Resolves the active dienstverband across Company IDs | Manual; wrong or ended employment can sync |
Licence assignment | Driven by role / attributes | Manual or group-based only |
On-premise AD | Yes, own agent plus the native Microsoft agent | Build and host it yourself |
Audit trail | Per-action logging tied to the HR source | Whatever you build and log yourself |
Watch-outs when connecting SD Worx to Microsoft Entra ID
A few SD Worx-specific details decide whether this connection stays reliable at scale.
Social-secretariat multi-entity model. As a sociaal secretariaat, SD Worx serves each client through one or more werkgever entities, and the REST API is scoped per Company ID. A person can move between those entities. Joinly resolves the active dienstverband to the right Company ID, so the correct entity drives the account rather than a stale or ended one.
Multi-country Benelux employment. The same person can hold employments in Belgium, the Netherlands or Luxembourg under different local rulesets. A naive rule can pick the wrong tewerkstelling and break sign-in. Joinly applies explicit rules to choose the primary employment as the driver of the UPN, while still reflecting the extra access.
Mapping Belgian payroll structures to Entra groups. Afdeling, kostenplaats and paritair comité 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.
Future-dated in- and uit-diensttredingen. SD Worx records a hire and a termination with effective dates that can sit well before or after the change is entered. Joinly reads those dates and times account creation and disable to them, so access is ready on the start date and gone on the end date — not the moment HR saved the record.
UPN format with duplicate names. When two employees share a name, a naive UPN rule produces collisions. Joinly applies custom transformation rules — a suffix, entity code or the personeelsnummer as a tiebreaker — so every UPN is unique and predictable from day one.
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 SD Worx 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 Belgian retail group with around 3,500 employees across a head office and a hundred-odd stores, running SD Worx for payroll while its identity provisioning never quite keeps up. A hand-built API integration handles the simple cases, yet seasonal store contracts, transfers between the shop and head-office werkgever entities, and staff who pick up hours under a second Company ID keep breaking it — people end up with the wrong dienstverband synced to Entra ID, and future-dated hires are provisioned the moment HR saves the record rather than on their actual start date.
Connect SD Worx to Microsoft Entra ID with Joinly and that work disappears. Joinly reads each HR change in SD Worx at the source and acts on it automatically: new hires have their account, Microsoft 365 licence and group access ready on their in-diensttreding, transfers between entities swap the right groups the same day, a second employment keeps a single, stable UPN, and leavers are disabled on their uit-diensttreding with a 30-day soft-delete grace window.
“Staff moving between our stores and head office used to be the thing that broke every sync. Now an account is simply ready on the start date, a transfer just swaps the access, and we can show the auditor exactly which SD Worx change created every bit of access.” — Head of IT, Belgian retail group
The outcome this setup is designed for: onboarding drops from days to zero touch, multi-entity 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 SD Worx 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 SD Worx 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 SD Worx integration in the Joinly marketplace
Open the Joinly marketplace and search for the SD Worx 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 SD Worx integration.
5. Follow the installation wizard
You may be redirected to integrations.joinly.app. Create an account there and enter your SD Worx connection details: your Company ID and the OAuth credentials (client ID and secret) issued by SD Worx for the SD Connect REST API. We only ask for the information needed to establish a successful connection with SD Worx. All data is encrypted and stored securely.

Enter your SD Worx Company ID and OAuth credentials 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 SD Worx fields.
Frequently asked questions
How do I map the manager? Reference the manager’s identifier in the mapping and Joinly resolves the link to the right manager automatically.
How do I handle someone with more than one employment? Pick the primary dienstverband as the driver for the UPN; Joinly exposes the active employments across Company IDs 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 SD Worx 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 SD Worx 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 SD Worx flows straight through to Entra ID. Finally, add a threshold workflow with the Entra soft delete action that runs a set period after the uit-diensttreding (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 SD Worx to Active Directory, or contact support at support@koppelhet.nl to request setup of the Joinly AD Agent.
Frequently asked questions
Does the SD Worx to Microsoft Entra ID connection work in real time?
It runs as a frequent sync that updates multiple times per day, so changes in SD Worx reach Entra ID quickly without waiting for a nightly batch.
How does Joinly handle someone with employments under more than one SD Worx Company ID?
Joinly reads all active employments for a person across Company IDs and applies your rules to pick the primary dienstverband as the driver for the UPN, so a second employment adds access without creating a duplicate account or breaking sign-in.
How are future-dated hires and leavers handled?
Joinly reads the in-diensttreding and uit-diensttreding dates on the SD Worx record and times account creation and disable to them, so access is ready on the start date and removed on the end date rather than the moment HR saved the record.
Which attributes sync from SD Worx to Entra ID?
Name, email / UPN, afdeling (department), job title, manager, kostenplaats (cost center), werkgever entity, personeelsnummer, and start and end date. Additional SD Worx fields can be mapped via Liquid templates.
Do I still need to build a custom SD Worx integration?
No. SD Worx has no first-party Entra provisioning connector, so the alternative is a hand-built API integration or middleware. Joinly takes over the reading, role-to-group mapping and multi-entity handling for you, and maintains it as your SD Worx data changes.
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 SD Worx to Active Directory guide.


