ml-connector
Microsoft Dynamics 365 F&ODayforce

Microsoft Dynamics 365 F&O and Dayforce integration

Microsoft Dynamics 365 F&O runs your finance, procurement, and supply chain. Dayforce runs your HR and payroll. Connecting the two posts the labor cost from each Dayforce pay run into the D365 general ledger without re-keying. After payroll completes, the earnings, taxes, and deductions Dayforce produces are read from a payroll journal report and turned into a journal entry in D365, allocated to the right main accounts and financial dimensions. ml-connector handles the very different APIs on each side and moves the data on the schedule you set.

How Microsoft Dynamics 365 F&O works

Microsoft Dynamics 365 F&O exposes its data through OData v4 REST entities at a tenant-specific environment host such as contoso.operations.dynamics.com, so there is no shared base URL. It authenticates with OAuth2 client credentials issued by Microsoft Entra ID against the environment scope, and the Bearer token expires hourly. Relevant entities include MainAccounts, GeneralJournalAccountEntries, DimensionAttributeValues for financial dimensions, VendorsV2, and the journal entities used to create postings. Posted general journal entries are read-only, so new entries are created through journal entities. D365 can push Business Events on actions such as a journal posting, but those payloads carry only identifiers, so a follow-up OData read is needed for full detail.

How Dayforce works

Dayforce is an HCM and payroll platform, so it has no vendor, invoice, purchase order, or chart-of-accounts modules. It exposes employees, org units, jobs, positions, pay summaries, and reports through a REST and JSON web services API under a client namespace, with XRefCode as the primary key for employee lookups. Authentication uses an OAuth2 password grant: a dedicated web-services username and password plus a fixed Dayforce client ID return a Bearer token that expires after one hour. Payroll journal data is not a queryable endpoint; it is extracted through the Reports API against a payroll journal report the customer configures in Dayforce, which outputs GL account codes and cost dimensions. Dayforce has no outbound webhooks, so changes are detected by polling with update-date-range filters.

What moves between them

The main flow runs from Dayforce into Microsoft Dynamics 365 F&O. After each payroll run, ml-connector pulls the configured Dayforce payroll journal report and posts the resulting labor cost journal into the D365 general ledger through a journal entity, mapped to the matching main accounts and financial dimensions. Employee hires and terminations are read from Dayforce so headcount-driven records in D365 stay current, and Dayforce org units, jobs, and positions are aligned with D365 financial dimensions so payroll lines land on valid combinations. The cadence is tied to your payroll calendar. Dayforce holds no AP, AR, or GL postings to receive, so ml-connector never writes financial entries back into Dayforce.

How ml-connector handles it

ml-connector stores both credential sets encrypted. It obtains the Dayforce token with the password grant using the dedicated web-services account, and a separate Entra ID client-credentials token for D365 scoped to the environment host, refreshing each before its one-hour expiry. Because Dayforce has no webhooks, the connector polls the payroll journal report and employee endpoints on a schedule, using filterUpdateDateRangeMin and filterUpdateDateRangeMax to read only changed records, and it caches the Dayforce client-specific service URL, re-fetching it at least daily. Org units and positions are mapped to D365 financial dimensions first, so every journal line references a main account and dimension combination that already exists; D365 expects financial dimensions as a formatted display string, which the connector builds from the mapping. D365 OData keys must be fully specified, so vendor and journal records carry the dataAreaId legal entity, and cross-company reads add the cross-company flag. Both sides return HTTP 429 under load, D365 with a Retry-After header and Dayforce per tenant, so the connector backs off and retries. The Dayforce password grant breaks if the service account password expires or locks, so a non-expiring service account is required. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A regional healthcare services group with about 1,400 staff across several sites runs Microsoft Dynamics 365 F&O for finance and procurement and Dayforce for HR, scheduling, and payroll. Before the integration, payroll administrators exported a journal from Dayforce after every pay run and an analyst re-entered the labor totals into D365 by hand, splitting earnings and employer taxes across departments, which delayed close and produced posting errors when a cost center was missed. With the two systems connected, each pay run's journal report flows into the D365 general ledger automatically, allocated to the financial dimension for each site, and the org structure stays aligned so new departments do not break a posting. Close begins with labor already booked, and the manual re-keying step is gone.

What you can do

  • Post the Dayforce payroll journal into the Microsoft Dynamics 365 F&O general ledger after every pay run, allocated to the correct financial dimensions.
  • Read Dayforce hires and terminations so headcount-driven records in D365 stay current.
  • Map Dayforce org units, jobs, and positions to D365 main accounts and financial dimensions so payroll lines post to valid combinations.
  • Bridge the Dayforce password grant and the D365 Entra ID client-credentials token, refreshing both before they expire.
  • Poll Dayforce on your payroll calendar with retries and a full audit trail on every record.

Questions

Which direction does data move between Microsoft Dynamics 365 F&O and Dayforce?
The main flow is Dayforce into D365. Payroll journals and employee changes are read from Dayforce and posted or aligned in D365, while org units and positions are mapped to D365 financial dimensions. Dayforce has no AP, AR, or general ledger to receive postings, so ml-connector does not write financial entries back into it.
How does ml-connector get payroll journal data out of Dayforce?
Dayforce has no GL or payroll-journal endpoint, so the data is pulled through the Reports API against a payroll journal report the customer configures in Dayforce. That report outputs the earnings, taxes, and deductions with GL account codes and cost dimensions, which ml-connector maps to D365 main accounts and financial dimensions before posting through a journal entity.
Why does the integration poll Dayforce instead of receiving webhooks?
Dayforce does not offer outbound webhooks that push signed events to a registered URL. ml-connector polls the payroll journal report and employee endpoints on your payroll calendar, using update-date-range filters to fetch only changed records. D365 can emit Business Events on a journal posting, but those carry only identifiers, so the connector reads back the full record over OData when it needs detail.

Related integrations

Connect Microsoft Dynamics 365 F&O and Dayforce

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

Get started