ml-connector
MYOBZoho CRM

MYOB and Zoho CRM integration

MYOB runs accounting for Australian and New Zealand SMBs. Zoho CRM tracks customers, leads, and sales pipelines. Connecting them keeps your customer data in one place and flows invoices and orders between finance and sales without re-entry. New customers added in MYOB appear in Zoho CRM, invoices sync to Sales Orders for visibility, and purchase order records travel from MYOB to Zoho so procurement is visible across both platforms.

How MYOB works

MYOB Business API (AccountRight Live) exposes contacts (suppliers, customers, employees), invoices, purchase orders, general ledger accounts, and inventory items through REST endpoints with OData v3 query parameters. Authentication requires OAuth2 Authorization Code flow plus company file credentials (username and password Base64-encoded in a header). Access tokens expire in 20 minutes; refresh tokens last 1 week. MYOB has no webhook support, so connectors must poll using the LastModified timestamp field to find changed records. The API enforces an 8 requests-per-second rate limit and a 1 million requests-per-day cap per API key.

How Zoho CRM works

Zoho CRM exposes accounts, contacts, vendors, deals, leads, and sales records through REST APIs with region-specific base URLs (.com, .eu, .in, .com.au, .jp, .ca, .com.cn). Authentication uses OAuth 2.0 with Authorization Code or Client Credentials flow, and refresh tokens are issued on request. Access tokens are valid for 1 hour and must be refreshed. Zoho CRM supports webhook push notifications on create, edit, and delete events on Professional edition and above, with channels that expire daily and must be renewed automatically. Notification payloads contain only record IDs, so ml-connector must fetch full records via separate GET calls.

What moves between them

Contacts flow bidirectionally: MYOB suppliers and customers sync to Zoho CRM Accounts and Contacts, while Zoho CRM accounts can sync back to MYOB as customer or supplier records. MYOB invoices map to Zoho CRM Sales Orders and MYOB purchase orders map to Zoho CRM Purchase Orders. Invoices flow continuously from MYOB into Zoho CRM on a poll schedule tied to MYOB's LastModified field, typically running hourly or per-batch. The data model is one-directional for transactions: MYOB is the source for invoices and orders, read-only in Zoho CRM, so ml-connector never writes transaction data back to MYOB.

How ml-connector handles it

ml-connector stores OAuth credentials encrypted for both systems. On the MYOB side, it refreshes the access token every 15 minutes (before the 20-minute expiry) and includes the company file credentials in every API header. It polls MYOB using the OData $filter parameter with LastModified to find only new or changed records since the last sync, avoiding duplicate work. On the Zoho CRM side, it refreshes the access token when a request returns 401, and it uses the api_domain field from Zoho's token response as the base URL for all subsequent calls (not a fixed hostname). Contact records are looked up in both systems to avoid duplicates: a MYOB customer with a matching email is treated as an update to the corresponding Zoho Contact or Account. Invoices are mapped by customer: ml-connector finds the target Zoho Account or Contact and creates a Sales Order with the invoice line items and amounts. Purchase orders follow the same pattern, mapping to Zoho CRM Purchase Orders with the vendor and line items preserved. The integration handles MYOB's RowVersion field for conflict detection, retries on rate-limit 429 responses with exponential backoff, and logs every record sync attempt for audit trails.

A real-world example

A mid-market Australian business runs MYOB for accounting and invoicing, and uses Zoho CRM to track customers and sales pipeline. Before the integration, the sales team had to manually log into MYOB to see recent customer invoices and payment status, while the accounting team kept a separate spreadsheet of customers to reconcile against Zoho's contact list. With MYOB and Zoho CRM connected, new customers added in MYOB appear in Zoho CRM within an hour, sales reps see unpaid invoices linked to customer records inside Zoho without switching systems, and the finance team no longer maintains a separate customer reconciliation list because Zoho's account data mirrors MYOB's source of truth.

What you can do

  • Sync MYOB customers and suppliers bidirectionally to Zoho CRM Accounts and Contacts, matching on email to avoid duplicates.
  • Map MYOB invoices to Zoho CRM Sales Orders and MYOB purchase orders to Zoho CRM Purchase Orders with line items and amounts preserved.
  • Poll MYOB using LastModified timestamps to detect changes without manual re-triggering or full-table refreshes.
  • Refresh OAuth access tokens automatically for MYOB (every 15 minutes) and Zoho CRM (on 401 response), and include MYOB company file credentials in every request header.
  • Detect MYOB invoice row-version conflicts, retry on rate-limit responses, and maintain a full audit trail of every contact and transaction sync.

Questions

Can data move in both directions between MYOB and Zoho CRM?
Contacts flow bidirectionally: customers and suppliers in MYOB sync to Accounts and Contacts in Zoho CRM, and new Zoho CRM accounts can write back to MYOB as customer records. Transactions (invoices and purchase orders) flow one-way, from MYOB into Zoho CRM as read-only Sales Orders and Purchase Orders, since MYOB is the accounting system of record.
How does ml-connector handle MYOB's lack of webhooks and the frequent OAuth token expiry?
MYOB has no webhooks, so ml-connector polls the MYOB API on a regular schedule using OData filters on the LastModified field to find only changed records. For authentication, it proactively refreshes the MYOB access token every 15 minutes (well before the 20-minute expiry) and includes the company file username and password in every request header as a second authentication factor.
What happens when an invoice or contact already exists in Zoho CRM?
ml-connector looks up records by email address for contacts and by customer name for invoices. If a Zoho CRM Account or Contact already has the same email as an incoming MYOB customer, it updates the existing record instead of creating a duplicate. For invoices, ml-connector checks for an existing Sales Order with the same invoice number before creating a new one.

Related integrations

Connect MYOB and Zoho CRM

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

Get started