Leave, absence and time
Personio to Planday integration: employees, custom fields, contract hours, absence and balances from Personio in Planday
With an integration between Personio and Planday, employees, their employee number from a custom field, contract hours and approved absence from Personio reach Planday, on the right portal and department. KoppelHet also keeps the leave balances in Planday equal to Personio, so scheduling works with current hours and balances.
What the integration does
Organisations that run HR in Personio and schedule in Planday often copy employees, the employee number for payroll, contract hours and balances by hand, while scheduling does rely on them.
- HR creates an employee in Personio or changes their office, department or weekly hours.
- KoppelHet determines the Planday portal and department, and creates the employee with the employee number from Personio as salary identifier.
- The weekly hours become hours per month and a contract rule in Planday.
- Absence approved in Personio is submitted and approved in Planday; a deleted absence is withdrawn.
- Daily, KoppelHet books the difference between the balance in Personio and in Planday as an adjustment on the leave account.
What to watch for with Personio and Planday
- The employee number for payroll often sits in a custom field in Personio. KoppelHet sets that number as the salary identifier in Planday, so hours from Planday reach payroll on the right number.
- Personio holds the weekly hours and the hours of a full-time week per employment. Planday records working hours per month and assigns a contract rule that must exist on the portal. KoppelHet converts the weekly hours into monthly hours and picks the contract rule that fits those hours.
- Personio sends no notification when an absence is approved, only on creation, moves and deletion. KoppelHet therefore fetches every few minutes the absences changed since the last round and only enters approved ones in Planday. A request whose deletion is still awaiting approval stays in the schedule until it is definitely gone.
- For an absence Personio indicates whether it starts or ends in the first or second half of the day. For a draft request Planday calculates the registration per day itself based on the leave account. KoppelHet adjusts the first and last day of that draft to the half day from Personio before the request is submitted.
- Personio recommends keeping Personio as the source of truth for absence. Planday does not take balances as a fixed number, but as an adjustment on an accrued account with its own reference. KoppelHet books the difference with the Personio balance daily, so employees see the same balance in the Planday app without Planday writing back.
- Planday can make employee fields mandatory. KoppelHet fills those fields, from Personio or with a fixed value per portal, so the mandatory fields the sites use can stay mandatory.
- On a departure in Personio, KoppelHet gives the last working day to Planday as the last active day and has the shifts after it unassigned. Those shifts become open, so the site sees which shifts still need to be filled after the departure.
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 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.
Frequently asked questions
Do worked hours from Planday go to Personio?
Not in this integration. Hours go from Planday to payroll; attendance in Personio can be added later as an extension.
What if an office has no department in Planday?
Then the employee is not created and an alert appears in the platform. Once it is added, the next round creates the employee.
Technical details for IT
For those who want to know how it works under the hood: APIs, fields and sources used.
- Personio through API v2 with client credentials. Persons and employments (weekly_working_hours, full_time_weekly_working_hours, legal_entity, office, org_units, termination.last_working_day) through webhooks and queries. Absence through GET /v2/absence-periods with updated_at.gte (approval.status PENDING, APPROVED, DELETION_PENDING or SUBSTITUTE_REQUESTED; starts_from.type and ends_at.type FIRST_HALF or SECOND_HALF; timezone_id). Webhooks absence-period.created, absence-period.updated.timerange and absence-period.deleted; no notification on approval.
- Planday through the Open API with OAuth 2.0 per portal. POST and PUT /hr/v1.0/employees (departments, employeeGroups, workHours per month, contractRulesRuleId, salaryIdentifier, custom_ fields), PUT /hr/v1.0/employees/deactivate/{employeeId} (date, keepShifts). Time off through /absence/v1.0/absencerequests (draft, submit, approve, cancel) and balances through POST /absence/v1.0/accounts/{accountId}/adjustments.
Which fields are transferred
The key fields. The full mapping is agreed per customer.
| Field in Personio | Field in Planday | Notes |
|---|---|---|
Personeelsnummer (eigen attribuut) | salaryIdentifier | |
first_name, last_name | firstName, lastName | |
email | userName en email | |
office en legal_entity | Planday-portaal en departments | |
org_units (afdeling of team) | employeeGroups | |
weekly_working_hours | workHours (per maand) en contractRulesRuleId | |
Absence period (approval.status APPROVED) | Absence request, daarna approve | |
starts_from.type en ends_at.type (FIRST_HALF, SECOND_HALF) | Registraties per dag uit het concept | |
termination.last_working_day | deactivate met date en keepShifts |
Related
Ashby → Personio
Ashby to Personio integration: hires with hours and entity as new employees in Personio
Bullhorn → Personio
Bullhorn to Personio integration: placements as a person with employment in Personio
Carerix → Personio
Carerix to Personio integration: successful placement as a new employee in Personio
Greenhouse → Personio
Greenhouse to Personio integration: hired candidates as employees in Personio