Sage HR logoADP iHCM logo

Payroll integration

Sage HR to ADP iHCM integration: compensation and leavers from Sage HR to Dutch ADP payroll

An integration between Sage HR and ADP iHCM passes new salary rows, other compensation rows and terminations from Sage HR to Dutch payroll in ADP iHCM. Employees who already exist in ADP get their salary and end date without retyping; creating a new employee in ADP remains work for payroll.

What the integration does

Organisations that use Sage HR for employee records and leave, and process Dutch salaries at ADP iHCM, keep compensation in Sage HR and enter changes in ADP by hand. A terminated employee disappears from the regular list in Sage HR, and is therefore sometimes terminated too late in ADP.

  1. HR records a compensation row in Sage HR or ends an employment.
  2. KoppelHet reads compensation per employee and the list of terminated employees, and compares with the previous state.
  3. A new row with category salary goes to ADP as a salary change; other categories as a variable line.
  4. A newly terminated employee starts the termination in ADP.
  5. KoppelHet puts the ADP employee number in a custom field in Sage HR.
Sage HR → KoppelHet → ADP iHCMSOURCESage HRTARGETADP iHCMKoppelHetmapping · logging · monitoringSage HR → KoppelHet → ADP iHCMSOURCESage HRTARGETADP iHCMKoppelHetmapping · logging · monitoring
Out: Compensation rows with category, amount, period and term · Terminated employees with termination date · Rehire

What to watch for with Sage HR and ADP iHCM

  • Sage HR only returns compensation per employee, not for everyone at once. KoppelHet therefore goes through the employees with an ADP number and compares their rows with the previous run; only a new or changed row goes to ADP.
  • A compensation row in Sage HR has a category, such as Salary, with amount, currency, period and start and end date. KoppelHet sends the Salary category to ADP as a salary change and translates the other categories with a table to variable fields of the pay group.
  • An employee who leaves disappears from the regular list in Sage HR and then appears in a separate list of terminated employees, with a termination date. KoppelHet reads that separate list, because otherwise a leaver just seems to have vanished and stays on pay in ADP.
  • Sage HR can rehire a terminated employee under the same ID, with a new start date. If someone returns while the termination in ADP has not been processed yet, KoppelHet cancels it; if it has been processed, payroll gets a notification to create a new employment in ADP.
  • Sage HR has no field for the legal employer. KoppelHet uses a team or a custom field to decide which employees belong in ADP, and writes the ADP employee number back into a custom field, so HR sees in Sage HR who is linked.
  • The Sage HR API has no webhooks and returns lists in pages of fifty. KoppelHet therefore reads all pages a few times a day, and runs a full comparison before the ADP submission date.

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

Is Sage HR not too small for ADP?

Sage HR also runs at larger organisations for records and leave. The integration works the same; only the number of calls grows with the number of employees.

Does the integration create new employees in ADP?

No. Payroll creates the employee in ADP; KoppelHet then links them and puts the number in Sage HR.

Which compensation categories go along?

Salary, and the categories we link to a variable field in ADP with payroll at the start. The rest stays in Sage HR.

Technical details for IT

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

  • Sage HR API at {subdomain}.sage.hr/api with the X-Auth-Token header: GET /employees (with team_history, employment_status_history, position_history), GET /employees/{id}/compensations (start_date, end_date, currency, amount, period, category), GET /terminated-employees (termination_date), POST /employees/{id}/rehire (date, start_fresh) and PUT /employees/{id}/custom-fields/{custom_field_id}. Pagination per 50; no webhooks.
  • 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 Sage HRField in ADP iHCMNotes
Eigen veld ADP-nummerpayrollfilenumberKoppelHet fills the field
Team of eigen veld werkgeverpayrollGroupCodeLookup
compensation: category Salary, amount, periodSalarisbedrag 2417 en salariscode 2416
compensation: start_dateeffectiveDateTime van de salariswijziging
compensation: andere category, amount, start_dateVariabel veld (Vxxx) via Pay Data InputLookup per category
terminated-employees: termination_dateBeë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.