KeADP iHCM logo

Payroll integration

Keka to ADP iHCM integration: salary structure, variable payouts and leavers of the Dutch pay group to ADP

An integration between Keka and ADP iHCM passes salary changes, variable payouts and departures of employees in the Dutch pay group of Keka to Dutch payroll in ADP iHCM. Payroll then no longer retypes those changes; creating a new employee in ADP remains a payroll task.

What the integration does

Organisations that use Keka as their HR system, often from an Indian head office, and pay Dutch employees through ADP iHCM send payroll a monthly overview from Keka. Keka also calculates net pay and deductions itself; those figures do not apply to the Netherlands and cause confusion when retyped.

  1. HR changes a salary in Keka, adds a variable payout or approves an exit.
  2. Keka sends a notification; KoppelHet fetches the employee's salary, filtered on the Dutch pay group.
  3. The basic component from the earnings goes to ADP as a salary change, variable components as a line in the period of the payout date.
  4. An exit starts the termination in ADP; exitCancelled cancels it.
  5. Deviations are in an overview for payroll.
Keka → KoppelHet → ADP iHCMSOURCEKekaKekaTARGETADP iHCMKoppelHetmapping · logging · monitoringKeka → KoppelHet → ADP iHCMSOURCEKekaKekaTARGETADP iHCMKoppelHetmapping · logging · monitoring
Out: Salary with effective date and earnings · Variable components with payout date · Exit and cancelled exit · Link between Keka employee and ADP employee number

What to watch for with Keka and ADP iHCM

  • A Keka salary contains total CTC, gross, net, earnings, employer contributions, deductions and variable components. Net pay and deductions are Keka's own calculations; KoppelHet does not send them to ADP, because ADP iHCM calculates Dutch deductions itself. Only the basic component from the earnings is passed on.
  • Variable components in Keka have a title, an amount and a payout date. KoppelHet looks up the ADP pay period for that date and sends the exact start and end date, so ADP links the amount to the right run.
  • Keka's salary API can filter on pay group. KoppelHet only requests the pay group containing the Dutch employees; salaries of Indian or other pay groups therefore do not enter the integration.
  • Keka reports with exitCancelled that an exit already approved has been withdrawn during the exit process. KoppelHet then cancels the termination in ADP, because a termination cannot be amended there, only cancelled.
  • A Keka notification only contains the employee ID, the event type and the subdomain. KoppelHet then fetches the current data itself, so a notification that arrives twice does not create a duplicate salary change in ADP.
  • Keka allows fifty API calls per minute and returns a 429 above that. ADP processes one salary change per call. After a collective pay rise, KoppelHet spreads fetching from Keka and sending to ADP over several minutes.
  • With the notice period filter Keka returns employees who are already serving notice. KoppelHet uses that to show payroll in advance which terminations are coming up for the next ADP run.

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

Do Dutch employees need to be in Keka Payroll?

They need to be in their own pay group with a salary structure, so the API returns salaries. The payroll calculation itself happens in ADP.

Does the integration create new employees in ADP?

No. Payroll creates the employee in ADP; KoppelHet then links them on employee number.

Do allowances from the earnings go along?

In the first version only the basic component. Passing on other earnings 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.

  • Keka API (https://{company}.keka.com/api/v1) with token from login.keka.com/connect/token: GET /payroll/salaries (filters employeeIds, employmentStatus Working/Relieved, paygroupIds; fields ctc, gross, netPay, remunerationType, effectiveFrom, earnings with isOutsideCTC, deductions, variables with payoutDate) and GET /hris/employees (filter inNoticePeriod, lastModified). Event triggers EmployeeSalaryUpdated and exitCancelled, POST with employeeIndentifier, eventType and subDomain. 50 requests per minute, pages up to 200.
  • ADP iHCM through GET /hr/v2/workers, the Base Remuneration Change API (2416 and 2417), the Pay Data Input API for iHCM NL and the Worker Terminate API (worker.terminate, worker-termination.cancel). Canonicals in the Consumer Application Registry (CAR).

Which fields are transferred

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

Field in KekaField in ADP iHCMNotes
employee.employeeNumberpayrollfilenumberLinked once and stored by KoppelHet
Pay group (filter paygroupIds)payrollGroupCodeLookup per pay group
earnings: basiscomponent (title, amount)Salarisbedrag 2417 met salariscode 2416
effectiveFromeffectiveDateTime van de salariswijziging
variables: title, amount, payoutDateVariabel veld (Vxxx) met de begin- en einddatum van de periodeLookup per title
employmentStatus Relieved en vertrekdatumBeëindiging in worker.terminate

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.