ml-connector
MYOBPlaid

MYOB and Plaid integration

MYOB handles your accounting ledger, contacts, and AR/AP records. Plaid connects your bank accounts and provides transaction history. Connecting them keeps your MYOB GL aligned with your actual bank activity. Supplier payments recorded in MYOB match against Plaid bank transactions so reconciliation becomes automatic, and customer payments in MYOB can be verified against cleared deposits without manual lookups. ml-connector handles the very different APIs on each side and runs the alignment on a schedule you control.

How MYOB works

MYOB exposes suppliers, customers, contacts, bills, invoices, payments, GL accounts, and general journal entries through the MYOB Business API v2, a REST service with OData v3 query parameters. Authentication requires OAuth2 bearer token, API key, and Base64-encoded company file username and password on every call. Access tokens expire in 20 minutes; refresh tokens last 1 week. MYOB supports polling via OData LastModified filters but no webhooks, and rate limits are 8 requests per second and 1,000,000 per day per API key. Cloud instances use https://api.myob.com/accountright/{company_file_id}/ as the base URL.

How Plaid works

Plaid exposes bank accounts, transactions, and transfer capabilities through REST APIs at sandbox or production endpoints, requiring client_id and secret authentication plus per-user access tokens obtained via the Plaid Link flow. Plaid supports webhooks for transaction updates, item status changes, and transfer events, delivered as HTTP POST with JWT signature verification (ES256). Transactions are limited to 24 months history, transfers require idempotency keys with 48-hour expiry, and webhook payloads include signature claims that must be verified before processing. Plaid uses no scopes; permissions are set in the Plaid Dashboard.

What moves between them

The main flow is from MYOB into Plaid for reconciliation. ml-connector polls MYOB GL accounts, suppliers, and customers on a weekly schedule aligned to your accounting close cycle, then matches those records against Plaid bank transactions and account holder identity data. Supplier payments from MYOB bills are cross-checked against Plaid ACH transfers and banking transactions so you can flag unmatched or late payments. Customer invoice receipts from MYOB invoices are verified against Plaid deposit transactions. Plaid provides read-only transaction history and account balances; ml-connector does not initiate transfers or write back to either system from this reconciliation flow. If you need to push ACH payments from MYOB invoices into Plaid, that is a separate initiated-transfer flow wired in.

How ml-connector handles it

ml-connector stores both credential sets encrypted: MYOB's OAuth token, API key, and company file credentials, plus Plaid's client_id and secret. On the MYOB side it accepts the full API base URL per customer instance, using OData $filter on LastModified timestamps to detect changes since the last sync and avoiding the 8-request-per-second rate limit via backoff. On the Plaid side it manages per-user access tokens obtained via the Link flow, validates webhook signatures using JWT ES256 verification with the published JWK, and checks that webhook iat claims are no older than 5 minutes. The GL account and contact records from MYOB are mapped to Plaid transactions and bank account metadata using company identifiers and bank account numbers where they exist. Because MYOB is pull-only it polls on a calendar schedule; Plaid webhooks can supplement this to catch transaction updates in real-time. Stale RowVersion fields in MYOB return 409 conflicts, so ml-connector re-reads the account before retry. Plaid rate limits and failed transfers are retried with exponential backoff. Every matched and unmatched record carries a full audit trail for month-end reconciliation review.

A real-world example

A mid-sized professional services firm uses MYOB as their accounting system across Australia. They bill customers and pay suppliers via ACH transfers, but month-end reconciliation requires the finance team to manually cross-check MYOB invoices and bills against their bank statement, tracking which payments have cleared and which are pending. With MYOB and Plaid connected, each week ml-connector pulls the latest unpaid invoices, bills, and GL entries from MYOB, matches them against cleared and pending transactions in Plaid, and flags unmatched items for follow-up. The finance team now completes reconciliation in hours instead of days, with a complete audit trail of which MYOB records matched which bank transactions.

What you can do

  • Automatically match MYOB supplier payments against Plaid bank transactions to verify supplier invoices have cleared.
  • Reconcile MYOB customer invoice receipts against Plaid deposited customer payments without manual bank statement review.
  • Map MYOB GL accounts to Plaid account balances and transaction categories for ledger reconciliation.
  • Validate Plaid webhook signatures using JWT ES256 verification and extract transaction data on confirmed webhooks.
  • Poll MYOB on a weekly schedule using OData LastModified filters and backoff to stay within rate limits.

Questions

Which direction does data move between MYOB and Plaid?
The main flow is read-only from MYOB and Plaid into a reconciliation log. ml-connector polls MYOB GL accounts, bills, invoices, and contacts, then cross-checks them against Plaid transaction history and account identities. ml-connector does not write financial records back to MYOB or initiate transfers in Plaid as part of the reconciliation flow, though a separate initiated-transfer flow can be wired if you need to push ACH payments from MYOB into Plaid.
How does ml-connector handle MYOB's two-factor authentication requirement?
MYOB requires OAuth2 bearer token, API key, and Base64-encoded company file username and password on every call. ml-connector stores all three encrypted, refreshes the OAuth token when it expires (20 minutes), and includes the company file credentials in the x-myobapi-cftoken header on every request. If the company file credentials are wrong, MYOB returns 401 and ml-connector halts and alerts.
What is the polling schedule and how does ml-connector stay within MYOB's rate limits?
ml-connector polls MYOB GL and contact records on a weekly schedule aligned to your accounting close cycle, using OData $filter on LastModified timestamps to fetch only records changed since the last sync. MYOB enforces 8 requests per second and 1,000,000 per day per API key, so ml-connector spaces requests with backoff and retries 429 responses with exponential backoff to avoid rate-limit errors.

Related integrations

Connect MYOB and Plaid

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

Get started