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.
- Employees claim in Coupa and approval happens there, as today.
- Every working day KoppelHet fetches the reports that are approved for payment and not yet exported.
- Through the employee number KoppelHet looks up the employee and their paygroup in ADP iHCM.
- 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.
- KoppelHet stores the batch ID and then marks the reports as exported in Coupa.
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 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
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 iHCM | Field in Coupa | Notes |
|---|---|---|
employee-number (Coupa-gebruiker) | payeeID | Employee number in iHCM, equal to payrollfilenumber in the worker API |
Paygroup van de medewerker | payrollGroupCode | Retrieved from the worker API (paygroupcode) |
Soort uitgave | earningCode (bijvoorbeeld V160) | Lookup table per paygroup; only V fields enabled for that paygroup |
Bedrag, opgeteld per soort en medewerker | rate | Decimals according to the target field in iHCM |
Periode van de salarisrun | payPeriodStartDate en payPeriodEndDate | Must exactly match the paygroup's period |
Datum van goedkeuring | earnedPayPeriodStartDate | On or after the contract start |
Aangenomen door ADP | exported=true |
Related
ADP iHCM → Active Directory
ADP iHCM to Active Directory integration: network accounts per country, with an expiry date for temporary contracts
ADP iHCM → Dyflexis
ADP iHCM to Dyflexis integration: employees and contracts in scheduling, hours back to ADP
ADP iHCM → Microsoft Entra ID
ADP iHCM to Entra ID integration: accounts from ADP payroll, with the right licence in every European country
ADP iHCM → Google Workspace
ADP iHCM to Google Workspace integration: Google accounts from the ADP administration, with the address back in ADP