BambooHR logoVisma.net ERP logo

HR to ERP

BambooHR to Visma.net ERP integration: employees per branch, ready for hours and expenses

With an integration between BambooHR and Visma.net ERP, every employee in BambooHR automatically becomes an employee in Visma.net, in the branch that belongs to their location, with department, employee class, calendar and work email. A transfer goes through on the effective date from BambooHR's job info, and after the last working day KoppelHet sets the employee in Visma.net to inactive.

What the integration does

Organisations that keep their personnel files in BambooHR and process finance, project hours and expenses in Visma.net ERP type every new colleague in a second time. Leavers often stay active in Visma.net and can still submit expense claims.

  1. HR records a new employee in BambooHR, with location, department and job in job info.
  2. As soon as there is a work email, KoppelHet creates the employee in Visma.net, on hold until the start date.
  3. KoppelHet only passes on a job info row with a later effective date on that day.
  4. On the day after the last working day the employee goes to inactive in Visma.net.
BambooHR → KoppelHet → Visma.net ERPSOURCEBambooHRTARGETVisma.net ERPKoppelHetmapping · logging · monitoringBambooHR → KoppelHet → Visma.net ERPSOURCEBambooHRTARGETVisma.net ERPKoppelHetmapping · logging · monitoring
Out: Employee with number, name and work email · Branch per BambooHR location · Department, employee class and calendar · Status on hold, active or inactive

What to watch for with BambooHR and Visma.net ERP

  • Visma.net refuses a new employee without an email address. In BambooHR, workEmail stays empty until IT has created the account. KoppelHet waits with creating the employee until that field is filled, and warns HR if it is still empty a few days before the first working day.
  • BambooHR's employee.updated webhook event only fires on the fields you select as monitor fields. For Visma.net those are work email, location, department and employment status. A new phone number or home address therefore does not lead to a call to Visma.net.
  • BambooHR stores location and department as rows in job info, each with an effective date. An employee in Visma.net only has one current branch and department. KoppelHet keeps a row that starts later and applies it on that date, so hours and expenses stay on the old department until then.
  • In the Visma.net API branches can only be read, not created. At the start KoppelHet links every BambooHR location that takes part to an existing branch. Employees of a location without a branch, for example in a country that does not book in Visma.net, stay outside the integration.
  • Visma.net asks for an employee class and a calendar with working hours and time zone per employee. BambooHR has neither. Finance sets up a table from employment status to class and from location to calendar; an unknown value becomes an alert instead of an employee with the wrong calendar.
  • In BambooHR the termination date is a read-only field, filled through the employment status table. An employee in Visma.net has no end date in the API. KoppelHet remembers the date from BambooHR and sets the employee to inactive on the day after the last working day.
  • Visma.net refuses a change without the employee's current version tag. KoppelHet reads the employee just before every change and sends the tag along. If finance has just adjusted the employee by hand, that adjustment is not lost.

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

Does the manager from BambooHR go to Visma.net?

Not in the first version. The Reports to field from the Visma.net screen is not in the API's employee model. Approval routes through work groups can be added later as an extension.

Does pay data from BambooHR go along?

No. The integration does not read BambooHR's compensation table. Visma.net only gets what is needed for hours, projects and expenses.

Technical details for IT

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

  • BambooHR through the REST API with an API key. Event-based webhooks employee.created, employee.updated (with monitor fields and changedFields) and employee.deleted; the payload only contains companyId and employeeId. Fields employeeNumber, workEmail, hireDate, terminationDate and employmentHistoryStatus (both read-only, updated through the employmentStatus table); location and department in job info with a date per row.
  • Visma.net ERP through the Service API with Visma Connect (OAuth 2.0 client credentials, per tenant). POST /v1/employee with mandatory employeeCd, department, employeeClass, branch, calendar and contact with lastName and email; PUT /v1/employee/{employeeCd} with If-Match; status Active, On hold or Inactive. Branches through GET only. Limit per hour per combination of company and client, tracked in the X-RateLimit headers.

Which fields are transferred

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

Field in BambooHRField in Visma.net ERPNotes
employeeNumberemployeeCd
firstName, lastNamecontact.firstName en contact.lastName
workEmailcontact.emailMandatory in Visma.net
location (job info)branchThrough a table; branches already exist
department (job info)department
employmentHistoryStatusemployeeClassThrough a table from finance
locationcalendarCalendar per location
hireDate en terminationDatestatus (Hold, Active, Inactive)

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.