ml-connector
Sage IntacctUKG

Sage Intacct and UKG integration

Sage Intacct runs accounting and AP. UKG runs payroll and HR. Connecting them keeps your general ledger synchronized with your payroll GL postings after each pay run and your employee records aligned between systems. Payroll journals generated by UKG post into Intacct's general ledger without re-keying, and new hires, terminations, and transfers in UKG keep Intacct headcount and cost center allocations accurate. ml-connector handles the XML gateway on Sage Intacct and the REST APIs on UKG, managing session lifetimes and escaping on both sides.

How Sage Intacct works

Sage Intacct exposes vendors, AP bills, AP payments, GL accounts, and cost center dimensions through a single XML gateway endpoint over HTTPS POST to https://api.intacct.com/ia/xml/xmlgw.phtml. Authentication is session-based using senderId, senderPassword, companyId, userId, and userPassword; an initial getAPISession call exchanges credentials for a sessionid cached for 50 minutes. Intacct does not push webhooks, so all data flows are scheduler-driven or manual-run. HTTP 200 responses may contain application-level errors in the XML body that must be parsed for error tags and status codes. Forbidden XML control characters must be stripped before sending. Intacct has no native idempotency mechanism, so retried operations rely on server-side deduplication keyed on a uniqueid flag.

How UKG works

UKG exposes employees, compensation, pay statements, cost centers, pay groups, and payroll GL journal exports through REST APIs secured with HTTP Basic Auth and two custom API key headers (US-CUSTOMER-API-KEY and US-USER-API-KEY) or OAuth 2.0 client credentials with tokens expiring in 1 hour. Base URLs vary by tenant and datacenter (e.g., https://{tenant-hostname}/personnel/v1/..., https://{tenant-hostname}/payroll/v1/...). UKG supports webhooks via near real-time HMAC SHA-256 signed events with 14-day retention across categories like employee., document., and payroll events, as well as polling via a delta endpoint for employee changes. UKG has no native GL accounts endpoint; GL payroll journals flow through a third-party pay data API (/services/payroll/v1/thirdpartypay) that includes GL account segments. UKG does not expose vendors, invoices, or purchase orders.

What moves between them

The main flow is UKG into Sage Intacct. After each payroll run, ml-connector reads UKG's payroll GL journal exports through the third-party pay API and posts the labor cost journals into Intacct's general ledger, mapped to matching Intacct GL accounts and cost centers. Employee records flow the same direction so Intacct headcount reflects UKG hires, terminations, and transfers. Cost centers and pay groups are aligned bidirectionally so payroll allocations land on valid Intacct GL dimensions. Intacct AP and vendor records do not flow into UKG because UKG has no AP or vendor entities. The sync runs on a schedule tied to your payroll calendar rather than waiting for a real-time push.

How ml-connector handles it

ml-connector caches the Sage Intacct sessionid after the initial getAPISession call and refreshes it when approaching the 50-minute expiry, presenting it on subsequent XML gateway requests. On the UKG side, it authenticates with either Basic Auth and custom headers or OAuth 2.0 client credentials, refreshing OAuth tokens when approaching expiry. Because Intacct accepts only XML and UKG speaks REST JSON, ml-connector transforms payroll journal lines from UKG into Intacct GL posting records, strips forbidden XML control characters, and sends them through the single XML gateway endpoint. Cost centers are looked up in Intacct first to ensure every payroll line references a valid dimension. UKG webhook events are processed for near-real-time employee changes when available, but ml-connector also polls UKG's employee delta endpoint on a schedule as a backstop, since UKG recommends secondary polling for zero-tolerance integrations and webhook retention is only 14 days. GL postings are read-only in UKG, so ml-connector never writes financial entries back to payroll. Retried operations use Intacct's uniqueid deduplication flag to prevent duplicate postings. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized insurance broker runs Sage Intacct for accounting and AP, and uses UKG Workforce Now for payroll and HR across three regional offices. Before the integration, the accounting team received UKG payroll journals at the end of each pay period and manually entered labor cost postings into Intacct, sorted by office and cost center. Staff changes in UKG (new hires, terminations, transfers between offices) had to be manually updated in Intacct's employee and cost center records. Month-end close was delayed by days of manual posting and reconciliation. With Sage Intacct and UKG connected, each payroll run's GL journals post automatically to Intacct, allocated to the correct cost center per office, and employee changes sync bidirectionally. The accounting team spends the first hour of month-end close running a verification report instead of two days of manual entry and reconciliation.

What you can do

  • Post UKG payroll GL journals into Sage Intacct's general ledger after every pay run, allocated to the correct GL accounts and cost centers.
  • Keep Intacct employee and cost center records aligned with UKG hires, terminations, and office transfers.
  • Map UKG pay groups and cost centers to Intacct GL dimensions so payroll postings land on valid accounts.
  • Authenticate Sage Intacct with the XML gateway session API and UKG with Basic Auth or OAuth 2.0, managing token refresh on both sides.
  • Poll on a schedule tied to your payroll calendar with webhook fallback for real-time employee changes, retries, and a full audit trail on every posting.

Questions

Which direction does data move between Sage Intacct and UKG?
The main flow is UKG into Sage Intacct. Payroll GL journals and employee records move from UKG into Intacct, while cost centers and pay groups are aligned bidirectionally. Intacct AP and vendor records do not flow to UKG because UKG has no AP or vendor entities. GL postings are read-only in UKG, so ml-connector does not write financial entries back to payroll.
How does ml-connector handle Sage Intacct's XML gateway and UKG's REST API?
ml-connector caches Intacct's session token and refreshes it before the 50-minute expiry. It transforms UKG payroll journals from JSON into Intacct XML format, strips forbidden XML control characters, and sends them through the single XML gateway endpoint. UKG payroll records are fetched via REST and OAuth 2.0 or Basic Auth, with token refresh managed automatically on both sides.
What happens if payroll GL posting to Intacct fails?
ml-connector tracks every record with a full audit trail and can replay failed postings. Retried operations use Intacct's uniqueid deduplication flag to prevent duplicate GL entries. The sync uses a schedule tied to your payroll calendar rather than real-time webhooks, so failed postings are caught on the next scheduled run and can be investigated in the audit log.

Related integrations

Connect Sage Intacct and UKG

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

Get started