Microsoft Dynamics 365 Business Central and Zoho CRM integration
Microsoft Dynamics 365 Business Central is the system of record for finance, customers, and inventory. Zoho CRM is where the sales team works leads, accounts, and deals. Connecting the two keeps the customer list, product catalog, and billing history in agreement across both. Customers and items created or changed in Business Central appear as Accounts and Products in Zoho CRM, and posted sales invoices copy across so reps can see what a customer has actually been billed. Business Central stays the financial source of truth; Zoho CRM gets a current, read-aligned view of it.
What moves between them
The main flow runs from Microsoft Dynamics 365 Business Central into Zoho CRM. Customers sync into Zoho Accounts, and items sync into Zoho Products, keyed on the stable Business Central number field. Posted sales invoices copy from Business Central into Zoho Invoices, with header totals and line items mapped into the Invoiced_Items subform, so reps see real billing against the matching Account. Contact details captured against a Business Central customer can also populate Zoho Contacts. Money is recorded in Business Central, so Zoho CRM is treated as a read-aligned destination for financial records; sales and inventory accounting are never written back from Zoho into Business Central.
How ml-connector handles it
ml-connector stores both credential sets encrypted. For Business Central it requests an Entra ID client-credentials token against the tenant and the api.businesscentral.dynamics.com/.default scope, then builds the company-scoped base URL from the stored environment name. For Zoho CRM it exchanges the refresh token for an access token roughly five minutes before the hour expires and always reads the api_domain from the token response to hit the right datacenter. Matching is by business key: a Business Central customer number maps to a Zoho Account, and an item number maps to a Zoho Product, with the Upsert API and a duplicate-check field preventing double records. Change capture uses webhooks on both sides plus a fallback poll, since neither system sends record data in its notification: ml-connector receives the change signal, then fetches the full record by ID. Because Business Central subscriptions lapse after 3 days and Zoho watch channels after about a day, a scheduled job renews both before they expire. Business Central purchase orders are not webhook-eligible, so any PO-related sync falls back to polling with a lastModifiedDateTime filter. Zoho daily API credits and Business Central rate limits both return HTTP 429, so calls back off and retry, large initial loads use Zoho bulk write, and every record carries an audit trail and can be replayed if a downstream call fails.
A real-world example
A mid-sized industrial supplies distributor with about 90 staff runs Microsoft Dynamics 365 Business Central for finance, inventory, and invoicing, while its outside sales team lives in Zoho CRM. Before the integration, a rep on a customer call could not see whether an open invoice had been paid without messaging accounting, and new accounts were typed into both systems with mismatched names and addresses. With the two connected, every customer and product in Business Central appears in Zoho CRM, and each posted invoice copies across automatically, so reps see current balances and billing history beside the deal. Duplicate data entry stops, and the sales conversation is finally backed by the same numbers the finance team sees.
What you can do
- Sync Microsoft Dynamics 365 Business Central customers into Zoho CRM Accounts, keyed on the BC customer number.
- Push Business Central items into Zoho Products so quotes and orders reference a current catalog.
- Copy posted Business Central sales invoices into Zoho CRM, mapping line items into the invoice subform.
- Bridge Entra ID client-credentials auth on Business Central with the refreshing Zoho OAuth token and correct datacenter.
- Renew both webhook subscriptions before they expire and fall back to polling, with retries and a full audit trail.
Questions
- Which direction does data move between Microsoft Dynamics 365 Business Central and Zoho CRM?
- The main flow is Business Central into Zoho CRM. Customers, items, and posted sales invoices move from Business Central into Zoho Accounts, Products, and Invoices. Business Central is the financial source of record, so ml-connector treats Zoho CRM as a read-aligned destination and does not write sales or inventory accounting back into Business Central.
- How does the integration keep up with changes when neither system sends record data in its notification?
- Both Business Central and Zoho CRM webhooks carry only a change signal and the record ID, not the record itself. ml-connector receives the notification, then fetches the full record by ID from the source. Business Central subscriptions expire after 3 days and Zoho watch channels after about a day, so a scheduled job renews both before they lapse, and a periodic poll backfills anything a webhook missed.
- Does the Zoho CRM datacenter and plan matter for this connection?
- Yes. A Zoho org can live in any of seven datacenters, so ml-connector always reads the api_domain returned in the OAuth token response rather than assuming a fixed URL. The Invoices and Products modules used in this sync require a Zoho CRM Professional plan or above, so edition is verified before those flows are enabled.
Related integrations
More Microsoft Dynamics 365 Business Central integrations
Other systems that connect to Zoho CRM
Connect Microsoft Dynamics 365 Business Central and Zoho CRM
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started