IT & Security package

Joiner, mover, leaver sync

A nightly job reads joiners, movers and leavers from the HR system and creates, updates or disables directory accounts with role-based groups, logging every action.

ScheduledIntermediate~15 min setupv1.0.0

About this package

What it does

Joiner, mover, leaver sync keeps your directory in step with the HR system without tickets. Every night at 02:00 it asks the HR system for the workforce changes effective since the previous day.

Each change is processed in turn. The Role mappings table (department and job family) gives the birthright groups and licence for the role. Joiners get a new directory account with those groups, movers have their department, manager, groups and licence updated, and leavers are disabled with their sessions revoked and groups removed. Every action, including failures, is written to the JML sync log table with the HTTP status, so you can filter for anything that needs attention.

A summary of joiners, movers and leavers is written to the run log at the end. Adapt the role mappings to your groups and licences, and the HR and directory API paths to your platforms. Runs can also be started by hand with a since date to replay a period.

Scheduled

Daily at 02:00 (Pacific/Auckland). You can also start it any time from the Run dialog, the API or the CLI.

Runs on a schedule (daily, weekly, monthly) in your time zone.

The flow

Step by step

  1. 1

    Nightly at 02:00

    The schedule trigger starts the run and works out the since date (yesterday unless one is passed).

  2. 2

    Read HR changes

    List HR changes returns the joiners, movers and leavers effective since that date.

  3. 3

    Map the role

    For each change, the Role mappings row for the department and job family gives the groups and licence.

  4. 4

    Apply to the directory

    Joiners are created, movers updated with their new groups and licence, and leavers disabled with sessions and groups revoked.

  5. 5

    Log every action

    Each change is written to the JML sync log table with the action, directory user, groups and HTTP status; a summary goes to the run log.

Joiner mover leaver sync — Every night, reads the HR changes since the last run and applies each one to the directory: creates joiners with their birthright groups, updates movers, disables leavers, and logs every action. The same canvas you get in the designer after installing.

Forms

Inputs and task forms

The inputs a caller passes when it starts a run, and the forms people complete when the process needs a decision.

Start inputs

Joiner mover leaver sync

Passed by the calling system

Since since · textOptional: ISO date to read changes from. Defaults to yesterday, so each nightly run picks up the previous day.
Default groups default_groups · textGroups for roles with no row in Role mappings
Default licence default_licence · textLicence for roles with no row in Role mappings

From your code

Start a run over the API

Every workflow can be started over REST, MCP or the CLI, whatever its trigger, with the sample input below. Runs start straight away on the published version; replace <workflow id> with the id the install created.

REST

shell
curl -X POST "$USERTASKS_URL/api/v1/workflows/start" \
  -H "Authorization: Bearer $USERTASKS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"workflow_id":"<workflow id>","variables":{"since":"2026-10-25"}}'

CLI

shell
usertasks workflows inputs <workflow id>          # the start form: keys, types, required
usertasks workflows run <workflow id> --input since=2026-10-25 --wait

What's included

9 assets, ready to adapt

TypeNameDetails
Data tableJML sync logOne row per HR change processed by the nightly sync: what was done in the directory and whether it succeeded. Filter by status to find failures.
Data tableRole mappingsBirthright access by department and job family: the directory groups (comma-separated) and licence a person in that role gets. The key is "Department|Job family". Unmapped roles get all-staff and the standard licence.
IntegrationDirectory
IntegrationHR system
API referenceCreate userPOST /users — Create a directory account for a joiner with the groups and licence from the Role mappings table.
API referenceDisable userPOST /users/{{user_id}}/disable — Disable a leaver: block sign-in, revoke sessions and remove group memberships.
API referenceList HR changesGET /hr/changes — Workforce changes (joiners, movers and leavers) effective since a date.
API referenceUpdate userPATCH /users/{{user_id}} — Move a user: new department, title, manager, groups and licence. Groups not in the list are removed.
WorkflowJoiner mover leaver sync22 steps — Every night, reads the HR changes since the last run and applies each one to the directory: creates joiners with their birthright groups, updates movers, disables leavers, and logs every action.

JML sync log · schema only

Synced atHR changeEmployeeNameChange typeDirectory actionDirectory userGroupsLicenceHTTP statusStatus

Role mappings · 7 sample rows

Key (Department|Job family)DepartmentJob familyGroupsLicence

Requirements

What you connect it to

Credentials never travel in a package. The install wizard asks for what your environment must provide, or installs it incomplete until you finish setup.

Needs

  • REST API — A REST API integration: set its base URL and credentials on install.
  • Directory / HR system — An HR system or directory API that lists people and their status.

After installing

  1. HR system integration: set the base URL of your HRIS API and an API token. List HR changes expects GET /hr/changes?since=YYYY-MM-DD returning a changes array with change_type joiner / mover / leaver; adjust the path and response model in Integrations.
  2. Directory integration: set the base URL of your directory or identity API and a token. The references expect POST /users, PATCH /users/{id} and POST /users/{id}/disable.
  3. Edit the Role mappings rows: one per department and job family, with the comma-separated groups and the licence. Set default_groups and default_licence on the workflow for unmapped roles.
  4. Check the schedule trigger time and time zone, then publish. Review the JML sync log table after the first run.

Asked for on install

  • Integration “Directory”Required

    • Tokenconfig.auth_config.token
    • Base urlconfig.base_urldefault https://directory.example.com/api· optional
  • Integration “HR system”Required

    • Tokenconfig.auth_config.token
    • Base urlconfig.base_urldefault https://hris.example.com/api· optional

Install

Install it in your workspace

Works on UserTasks cloud and on any self-hosted instance. Installing creates the assets above; nothing runs until you complete setup and start it.

In the app

  1. Download joiner-mover-leaver-sync-1.0.0.utpkg.
  2. Open Automations → Packages and drag the file onto the page (or choose Import package). Browse gallery there lists every gallery package without downloading by hand.
  3. Pick the file. The wizard verifies the checksum, every file hash and the signature, and shows the readme.
  4. Review the changes (what is created) and the data rows.
  5. Fill in the requirements, or tick Keep incomplete and finish later with Complete setup.
  6. Done: the workflow is published and active once setup is complete.

With the CLI

shell
curl -fLO https://usertasks.com/gallery/joiner-mover-leaver-sync-1.0.0.utpkg
usertasks packages inspect joiner-mover-leaver-sync-1.0.0.utpkg       # offline: checksum, hashes, signature
usertasks packages install joiner-mover-leaver-sync-1.0.0.utpkg --dry-run
usertasks packages install joiner-mover-leaver-sync-1.0.0.utpkg       # prompts for each requirement
usertasks packages install joiner-mover-leaver-sync-1.0.0.utpkg --keep-incomplete --yes   # in CI; finish with:
usertasks packages complete joiner-mover-leaver-sync -f values.yaml

Verify the download

File SHA-256
b2e073fdbd6c1162f926942cc0edacf0e08deeb4a653a9bac9cdc03560ef2451
Package checksum (what is signed)
sha256:542dacbfc0fd1bc4579e16b6aa4c85f983072dfa3581552655ec3e971bf1012c
Signer
Unsigned preview build — compare the SHA-256 above

shasum -a 256 joiner-mover-leaver-sync-1.0.0.utpkg should print the file SHA-256. How gallery packages are signed.

Versions

Version 1.0.0

  1. v1.0.02026-10-26First release.

Installing a newer version upgrades in place: local credentials and requirement values are kept, and changes you made are flagged first. How packages work

More packages

Related

Browse the whole gallery