ml-connector
AcumaticaUKG

Acumatica and UKG integration

Acumatica runs finance, distribution, and operations. UKG runs HR and payroll. Connecting the two keeps your general ledger and your workforce in agreement without re-keying. After each pay run, the labor cost distributions UKG produces post into Acumatica as a balanced journal transaction, allocated to the right accounts and subaccounts by cost center. New hires, transfers, and terminations in UKG keep the Acumatica employee list current, and ml-connector handles the very different authentication and data shapes on each side.

How Acumatica works

Acumatica Cloud ERP exposes vendors, bills, purchase orders, payments, GL accounts, journal transactions, and employees through its Contract-Based REST API. Each instance has its own URL and a version-locked endpoint path, such as /entity/Default/24.200.001/, that must match the customer's ERP release or the call returns 404. All field values are wrapped in value objects, and entity names are case-sensitive. Authentication is OAuth 2.0 through the built-in OpenID Connect server, or a legacy login session cookie. Acumatica offers Push Notifications, but the common and reliable pattern is polling on LastModifiedDateTime with OData $top and $skip.

How UKG works

UKG Pro exposes employees, pay statements, direct deposit, cost center codes, and payroll GL distributions through its HCM REST API on a tenant-specific hostname, such as service.ultipro.com, with no shared base URL. The core REST surface uses HTTP Basic auth combined with two required headers, US-CUSTOMER-API-KEY and US-USER-API-KEY, and there is no token to expire. UKG has no chart-of-accounts or GL journal endpoint; payroll GL data comes from the /services/payroll/v1/thirdpartypay service, which carries GL account, debit and credit amounts, and cost center, or from a configured flat-file export. The platform also pushes employee and HR events by HMAC-SHA256 signed webhooks with a 14-day retention window.

What moves between them

The main flow runs from UKG into Acumatica. After each pay run, ml-connector reads the third-party pay GL distributions from UKG and posts the labor cost entries into Acumatica as journal transactions, mapped to the matching GL accounts and subaccounts. Employee records flow the same direction so the Acumatica employee list reflects UKG hires, terminations, and transfers, pulled with the changed-employees delta endpoint. Cost centers and departments are aligned so payroll allocations land on valid Acumatica subaccounts. UKG holds no chart of accounts, so the Acumatica GL stays the source of truth and ml-connector never writes financial entries back into UKG.

How ml-connector handles it

ml-connector stores both credential sets encrypted and sends UKG's Basic auth header together with the US-CUSTOMER-API-KEY and US-USER-API-KEY headers on every request, since omitting either key returns a silent 401. On the Acumatica side it accepts the full instance URL and the exact endpoint version per customer, because a version mismatch returns 404, and it wraps every field value in the required value object so writes do not fail with a 400. UKG GL distributions read from the third-party pay service after each run become balanced journal transactions in Acumatica, with UKG cost centers mapped to Acumatica subaccounts first so every line references a dimension that already exists. For employees, it follows UKG's two-pass pattern, paging the employee-ids list with page and per_Page before fetching each profile, and uses the changed endpoint for ongoing deltas. UKG webhooks are HMAC-SHA256 signed and expire after 14 days, so where they are enabled ml-connector verifies the signature and acts on the event, and a scheduled delta poll backfills anything missed past the retention window. Neither side publishes fixed rate limits and both return HTTP 429 under load, so ml-connector backs off with jitter, retries, and keeps a full audit trail with error replay on every record.

A real-world example

A mid-sized distribution company with around 350 employees runs Acumatica Cloud ERP for inventory, purchasing, and finance, and uses UKG Pro for HR and payroll across a warehouse and two branch offices. Before the integration, accounting exported the payroll register from UKG every pay period and typed the labor totals into Acumatica by hand, then spent the first days of month-end close reconciling headcount against the labor accounts in the ledger. With Acumatica and UKG connected, each pay run's GL distributions post into Acumatica automatically, allocated to the subaccount for each location, and worker changes keep both systems aligned. Close starts with the labor accounts already reconciled, and the manual re-keying is gone.

What you can do

  • Post UKG third-party pay GL distributions into Acumatica as balanced journal transactions after every pay run.
  • Keep the Acumatica employee list aligned with UKG hires, terminations, and transfers using the changed-employees delta.
  • Map UKG cost centers and departments to Acumatica accounts and subaccounts so payroll lands on valid dimensions.
  • Authenticate UKG with Basic auth plus its customer and user API keys, and Acumatica with its version-locked tenant login.
  • Poll on a schedule tied to your payroll calendar, with retries, error replay, and a full audit trail on every record.

Questions

Which direction does data move between Acumatica and UKG?
The main flow is UKG into Acumatica. Payroll GL distributions and employee records move from UKG into Acumatica, while cost centers and departments are aligned so allocations match. UKG has no chart of accounts, so the Acumatica GL stays the source of truth and ml-connector does not write financial entries back into UKG.
How does ml-connector get GL data out of UKG when UKG has no GL endpoint?
UKG Pro does not expose journal entries or GL account balances through REST. Instead, ml-connector reads the /services/payroll/v1/thirdpartypay service, which returns pay distributions with GL account, debit and credit amounts, and cost center, and reconstructs balanced journal transactions for Acumatica. A configured flat-file export is the alternative source where a customer already produces one.
How does the integration handle Acumatica's version-locked URL and UKG's two API keys?
ml-connector accepts the full Acumatica instance URL and the exact endpoint version per customer, since a version mismatch returns a 404, and it wraps every field value in the value object Acumatica requires. On the UKG side it sends Basic auth along with both the US-CUSTOMER-API-KEY and US-USER-API-KEY headers, because dropping either one returns a silent 401 with no hint of which is missing.

Related integrations

Connect Acumatica and UKG

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

Get started