Self-service Joiner, Mover, Leaver for everyone HR never sees.
Account Factory delegates routine identity lifecycle and dormant-account governance for the volunteers, trustees,
contractors and service accounts your HR-driven provisioning was never built for – all in your own Entra tenant,
with a clean, audited record of who did what. No per-seat licence. No vendor control plane.
✓ audit - group.assign - system: Entra - result: ok
Every action auditedactor · target · before / after
6
Purpose-built delegated roles, each backed by an Entra group
1command
From az login to a running instance
30days
Soft-delete holding period before hard-delete
0secrets
In source – all credentials come from Key Vault
100%
Of state changes audited – no silent mutations
The gap
The edge-case population is often the bigger one
A charity might have a few hundred payrolled staff and thousands of volunteers – yet it is exactly that population,
the people HR never knew about, that automated provisioning does not cover. And plenty of organisations have no
automated provisioning at all: HR API-driven and SCIM connectors are relatively advanced, so every account is still
created by hand. Either way, volunteers, trustees, contractors, agency staff, shared and service accounts all become
manual tickets.
Today
Everything routes through IT
JML is manual and ticket-driven. Every joiner, attribute change and leaver becomes a help-desk ticket. The business waits; IT context-switches; consistency suffers.
The people closest to the work can't self-serve. A coordinator knows exactly who is joining and leaving, but has no safe, scoped way to act on it – so it routes through IT anyway.
Dormant governance hits a licence wall. Manager confirmation for quiet accounts normally needs an Entra Identity Governance licence for every user – disproportionate for thousands of volunteers, so accounts go ungoverned.
The migration adds a deadline. Retiring AD and legacy Exchange means cleaning up and re-homing exactly these accounts – with no tool built for the job.
With Account Factory
Routine lifecycle, safely delegated
Push routine work out to business users. They create, modify and offboard their own people from locked profiles – IT sets the guardrails instead of doing the data entry.
Become the authoritative record. The app owns every account it creates or takes over, and writes only to accounts it manages – so the directory and the audit trail finally agree.
Dormant governance, no IG licence per user. Built-in manager confirmation chases quiet accounts, escalates, and offboards on a schedule – the feature you'd otherwise pay for per seat.
Built for the AD-to-Entra journey. Transitional tooling helps re-home accounts off on-prem AD and legacy Exchange, then switches itself off once migration is done.
Capabilities
Real identity infrastructure, scoped to its job
Locked-down profiles, least-privilege roles, and a tamper-evident audit trail – the guardrails travel with every action, so delegation never means losing control.
Delegated self-service lifecycle
No IT ticket for routine joiners, movers and leavers. Everyday account work goes to the people who actually know the person.
"Still needed" / "no longer needed" links via ACS. A positive reply resets the clock.
+14 days
Escalate to admins
No manager response routes to the scoped Profile Administrator(s) for that population.
+14 days
Auto-action
Still no response soft-disables the account and routes it into the leaver flow.
always
Audited & idempotent
Every email, response and timer transition is written to the audit log; the worker is safe to re-run.
The timeline (30 + 14 + 14 days) ships at the spec defaults and is configurable per deployment. A human stays in the loop at every step.
Security & data sovereignty
Your directory stays yours
The distribution and security model is built around one principle: the adopting organisation keeps full custody of
its own directory, its own credentials, and its own infrastructure. There is no shared SaaS platform and no
vendor-held control plane – deliberate, because a tool that creates and deletes identities should never be remotely disablable.
In one line: your tenant, your subscription, your app registration, your keys, your audit log -
source you can read and fork, least-privilege permissions, secrets only in Key Vault, no shared SaaS, no vendor
data custody, no phone-home, and an app that cannot deploy itself.
Your tenantYour subscriptionYour keysNo telemetry by default
Own tenant, own subscription
Each org runs its own single-tenant instance with its own app registration, admin consent and audit trail. No shared multi-tenant hosting – it is explicitly out of scope.
Secrets only in Key Vault
No secrets in source, ever. The App Service authenticates via managed identity; certificates and credentials live in Key Vault, not the database. SQL TDE is on, with column-level encryption for TAPs, PINs and PDF bytes.
Writes only to owned accounts
The managedBy = AccountFactory marker gates every mutation. Mover and Leaver refuse to act on accounts the app does not own; reads stay unrestricted within scope.
Source-available & auditable
Read, audit and fork the code under a restrictive licence. A prospective adopter can even take time-limited read access to audit it first.
No external control plane
No developer-hosted licensing or update server. The app never phones home for permission to run and contains no remote kill switch.
Least privilege throughout
Scoped Graph permissions, each tied to a stated purpose, and a deliberately weak read-only identity for directory readiness – the weakest of the on-prem identities.
On risk & trust
A highly privileged tool – and built to be treated like one
Account Factory creates, modifies and deletes identities, and in hybrid mode it also holds an on-premises service
account that can write to Active Directory and Exchange. That makes it a privileged, control-plane application, and
it straddles two boundaries a security team is right to guard: the seam between on-premises AD and Entra ID, and the
line between IT administration and the delegated business users it hands lifecycle actions to. We will not pretend
otherwise – the design assumes the tool itself is a target.
Is a self-built identity plane an anti-pattern? It can be. The safest identity tooling is the tooling
you do not build, and bridging the boundary between AD and Entra with custom code is exactly the sort of thing that
deserves scrutiny. Where a vetted, certified product fits – Entra ID Governance, or HR-driven and SCIM provisioning –
use it. But not every organisation has that: HR API-driven provisioning is advanced, and plenty of teams still create
every account by hand. Account Factory serves that need directly, and where those products do exist it sits alongside
them and covers the non-HR population they never reach – plus the transitional window while AD
is still live. The honest recommendation is to scope it tightly, read the source before you trust it, and switch the
hybrid half off the moment your migration allows.
How the design contains it
Blast radius stays inside your perimeter
It runs in your own tenant and subscription, so it adds no new external trust boundary and no third party with standing access to your directory. There is no vendor to breach in order to reach you.
It can only touch what it made
The managedBy = AccountFactory marker gates every write. Even a fully compromised instance cannot rewrite arbitrary objects or privileged groups it does not own – it is not a general directory-write oracle.
The hybrid seam is off by default
The AD and Exchange surface – the part that actually crosses the on-premises to cloud boundary – sits behind a single master switch, disabled for cloud-only adopters, and is transitional by design: built to shrink that boundary, then be switched off.
Separation of duties, enforced
Six least-privilege roles, scope evaluated server-side on every read, an Auditor with no write power and a Help Desk that cannot create. Delegation is bounded, never a blank cheque.
Standing privilege is observable
Every state change writes to a tamper-evident audit log the app cannot silently rewrite, and the privileged code path is readable and forkable – open to inspection, not a black box.
No remote hold over a privileged app
It cannot deploy itself, carries no kill switch and never phones home. Nobody outside your tenant, the developer included, can reach the privileged surface.
Do not take our word for it. The full attack surface – the architecture, the exact Graph and on-premises permissions
and why each one is needed, the owned-writes gate, the audit schema and the AD master switch – is written down for you
to review before you adopt. Read the specification.
For organisations still on AD – transitional
Retire AD and on-prem Exchange, then switch the tooling off
If you are mid-migration, Account Factory extends the same lifecycle and audit model onto the on-prem side, then helps
you turn that side off. This entire surface sits behind a single AD master switch – cloud-only adopters simply leave it disabled.
Maturity note. The cloud-only, Entra-authoritative path is the fully shipped happy path. The hybrid AD / Exchange
paths and the directory-readiness pillar are built behind the master switch but are not yet verified end to end against
a live hybrid tenant – treat them as transitional capabilities for organisations still on AD, not as battle-tested. They cover
AD-authoritative JML over LDAPS, on-prem Exchange attribute stamping via the Exchange Management Shell, an AD-to-Entra migration engine
with a 30-day rollback window, and read-only directory readiness that never writes to a DC, GPO or registry.
Deployment
From nothing to a running instance, in one command
An interactive wizard stands up the whole instance against a single az login – idempotent, and it shows a plan and cost estimate before it provisions anything.
deployment wizard
$az login# authenticate to your own subscription + tenant$npm run setupPlanning deployment...✓ resource group
✓ six Entra role groups (added you to Admins)✓ single-tenant app registration + admin consent
✓ least-privilege Graph permissions
✓ self-signed cert -> Key Vault
✓ GitHub Actions OIDC identity (no stored secret)✓ Bicep: App Service + Azure SQL + Key Vault + ACS
Estimated cost ~£10 – 18 / month(SQL Free Limit)Proceed? [y/N]y
1
az login
Authenticate to your own Azure subscription and Entra tenant. Nothing org-specific ever leaves your environment.
2
npm run setup
Launch the interactive wizard. It creates the resource group, six role groups, the single-tenant app registration with API scope, group claims, Graph permissions and admin consent, plus a Key Vault-stored certificate and OIDC credentials for CI/CD.
3
Review the plan, then provision
The wizard shows a plan and cost estimate before it deploys the Bicep stack – App Service, Azure SQL (Free Limit), Key Vault and Communication Services – and is idempotent on re-run.
4
Push to main
Commit to your fork. GitHub Actions ships the app to App Service over OIDC; schema migrations run idempotently on startup.
5
The app can never redeploy itself
Updates always pass through your own pipeline and change control. The running app holds no rights to deploy.
Cost
Self-hosted. No per-seat fees.
You pay only your own Azure consumption. There is no licensing server and no usage metering by the developer.
Baseline running cost
£10 – 18typically / month
On baseline SKUs using the Azure SQL Free Limit. The stack is mostly idle, so a B1 App Service plan and auto-pausing
serverless SQL keep it cheap. The deployment wizard shows a cost estimate as part of the plan, before anything is provisioned.
The hybrid figure covers VNet integration, NSGs, private DNS and read-only DC access, and only applies if you turn on
the transitional AD / Exchange path. Cloud-only adopters skip all of it.
Who it's for
Built for lean teams with large non-HR populations
Enterprise-credible, but human – it speaks to overstretched teams, not procurement committees. The people who own the tenant, and the organisations whose directory is full of people HR has never heard of – whether they run HR-driven provisioning that never reached those people, or have no automated provisioning at all.
Primary
IT and identity leads mid-migration
The people who own the tenant, run the AD-to-Entra project, and field every "can you create an account for our new volunteer?" ticket. They want the routine cases off their desk and a clean, audited record – without standing up a heavyweight IGA platform.
Tenant ownersAD-to-Entra project leadsOverstretched help desks
Equally
Charities and mission-driven bodies
Organisations whose "edge case" population is often bigger than the payrolled one – a charity with a few hundred frontline staff but thousands of volunteers. Cost-sensitive, lean IT, and wanting something they can read, audit and run themselves.
Honest over hyped – what it does, and what it deliberately does not.
Where does our data live?
Entirely in your own Azure subscription and Entra tenant. The app, its Azure SQL database, Key Vault and Communication Services all run in resources you own. The developer never holds another organisation's keys, and there is no developer-hosted control plane.
How is it licensed – is this open source?
It is source-available under a restrictive licence, not open source. Authorised organisations get read access to a private repository so they can clone, fork, audit and run the tool in their own tenant. Redistribution, sublicensing and use outside the authorised organisation are prohibited. The final licence terms are still being chosen – a Business Source License or PolyForm Noncommercial style licence is the starting point.
We're cloud-only Entra – do we need the hybrid AD pieces?
No. v1 is a cloud-only, Entra-authoritative happy path, and the on-prem AD / Exchange surfaces are gated behind a single master switch that cloud-only adopters leave off. Organisations still running AD and on-prem Exchange can enable the transitional path (and its VNet connectivity); everyone else skips it entirely. Treat the hybrid surface as transitional – it is not yet end-to-end verified against a live hybrid tenant.
Do we need HR-driven or SCIM provisioning already in place?
No. HR API-driven provisioning is relatively advanced, and many organisations have none of it – every account is still created by hand. Account Factory works as your primary delegated joiner / mover / leaver for whichever populations you point it at, not only as a supplement for the people an HR feed misses. Where you do run HR-driven or SCIM provisioning, it coexists cleanly – staying authoritative only for the accounts it owns and leaving the rest alone.
Do our end users need an identity governance licence?
No end-user IG licence is required to use Account Factory itself – it acts on your directory through its own app registration. Account licensing (for example freeing a licence when someone leaves) is something the tool can help with: on leaver, it can optionally convert a mailbox to shared and hand it to the manager. Licence usage for the managed accounts themselves is governed by your normal Microsoft licensing.
What happens to a leaver's mailbox?
By default nothing extra – the account is disabled, removed from app-managed groups, soft-deleted, then hard-deleted after 30 days. Optionally (per leaver or per profile), the app can convert the mailbox to a shared mailbox and assign the manager as a delegate, which frees the licence. That option defaults to off.
How are passwords and TAPs handled?
Passwordless profiles (Entra-authoritative only) get an 8-hour, multi-use Temporary Access Pass generated via Graph at creation, shown once to the Profile Administrator, and stored encrypted only until it expires – then auto-purged. The audit record of who issued it and when is retained. A QR + PIN PDF can also be issued and is kept encrypted until first sign-in or a configurable maximum. Standard AD accounts receive an initial password at creation instead.
Can we customise naming and profiles?
Yes. Profiles define UPN domain, attribute defaults, locked attributes, group assignments, mandatory fields and the auth method, and are versioned immutably – editing creates a new version while existing users keep theirs. The UPN naming pattern is configurable per profile and per deployment. Profile Administrators can be scoped so they only see and act on their own population.
What does it cost to run?
Typically around £10 – 18 per month on baseline SKUs with the Azure SQL Free Limit enabled. The deployment wizard shows a cost estimate as part of the plan before anything is provisioned. Hybrid AD / Exchange features add infrastructure – and cost – only if you turn them on.
Run your own identity governance, in your own tenant.
Delegate account creation. Keep the audit trail. Read the spec, or request time-limited access to the source to audit it before you commit.