ml-connector
Sage 100Dayforce

Sage 100 and Dayforce integration

Sage 100 handles finance, purchasing, and inventory for small to mid-sized manufacturers and distributors. Dayforce runs HR and payroll in the cloud. Connecting the two eliminates the month-end pain of manually posting payroll journal entries into Sage 100, keeps employee counts aligned, and ensures that labor costs land on the correct GL accounts and cost centers. Every payroll run's general ledger impact flows into Sage 100 automatically, with a complete audit trail for every entry.

How Sage 100 works

Sage 100 is an on-premises ERP exposing customers, sales orders, purchase orders, vendors, AP invoices, GL accounts, journal entries, and items. Full access to AP, GL, PO, and vendor data requires a local Windows agent wrapping the BOI COM layer, since Sage 100's SOAP eBusiness Web Services cover only sales orders and customers. All calls require a username and password passed per SOAP call; there are no tokens or OAuth. The system has no webhooks or event stream, so all data is fetched by polling on DateLastUpdated and DateCreated fields. Common polling intervals are 15 minutes for AP invoices and POs, hourly for vendors, and daily for GL accounts. IIS SSL is required, and the user account must be individually enabled for Web Services in Sage 100 admin.

How Dayforce works

Dayforce is a cloud HCM and payroll platform accessed via REST API over HTTPS. The base URL is client-specific and retrieved daily via the ClientMetadata endpoint. Authentication uses OAuth 2.0 Resource Owner Password Credentials, returning a Bearer JWT token that expires in one hour and must be refreshed before expiry. Dayforce exposes employees, organization units, jobs, positions, pay summaries, and employee balance periods. All data is fetched by polling using filterUpdateDateRangeMin and filterUpdateDateRangeMax query parameters on the employee and org endpoints; Dayforce Integration Studio can be configured for scheduled syncs but does not push data outbound. GL account codes are configured inside Dayforce and appear in payroll reports, and the system has no standalone GL account endpoint.

What moves between them

Payroll cost allocation data flows from Dayforce into Sage 100. After each payroll cycle, ml-connector fetches employee pay summaries and cost allocation records from Dayforce, maps them to Sage 100 GL accounts and cost centers based on the customer's configuration, and posts the resulting labor cost journal entries into Sage 100's general ledger. Reference data such as employees and organization units is also synced so headcount in Sage 100 stays aligned with Dayforce changes. GL postings flow one direction only; ml-connector does not write payroll data back into Dayforce.

How ml-connector handles it

ml-connector runs a local Windows agent on the customer's Sage 100 server that maintains encrypted credentials and wraps the BOI COM layer to fetch GL accounts, vendors, and journal entry templates. It stores the Dayforce OAuth credentials encrypted and refreshes the Bearer JWT token one hour before expiry to avoid repeated 401 responses. The agent polls Sage 100 for GL accounts on a daily schedule and Dayforce employee records on a schedule matching the customer's payroll cycle, using filterUpdateDateRangeMin and filterUpdateDateRangeMax to fetch only changed records. A mapping table configured per customer translates Dayforce cost centers and job codes to Sage 100 GL segments and cost centers. When a payroll run completes, ml-connector reads the cost allocation detail, constructs a multi-line journal entry with all GL segments populated, and posts it into Sage 100 via the BOI layer, checking for idempotency using Sage 100's DateLastModified field and retrying with backoff on COM record-locking conflicts. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A regional distributor with three warehouses runs Sage 100 on-premises for AP, GL, and inventory. They use Dayforce for payroll across all locations. Before the integration, the finance team exported employee rosters and payroll cost allocations from Dayforce every two weeks, manually allocated labor costs by warehouse and department, and re-entered the journal entries into Sage 100 by hand. Reconciling payroll labor costs against the GL took three to four days of month-end close, and differences between Dayforce headcount and Sage 100 manual entries triggered restatements. With Sage 100 and Dayforce connected, each payroll cycle's cost allocation automatically posts into Sage 100 by warehouse and department, the labor accounts are reconciled on the payroll run date, and the restatement cycle is eliminated.

What you can do

  • Post Dayforce payroll cost allocations into Sage 100's GL automatically after every payroll cycle, allocated to the correct cost centers and GL accounts.
  • Keep Sage 100 employee and organization unit records aligned with Dayforce hires, terminations, and org changes.
  • Map Dayforce pay codes and cost centers to Sage 100's multi-segment GL account format and cost center fields.
  • Authenticate to Sage 100 via the local Windows agent and BOI COM layer, and to Dayforce via OAuth2 tokens with automatic refresh before expiry.
  • Poll on a schedule tied to the payroll calendar, with retries and a full audit trail on every journal entry and record change.

Questions

Does ml-connector run in the cloud or on premises?
ml-connector runs a local Windows agent on the customer's Sage 100 server to access the BOI COM layer directly. The control plane is cloud-hosted but the agent that wraps Sage 100 runs on premises. Dayforce communication happens from the cloud-hosted control plane over HTTPS.
Which direction does payroll data flow between Sage 100 and Dayforce?
Payroll cost allocation data flows from Dayforce into Sage 100. Employee records and organization units are also synced from Dayforce to keep Sage 100 headcount aligned. GL journal entries are read-only in Dayforce, so ml-connector does not write financial entries back into payroll.
How does ml-connector handle Sage 100's lack of webhooks and the two different authentication models?
Sage 100 has no webhooks or push events, so ml-connector polls the BOI COM layer on a daily schedule for GL accounts and on a payroll-cycle schedule for vendor and cost center changes. ml-connector stores both credential sets encrypted: it uses username and password for Sage 100 SOAP calls via the local agent, and OAuth2 for Dayforce, refreshing the JWT token one hour before expiry to avoid 401 errors.

Related integrations

Connect Sage 100 and Dayforce

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

Get started