ml-connector
Microsoft Dynamics 365 F&OUKG

Microsoft Dynamics 365 F&O and UKG integration

Microsoft Dynamics 365 F&O runs finance, procurement, and the general ledger. UKG runs payroll and HR. Connecting the two means the labor cost UKG produces after each pay run posts into the D365 F&O general ledger without re-keying, and employee cost center and department assignments stay in agreement across both systems. UKG has no chart of accounts of its own, so the ledger stays in D365 F&O where it belongs. ml-connector handles the very different APIs on each side and moves the data on a schedule tied to your payroll calendar.

How Microsoft Dynamics 365 F&O works

Microsoft Dynamics 365 F&O exposes its data through the OData v4 REST service at a tenant-specific operations.dynamics.com host, so there is no shared base URL. Key entities for this integration include MainAccounts, GeneralJournalAccountEntries, vendor and customer payment journal lines, financial dimensions, and VendorsV2, all keyed by full natural keys such as account number plus dataAreaId. Authentication is OAuth 2.0 client credentials through Microsoft Entra ID, returning a bearer token that expires in about an hour. D365 F&O can push outbound Business Events to an HTTPS endpoint, but those payloads carry only identifiers and require a follow-up OData call, so finance reads run by polling.

How UKG works

UKG Pro is an HRIS and workforce product, not an ERP, so it has no vendors, invoices, purchase orders, or chart of accounts. It exposes employees, pay statements, and third-party pay through its Core HCM REST API on a tenant-specific hostname such as service.ultipro.com, authenticated with HTTP Basic auth combined with two required API key headers, US-CUSTOMER-API-KEY and US-USER-API-KEY. The third-party pay endpoint returns pay distributions with GL account numbers, debit and credit amounts, and cost centers, which is the data used to build ledger journals. UKG also supports outbound webhooks signed with HMAC SHA-256 and a configured GL export template that produces a flat file via the Integrations Dashboard.

What moves between them

The main flow runs from UKG into Microsoft Dynamics 365 F&O. After each payroll run, ml-connector reads UKG third-party pay distributions and posts the labor cost as general journal lines into D365 F&O, mapped to the matching MainAccounts and financial dimensions. Employee records flow the same direction so D365 F&O reflects UKG hires, terminations, and cost center assignments. Reference data such as cost centers and departments is aligned so payroll allocations land on valid D365 F&O dimensions. UKG has no ledger to receive postings, so ml-connector never writes financial entries back into payroll.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the UKG side it sends HTTP Basic auth plus both API key headers on every request, because omitting either returns a silent 401, and it uses page and per_Page paging across the Core REST surface. On the D365 F&O side it accepts the full tenant operations.dynamics.com host per customer, requests an Entra ID bearer token by client credentials, and refreshes it before the roughly one-hour expiry. Cost centers and departments are mapped first, so every journal line references a main account and financial dimension that already exist in D365 F&O; dimension values are passed as the formatted display string D365 F&O expects, which must be configured for integrating applications first. Posted GL entries are read-only in D365 F&O, so labor cost is created through journal entities rather than written to GeneralJournalAccountEntries directly. Neither API has a built-in idempotency key, so ml-connector dedupes on the pay period and employee with a BullMQ jobId before it posts, which avoids double-booking a re-read pay run. Where UKG webhooks are enabled, a verified payroll event can trigger the read, while a scheduled poll tied to the pay calendar backfills anything missed within the 14-day webhook retention window. Service protection limits on D365 F&O and the per-tenant gateway limit on UKG both return HTTP 429, so ml-connector honors Retry-After and backs off with jitter, and every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized discrete manufacturer with about 600 employees across two plants and a head office runs Microsoft Dynamics 365 F&O for finance and procurement and uses UKG Pro for payroll and HR. Before the integration, the finance team exported payroll registers from UKG every pay period and re-entered the labor totals into D365 F&O by hand, then spent the first days of month-end close chasing differences between HR headcount and the labor accounts in the ledger. With Microsoft Dynamics 365 F&O and UKG connected, each pay run's GL distributions post into D365 F&O automatically, allocated to the cost center for each plant, and employee changes keep the two systems aligned. Month-end close starts with the labor accounts already reconciled, and the manual re-keying step is gone.

What you can do

  • Post UKG payroll labor cost into the Microsoft Dynamics 365 F&O general ledger after every pay run, allocated to the correct main accounts and financial dimensions.
  • Keep D365 F&O aligned with UKG hires, terminations, and cost center assignments.
  • Map UKG cost centers and departments to D365 F&O financial dimensions so payroll lands on valid accounts.
  • Authenticate UKG with Basic auth and its two API keys, and Microsoft Dynamics 365 F&O with an Entra ID bearer token.
  • Poll on a schedule tied to your payroll calendar, honoring Retry-After on 429, with jobId dedup and a full audit trail on every record.

Questions

Which direction does data move between Microsoft Dynamics 365 F&O and UKG?
The main flow is UKG into Microsoft Dynamics 365 F&O. Payroll GL distributions and employee records move from UKG into D365 F&O, while cost centers and departments are aligned so journals land on valid dimensions. UKG has no chart of accounts, so the ledger stays in D365 F&O and ml-connector never writes financial entries back into payroll.
How does the integration get general ledger data out of UKG when UKG has no chart of accounts?
UKG Pro is an HRIS and WFM product, so it does not store ledger journals or account balances. ml-connector reads the third-party pay endpoint, which returns pay distributions with GL account numbers, debit and credit amounts, and cost centers. Those distributions are mapped to D365 F&O main accounts and financial dimensions and posted as general journal lines, so the ledger entries are built in D365 F&O rather than pulled from UKG.
Does UKG push payroll events, or does ml-connector poll for them?
Both are supported. UKG offers outbound webhooks signed with HMAC SHA-256, so a verified event can trigger a read, but webhook events expire after 14 days. Because of that retention limit and because D365 F&O finance reads run by polling, a scheduled poll tied to the payroll calendar is the default and backfills anything a webhook missed.

Related integrations

Connect Microsoft Dynamics 365 F&O and UKG

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

Get started