ml-connector
MYOBDayforce

MYOB and Dayforce integration

MYOB runs small to medium business accounting across Australia and New Zealand. Dayforce runs payroll and human capital management. Connecting the two keeps your MYOB general ledger in sync with payroll costs after each pay cycle, and ensures employee records in both systems stay aligned. New hires and terminations in Dayforce flow into MYOB contacts automatically, and labor cost journals post to the correct GL accounts without manual re-entry. ml-connector bridges the authentication differences between the two platforms and moves data on a schedule you control.

How MYOB works

MYOB Business API exposes contacts (suppliers, customers, employees), purchase orders and invoices, general ledger accounts, general journals, and inventory items through a REST API. The API uses OAuth2 Authorization Code flow for authentication but also requires a company file username and password supplied as a Base64-encoded header on every call. Access tokens expire in 20 minutes and refresh tokens last one week. MYOB has no webhook or push capability, so integrations poll using OData v3 filter syntax on LastModified timestamps. The API rate-limits to 8 requests per second and 1 million requests per day per API key.

How Dayforce works

Dayforce HCM exposes employees, org units, jobs, positions, payroll summaries, and balance periods through a REST API accessed over HTTPS. Authentication uses OAuth2 Resource Owner Password Credentials flow with company ID, username, and password, returning a Bearer JWT that expires in one hour. The client must refresh the token every hour and query the /ClientMetadata endpoint daily to retrieve the current client-specific base URL. Dayforce has no native vendor, invoice, or accounts-payable modules, and GL accounts are configured inside Dayforce and appear only in payroll reports. Like MYOB, Dayforce has no outbound webhooks; integrations must poll using date range filters on employee and org endpoints.

What moves between them

Employee records move from Dayforce into MYOB contacts on each sync cycle. After each payroll period closes in Dayforce, ml-connector reads the payroll summary data and posts labor cost journals into MYOB's general ledger, allocated to the job codes and GL accounts configured in MYOB. Reference data such as cost centers and org units are read from both systems to ensure payroll allocations map to valid MYOB GL accounts and categories. All data flows one direction: Dayforce into MYOB. The general ledger account list and job codes must be maintained in MYOB first, then mapped in ml-connector to Dayforce cost allocations.

How ml-connector handles it

ml-connector stores MYOB OAuth tokens, company file credentials, and API key encrypted, and refreshes the OAuth token 5 minutes before the 20-minute expiry. For Dayforce, it refreshes the ROPC Bearer token every 55 minutes to stay ahead of the one-hour expiry, and queries /ClientMetadata once per day to keep the client-specific base URL current. On each sync cycle, it reads the MYOB company file version and checks Dayforce employee records for updates since the last sync using filterUpdateDateRangeMin and filterUpdateDateRangeMax, then posts employee changes as MYOB contacts and payroll journals as general journal entries. It polls at a frequency you set, typically tied to your payroll calendar. Because both APIs are poll-only, ml-connector tracks the timestamp of each successful read, handles HTTP 429 backoff on MYOB rate limits, and retries transient errors. Every job carries a BullMQ jobId for deduplication, so a duplicate payroll posting will not create duplicate GL entries. RowVersion fields on MYOB update calls are checked to prevent stale-write conflicts.

A real-world example

A small accounting firm in Sydney runs MYOB for client bookkeeping and uses Dayforce for payroll across 12 part-time and full-time staff. Each pay cycle, the office manager exports a payroll register from Dayforce, manually enters labor costs into MYOB by cost center and job code, and re-keys employee information when someone is hired or terminated. With Dayforce and MYOB connected, new hires and terminations flow into MYOB contact records automatically, and the payroll journal posts to the general ledger on the morning after payroll closes, eliminating the manual entry step. Reconciliation between MYOB payroll expenses and Dayforce payroll costs now takes minutes instead of hours, and the risk of re-entry errors is gone.

What you can do

  • Read Dayforce employees, org units, and payroll summaries on a schedule and post them as MYOB contacts and journal entries.
  • Allocate Dayforce labor costs to MYOB GL accounts and job codes so payroll expenses land on the correct cost center.
  • Refresh Dayforce Bearer tokens hourly and MYOB OAuth tokens before expiry, and supply the required MYOB company file credentials on every call.
  • Poll both systems using timestamp-based change detection to fetch only updated records since the last sync.
  • Retry transient errors with exponential backoff, track payroll postings with a full audit trail, and prevent duplicate GL entries using job deduplication.

Questions

How does the integration handle MYOB's three required authentication headers?
ml-connector stores the OAuth Bearer token, API Key, and Base64-encoded company file credentials (username and password) encrypted in the database. It includes all three headers on every REST call to MYOB, refreshes the Bearer token every 15 minutes to stay ahead of the 20-minute expiry, and re-encodes the company file credentials if they change.
Which direction does data move between Dayforce and MYOB?
Employee and org data moves from Dayforce into MYOB contacts and general journal entries. Payroll cost journals are posted to MYOB's general ledger after each Dayforce payroll cycle. Job codes and GL accounts are configured in MYOB and mapped in ml-connector to Dayforce cost allocations, but the GL chart of accounts itself is not synchronized.
What happens if a payroll journal fails to post to MYOB?
ml-connector stores the failed record with full context and retries the posting on the next scheduled sync. If the failure is permanent (e.g., invalid GL account), the error is logged with the specific MYOB error response, the audit trail shows why it failed, and the record can be fixed and replayed without losing history.

Related integrations

Connect MYOB and Dayforce

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

Get started