ml-connector
Microsoft Dynamics GPBambooHR

Microsoft Dynamics GP and BambooHR integration

Microsoft Dynamics GP runs your financials and inventory on Windows Server. BambooHR runs your HR and payroll in the cloud. Connecting the two keeps your employee headcount aligned with your general ledger and moves labor cost journals from BambooHR payroll into Dynamics GP without manual entry. New hires and terminations in BambooHR update your GL dimensions, and compensation changes trigger journal entries in the right cost centers. ml-connector handles the very different auth schemes (Windows domain credentials on one side, OAuth2 on the other) and bridges both the on-premises and cloud APIs.

How Microsoft Dynamics GP works

Microsoft Dynamics GP exposes vendors, customers, GL accounts, GL journal entries, payables invoices, receivables invoices, payments, purchase orders, and inventory items through REST Service Based Architecture (SBA) at a customer-specific server endpoint (https://<server>:<port>/GPService/...) or legacy SOAP Web Services. Authentication is Windows (Negotiate/Kerberos or NTLM) tied to Active Directory, with no OAuth2 or API keys. Dynamics GP is on-premises only and does not support webhooks, so records are read and written by polling with ModifiedDate filters at customer-defined intervals. Write operations are limited to unposted (Work) transactions; posted records are read-only.

How BambooHR works

BambooHR exposes employees, employment status, job information, compensation, benefits, time-off, and time tracking through a REST API at https://{companyDomain}.bamboohr.com/api/v1/, authenticated with OAuth2 (recommended) or API key via Basic Auth. Access tokens expire in 3600 seconds and refresh tokens are issued with offline_access scope. BambooHR supports webhooks (employee.created, employee.updated, employee.deleted) signed with SHA-256 HMAC, though webhook payloads are lightweight and require follow-up API calls for full employee data. BambooHR has no finance entities: no vendors, invoices, GL accounts, or payments.

What moves between them

Employee and compensation data flows from BambooHR into Microsoft Dynamics GP. Employee records from BambooHR webhooks or polling are synced into Dynamics GP vendor master or employee dimension tables, keeping headcount aligned. Compensation changes and payroll allocations are posted as GL journal entries into Dynamics GP GL accounts, mapped to cost centers for each department or location. GL dimensions (employees, departments, cost centers) are validated against Dynamics GP before posting, ensuring all journal lines reference existing accounts. The flow is primarily one-way (BambooHR to Dynamics GP); Dynamics GP is read-mostly for employee and cost center reference data used to validate BambooHR postings.

How ml-connector handles it

ml-connector stores the Windows domain credentials for Dynamics GP and the OAuth2 credentials for BambooHR encrypted, then handles token refresh when BambooHR returns 401. On the Dynamics GP side, it constructs the customer-specific SBA endpoint URL (since Dynamics GP publishes no shared base address) and polls using ModifiedDate filters to fetch new or changed employee records and GL account reference data. On the BambooHR side, it accepts both webhook events and polling to catch employee changes, and uses the fields parameter to enumerate the employee fields needed (email, name, job title, department, compensation). When posting GL journal entries to Dynamics GP, ml-connector wraps the payload in the required top-level Payload key, respects the unposted-vs-posted constraint (only Work transactions can be created), ensures the fiscal period is open, and includes the correct GL account and cost center codes looked up from Dynamics GP. Every record carries a full audit trail and can be replayed if a downstream post fails.

A real-world example

A regional accounting firm manages payroll for a mid-sized distributor. The distributor runs Dynamics GP on-premises for procurement, inventory, and financials, and uses BambooHR for employee records and payroll processing across three regional offices. Before the integration, the accounting team exported compensation reports from BambooHR each month and manually created GL journal entries in Dynamics GP to allocate labor costs to the right cost centers per office, a process that took days and was prone to errors when employees moved between departments. With BambooHR and Dynamics GP connected, new hires and job changes from BambooHR flow into Dynamics GP automatically, updating the employee dimension. Each month's payroll journals post into the correct GL accounts and cost centers by office without re-keying. Month-end close completes faster and headcount-to-payroll reconciliation is straightforward.

What you can do

  • Sync employees and employment status from BambooHR into Microsoft Dynamics GP as vendor or employee dimension records, keeping headcount current.
  • Post monthly compensation and payroll GL journals from BambooHR into Dynamics GP GL accounts, allocated to the correct cost centers by department and location.
  • Map BambooHR compensation changes and employee updates to Dynamics GP GL journal entries using validated cost centers and GL accounts.
  • Bridge Windows domain authentication (Dynamics GP) with OAuth2 token refresh (BambooHR), storing both credential sets encrypted.
  • Poll BambooHR via webhooks or API and Dynamics GP via SBA REST, validating fiscal periods and GL dimensions before posting unposted transactions.

Questions

How does ml-connector handle the different auth schemes between Dynamics GP and BambooHR?
Microsoft Dynamics GP requires Windows domain credentials (Negotiate/Kerberos or NTLM) mapped to an Active Directory account, while BambooHR uses OAuth2 (or legacy API key). ml-connector stores both credential sets encrypted, presents the Windows credentials on each Dynamics GP request, and refreshes the BambooHR OAuth2 token when it expires (every 3600 seconds). The two systems are bridged transparently so a single ml-connector instance can communicate with both.
Why does ml-connector poll Dynamics GP instead of waiting for webhooks?
Microsoft Dynamics GP does not support webhooks or push notifications. The recommended pattern is polling via the SBA REST or SOAP endpoints with ModifiedDate filters to find new or changed records. ml-connector polls at intervals you define and respects the constraint that write operations only work on unposted (Work) transactions; once records are posted (Open or Historical status), they are read-only. BambooHR supports webhooks, so employee changes can trigger immediate syncs, but Dynamics GP employee reference data is still polled as a fallback.
What GL constraints does ml-connector enforce when posting payroll journals to Dynamics GP?
Before posting a GL journal entry, ml-connector validates that the target GL account exists and is open in Dynamics GP, that the cost center code matches a valid GL dimension, and that the fiscal period for the transaction date is open in the Dynamics GP calendar. If any validation fails, the record is held in the audit log and flagged for review. Unposted (Work) transactions can be created; posted (Open or Historical) records are read-only.

Related integrations

Connect Microsoft Dynamics GP and BambooHR

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

Get started