ml-connector
Sage 300BambooHR

Sage 300 and BambooHR integration

Sage 300 is your financial backbone for AP, AR, GL, and inventory. BambooHR is your source of truth for people: hires, terminations, compensation, and org structure. Connecting them keeps your payroll cost centers aligned with your GL accounts and ensures new employees are set up in Sage 300 the day they start in BambooHR. ml-connector handles the different authentication models and ensures employee data flows in the right direction at the right cadence.

How Sage 300 works

Sage 300 is an on-premise ERP that exposes Accounts Payable, Accounts Receivable, General Ledger, Purchase Orders, Order Entry, and Inventory Control via REST and OData APIs. Every request uses HTTP Basic Authentication with uppercase username and password in an Authorization header against a customer-specific IIS server URL. The API supports standard OData filters and pagination ($filter, $skip, $top, $orderby) on a scheduled polling cadence. Sage 300 has no webhooks or change-data-capture; all synchronization is pull-based. The API user must be created in Administrative Services with Web API security group membership, and the IIS server must have Anonymous Authentication enabled and Windows Authentication disabled.

How BambooHR works

BambooHR is a cloud-based HRIS that manages employees, employment status, job information, compensation, benefits, and time-off. It exposes data through REST APIs secured with OAuth 2.0 (access tokens valid for 3600 seconds with refresh tokens available for offline access) or legacy API key authentication via HTTP Basic Auth. BambooHR supports both event-based webhooks (employee.created, employee.updated, employee.deleted, signed with SHA-256 HMAC) and REST polling. Webhook payloads are lightweight and require follow-up GET requests to fetch full employee records. API requests must target a customer-specific subdomain (e.g., acme.bamboohr.com/api/v1/), and rate limits are enforced but not published; rate-limited responses return 503 Service Unavailable with an optional Retry-After header.

What moves between them

Employee records flow from BambooHR into Sage 300. When a new employee is created or updated in BambooHR, ml-connector reads their employment status, job information, compensation, and organizational hierarchy, then maps them into Sage 300 master data such as GL segments, cost centers, or department codes. Compensation records and employment status changes trigger updates in Sage 300 to ensure cost allocation aligns with the current org structure. Payroll cost center definitions from Sage 300 GL flow back to BambooHR to validate compensation allocations. Sync runs on a schedule tied to your payroll calendar or in response to BambooHR webhook events if enabled.

How ml-connector handles it

ml-connector stores Sage 300 HTTP Basic Auth credentials and BambooHR OAuth refresh tokens encrypted, then authenticates to each system with the stored credentials. For Sage 300, it constructs the HTTP Authorization header with uppercase username and password and targets the customer-specific IIS server URL provided per installation. For BambooHR, it refreshes the OAuth access token when it nears expiry or when a 401 response is received. ml-connector polls BambooHR for new and updated employees using the employees endpoint or processes incoming webhooks if the customer has enabled them. It extracts employment status, job title, department, compensation rate, and manager hierarchy from BambooHR, then maps these to Sage 300 GL segments, cost centers, and vendor or employee master records. Sage 300 GL accounts and cost center dimensions are queried first to ensure every employee allocation references valid accounts. The integration handles BambooHR's per-subdomain token endpoints and Sage 300's requirement for customer-specific IIS URLs. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A regional professional services firm runs Sage 300 on-premise for billing, payroll, and cost management across three offices. They use BambooHR for HR and compensation tracking. Before the integration, HR updated a spreadsheet when new consultants were hired, the Finance team imported the spreadsheet into Sage 300, and cost allocations were manually adjusted during payroll runs. With BambooHR and Sage 300 connected, each new hire in BambooHR automatically flows into Sage 300 with the correct cost center and GL allocation. When a consultant moves to a different client project, their compensation cost center updates in both systems, and month-end close requires no manual reconciliation of headcount or labor costs.

What you can do

  • Sync new employees, terminations, and status changes from BambooHR into Sage 300 as GL cost centers and department dimensions.
  • Map BambooHR compensation and job title data to Sage 300 GL segments and cost center codes for accurate payroll cost allocation.
  • Authenticate BambooHR via OAuth 2.0 with automatic token refresh and Sage 300 via HTTP Basic Auth to the customer-specific IIS server.
  • Receive employee updates via BambooHR webhooks or poll on a schedule, with automatic retries and a full audit trail on every record.
  • Validate all employee allocations against existing Sage 300 GL accounts and cost centers before posting.

Questions

How does the integration handle BambooHR OAuth and Sage 300 Basic Auth?
ml-connector stores BambooHR OAuth refresh tokens encrypted and refreshes the access token on expiry or when a 401 response is received. For Sage 300, it stores the HTTP Basic Auth credentials encrypted and constructs the Authorization header with uppercase username and password on every request. Both systems are re-authenticated before every poll cycle.
Can the integration use BambooHR webhooks or does it only poll?
The integration supports both. If BambooHR webhooks are enabled, ml-connector can receive employee.created, employee.updated, and employee.deleted events signed with SHA-256 HMAC. For customers without webhooks enabled, ml-connector polls the BambooHR employees endpoint on a schedule tied to your payroll calendar.
What happens if an employee's cost center in BambooHR does not match a valid Sage 300 GL account?
ml-connector queries Sage 300 GL accounts and cost centers first, before processing any employee record. If an allocation references an invalid GL account or cost center, the record is held in the audit trail with an error, and a notification is sent. The flow resumes once the missing account is created in Sage 300 or the BambooHR compensation record is corrected.

Related integrations

Connect Sage 300 and BambooHR

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

Get started