Deel logoZenegy logo

Payroll integration

Deel to Zenegy integration: own employees of the Danish entity from Deel as an employee in Zenegy

An integration between Deel and Zenegy creates an own employee of the Danish legal entity in Deel as an employee in Zenegy, with CPR number, address, start date and pay, and reports the last working day as a resignation in Zenegy. EOR employees and contractors in Deel do not go to Zenegy, because Deel pays them itself.

What the integration does

Organisations that use Deel as the HR system for all countries and pay their own Danish ApS in Zenegy record a Danish starter twice. The CPR number then often goes to payroll by email, and a leaver in Deel only reaches Zenegy at the next run.

  1. HR creates an own employee at the Danish legal entity in Deel.
  2. KoppelHet receives the Employee Created Direct webhook and checks whether legal_entity_id is the Danish entity.
  3. KoppelHet fetches name, address and CPR number and creates the employee in Zenegy.
  4. A changed salary or address goes to Zenegy as a PATCH with only the changed fields.
  5. A last working day in Deel becomes a resignation in Zenegy; anything Zenegy rejects goes on a list for payroll.
Deel → KoppelHet → ZenegySOURCEDeelTARGETZenegyKoppelHetmapping · logging · monitoringDeel → KoppelHet → ZenegySOURCEDeelTARGETZenegyKoppelHetmapping · logging · monitoring
Out: Employee with CPR number, name and address · Employment date and seniority date · Pay with currency · Resignation with last working day

What to watch for with Deel and Zenegy

  • Deel describes creating a direct employee as the route for employees of your own legal entity who are paid through your own payroll provider. That is exactly the group for Zenegy. KoppelHet reacts to the Employee Created Direct webhook and ignores EOR and contractor events.
  • Zenegy does not create an employee without a CPR number. Deel only returns national numbers in additional_details if the feature flag is switched on for the organisation and the request does not redact personal data. If it is off, KoppelHet reads the CPR from a custom field in Deel that HR fills in, and otherwise the starter waits on a list.
  • Zenegy asks for a seniorityDate for every new employee. The seniority field in Deel is a job level such as Senior, not a date. KoppelHet therefore fills the seniority date with the start date from Deel, unless HR puts an earlier date in a custom field for a returning employee.
  • The Deel webhook gives pay as a whole annual amount with currency, and the profile has a scale such as ANNUAL, MONTHLY or HOURLY. Zenegy pays monthly in advance, monthly in arrears or every fourteen days. KoppelHet only converts amounts in DKK to the employee's pay period and holds back other currencies.
  • Many fields in Zenegy depend on the company's global values and sets. A PATCH on such a field does not change the profile and returns no error either. KoppelHet therefore only sets those fields at creation through the right set, and reads the employee back after each change to see whether Zenegy really took it over.
  • Deleting an employee in Zenegy is only possible while they have not been in any payroll run, and it cannot be undone. If HR withdraws an offer in Deel before the first run, KoppelHet deletes the employee after payroll approves; after that it becomes a resignation.

How we build and run it

  • The integration runs on the KoppelHet platform, hosted in a data centre in the EU.
  • Every sync and every error is visible in the functional log; on an error your administrator is notified.
  • A change that cannot go through is not half-applied but queued for another attempt.
  • KoppelHet is ISO 27001 certified. Data travels encrypted and stays on the platform no longer than needed.
  • After go-live we manage the integration and adjust it when your process changes.
  • The integration fits next to your existing integration layer. Only the fields in the design are transferred; the platform keeps no register of its own.

Implementation, architecture and compliance

Implementation and price

This is not an app you switch on. We build the integration for your organisation on our platform, with building blocks we reuse on every project. So it is custom work that does not start from scratch.

A consultant prepares the intake and analyses both systems. We then record the mapping and exceptions field by field, test in the test or acceptance environment and go live at a moment you choose. Costs are a one-off amount for the setup and a monthly amount for platform, monitoring and support.

Price indication · Complex

Leave your work email and you see the price indication right away.

We only use your address to follow up on your question about this integration.

Frequently asked questions

Does time off from Deel also go to Zenegy?

Not in the first version. Absence only counts in Zenegy as an approved registration; that can be added later as an extension.

Technical details for IT

For those who want to know how it works under the hood: APIs, fields and sources used.

  • Deel through the HRIS API with a bearer token: Employee Created Direct and Employee Updated Direct webhooks (profile id, legal_entity_id, contract_oid, start_date, gross_annual_salary with currency), then GET /rest/people for addresses, employments and direct_employee_termination_last_day; additional_details only with feature flag.
  • Zenegy Payroll API with OAuth 2.0: Post employee (cpr, name, address, postalNumber, city, employmentDate, seniorityDate), PATCH employee with only changed fields, Get employee details to read back and Resign employee on leaving.

Which fields are transferred

The key fields. The full mapping is agreed per customer.

Field in DeelField in ZenegyNotes
Webhook Employee Created Direct (legal_entity_id)Filter: alleen de Deense rechtspersoonEOR and contractors are excluded
additional_details (CPR)cprOnly with feature flag in Deel; required in Zenegy
first_name, last_namename
addressesaddress, postalNumber, cityAll three required
employments.start_dateemploymentDate en seniorityDateDeel seniority is a level, not a date
compensation_details (salary, currency, scale)Loon in Salary DataOnly for DKK; converted per scale
direct_employee_termination_last_dayResign employee

Related

Which systems do you want to connect?

Tell us which systems you use and what should happen automatically. Together we define the smallest working solution, with a clear design and a quote before building.