ml-connector
MYOBADP

MYOB and ADP integration

MYOB runs accounting and finance for small and mid-sized businesses across Australia and New Zealand. ADP runs payroll and HR. Connecting the two keeps your workforce and your general ledger in agreement. New hires and terminations in ADP line up with MYOB cost centers and GL accounts, and the labor cost journals ADP produces after each payroll run post into MYOB's general ledger without re-keying. ml-connector handles the very different APIs on each side and moves the data on a schedule you control.

How MYOB works

MYOB Business API exposes suppliers, customers, purchase orders, bills, invoices, GL accounts, cost centers, items, and general journal entries through REST with OData v3 query parameters. Authentication requires OAuth2 Authorization Code flow plus company file username and password passed in three separate headers. Every API call must carry the Authorization Bearer token, x-myobapi-key header, and x-myobapi-cftoken header with Base64-encoded company file credentials. Access tokens expire in 20 minutes and refresh tokens last one week. MYOB has no webhook system, so all data is read by polling using OData LastModified filters to detect changes since the last sync. The API rate limit is 8 requests per second and 1 million requests per day per API key.

How ADP works

ADP API Central exposes workers, payroll processing, pay distributions, pay statements, general ledger documents, cost centers, and validation tables through REST/JSON. Every call requires OAuth2 client credentials and a mutual TLS client certificate presented at the connection handshake; the TLS layer fails without the certificate. Tokens are obtained from ADP's accounts service and Bearer tokens carry the user's product and scope permissions. ADP sends webhook notifications for worker hire, termination, rehire, legal name and address changes, pay data input, and deduction instruction changes, with automatic 10-minute then 10-hour retry windows on failures. GL documents generated by payroll processing are read-only, and all mutations to worker or payroll records go through dedicated event endpoints rather than direct updates.

What moves between them

The main flow runs from ADP into MYOB. After each payroll run, ml-connector polls ADP for general ledger documents and posts the labor cost journals into MYOB's general ledger, mapped to the matching MYOB GL accounts and cost centers. Worker records flow the same direction so MYOB headcount reflects ADP hires, terminations, and rehires. Reference data such as cost centers and departments is aligned in both directions to ensure payroll allocations land on valid MYOB dimensions. GL postings are read-only in ADP, so ml-connector never writes financial entries back to payroll.

How ml-connector handles it

ml-connector stores both credential sets encrypted and presents the ADP client certificate at the TLS layer on every connection. For MYOB it handles the three-header OAuth2 plus company file credentials dance on each request, refreshing the Bearer token when expiry approaches and re-supplying the Base64 company file credentials. MYOB token refresh windows are tight (20 minutes), so ml-connector pre-checks expiry before every call. Because both systems support polling, ml-connector polls ADP for payroll GL documents and worker events on a schedule tied to your payroll calendar, starting with cost centers and departments so every GL line references a valid MYOB account and cost center. ADP returns HTTP 429 when the per-node rate limit is exceeded (75-195 calls per minute depending on tier), so ml-connector backs off and retries. MYOB returns HTTP 429 at 8 requests per second, and it also returns 409 Conflict if a RowVersion field on a record is stale, so every PATCH must pre-fetch the current RowVersion. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A growing services business in Melbourne runs MYOB for accounting and financial reporting and uses ADP Workforce Now for payroll across three office locations and a mix of full-time employees and contractors. Before the integration, the finance team exported the payroll GL register from ADP every pay period and re-entered labor totals and cost center allocations into MYOB by hand, spending two days in month-end chase reviewing the payroll accounts against ADP and the employee register. With MYOB and ADP connected, each payroll run's GL document flows into MYOB automatically, broken down by cost center for each location, and worker changes keep headcount in sync. The finance team now opens the payroll ledger on pay day and sees all entries posted and balanced against the employee roster.

What you can do

  • Post ADP payroll GL documents into MYOB's general ledger after every pay run, allocated to the correct cost centers.
  • Keep MYOB headcount aligned with ADP hires, terminations, and rehires.
  • Map ADP cost centers and departments to MYOB GL dimensions so payroll allocations land on valid accounts.
  • Authenticate ADP with OAuth2 and mutual TLS certificate, and MYOB with OAuth2 plus company file username and password.
  • Poll on a schedule tied to your payroll calendar, with retries for rate limits and stale records, and a full audit trail on every entry.

Questions

Which direction does data move between MYOB and ADP?
The main flow is ADP into MYOB. Payroll GL documents and worker records move from ADP into MYOB, while cost centers and departments are aligned in both directions. ADP general ledger documents are read-only, so ml-connector does not write financial entries back into payroll.
How does ml-connector handle MYOB's three-header authentication requirement?
MYOB requires OAuth2 Bearer token, x-myobapi-key header, and x-myobapi-cftoken header with Base64 company file credentials on every call. ml-connector manages the OAuth2 token refresh cycle (20-minute expiry), refreshes the Base64 company file credentials, and supplies all three headers on each request.
How does ml-connector manage the rate limits for both systems?
MYOB enforces 8 requests per second and 1 million requests per day; ADP enforces 75-195 calls per minute per node in its 4-node cluster. ml-connector tracks usage, backs off on HTTP 429 responses, and retries using exponential backoff with jitter. MYOB also returns 409 Conflict on stale RowVersion, so ml-connector pre-fetches the current RowVersion before every PATCH.

Related integrations

Connect MYOB and ADP

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

Get started