

Payroll integration
Darwinbox to AFAS integration: Dutch employees from Darwinbox in AFAS payroll
With an integration between Darwinbox and AFAS Profit, new employees, salary changes and approved terminations of the Dutch entity reach AFAS automatically from Darwinbox, with the effective date recorded in Darwinbox. Payroll in the Netherlands no longer retypes anything from Darwinbox and only adds the Dutch payroll concepts Darwinbox does not hold.
What the integration does
International organisations that run HR globally in Darwinbox and Dutch payroll in AFAS Profit often receive new Dutch colleagues and pay rises as an email or export from headquarters. Payroll enters them in AFAS by hand and sometimes only hears about a withdrawn resignation after the run.
- HR records a new employee, a compensation change or a departure in Darwinbox.
- KoppelHet fetches the changed employees daily and keeps only those of the Dutch group company.
- A new employee reaches AFAS with personal data, contract, job, department, schedule and salary.
- A new base salary gets the effective date of the component in Darwinbox in AFAS.
- Only when the departure is approved in Darwinbox does KoppelHet set the end date on the AFAS contract.
What to watch for with Darwinbox and AFAS Profit
- Darwinbox returns compensation as a breakdown into components, and each component has its own effective date and currency. AFAS holds one amount in euro per salary line. KoppelHet only takes the component agreed as base salary and reports a component in another currency instead of converting it.
- A departure in Darwinbox has the status approved, pending or revoked. Only an approved departure sets an end date in AFAS. If a departure is revoked after it was passed on, payroll gets an alert to remove the end date in AFAS.
- Darwinbox records the country per group company. KoppelHet only sends employees of the Dutch group company to AFAS, and with two Dutch entities each to its own AFAS employer.
- Which fields Darwinbox returns through the API depends on the dataset Darwinbox sets up for the API key. BSN, IBAN and the Dutch address must be in it; if one is missing, payroll completes it in AFAS and KoppelHet does not hold the employee back.
- If a hire is deleted in Darwinbox before the employee starts, it appears on the list of deleted employees. KoppelHet compares that list with AFAS and reports an employee who was already created there, so no payslip is made for someone who never started.
- Darwinbox can receive payslips as a PDF, per pay cycle and with gross, deductions and net. If you want, KoppelHet puts the AFAS payslip back into Darwinbox after the run, so Dutch employees find it in the same app as their colleagues elsewhere.
- Darwinbox returns dates in several formats, such as 07-Aug-2019 next to 07-08-2019. KoppelHet converts them to the format AFAS expects, so a month and a day are not swapped.
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
What do we need to request from Darwinbox?
API access to the Employee Core and Compensation outbound APIs, and a dataset with the fields AFAS needs. Darwinbox enables that on request; ask for it early in the project.
What does payroll fill in AFAS itself?
Collective agreement, scale and step, payroll tax credit and pension. Darwinbox does not know these Dutch concepts, and the integration does not overwrite them.
What happens to a retroactive pay rise?
The component in Darwinbox has its own effective date. It goes along to AFAS, and AFAS settles the difference in the next run.
Technical details for IT
For those who want to know how it works under the hood: APIs, fields and sources used.
- Darwinbox is read through the Employee Core outbound APIs (masterapi/employee with datasetKey and last_modified, getDeletedEmployees, separationDetails with separation_status, orgmasterapi/groupcompanylist) and the Compensation API componentctcbreakup (per component effective_date, currency, is_latest; filter group_company). Authentication with basic auth plus an api_key per endpoint, or OAuth 2.0 with client credentials. Darwinbox only enables API access on request.
- Payslips back through Payrollapi/AddComponentPayslip (PDF as base64, period as pay cycle code, gross, deduction, net).
- AFAS is written through the KnEmployee UpdateConnector, with AfasContract, AfasTimeTable, AfasSalary and AfasBankInfo.
Which fields are transferred
The key fields. The full mapping is agreed per customer.
| Field in Darwinbox | Field in AFAS Profit | Notes |
|---|---|---|
employee_id | Medewerker (EmId) of vrij veld | Fixed key between both systems |
first_name, middle_name, last_name | Voornaam, voorvoegsel en achternaam | Split the name prefix |
date_of_birth | Geboortedatum | |
date_of_joining | Begindatum contract (DaBe) | Date format converted |
designation_name | Functie (FuId) | Through a lookup table |
department_name | Organisatorische eenheid (DpId) | Through a lookup table |
cost_center | Kostenplaats | |
ctc_break_up: component basissalaris (value, effective_date) | Salaris (EmSa) met ingangsdatum | Which component is the base salary is agreed per customer |
Contract Termination Date (separation_status Approved) | Einddatum contract (DaEn) |
Related
Darwinbox → Active Directory
Darwinbox to Active Directory integration: domain accounts that follow Darwinbox, per office location
Darwinbox → ADP iHCM
Darwinbox to ADP iHCM integration: CTC changes, extra payments and approved separations to Dutch ADP payroll
Darwinbox → Arbodienst (SIVI)
Darwinbox to the occupational health service via SIVI: approved sick leaves as absence reports
Darwinbox → DATEV
Darwinbox to DATEV integration: German employees, pay and leavers from Darwinbox to the DATEV payroll program