MYOB and JAGGAER integration
MYOB handles accounting and finance for SMEs across Australia and New Zealand. JAGGAER handles procurement, sourcing, and supplier management. Connecting the two keeps your purchase orders, invoices, and supplier records synchronized without manual export and re-entry. New suppliers added in MYOB appear in JAGGAER, and purchase orders created in JAGGAER post back into MYOB's AP ledger. Invoices can be matched and reconciled across both systems, and GL accounts stay aligned so coding is consistent.
What moves between them
The main sync runs from MYOB into JAGGAER. New suppliers and contacts created in MYOB sync to JAGGAER vendor records on a configurable schedule, typically daily. Purchase orders and invoices in MYOB are polled for changes using LastModified filters and posted to JAGGAER via J1P. The reverse flow is light: purchase order confirmations and status changes from JAGGAER can update MYOB PO records. General ledger accounts are mapped from MYOB to JAGGAER coding segments so that invoice line items and accruals land on the correct GL accounts in both systems. Because both systems allow read-write access, ml-connector must track RowVersion on MYOB records to avoid conflicts and handle JAGGAER's gated professional-services event setup.
How ml-connector handles it
ml-connector uses MYOB's three-part authentication on every call: an OAuth2 bearer token (refreshed before expiry), the API Key header, and a Base64-encoded company file username and password header. When the 20-minute access token expires, ml-connector refreshes it before the next request. On the JAGGAER side, ml-connector obtains an OAuth2 client credentials token at the customer-specific auth endpoint and includes it as a Bearer header on J1P calls. Polling on MYOB is done via OData dollar-filter on LastModified timestamps to detect changes since the last sync run. When writing back to MYOB, ml-connector reads the current record and its RowVersion, then includes that RowVersion in the PATCH or PUT request; if another process has changed the record, MYOB returns 409 conflict and ml-connector retries after a backoff. For purchase orders and invoices moving into JAGGAER, ml-connector maps MYOB GL accounts to JAGGAER coding segments based on configured lookup tables, ensuring every line item posts to a valid GL dimension. Because JAGGAER event-driven integration requires professional services setup, the default sync uses J1P polling. Rate limits on MYOB (8 requests per second, 1,000,000 per day) are tracked across all sync runs, and ml-connector backs off if it approaches the limit.
A real-world example
A mid-sized Australian business services firm uses MYOB for accounting and AP management, and JAGGAER for enterprise procurement and supplier contracts. Before the integration, when the procurement team issued a purchase order in JAGGAER, the finance team had to manually enter the order into MYOB or wait for an invoice to arrive and reverse-match it. Suppliers added to JAGGAER's vendor database were not reflected in MYOB, leading to duplicate supplier records and reconciliation headaches at month-end. With MYOB and JAGGAER connected, purchase orders and supplier records sync daily. Finance starts the month with accurate AP by vendor and GL code, and the manual order-entry and supplier-cleanup work disappears.
What you can do
- Sync suppliers and vendor records from MYOB to JAGGAER, keeping both systems aligned as new vendors are added.
- Poll MYOB for changes to purchase orders and invoices using OData LastModified filters, and post them to JAGGAER on a configurable daily or weekly schedule.
- Map MYOB general ledger accounts to JAGGAER coding segments so invoice line items post to the correct GL dimension in both systems.
- Handle MYOB's 20-minute OAuth2 token refresh, company file authentication, and stale RowVersion conflicts on every update.
- Respect MYOB's 8 requests-per-second rate limit and track quota against the daily 1,000,000 request allowance, with automatic backoff if limits are approached.
Questions
- How does ml-connector handle MYOB's three-part authentication and short token expiry?
- ml-connector stores the OAuth2 Bearer token, API Key, and Base64-encoded company file credentials in encrypted form and refreshes the bearer token before it expires every 20 minutes. Every API call includes all three: the Authorization Bearer header, the x-myobapi-key header, and the x-myobapi-cftoken header with the company file credentials.
- What happens if MYOB returns a 409 conflict when writing a purchase order or invoice?
- A 409 conflict means another process has edited the record since ml-connector last read it, changing its RowVersion. ml-connector reads the record again to get the new RowVersion, applies the update on top of the new state, and retries the write. If conflicts occur frequently, the retry backoff prevents overwhelming MYOB's rate limit.
- Why does MYOB need polling instead of webhooks, and does JAGGAER support event-driven sync?
- MYOB Business API does not support webhooks, so ml-connector detects changes by polling with OData dollar-filter on LastModified timestamps. JAGGAER claims event-driven integration but does not publicly document it; it requires JAGGAER professional services to set up. By default, ml-connector uses J1P polling on JAGGAER as well, making the sync predictable and auditable.
Related integrations
More MYOB integrations
Other systems that connect to JAGGAER
Connect MYOB and JAGGAER
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started