ml-connector
MYOBExpensify

MYOB and Expensify integration

MYOB keeps your general ledger. Expensify manages employee expenses and corporate card transactions. When expense reports are approved in Expensify, they need to post into MYOB's GL so your accounts reflect the actual spend. ml-connector reads approved reports from Expensify and creates the matching general journal entries in MYOB, allocated to the correct GL accounts and job projects. This removes manual entry and keeps your books and your expense management in sync.

How MYOB works

MYOB AccountRight Live API exposes suppliers, contacts, purchase orders, bills, invoices, GL accounts, job codes, and general journal entries through REST with OData v3 query parameters. Every call requires three headers: an OAuth2 bearer token that expires in 20 minutes, an API key, and a base64-encoded company file username and password. Access tokens refresh via a token endpoint; refresh tokens last one week. MYOB has no webhook system, so records are read by polling with OData LastModified filters to detect changes since the last sync. Page size is capped at 1000 records, and writes require a RowVersion field to prevent conflicts on concurrent updates.

How Expensify works

Expensify exposes expense reports, individual expenses, employees, and corporate card transactions through a REST API that accepts all requests as POST to a single endpoint with JSON payloads. Credentials are an API key pair (partnerUserID and partnerUserSecret) passed with every request. Expensify has no webhooks or sandbox environment; all calls run against production. Reports are exported via scheduled requests with date-range and status filters. Employees and expense state are returned in diff responses after updates. Corporate cards are read-only. Expensify is pure expense management; it has no vendor master, no invoice or purchase order entities, and no GL account list beyond those assigned to expense categories.

What moves between them

Approved expense reports flow from Expensify into MYOB once per day or on a schedule tied to your report approval cycle. ml-connector reads each report, groups transactions by GL account and job code, and creates a matching general journal entry in MYOB with the total amount, account, and project allocation. Expense category mappings in Expensify are pre-configured to match the corresponding MYOB GL accounts so every line lands on the correct account. Reports are read-only in Expensify, so ml-connector never writes transactions back into the expense management system.

How ml-connector handles it

ml-connector stores both credential sets encrypted and performs three authentication steps on every call to MYOB: it presents the OAuth2 bearer token, the API key, and the base64-encoded company file username and password. Because OAuth tokens expire every 20 minutes, ml-connector refreshes the token automatically when a 401 appears. On the Expensify side it polls the expense report endpoint with status filters to find approved reports since the last sync. Before posting a journal entry to MYOB, ml-connector reads the GL account to get its current RowVersion, includes that version in the POST payload to prevent conflicts if another system updates the account simultaneously, and retries with backoff if it receives a 409 conflict. It tracks rate limits on both sides: MYOB allows 8 requests per second, and ml-connector backs off on 429 responses. Every report and journal entry carries a full audit trail and can be replayed if a downstream posting fails.

A real-world example

A mid-sized professional services firm runs MYOB for accounting and Expensify for employee expense management and corporate card reconciliation. Before the integration, expense administrators reviewed approved reports in Expensify each week and manually created matching general journal entries in MYOB by hand, then matched corporate card statements line by line. With MYOB and Expensify connected, each approved report flows into MYOB automatically and creates a balanced journal entry allocated to the correct projects and cost centers, and the reconciliation step is automated. The firm closes its books faster because expense accrual is no longer a manual task.

What you can do

  • Post approved Expensify expense reports into MYOB as balanced general journal entries allocated to the correct GL accounts.
  • Map Expensify expense categories to MYOB GL accounts so every report line lands on the right account without re-entry.
  • Authenticate MYOB with OAuth2 plus dual company file credentials and refresh tokens automatically when they expire.
  • Handle MYOB RowVersion requirements on write to prevent concurrent update conflicts while polling Expensify on a schedule tied to your approval cycle.
  • Track audit trails on both reports and journal entries so any failed posting can be reviewed, corrected, and replayed.

Questions

Which direction does data move between MYOB and Expensify?
Expense reports flow from Expensify into MYOB. Approved reports are read from Expensify and posted as general journal entries in MYOB, allocated to the correct GL accounts and job codes. Expense categories in Expensify are mapped to MYOB GL accounts. MYOB GL is read-only in this integration, so ml-connector does not write back to Expensify.
How does ml-connector handle MYOB's dual credential system and OAuth token expiry?
Every API call to MYOB requires three headers: an OAuth2 bearer token, an API key, and a base64-encoded company file username and password. Tokens expire in 20 minutes, so ml-connector tracks token age and refreshes automatically when a call returns 401. The API key and company file credentials are stored encrypted and included with every request.
What happens if two systems try to update a MYOB GL account at the same time?
MYOB requires a RowVersion field on every write to detect conflicts. ml-connector reads the current RowVersion before posting, includes it in the journal entry payload, and receives a 409 conflict if another system has already updated the account. ml-connector then retries with backoff, and the full sequence is logged in the audit trail.

Related integrations

Connect MYOB and Expensify

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

Get started