ml-connector
MYOBPaychex

MYOB and Paychex integration

MYOB runs accounting and finance for SMEs across Australia and New Zealand. Paychex runs payroll and HR. Connecting the two keeps your employee records and payroll dimensions aligned between systems. Paychex worker changes sync into MYOB employee records, job codes and cost centers flow both ways so payroll reports land on valid MYOB dimensions, and every change carries a full audit trail.

How MYOB works

MYOB Business API (AccountRight Live API v2) exposes contacts, invoices, bills, purchase orders, employee records, GL accounts, and general journal entries through REST with OData v3 query parameters. Authentication requires OAuth2 Authorization Code flow plus company file username and password supplied in every request. Access tokens expire in 20 minutes and refresh tokens last 1 week. MYOB does not support webhooks, so employee and payroll data must be read by polling with LastModified filters. Rate limits are 8 requests per second and 1,000,000 requests per day per API key.

How Paychex works

Paychex Flex exposes workers, jobs, organizations, locations, payroll components, and pay periods through REST APIs authenticated with OAuth2 Client Credentials flow. The platform pushes worker and employment events through webhooks with event domains such as WRKR_DEM, WRKR_EMPL, and WRKR_ADD, but webhook payloads are notification-only and do not contain changed data, so full records must be fetched with separate GET calls. Paychex has no refresh token, so access tokens must be re-acquired proactively before expiry. Webhook retries occur every 5 minutes on non-2XX responses.

What moves between them

Paychex worker and job data flows into MYOB. When Paychex issues a webhook notification of a hire, termination, or employment change, ml-connector fetches the full worker and job record from Paychex, maps the job code and organization to MYOB employee category and cost center, and writes or updates the contact record in MYOB. Job codes and cost centers are synchronized in both directions so payroll reports and journals allocate to valid MYOB GL dimensions. MYOB employee records are always the source of truth for downstream payroll processing.

How ml-connector handles it

ml-connector subscribes to Paychex webhooks (WRKR_DEM, WRKR_EMPL, WRKR_ADD) and stores both OAuth2 credential sets encrypted. On webhook notification, it calls Paychex to fetch the full worker record, since webhook payloads contain only notification metadata. It maps Paychex job codes and organizations to MYOB employee categories and cost centers using a configured lookup table, then calls MYOB to create or update the contact record as an Employee type. Because MYOB requires company file credentials on every call, ml-connector supplies them in the x-myobapi-cftoken header alongside the OAuth2 bearer token. MYOB rate limits are 8 requests per second, so ml-connector batches writes and retries with exponential backoff on 429 responses. Every record carries a job ID for deduplication and a full audit trail, so if a downstream sync fails the operation can be replayed without duplicating the employee record.

A real-world example

A mid-sized professional services firm in Sydney runs MYOB Business for accounting and MYOB Payroll for payroll processing. When new contractors or permanent hires join, HR creates them in Paychex, but the finance team had to manually enter the new employee into MYOB and assign them to the correct cost center for billing and reporting. With Paychex and MYOB connected, each new hire in Paychex triggers an automatic sync into MYOB with the correct cost center and job code, so payroll journals and billing reports are accurate from day one. Terminations and job changes sync the same way, keeping the two systems aligned without manual re-keying.

What you can do

  • Sync Paychex worker hires, terminations, and employment changes into MYOB employee contact records with correct cost center and job code mapping.
  • Keep MYOB GL categories and cost centers aligned with Paychex job codes and organizations so payroll and billing reports land on valid dimensions.
  • Bridge Paychex OAuth2 webhooks with MYOB OAuth2 plus company file authentication on every API call.
  • Deduplicate worker changes using job IDs and track every record in a full audit trail so failed syncs can be replayed without duplicates.
  • Poll MYOB for job code and cost center reference data and cache it to validate Paychex payroll allocations before writing to MYOB.

Questions

How does ml-connector handle Paychex webhooks that contain only metadata?
Paychex webhook payloads do not include changed data, only a notification of a worker or employment event. ml-connector receives the webhook, extracts the worker ID, calls Paychex to fetch the full worker and job record, then uses that data to create or update the contact in MYOB. This two-step process ensures complete and current information is always written.
Does the integration require any special setup for MYOB company file authentication?
Yes. Every MYOB API call requires three headers: the OAuth2 Authorization Bearer token, an API Key (x-myobapi-key), and the company file credentials encoded in x-myobapi-cftoken. ml-connector stores all credentials encrypted and supplies them on every request. Access tokens expire in 20 minutes, so ml-connector refreshes them proactively before expiry.
What happens if a job code or cost center in Paychex does not exist in MYOB?
ml-connector caches MYOB job codes and cost centers at startup and validates all Paychex payroll dimensions against them before writing an employee record. If a mapping is missing, ml-connector flags the record in the audit trail and holds it for manual review rather than writing an invalid dimension to MYOB, preventing invalid GL allocations.

Related integrations

Connect MYOB and Paychex

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

Get started