Connect Factorial to Microsoft Entra ID

Connect Factorial to Microsoft Entra ID

Connect Factorial to Microsoft Entra ID

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

Key takeaways

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

  • Joinly maps Factorial’s own structure — legal entity, team, location and job — to the right Entra ID groups and licences, something the native API-driven provisioning can’t do on its own.

  • Joinly reads the current job title from the latest contract version, not the stale employee record, so a promotion or contract change updates access correctly.

  • Multi-country setups are handled: each employee’s legal entity and country drive the right groups, licences and UPN, so EU expansion doesn’t break provisioning.

  • Every action is logged for a complete audit trail, aligned with NIS2 and ISO 27001.

Factorial

Joiner

Mover

Leaver

Microsoft Entra ID (formerly Azure AD)

Quick facts

Source system

Factorial (Factorial HR)

Target system

Microsoft Entra ID (formerly Azure AD)

Connection method

Factorial REST API → Entra ID

Supported events

Joiner, mover, leaver (incl. rehire, contract change, team and location moves)

Synced attributes

Name, email / UPN, team (department), job title, manager, location, legal entity, start and end date

Authentication

OAuth 2.0 (company token) or API key on the Factorial public API

Real-time or batch

Frequent sync, multiple times per day

Compliance

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

How does Joinly sync Factorial to Microsoft Entra ID?

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

  1. Joiner. HR completes the hire in Factorial. Joinly reads the new employee together with the latest contract version and determines the role from attributes like team, job and legal entity. 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 record.

  2. Mover. When someone changes team, location, legal entity or contract in Factorial, 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 — and because Factorial reads the current job title from the latest contract version, a promotion is reflected correctly rather than left on an old title.

  3. Leaver. On the termination date recorded in Factorial, Joinly disables the Entra ID account automatically. There are no orphaned accounts left active after someone has left, and unused licences are freed instead of quietly billing every month.

Example: A tech scale-up hires a backend engineer in Factorial with a start date next Monday, in its Spanish legal entity. Joinly reads the record and the latest contract version, waits until the start date, creates the Entra ID account, assigns a Microsoft 365 E3 licence and adds the engineer to the ES-Engineering group. When the company later opens a German entity and the engineer transfers, Joinly swaps the legal-entity groups and keeps the UPN stable, without anyone editing Entra by hand.

What manual user management costs

Without automation, every account starts as a Factorial ticket or a line in a spreadsheet that IT works through by hand. Microsoft’s API-driven inbound provisioning can move attributes across once you build the pipeline, but it maps roles to groups through manual expression rules and has no idea that the real job title lives on the latest contract version — 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 team, location or 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 — a real drag for a fast-growing SME watching its per-seat spend.

Joinly vs. native Entra API-driven provisioning

Factorial isn’t a pre-built app in the Entra gallery, so the native path is API-driven inbound provisioning: a script or Logic App that pushes Factorial data into Entra’s bulk-upload endpoint. It’s a fine baseline, but it stops short of the part that actually decides access. Here’s how the two compare for a Factorial-driven setup.


Joinly

Entra API-driven inbound provisioning

Source

Reads the Factorial REST API directly

You build a pipeline to the bulk-upload endpoint

Role-to-group mapping

Built in, rule-based on team, job and legal entity

Manual expression mappings; no role-to-group out of the box

Current job title

Read from the latest contract version

Whatever your script sends; contract logic is on you

Multi-country / legal entities

Legal entity and country drive groups and licences

Manual mapping per entity

Licence assignment

Driven by role / attributes

Manual or group-based only

On-premise AD

Yes, own agent plus the native Microsoft agent

Separate configuration; limited mapping

Audit trail

Per-action logging tied to the HR source

Limited

Watch-outs when connecting Factorial to Microsoft Entra ID

A few Factorial-specific details decide whether this connection stays reliable as you grow.

  • Job title lives on the contract version. In Factorial the current job title sits on the latest contract version, not on the employee record, and an employee can have several contract versions over time. A naive read picks up a stale title and maps the wrong groups. Joinly always resolves the latest contract version, so promotions and contract changes drive the right access.

  • Multiple legal entities across countries. As you expand across the EU, Factorial holds several legal entities with different countries, currencies and payroll cycles, and each employee belongs to exactly one. Joinly builds explicit rules from legal entity and country to the correct Entra groups, licences and UPN domain, so a Spanish and a German hire each land in the right place.

  • Teams, locations and jobs to Entra groups. Team, location and job 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 — which matters when an SME’s org chart is still changing every quarter.

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

  • Future start dates and terminations. Factorial stores a hire with a start date that can be in the future and a termination date on exit. Joinly times account creation to the start date and disables on the termination date, so access is ready on the right day and removed on time.

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 Factorial 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 tech scale-up with around 400 employees, doubling headcount year on year and running Factorial as its HR core while its identity provisioning never quite keeps up. A homegrown script pushes new hires into Entra ID overnight, but promotions sit on old job titles because the script reads the employee record instead of the latest contract version, and the two new legal entities opened for the German and French markets each needed a manual mapping nobody had time to maintain.

Connect Factorial to Microsoft Entra ID with Joinly and that work disappears. Joinly reads each HR change in Factorial at the source and acts on it automatically: new hires have their account, Microsoft 365 licence and group access ready on their start date, a promotion swaps groups the same day because Joinly reads the current contract version, transfers between legal entities move people cleanly across countries, and leavers are disabled on their termination date with a 30-day soft-delete grace window.

“Our old script always had someone stuck on last quarter’s job title. Now an account is ready on the start date, a promotion just updates the groups, and we can show exactly which Factorial change created every bit of access.” — Head of IT, tech scale-up

The outcome this setup is designed for: onboarding drops from days to zero touch, stale-title access 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 Factorial 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 Factorial to Microsoft Entra ID

Connect Factorial to Microsoft Entra ID

Installation guide

Follow these steps to connect Factorial 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 Factorial integration in the Joinly marketplace

Open the Joinly marketplace and search for the Factorial 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 Factorial integration.

5. Follow the installation wizard

You may be redirected to integrations.joinly.app. Create an account there and enter your Factorial connection details: authorise Joinly through Factorial’s OAuth 2.0 flow (or paste a company API key). We only ask for the information needed to establish a successful connection with Factorial. All data is encrypted and stored securely.


Joinly installation wizard for entering Factorial connection details


Authorise Joinly against Factorial with OAuth 2.0 or an API key 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 Factorial fields.

Frequently asked questions

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

  • How do I get the current job title? Map it from the latest contract version rather than the employee record; Joinly exposes the current contract so the title is always up to date.

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


Map Factorial 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 Factorial 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 Factorial 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 Factorial to Active Directory, or contact support at support@koppelhet.nl to request setup of the Joinly AD Agent.

Frequently asked questions

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

How does Joinly get the current job title from Factorial?
Job title in Factorial lives on the latest contract version, not the employee record. Joinly always reads the current contract version, so a promotion or contract change updates the mapped groups and access instead of leaving someone on an old title.

How does Joinly handle multiple legal entities across countries?
Each employee belongs to one legal entity in Factorial, with its own country and currency. Joinly maps legal entity and country to the right Entra groups, licences and UPN domain, so an EU expansion into new entities doesn’t break provisioning.

Which attributes sync from Factorial to Entra ID?
Name, email / UPN, team (department), job title, manager, location, legal entity, and start and end date. Additional Factorial fields can be mapped via Liquid templates.

Do I still need a custom script or Entra’s API-driven provisioning?
No. Joinly takes over the provisioning, role-to-group mapping and contract-version handling that a custom pipeline does manually or not at all, and maintains it as your Factorial 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 Factorial to Active Directory guide.

Request installation support