ADP iHCM logoCoupa logo

Payroll to finance

ADP iHCM to Coupa integration: approved Coupa expenses as a variable pay field in ADP iHCM NL

With an integration between ADP iHCM and Coupa, expenses approved for payment in Coupa automatically go to ADP iHCM NL as a variable pay field, in the pay period of the right paygroup. Only once ADP has accepted the batch does the report get the export flag in Coupa, so no report is reimbursed twice or not at all.

What the integration does

Organisations that have spending approved in Coupa and Dutch payroll processed in ADP iHCM often reimburse out-of-pocket expenses through the payslip. Every period someone then transfers a Coupa export into ADP, checks which reports have already gone along, and only discovers an error when an employee calls.

  1. Employees claim in Coupa and approval happens there, as today.
  2. Every working day KoppelHet fetches the reports that are approved for payment and not yet exported.
  3. Through the employee number KoppelHet looks up the employee and their paygroup in ADP iHCM.
  4. The amounts go to ADP per expense type as a variable field in one batch, with the exact start and end date of that paygroup's period.
  5. KoppelHet stores the batch ID and then marks the reports as exported in Coupa.
ADP iHCM → KoppelHet → CoupaSOURCEADP iHCMTARGETCoupaKoppelHetmapping · logging · monitoringADP iHCM → KoppelHet → CoupaSOURCEADP iHCMTARGETCoupaKoppelHetmapping · logging · monitoring
Out: Expense reports and lines from Coupa · Paygroup and employee number in ADP iHCM · Variable pay field (V field) with amount and effective date · Batch ID of the delivery · Export flag on the report
Back: Export flag in Coupa once ADP has accepted the batch

What to watch for with ADP iHCM and Coupa

  • ADP only links a delivery to a payroll run if the start and end date exactly match the paygroup's period. With a different date ADP does accept the amounts, but they stay unlinked until someone links them in iHCM. KoppelHet therefore retrieves the period dates per paygroup and does not calculate them itself.
  • ADP's Pay Data Input API only accepts variable fields, and only fields enabled for the paygroup in the Multipay mapper. Coupa has one list of expense types for the whole organisation; per paygroup KoppelHet records which V field belongs to which type.
  • ADP rejects an entire batch if a single line is wrong, for example an unknown employee number. KoppelHet checks every line against the worker API beforehand. A report from an unknown employee stays unexported in Coupa, so the other employees are still paid on time.
  • ADP refuses the same field twice for the same employee in one delivery. If an employee has three reports with travel costs, KoppelHet first adds them up to one amount per V field, and records per amount which Coupa reports are in it.
  • Data already sent to ADP is corrected with the difference, or you replace the whole batch as long as ADP has not processed it yet. On replacement every field you leave out disappears. KoppelHet therefore stores every batch ID with its full content, so a replacement never deletes amounts by accident.
  • Coupa advises storing the report ID in the system that pays. ADP iHCM has no field for a description per line in the Pay Data Input API. KoppelHet therefore records the link between report ID, batch ID and period in its own log.
  • In Coupa the export flag is a separate request. KoppelHet only sets that flag once ADP has reported the batch back without errors. If the delivery fails, the report simply comes back into the selection the next working day.

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

When does the employee get the money back?

With the first payroll run of their paygroup after approval in Coupa. A report approved after the last round goes along one period later.

What if a report turns out to be wrong afterwards?

As long as ADP has not processed the batch, KoppelHet replaces it. After that the correction goes along as a difference in the next period.

Do employees from ADP also become Coupa users?

Not in the first version. Putting users with their employee number from ADP into Coupa 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.

  • Coupa through the Core API: GET /api/expense_reports?status=approved_for_payment&exported=false, lines through /api/expense_lines, a separate PUT with exported=true per report and /api/users for employee-number.
  • ADP iHCM NL through the Pay Data Input API (pay-data-input.add and pay-data-input.replace) with payrollRegionCode NL, payrollGroupCode, payeeID, payPeriodStartDate, payPeriodEndDate, earningCode, rate and earnedPayPeriodStartDate. The batch ID is in the response under events/data/output/payDataInput/itemId. No OData parameters. Both canonicals must be in the Consumer Application Registry; paygroup and employee number come from the Worker Management API.

Which fields are transferred

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

Field in ADP iHCMField in CoupaNotes
employee-number (Coupa-gebruiker)payeeIDEmployee number in iHCM, equal to payrollfilenumber in the worker API
Paygroup van de medewerkerpayrollGroupCodeRetrieved from the worker API (paygroupcode)
Soort uitgaveearningCode (bijvoorbeeld V160)Lookup table per paygroup; only V fields enabled for that paygroup
Bedrag, opgeteld per soort en medewerkerrateDecimals according to the target field in iHCM
Periode van de salarisrunpayPeriodStartDate en payPeriodEndDateMust exactly match the paygroup's period
Datum van goedkeuringearnedPayPeriodStartDateOn or after the contract start
Aangenomen door ADPexported=true

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.