Perfcopilot

BambooHR Goals

BambooHR's Performance Management module exposes flat employee goals — no native Key Result nesting. PerfCopilot syncs them as goals-only (no KR rows). The same API key and subdomain are shared with the BambooHR Attendance integration if you have both connected.

Performance Management add-on required

The goals endpoint is part of BambooHR's Performance Management add-on. Orgs on the base BambooHR plan don't have it enabled.

PerfCopilot detects this automatically on the first goals sync (and re-checks once an hour after that). The detection probes both candidate API paths — modern /api/v1/employees/{id}/goals/ and legacy /api/v1/performance/goals — and:

  • If either responds with 2xx, that path is stored and used for all subsequent syncs.
  • If both return 403 or 404, PerfCopilot marks Performance as not enabled on your plan and disables the goals sync. The BambooHR integration card on /admin?tab=integrations shows a status banner, and the Sync from BambooHR button on each employee's Goals tab is grayed out with an inline message.
  • Network errors, timeouts, 401s (bad API key) and 5xx are not treated as "module missing" — they bubble up as real errors so a flaky API call can't permanently disable your goals sync.

To enable goals sync, contact BambooHR and add the Performance Management module to your plan. Once enabled, the next sync attempt will re-probe automatically and turn the integration back on.

What we pull

  • Goals — fetched from whichever endpoint the probe selected. Fields read: title or name, description (capped at 1,000 characters), status, startDate/dueDate.

Status mapping:

| BambooHR status | PerfCopilot | |---|---| | completed, complete, done | completed | | behind, at_risk | at_risk | | off_track, missed | off_track | | in_progress / anything else | on_track |

No Key Results — BambooHR's goals are flat. The Goals tab shows these as top-level goals without nested KRs.

Connecting

  1. Go to /admin?tab=integrations, find the BambooHR card (shared with attendance).
  2. Enter your API key (from BambooHR → Account → API Keys) and subdomain (the acme part of acme.bamboohr.com).
  3. Map each employee's BambooHR employee ID in the unmapped-employees list.
  4. The first time you click Sync from BambooHR on someone's Goals tab, PerfCopilot probes your API for Performance Management. The result is shown on the integration card.

What hits a review

Goals appear in the [GOALS] block of the review prompt listing each goal's name and status.

Troubleshooting

Status banner says "Performance module not enabled on your plan": the probe found both candidate endpoints returning 403/404. Add the Performance Management add-on through your BambooHR account team, then trigger one more sync — the probe will retry automatically.

Zero goals after sync (no banner shown): verify the employee ID is correct (it's the numeric ID in BambooHR, not the employee's email).

401 / authentication error: BambooHR uses Basic auth with api_key:x. The :x is literal — any string in the password position works. If you're getting 401s, the API key itself is wrong, not the password. Fix the key and re-save the integration; the probe will re-run on the next sync.

Privacy notes

  • Goal descriptions are stored up to 1,000 characters and visible to managers in the Goals tab.
  • The API key grants read access to all employee records on your BambooHR subdomain, not just goals. Use BambooHR's API key scoping if you want to limit access, though PerfCopilot only reads goal and timesheet data.