
Payroll integration
Keka to AFAS integration: Dutch employees from Keka in payroll
With an integration between Keka and AFAS Profit, new employees of the Dutch entity arrive from Keka in AFAS as an employee with contract and schedule, and leavers and salary changes follow with their date. Keka stays the group's HR system; AFAS runs payroll for the Dutch employees and payroll only completes the Dutch payroll tax details.
What the integration does
Organisations with Keka as HR platform for India and other countries and a Dutch BV paid in AFAS Profit now enter Dutch colleagues twice. Keka is set up around Indian pay concepts, so payroll has to work out per employee which amount is the gross monthly salary.
- HR creates the Dutch employee in Keka, in the group that belongs to the Dutch entity.
- An event trigger in Keka reports the change; KoppelHet then fetches the full profile.
- A new employee goes to AFAS through the onboarding process, with contract, schedule and department.
- A salary change goes to AFAS with the effective date from Keka, as a fixed monthly amount.
- An approved exit closes the contract in AFAS on the exit date from Keka.
What to watch for with Keka and AFAS Profit
- A salary record in Keka revolves around CTC, the total annual employer cost, with gross, net and separate pay components below it. AFAS wants a fixed monthly salary or hourly wage. KoppelHet only converts the agreed fixed component into a monthly amount and leaves CTC out of the integration.
- Bank details in Keka are built for Indian banks, with IFSC code and account number and no IBAN field. For Dutch colleagues we record the IBAN in a custom field in Keka, or payroll completes it in AFAS.
- The employee profile in Keka has no field for a Dutch citizen service number (BSN). A custom field in Keka can carry it; without that field KoppelHet starts the onboarding in AFAS without a BSN and payroll sees it as an open item.
- Keka only states whether an employment is full-time or part-time, without hours per week. AFAS needs a number of hours for the schedule. We record that number per employee in a custom field in Keka, so AFAS gets the right schedule and part-time factor.
- The Keka API allows fifty requests per minute and returns at most two hundred employees per page. KoppelHet therefore only requests employees changed since the previous round, and spreads the initial load of all Dutch employees over several minutes.
- A resignation in Keka has a submission date, an exit status and an exit date. AFAS only gets an end date once the exit is approved. If HR withdraws the exit later, Keka reports that with its own event and KoppelHet removes the end date in AFAS again.
- Keka reports a salary change with the old and the new amount, both effective dates and the currency. KoppelHet only passes changes in euros to AFAS; an amount in another currency becomes an alert to HR instead of a pay line.
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
Doesn't Keka run payroll itself?
Keka processes Indian payroll. For the Dutch entity AFAS stays the payroll system; Keka supplies the HR data.
What if Keka has no BSN or IBAN?
Then the employee arrives in AFAS without those details and payroll completes them. Prefer a single source? Then we add custom fields for them in Keka.
Technical details for IT
For those who want to know how it works under the hood: APIs, fields and sources used.
- Keka is read through the Keka HRIS API (https://{company}.keka.com/api/v1) with an access token from login.keka.com/connect/token, based on client_id, client_secret, api_key and scope kekaapi. Employees through GET /hris/employees with lastModified, employmentStatus and employeeNumbers; salaries through GET /payroll/salaries (ctc, gross, earnings, effectiveFrom). Limit of fifty requests per minute (429 rateLimitExceeded), by default one hundred and at most two hundred rows per page. Testing is possible in the sandbox on kekademo.com.
- Event triggers are set up by an administrator under Settings > Communications > Event Triggers with a webhook action. The POST contains employeeIdentifier, eventType and subDomain; EmployeeSalaryUpdated contains old and new amount, effective dates and currencyCode.
- AFAS is written through the HrOnboarding UpdateConnector for new employees and KnEmployee (AfasContract, AfasTimeTable, AfasSalary, AfasBankInfo) for changes, in a dedicated app connector.
Which fields are transferred
The key fields. The full mapping is agreed per customer.
| Field in Keka | Field in AFAS Profit | Notes |
|---|---|---|
Personeelsnummer (employeeNumber) | Medewerker (EmId) | Fixed key between both systems |
Voornaam, tussennaam, achternaam | Voornaam, voorvoegsel en achternaam | Split the name prefix |
Geboortedatum en geslacht | Persoonsgegevens | |
Huidig adres | Woonadres | |
Indiensttredingsdatum (joiningDate) | Begindatum contract | |
Exitdatum na goedkeuring | Einddatum contract | |
Groep van de Nederlandse vestiging | Werkgever in AFAS | Through a lookup table |
Vast salariscomponent met effectiveFrom | Salaris met ingangsdatum | |
Eigen veld voor BSN en IBAN | BSN en bankrekening | Only if HR records them in Keka |
Related
Keka → Active Directory
Keka to Active Directory integration: domain accounts per office, with expiry on the exit date
Keka → ADP iHCM
Keka to ADP iHCM integration: salary structure, variable payouts and leavers of the Dutch pay group to ADP
Keka → Arbodienst (SIVI)
Keka to the occupational health service via SIVI: sickness leave requests as absence reports
Keka → DATEV
Keka to DATEV integration: the German entity from Keka to the tax adviser in DATEV