ml-connector
MYOBCoupa

MYOB and Coupa integration

MYOB runs accounting for mid-market SMEs across ANZ. Coupa handles procurement and spend management. Connecting them keeps your purchase orders and supplier data flowing from MYOB into Coupa without manual re-entry. When a purchase order is created or an invoice is posted in MYOB, ml-connector moves it to Coupa on your schedule, mapped to the matching suppliers and cost codes, and Coupa can confirm receipt by posting events back so MYOB always reflects the procurement state of record.

How MYOB works

MYOB AccountRight Live API v2 exposes suppliers, purchase orders, purchase invoices, items, and general ledger accounts through REST endpoints with OData v3 query parameters. Authentication requires three headers on every call: an OAuth2 bearer token that expires in 20 minutes, an API key, and a Base64 encoded company file credential (username and password). MYOB has no native webhook or push system, so purchase and invoice records are detected by polling with OData $filter on LastModified timestamps. Rate limits are 8 requests per second and 1,000,000 requests per day per API key, and page size is capped at 1,000 records per request.

How Coupa works

Coupa REST API accepts suppliers, purchase orders, invoices, and payments through authenticated endpoints. Every call uses OAuth2 client credentials and includes an X-Coupa-API-Version header to pin the API version. Coupa can push requisition, purchase order, invoice, supplier, and payment events to a registered webhook endpoint, and every webhook is signed with HMAC-SHA256 so the receiver can validate authenticity. Coupa enforces a 30-second request timeout and rate-limits with 429 responses; recommended retry strategy is up to 3 attempts with exponential backoff capped at 30 seconds.

What moves between them

The main flow runs from MYOB into Coupa. ml-connector polls MYOB on a schedule tied to your purchase cycle and reads newly modified purchase orders and invoices. Supplier master data is read from MYOB and pushed into Coupa first so every purchase order references a supplier that already exists. Purchase orders and invoices flow into Coupa after the supplier sync so they land on valid suppliers. The reverse direction is optional: Coupa can push purchase order and invoice events back to ml-connector via webhook, and these can be logged into MYOB as audit records or trigger downstream workflows.

How ml-connector handles it

ml-connector stores the MYOB company file credentials and API key encrypted and supplies them on every request: the OAuth bearer token in the Authorization header, the API key in x-myobapi-key, and the company file credential Base64 in x-myobapi-cftoken. MYOB access tokens expire in 20 minutes, so ml-connector refreshes the token before each batch of requests to avoid mid-batch 401 failures. It polls MYOB using OData $filter with LastModified timestamps to find only records changed since the last sync, which reduces request volume and keeps latency low. On the Coupa side, ml-connector accepts webhook events signed with a pre-shared secret, validates each signature with HMAC-SHA256, and rejects any webhook with an invalid signature so no unsigned payloads enter the pipeline. Suppliers are synced first, then purchase orders and invoices reference them by external ID. Coupa rate limits return HTTP 429, so ml-connector backs off and retries with exponential backoff capped at 30 seconds. Every record carries a full audit trail so the procurement chain is traceable from MYOB through Coupa and back.

A real-world example

A mid-market professional services firm manages projects and purchase orders in MYOB for ANZ operations, and uses Coupa for spend management and supplier compliance. Before the integration, the procurement team exported purchase orders from MYOB and manually created them in Coupa, then re-entered invoices from MYOB when they arrived. This caused delays in procurement visibility and mismatches between what MYOB said was ordered and what Coupa tracked. With MYOB and Coupa connected, each purchase order flows from MYOB into Coupa automatically, tied to the correct supplier and cost code, and invoices are automatically matched. Procurement visibility is real-time, and the manual data re-entry step is eliminated.

What you can do

  • Sync suppliers from MYOB into Coupa so purchase orders land on valid suppliers.
  • Move purchase orders from MYOB into Coupa on a polling schedule aligned with your purchase cycle.
  • Push invoices from MYOB to Coupa after supplier and PO sync so they reference existing records.
  • Handle MYOB company file authentication, 20-minute token refresh, and Coupa webhook signature verification automatically.
  • Retry on rate limit (HTTP 429) and network failures with exponential backoff up to 30 seconds per Coupa policy.

Questions

Which direction does data move between MYOB and Coupa?
The main flow is MYOB into Coupa. Suppliers, purchase orders, and invoices move from MYOB to Coupa on a polling schedule. Coupa can push purchase order and invoice events back via webhook, which ml-connector receives, validates with HMAC-SHA256, and can log into MYOB for audit or trigger downstream workflows.
Does MYOB support webhooks, or must ml-connector poll?
MYOB does not support webhooks on the AccountRight Live API v2, so ml-connector polls using OData $filter on LastModified timestamps to find changed records since the last sync. This keeps data fresh on a schedule tied to your purchase-to-pay cycle and avoids duplicate work.
How does ml-connector handle MYOB's two-part authentication requirement?
Every MYOB API call requires three headers: an OAuth2 bearer token that expires in 20 minutes, an API key, and a Base64 company file credential. ml-connector supplies all three on every request, refreshes the OAuth token before each batch, and encrypts the company file credential so it is never logged or leaked.

Related integrations

Connect MYOB and Coupa

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

Get started