Setting up BambooHR in Rofinery
Connecting BambooHR pulls your team's annual leave, sickness and every other absence type into Rofinery, so it shows on the resource calendar and in capacity reports without anyone typing it twice.
BambooHR stays in charge. Rofinery only reads from it, and never writes anything back. Your team carries on booking leave in BambooHR exactly as they do now.
This article is for whoever sets the connection up. If you just want to know what changes for your team day to day, read Using time off when BambooHR is connected instead.
Who can do this
You need to be the team owner or have the admin role in Rofinery.
If you can't see Workspace settings → Integrations, you don't have the right role. Ask your team owner to either connect it for you or make you an admin.
You'll also need someone who can sign in to BambooHR with permission to see everyone's time off. That doesn't have to be you, but it does have to be someone who can be at the screen when you connect.
Before you start
You need two things.
Your BambooHR subdomain. This is the first part of your BambooHR web address. If your team signs in at acme.bamboohr.com, your subdomain is acme.
A BambooHR account that can see the whole company. This one matters more than it sounds.
Important: Rofinery inherits the permissions of whoever authorises the connection. If you connect using a line manager's account that can only see their own department, Rofinery will only ever sync that department's leave. Nothing will look broken. The rest of your team's absence will simply never appear.
Connect using an account with company-wide time off visibility, usually an HR administrator or account owner.
Step 1: Connect your BambooHR account
- Go to Workspace settings → Integrations.
- Find BambooHR in the list and click Connect.
- Type your subdomain into the BambooHR subdomain field. Just the first part, not the whole address.
- Click Connect BambooHR. You'll be sent to BambooHR to sign in and approve the connection.
- Approve it, and you'll come back to Rofinery.
When you get back you'll see Connected to BambooHR, the account you connected to, and who authorised it.
If you see Connection not finished instead, the approval didn't complete. There'll be a message at the top of the page explaining why. See Troubleshooting below.
Step 2: Match people
Rofinery now needs to know which BambooHR employee is which Rofinery user. Until someone is matched, their leave is skipped.
Under Set up the mapping, the Match people table lists everyone in your Rofinery team.
-
Anyone whose Rofinery email exactly matches their BambooHR work email is linked for you and tagged By email.
-
Anyone else shows Not linked with a dropdown. Pick the right person from the list and they're linked immediately, tagged By hand.
-
Got one wrong? Click Unlink and choose again.
Underneath, you'll see a count of BambooHR employees who aren't linked to anyone in Rofinery. That's normal if your BambooHR account holds people who don't use Rofinery. Their leave is skipped, and skipped requests are counted on every sync so nothing disappears silently.
Note: If someone in BambooHR should have a Rofinery account, you can create it from Workspace settings → Members without retyping their details. See Managing team member access.
Step 3: Match time off types
BambooHR and Rofinery both let you name your own absence types, so Rofinery can't guess how they line up.
The Match time off types table lists every type from BambooHR. For each one, either pick the Rofinery type it should become, or choose Ignore, which means do not import.
Rofinery only maps a type for you when the names match exactly. Anything close but not identical, like "Annual Leave/Holiday" against "Annual leave", is deliberately left for you. A wrong guess here would file sickness under holiday without telling anyone.
The Measured in column shows whether BambooHR tracks that type in days or hours. You don't need to do anything about it, but see Limits below for what happens to hours.
Each row shows one of three states:
| Status | What it means |
|---|---|
| Mapped | Leave of this type will import into the Rofinery type you chose |
| Ignored | Leave of this type will never import |
| Needs a decision | Nothing imports for this type yet, and syncing can't start |
Step 4: Confirm the mapping and start syncing
Until you do this, nothing syncs. A banner at the top of the page tells you what's still outstanding, and once everything's ready the Confirm mapping and start syncing button appears in it. The same button also sits at the foot of the mapping section.
Two things have to be true before you can confirm:
-
Every time off type has a decision. If any is still undecided, Rofinery refuses and tells you how many are left. An undecided type would mean quietly dropping its requests.
-
At least one person is matched. Otherwise syncing would run and import nothing at all.
Once confirmed, leave starts importing on the next sync, within 15 minutes.
Note: Your team's experience of the time off section changes as soon as you confirm. It's worth telling them beforehand. Using time off when BambooHR is connected explains what they'll see.
Import historical leave
By default Rofinery syncs a rolling window: 90 days back and a year ahead. To bring in older leave, use Import historical leave.
- Pick a date in Import leave from. The calendar has a Current financial year shortcut.
- Click Run backfill.
The import runs in three-month blocks in the background. Watch Recent syncs for progress.
Important: Importing history changes your past utilisation and capacity figures, because those reports subtract time off. If you've already reported those numbers to anyone, they'll move. Choose your start date deliberately rather than going back as far as possible.
How syncing works day to day
Once you've confirmed the mapping, you shouldn't need to touch this page.
| What | Automatic or manual? | Details |
|---|---|---|
| Time off requests | Automatic, every 15 minutes | A rolling window of 90 days back and a year ahead |
| Balances | Automatic, overnight at 04:00 | One check per person, so it runs nightly rather than all day |
| Wider reconciliation | Automatic, overnight at 04:30 | Re-checks your whole synced range, catching leave cancelled months after it was booked |
| People list | Automatic, overnight | New joiners appear ready to match; leavers get flagged for review |
| Time off types | Manual | Use Actions → Refresh time off types. A new type also registers itself automatically if leave arrives for it |
| Everything, right now | Manual | Actions → Sync time off now or Sync balances now |
Cancel some leave in BambooHR and it disappears from Rofinery on the next sync, within 15 minutes. Edit it and the change follows. Delete it entirely and Rofinery marks its copy cancelled rather than removing it, so your history stays intact.
Keeping the connection healthy
Four cards at the top of the page tell you at a glance whether it's working:
-
Time off last synced
-
Balances last synced
-
People visible: how many employees the connection can see in BambooHR
-
Sync leave from: how far back your history goes
People visible is the one to watch. If it's lower than your headcount, the account you connected with can't see everyone, and you're only getting part of your team's leave.
Below that, Recent syncs lists the last eight runs with what each one added, changed, cancelled and skipped, and whether it succeeded.
Rofinery also emails the team owner when something needs attention:
-
BambooHR stops accepting the connection
-
The connection can suddenly see fewer people than before
-
A time off type needs a decision and requests are being held
-
Syncing fails three times in a row
You'll get at most one email per issue per day. Add more recipients in Workspace settings → Time off using the admin email field.
Reconnecting and disconnecting
Both live under the Actions dropdown.
Reconnect sends you back through BambooHR sign-in. Use it if the connection stops working, or if you want to authorise with a different BambooHR account.
Disconnect stops all syncing. Leave that's already synced stays exactly where it is, on the calendar and in your reports, but nothing new imports. Your team's booking forms come back, and your notice periods, blackout dates and approver settings start applying again.
Reconnecting after a disconnect picks up where you left off. Your people and time off type matching is kept, so if it was already complete, syncing simply resumes. You don't need to confirm the mapping again, and you'll see a message saying your existing mapping was kept.
If you reconnect with a different BambooHR account, or if people or types have changed in the meantime, check Match people and Match time off types before assuming everything lines up.
Note: Disconnecting deletes nothing. Not your matching, not your synced leave, and not your Rofinery settings.
Limits and constraints
Rofinery never writes to BambooHR. No leave booked, edited, approved or cancelled in Rofinery is ever sent back. That's why the booking forms are switched off while it's connected.
Synced leave can't be edited in Rofinery. No approving, declining or cancelling. Do it in BambooHR and it follows through. Anything changed in Rofinery would be overwritten on the next sync anyway.
Balances are shown exactly as BambooHR reports them. Rofinery never recalculates them, because BambooHR handles accrual, carryover and manual adjustments that Rofinery knows nothing about.
Hours-based types are converted to days. Rofinery stores time off in days, so a type BambooHR measures in hours is divided by that person's working hours for the day. For standard working patterns this is exact. For someone on an irregular pattern it's a close approximation. The original figure is always kept alongside it.
People with no work email in BambooHR can't be matched automatically. Link them by hand.
Unmatched people are skipped, not guessed at. Their leave never imports until you link them.
Troubleshooting
-
"BambooHR refused the connection: An unsupported scope was requested". The permissions Rofinery asks for aren't all enabled on the app. Contact Rofinery support; this is something we fix at our end, not yours.
-
Connection not finished, no clear reason. The approval didn't complete in BambooHR. Click Reconnect and try again. The error from BambooHR appears at the top of the page.
-
People visible is lower than your headcount. The BambooHR account you connected with can't see everyone. Reconnect using an account with company-wide time off visibility.
-
You've connected but nothing is syncing. Look for the banner at the top of the BambooHR settings page. It says exactly what's outstanding, and carries the Confirm mapping and start syncing button once everything is ready. Nothing imports until you've confirmed.
-
Someone's leave isn't appearing. Check three things in order. Are they linked under Match people? Is their absence type Mapped rather than ignored or undecided? And is the leave inside your sync window, 90 days back by default?
-
A whole type of leave is missing. That type is probably set to Ignore, or still needs a decision. Check Match time off types.
-
You changed something in BambooHR and it hasn't appeared. Time off syncs every 15 minutes, balances only overnight. Use Actions → Sync time off now or Sync balances now rather than waiting.
-
A balance says Unlimited. That's BambooHR reporting the policy as discretionary, meaning no allowance is tracked. Showing zero days left would be wrong, so Rofinery shows Unlimited. Change the policy in BambooHR if that's not what you intended.
-
You've had an email saying the connection lost access. Someone's BambooHR permissions changed, or access was revoked. Nothing is syncing until you click Reconnect.