

Recruitment to HR
Bullhorn to Loket integration: placement as a concept employee in the right payroll administration
With an integration between Bullhorn and Loket, an approved placement in Bullhorn automatically becomes a concept employee in Loket, with the date paid employment starts, the end date of the assignment and the hourly pay. The pay group on the placement decides which payroll administration the concept goes into, and payroll turns it into an employee after review.
What the integration does
Organisations that place candidates in Bullhorn and pay them in Loket retype every placement for payroll. Paid work often starts on a different day than the placement itself, and whoever misses that difference pays the first week wrongly.
- The recruiter sets the placement in Bullhorn to the agreed status, with start, possible end, hourly pay and pay group.
- KoppelHet fetches the placement and the candidate and checks the employee type.
- The pay group points through a lookup table to the Loket employer and payroll administration.
- In Loket a concept employee is ready, with the new hire checklist started.
- Payroll adds citizen service number, payroll tax and collective agreement details and converts the concept into an employee.
What to watch for with Bullhorn and Loket
- Besides the start date, Bullhorn has a separate field on the placement for the day paid employment begins, intended for payroll integrations. KoppelHet uses that date as the hire date in Loket and only falls back on the placement start date when the field is empty.
- In Loket the fields of a new concept depend on the payroll administration, and an employer can have more than one. The Bullhorn payGroup field gives the pay frequency of the placement; KoppelHet uses it to pick, for example, the weekly or the monthly payroll administration at the right employer.
- The employee type on a Bullhorn placement can also indicate a contractor or freelancer. Only types you mark as employed become a concept in Loket; the rest stays out of payroll.
- Bullhorn stores salary with a unit per year or per hour. An hourly amount goes to the concept as hourly pay. KoppelHet does not convert an annual amount into a monthly wage itself, because holiday pay and a thirteenth month differ per collective agreement; that becomes an alert for payroll.
- Events from the Bullhorn queue can be fetched again with a requestId. If creating the concept in Loket fails, for example because a required field of the payroll administration is missing, KoppelHet fetches the same batch again instead of losing the placement.
- Bullhorn has a field for the candidate's social security number, but KoppelHet does not read it. The citizen service number reaches Loket through payroll, so it does not travel through a recruitment system and an integration.
- Loket only admits an external application to production after approval and first provides an acceptance environment with test data. The first placements per pay group run there, so the lookup table to employers and payroll administrations is right before real concepts appear.
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
Does an extension or a new hourly rate go to Loket later too?
Not in the first version: it only creates the concept. Passing on changes can be added later as an extension, using the same queue.
What if a pay group is not in the lookup table yet?
Then KoppelHet creates no concept and payroll gets an alert with the placement attached.
Technical details for IT
For those who want to know how it works under the hood: APIs, fields and sources used.
- Bullhorn through the REST API (OAuth 2.0, then a REST login with BhRestToken). A subscription on entity Placement with eventTypes INSERTED and UPDATED; GET /event/subscription/{id} with maxEvents reads the queue, with requestId to fetch a batch again. Fields through entity/Placement (status, employmentStartDate, dateBegin, dateEnd, employeeType, payRate, salary, salaryUnit, payGroup) and entity/Candidate (firstName, lastName, dateOfBirth, address).
- Loket through the REST API with OAuth 2.0 (authorization code with refresh token). Metadata for a concept per employer (jobapplicant/metadata) and then per payroll administration; create the concept and start the new hire workflow. Acceptance on api.loket-acc.nl/v2, production only for approved applications.
Which fields are transferred
The key fields. The full mapping is agreed per customer.
| Field in Bullhorn | Field in Loket | Notes |
|---|---|---|
Placement.id | Eigen administratie van KoppelHet | Recognises a second event for the same placement |
Candidate.firstName en lastName | Voornaam, voorvoegsel en achternaam | Name prefix split off using a fixed list |
Candidate.dateOfBirth | Geboortedatum | |
Candidate.address (address1, zip, city, countryID) | Woonadres | |
Placement.employmentStartDate, anders dateBegin | Datum in dienst | |
Placement.dateEnd | Einddatum contract | Empty for a permanent placement |
Placement.payRate | Uurloon | Only for employee types paid by the hour |
Placement.payGroup | Werkgever en loonadministratie | Through a lookup table |
Related
Bullhorn → AFAS Profit
Bullhorn to AFAS integration: a consultant's first placement starts onboarding
Bullhorn → BambooHR
Bullhorn to BambooHR integration: first placement as an employee with a status row in BambooHR
Bullhorn → Dayforce
Bullhorn to Dayforce integration: first placement of an employee as an employee in Dayforce
Bullhorn → Deel
Bullhorn to Deel integration: first placement as a direct employee with a contract in Deel