Personio logoCoupa logo

HR to ERP

Personio to Coupa integration: Personio employees as Coupa users with cost centre and approver

With an integration between Personio and Coupa, every employee from Personio becomes a Coupa user, with employee number, department, the supervisor as manager and a default account from the cost centre in Personio. A different cost centre or supervisor in Personio carries through to Coupa, and after the last working day the user becomes inactive.

What the integration does

Organisations that use Personio as their HR system and Coupa for purchasing and expenses often maintain Coupa users with CSV imports. A changed cost centre in Personio then only reaches Coupa with the next import, and requests from those weeks land on the old account.

  1. Personio reports a change; KoppelHet acknowledges straight away and puts the request in a queue.
  2. KoppelHet fetches the employment with cost centres, department and supervisor.
  3. Department, manager, account and content group are checked for existence in Coupa.
  4. The user is created or updated on the stored Coupa ID.
  5. After the last working day KoppelHet sets the user to inactive.
Personio → KoppelHet → CoupaSOURCEPersonioTARGETCoupaKoppelHetmapping · logging · monitoringPersonio → KoppelHet → CoupaSOURCEPersonioTARGETCoupaKoppelHetmapping · logging · monitoring
Out: User with login, work email and employee number · Department and manager · Default account from the cost centre · Content group per legal entity · Active or inactive

What to watch for with Personio and Coupa

  • Personio sometimes splits an employment over several cost centres with a weight. A Coupa user has one default account. KoppelHet picks the cost centre with the largest weight as default; requesters can still choose another account per line in Coupa.
  • Personio has its own webhook for a changed cost split, separate from other employment changes. KoppelHet uses it to update only the default account in Coupa, so a correction by finance does not also resend manager and department.
  • Personio expects an acknowledgement of each webhook within three seconds and otherwise retries for up to three days. Coupa can respond more slowly, and creating a user requires checks first. KoppelHet therefore acknowledges at once and processes the change afterwards, so Personio does not send duplicate notifications.
  • A move to another entity appears in Personio as a termination with the type company switch, followed by a new employment. In Coupa that is the same person who only gets a different content group and account. KoppelHet therefore does not deactivate the user for this type, but updates it, so open requests and approvals stay in place.
  • On a termination Personio gives both the end date of the employment and the last working day. Someone taking leave in the final weeks therefore stops working before the end date. KoppelHet sets the Coupa user to inactive after the last working day, so no requests run under that name after the departure.
  • The supervisor is stored in Personio as the ID of another person. Coupa only accepts a manager who is already a user. KoppelHet looks up the supervisor's work email, creates a new supervisor first and only then the employees below them.

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 · Basic

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 approved expenses from Coupa go back to payroll?

Not in this integration. That is a separate flow that can be added later as an extension.

What if finance does not have a cost centre in Coupa yet?

Then the old default account stays and finance gets an alert. KoppelHet does not create accounts in Coupa.

Technical details for IT

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

  • Personio through webhooks (employment.created, employment.updated, employment.updated.cost-centers, employment.terminated; IDs only, 2xx within 3 seconds, retried for up to 3 days) and the v2 API for persons and employments (legal_entity, supervisor, org_units, cost_centers with weight, termination with last_working_day and type SUB_COMPANY_SWITCH).
  • Coupa through the Users API - POST /api/users and PUT /api/users/:id on the stored Coupa ID, with login, email, employee-number, firstname, lastname, department, manager, default-account, content-groups, default-currency, licence flags such as expense-user, authentication-method with sso-identifier, and active.

Which fields are transferred

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

Field in PersonioField in CoupaNotes
Werkmail van de persoonlogin en emailBoth unique
Personeelsnummer (attribuut in Personio)employee-number
org_units (type department)department
supervisor.idmanagerThrough the supervisor's work email
cost_centers (hoogste weight)default-accountFinance table
legal_entity.idcontent-groups en default-currencyTable per entity
termination.last_working_dayactive = false

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.