Skip to content

Integration sync

Pulls employees, employments, and org units from each integration that is turned on (Entra ID, SHR, Visma OM, Intega Løn, …).

How it works

The integration sync is a single job that handles every sync-capable integration:

  1. Loads active integrations — only integrations turned on for the workspace are processed; integrations that are turned off or not set up are skipped
  2. Fetches data — asks the external system for its data, passing the time of the last successful sync, so systems that support it only return what changed
  3. Updates mTime — creates new records, updates changed ones, and reports anything it skipped (e.g. invalid records in the external system)
  4. Updates the sync status — records the start time of this run as last_sync_at on success, or the error message on failure. Recording the start time (not the completion time) means changes made in the external system during the fetch are picked up on the next run

When it runs

The job runs automatically and only triggers when at least one integration that can sync is turned on for the workspace.

Parameters

ParameterDescription
IntegrationOptional. The ID of a specific integration (e.g. entraid, shr, vom, integahr). Leave empty to sync all integrations that are turned on
Dry RunWhen turned on, fetches data and reports counts without changing anything in mTime. Useful for verifying credentials or seeing what an integration would do

Job results

When syncing a single integration, the results are flat:

MetricDescription
employees (with created, updated, skipped)Per-bucket counts for employees
employments (with created, updated, skipped)Per-bucket counts for employments
org_units (with created, updated)Per-bucket counts for org units
errorsErrors reported by the external system while fetching or updating

When syncing all integrations, the results are nested under each integration ID.

Dry-run results expose the number of items fetched (employees, employments, org_units) and a dry_run: true flag.

When a run is skipped because the integration is turned off or not set up, you’ll see skipped: true with a reason.

Job status

A run that completes with skipped rows or per-item errors finishes with status warning rather than completed. The data that did sync is saved; the warnings draw attention to the rest.

Related

Troubleshooting

IssueSolution
not configured skipThe integration was never set up for this workspace. Set it up under Integrations
disabled skipThe integration is set up but turned off. Turn it on on the integration page
Credentials errorRe-check the credentials stored on the integration page. The job re-reads them on every run
Same employees re-created on every runThe matching key is per-integration. Check the integration’s documentation for the field it uses to match (e.g. employee number, email)
Dry run shows the expected data, real run does nothingAn integration can skip a run part-way (e.g. when employee sync is turned off in its advanced settings). The run completes successfully but no data is saved, and last_sync_at is deliberately not updated