ml-connector
QuickBooks DesktopDayforce

QuickBooks Desktop and Dayforce integration

QuickBooks Desktop runs your books on premises. Dayforce runs your payroll and HR in the cloud. Connecting the two keeps your general ledger in sync with your payroll runs and your employee records in QuickBooks aligned with Dayforce hires, terminations, and role changes. ml-connector handles the SOAP Web Connector polling cycle, the OAuth2 credential refresh, and the complex data mapping between your on-premises accounting and cloud payroll so you can close faster without manual reconciliation.

How QuickBooks Desktop works

QuickBooks Desktop exposes vendors, purchase orders, bills, invoices, payments, journal entries, accounts, customers, items, and employees through a SOAP-based Web Connector agent installed on a Windows machine at the customer site. The agent polls a remote SOAP endpoint at a configurable interval (minimum 1 minute, typical 5 to 15 minutes) and passes a username and password to authenticate; your service returns a session token (GUID) for use in that session. Queries use ModifiedDateRangeFilter to detect changes and TxnDeletedQueryRq for deletions. QuickBooks must be open and logged into the company file for the agent to process requests. No webhooks are available; all data access is pull-only through the Web Connector.

How Dayforce works

Dayforce exposes employees, organization units, jobs, positions, pay summaries, pay period balances, and payroll reports through REST endpoints at a client-specific optimized URL that must be refreshed daily. Authentication uses OAuth2 Resource Owner Password Credentials flow with a 1-hour bearer token that must be refreshed before expiry. Queries support filterUpdateDateRangeMin and filterUpdateDateRangeMax parameters to fetch changed records per sync cycle. Dayforce Integration Studio offers scheduled syncs but is customer-configured in Dayforce admin, not externally triggered. Payroll reports containing GL account codes for journal entry posting are read-only and generated after each pay cycle.

What moves between them

Dayforce employee records flow into QuickBooks Desktop to keep headcount and job classifications aligned. After each payroll cycle, Dayforce pay summaries and payroll reports are read and converted into journal entries that post into QuickBooks Desktop general ledger accounts. Because QuickBooks Desktop does not expose GL accounts through the Web Connector for read-only validation, mapping is driven by pre-configured account lists in ml-connector. Changes to employees, job codes, and organization units in Dayforce are synced on a schedule you control (typically weekly for employees, daily or twice-weekly for pay runs).

How ml-connector handles it

ml-connector maintains both credential sets encrypted: Dayforce OAuth2 credentials for token acquisition and refresh, and QuickBooks Web Connector credentials passed to the SOAP authenticate() method. On the Dayforce side, it calls the client-metadata endpoint daily to refresh the optimized base URL, then queries the employee and pay-summary endpoints with date-range filters to fetch changes since the last sync. On the QuickBooks Desktop side, it builds QBXML request envelopes that the Web Connector delivers to QuickBooks, using the session token from the initial authenticate() call. Payroll entries are posted as journal entries with a configured offset account and debit/credit split per pay component. Because QuickBooks enforces EditSequence (a version counter on every list and transaction), ml-connector re-queries before modifying an employee to ensure the current EditSequence is used, preventing conflicts if changes occur in QuickBooks between reads. Duplicate detection uses transaction date and amount to avoid re-posting journals if a sync cycle repeats. All records carry a full audit trail including request/response pairs and timestamps for troubleshooting sync delays or reconciliation mismatches.

A real-world example

A mid-sized staffing and recruiting firm operates QuickBooks Desktop on premises for accounting and payroll GL allocation, and uses Dayforce to manage payroll, benefits, and contingent-worker schedules across multiple branches. Before integration, the accounting team manually exported payroll summary reports from Dayforce each pay period and entered the labor totals into QuickBooks as journal entries, then tracked employees in a separate spreadsheet to match QuickBooks headcount with Dayforce hires and terminations. With QuickBooks Desktop and Dayforce connected, each payroll run generates GL entries automatically, and new hires appear in QuickBooks within the sync cycle so reports show real-time labor spend and headcount. The manual entry step is eliminated and month-end close starts with all payroll GL accounts already in sync.

What you can do

  • Sync Dayforce employees into QuickBooks Desktop to keep headcount, job codes, and organizational structure aligned between payroll and accounting.
  • Post Dayforce payroll GL entries into QuickBooks Desktop general ledger after each pay cycle, allocated to configured GL accounts by pay component.
  • Refresh Dayforce OAuth2 tokens hourly and re-query the client-metadata endpoint daily to track optimizations and avoid redirect overhead.
  • Detect changes in Dayforce using date-range filters and in QuickBooks using the Web Connector polling cycle on a schedule you control.
  • Prevent duplicate GL entries by matching transaction date and amount, and avoid concurrent-edit conflicts by re-querying EditSequence before modifying QuickBooks list items.

Questions

How does ml-connector handle the QuickBooks Web Connector polling cycle?
ml-connector provides a SOAP endpoint that the Web Connector polls on your configured schedule (typically every 5 to 15 minutes). When the Web Connector calls authenticate(), ml-connector returns a session token (GUID). All subsequent requests in that session use that token. ml-connector builds QBXML request envelopes for QuickBooks operations and the Web Connector forwards them to QuickBooks. This avoids the need for QuickBooks to be reachable from the internet; the customer's on-premises agent initiates all contact.
What happens when Dayforce OAuth2 tokens expire or the client-optimized URL changes?
Dayforce bearer tokens expire in 1 hour, so ml-connector requests a new token before the old one expires using the stored OAuth2 credentials. The client-specific base URL can change and Dayforce recommends refreshing it daily via the client-metadata endpoint; ml-connector caches it and uses the new value on the next sync to avoid redirect overhead. Token refresh and URL refresh are automatic and tracked in the audit trail.
How does ml-connector prevent duplicate payroll GL entries or conflicts when modifying QuickBooks records?
Duplicate GL entries are prevented by matching on transaction date and amount; if the same entry is seen twice, only one posts. QuickBooks enforces EditSequence (a version counter) on every record. Before modifying an employee or list item, ml-connector re-queries QuickBooks to fetch the current EditSequence, then includes it in the update request. This prevents conflicts if QuickBooks records are changed between the read and the write, ensuring data consistency without lost updates.

Related integrations

Connect QuickBooks Desktop and Dayforce

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

Get started