ml-connector
QuickBooks OnlineBambooHR

QuickBooks Online and BambooHR integration

QuickBooks Online manages your accounting, invoicing, and payroll. BambooHR manages your employees, benefits, and time-off. Connecting them keeps your QB employee roster and compensation rates in sync with hires, job changes, and terminations in BambooHR. New employees in BambooHR flow into QB as employee records ready for payroll setup, while compensation and job title changes stay aligned without manual data entry.

How QuickBooks Online works

QuickBooks Online exposes employee records, accounts, journal entries, and payroll entities through the QuickBooks Online Accounting API (v3) over REST. Authentication uses OAuth 2.0 Authorization Code flow with a 1-hour access token and 24-26-hour-rotating refresh tokens. The API supports both webhooks for real-time updates on Employee, Account, and JournalEntry changes, and polling via the CDC (change data capture) endpoint for historical events up to 30 days. Webhook payloads contain only entity ID and operation type, so full records must be fetched via GET after each webhook.

How BambooHR works

BambooHR exposes employee records, job information, compensation history, benefits, and employment status through REST API over HTTPS. Authentication uses OAuth 2.0 Authorization Code flow (recommended for new integrations) with per-customer subdomain endpoints and 1-hour access tokens. Webhooks for employee.created, employee.updated, and employee.deleted events are signed with SHA-256 HMAC and carry lightweight payloads requiring a follow-up GET to fetch full employee details. BambooHR does not expose accounting entities, GL accounts, vendors, or invoices.

What moves between them

Employee records and job information flow from BambooHR into QuickBooks Online on a webhook-driven schedule. When an employee is created, updated, or terminated in BambooHR, ml-connector receives the webhook event, fetches the full employee record, maps BambooHR fields to QB Employee entity attributes, and creates or updates the corresponding QB employee record. Compensation rates, job titles, and employment status flow the same direction so QB payroll records reflect the current state in BambooHR. Data does not flow back to BambooHR.

How ml-connector handles it

ml-connector stores OAuth2 credentials encrypted for both platforms and maintains a per-customer subdomain for BambooHR since the API requires a unique URL per company instance. It listens for BambooHR webhook events signed with SHA-256 HMAC and verifies the signature before processing. On Employee events, ml-connector fetches the full employee record from BambooHR, maps the job information and compensation data to QB Employee attributes, and posts the result to QB's REST API. If either OAuth token expires (QB at 1 hour, BambooHR at 1 hour), ml-connector refreshes the token transparently. When BambooHR returns 503 Service Unavailable (rate limiting), ml-connector backs off and retries. QB webhook payloads require a full entity fetch, so the integration also polls QB's CDC endpoint to detect any employee changes made outside the BambooHR flow, ensuring QB remains the source of truth for payroll-specific fields not managed by HR.

A real-world example

A mid-sized services firm runs QuickBooks Online for accounting and payroll, and BambooHR for employee records and benefits administration. Before the integration, HR completed each new hire in BambooHR, then notified the accounting team to manually create the employee record in QB and set payroll rates. Job title changes and terminations required back-and-forth emails and manual updates. With BambooHR and QB connected, each new hire created in BambooHR automatically appears in QB with job title and compensation already filled in, ready for the first payroll run. Terminations in BambooHR flag the QB employee for immediate deactivation, and title or rate changes sync without manual rework.

What you can do

  • Sync new employees from BambooHR into QuickBooks Online with job title and compensation pre-filled.
  • Automatically update QB employee records when job information or compensation changes in BambooHR.
  • Keep QB payroll employee roster in sync with BambooHR hires, terminations, and rehires.
  • Handle OAuth2 refresh for both platforms and verify BambooHR webhook signatures with SHA-256 HMAC.
  • Detect and retry on BambooHR rate-limiting 503 responses and poll QB's change data capture endpoint for payroll-specific changes.

Questions

What employee fields from BambooHR sync into QuickBooks Online?
Employee name, email, job title, department, employment status, and compensation rates (salary or hourly wage) flow from BambooHR to QB. BambooHR compensation is stored as versioned history, so ml-connector captures the current rate and maps it to QB's payroll field. QB employee records also include payroll-specific fields like tax W-4 data and direct deposit that remain QB-only and are not managed by the integration.
Does QuickBooks Online pull employee data back into BambooHR?
No. The integration is unidirectional: BambooHR is the source of truth for employee records and HR data. QB remains the source of truth for payroll-specific attributes and GL postings. Changes made directly in QB's employee records are not synced back to BambooHR.
How does the integration handle BambooHR's per-customer subdomain requirement and webhook signatures?
ml-connector stores the customer's BambooHR subdomain in the connection configuration and uses it to build the correct per-company API endpoint. BambooHR webhooks are signed with SHA-256 HMAC; ml-connector verifies the X-BambooHR-Signature header before processing any event to ensure the payload came from BambooHR.

Related integrations

Connect QuickBooks Online and BambooHR

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started