ml-connector
MYOBGusto

MYOB and Gusto integration

MYOB runs your accounting and general ledger. Gusto runs payroll and employee data. Connecting them keeps your labor costs and headcount in sync without manual re-entry. After each payroll run, Gusto payroll journals flow into MYOB's GL, allocated to the cost centers and accounts that match your business structure. New hires, terminations, and pay changes in Gusto are reflected in MYOB so your accounting records stay current and your month-end close is faster.

How MYOB works

MYOB Business API exposes suppliers, customers, employees, purchase orders, bills, invoices, general ledger accounts, and general journal entries through REST endpoints with OData v3 query parameters. The API requires OAuth2 Bearer authorization plus a three-part credential set: an API Key header, a company file username and password encoded in Base64, and a company file ID in the URL. Access tokens expire in 20 minutes and refresh tokens last one week. MYOB does not support webhooks, so changes are detected by polling with LastModified timestamps. Rate limits are 8 requests per second and 1,000,000 requests per day per API key, and all dates must be in ISO 8601 format.

How Gusto works

Gusto exposes employees, payrolls, contractors, compensations, pay schedules, terminations, locations, and company details through REST APIs scoped to a single company per OAuth token. Authentication uses OAuth2 Authorization Code flow with a 2-hour access token and a non-expiring single-use refresh token that rotates on refresh. Gusto supports webhooks for payroll, employee, contractor, and company events, with delivery guarantees and HMAC-SHA256 signature verification. The API is versioned via X-Gusto-API-Version header, uses both page-based and cursor-based pagination, and has a rate limit of 200 requests per minute per OAuth grant. Dollar amounts are returned as string decimals, not numeric types, and employee pay rate data requires the compensations:read scope to be present.

What moves between them

The main flow is from Gusto into MYOB. After each payroll run, ml-connector reads Gusto payroll and employee records, maps labor cost data to MYOB GL accounts and cost centers, and posts the resulting journal entries into MYOB's general ledger. Employee records including name, email, job title, and termination status flow from Gusto into MYOB's employee contacts so headcount is accurate. Employee and contractor data is read-only in Gusto's payroll module, so ml-connector does not write payroll or compensation data back into Gusto. GL posting happens on a schedule aligned to your payroll calendar rather than real-time, so batch accuracy is verified before posting.

How ml-connector handles it

ml-connector stores Gusto's OAuth token and MYOB's company file credentials encrypted, and refreshes the Gusto token automatically when a call returns 401. On the MYOB side, it constructs the three required authentication headers: the OAuth Bearer token, the API Key, and the Base64-encoded company file credentials. Since MYOB exposes no webhooks, ml-connector polls Gusto employee and payroll data on a schedule tied to your pay periods and translates the payroll journal lines into MYOB GL account codes and cost center dimensions. Before posting, it validates that the GL accounts and cost centers already exist in MYOB so postings do not fail on a missing dimension. It uses the LastModified timestamp on MYOB records to avoid re-posting old data and applies BullMQ job IDs to deduplicate postings if a retry is needed. Rate limits on Gusto (200 requests per minute) and MYOB (8 requests per second, 1,000,000 per day) are respected with exponential backoff, and every posting is recorded in the audit trail so failed transactions can be diagnosed and replayed.

A real-world example

A services firm with 40 employees uses MYOB for accounting and GL management and Gusto for payroll, contractor management, and benefits. Before the integration, the bookkeeper manually exported payroll registers from Gusto each pay period, coded each line to the correct cost center or project in MYOB, and re-entered the labor totals into the GL by hand. Month-end close always started with labor accounts that did not match headcount, forcing the team to investigate discrepancies before closing. With MYOB and Gusto connected, each payroll run produces a journal entry in MYOB that is already coded to the correct cost centers. Headcount changes are automatic, and month-end close begins with labor expense and employee count already reconciled, eliminating the manual posting step and the reconciliation delay.

What you can do

  • Post Gusto payroll GL records into MYOB's general ledger on a schedule matched to your pay periods, coded to the correct cost centers.
  • Sync Gusto employee names, email, job titles, and termination status into MYOB so headcount is always current.
  • Map Gusto pay types and cost allocations to MYOB GL account codes and cost centers before posting.
  • Authenticate with Gusto's OAuth2 token (with automatic refresh on 401) and MYOB's three-part credential headers, storing all credentials encrypted.
  • Poll Gusto payroll and employee records on your payroll calendar with deduplication, retries, and a complete audit trail of every posted transaction.

Questions

Which direction does data move between MYOB and Gusto?
The main flow is from Gusto into MYOB. Payroll GL records and employee data move from Gusto into MYOB so your general ledger and headcount stay in sync. Employee and payroll data is read-only in Gusto, so ml-connector does not write compensation or payroll changes back into Gusto.
How does ml-connector handle MYOB's three-part authentication requirement?
MYOB requires an OAuth2 Bearer token, an API Key header, and a Base64-encoded company file username and password on every call. ml-connector stores all three credentials encrypted and constructs the full header set on each request, including the company file ID in the URL path. Tokens are refreshed when a call returns 401 so authentication lapses do not interrupt posting.
Why does the integration poll instead of using real-time webhooks?
MYOB does not offer webhooks on the Business API, so ml-connector polls Gusto employee and payroll records on a schedule aligned to your payroll calendar. This also allows ml-connector to validate GL accounts and cost centers in MYOB before posting, preventing postings to accounts that do not exist. Gusto event webhooks are available if needed for other use cases.

Related integrations

Connect MYOB and Gusto

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

Get started