ml-connector
Microsoft Dynamics NAVZuora

Microsoft Dynamics NAV and Zuora integration

Microsoft Dynamics NAV runs order-to-cash for small and mid-market businesses. Zuora runs subscription billing and revenue recognition for recurring-revenue models. When the two are connected, sales orders created in Microsoft Dynamics NAV flow to Zuora as subscription requests, and invoice status from Zuora syncs back to NAV for accurate revenue recognition. ml-connector handles the OAuth setup on both sides and maps NAV customers and items to Zuora products and accounts without manual re-entry.

How Microsoft Dynamics NAV works

Microsoft Dynamics NAV for Business Central online and on-premises exposes customers, sales orders, sales invoices, accounts, general ledger entries, and items through OData v4 REST endpoints and legacy SOAP web services. Cloud instances authenticate via Microsoft Entra ID OAuth 2.0, while on-premises deployments use OAuth 2.0 or basic authentication with a web service access key. NAV supports webhooks for push notifications on qualifying entities with a 3-day subscription window, or polling via OData queries. Webhook subscriptions expire after 3 days and must be renewed. General ledger accounts are read-only in the standard API, and GL entries cannot be modified after posting.

How Zuora works

Zuora is a subscription billing and revenue management platform exposing accounts, subscriptions, invoices, payments, and products through REST APIs requiring OAuth 2.0 client credentials. Zuora operates on multiple regional endpoints (na, eu, ap) and the base URL varies by customer region, so the endpoint must be captured per tenant. Zuora supports webhooks (Callout Notifications) via HTTPS POST with configurable retry behavior and optional HMAC-SHA256 signature verification. Webhooks fire for billing events such as Invoice Posted and Payment Processed, but payment notifications are limited to electronic payments only. Webhook payloads are minimal and require the receiver to call back to fetch full record details.

What moves between them

Sales orders created in Microsoft Dynamics NAV flow into Zuora as new subscriptions or subscription amendments tied to matching NAV customers. Invoice status and payment information from Zuora sync back to NAV to update invoice records for accurate revenue recognition and accounting. Customer and product master data are aligned in both directions so that NAV items map to Zuora products and NAV customer dimensions are reflected in Zuora account hierarchies. The sync runs on a schedule you control, typically aligned with your billing and close cycles.

How ml-connector handles it

ml-connector manages OAuth 2.0 on both sides: it requests a bearer token from Microsoft Entra ID using NAV credentials, and independently requests a bearer token from Zuora using Zuora client credentials, refreshing each when it approaches expiry. Because NAV is pull-only for on-premises (webhooks require renewal every 3 days on cloud), ml-connector polls NAV sales orders and invoices on a cadence you define, typically daily or weekly. Zuora webhooks are optional; if enabled, ml-connector listens for Invoice Posted and Payment Processed events and pulls the corresponding records from Zuora to enrich NAV invoice records. ml-connector tracks Zuora's multi-region base URL per customer so routing is always correct, and it handles the minimal webhook payloads Zuora sends by calling back to fetch full details. Rate limits on both sides are respected: Zuora enforces 50,000 requests per minute on production and 2,000 on the auth endpoint, while NAV enforces OData query limits. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A software-as-service company uses Microsoft Dynamics NAV for order and invoice management and Zuora for subscription billing and revenue recognition. Previously, sales operations manually created subscriptions in Zuora each time a new deal was signed and closed in NAV, and the finance team had to reconcile invoice status and payment records between the two systems at month-end close. After connecting NAV and Zuora, sales orders created in NAV automatically spawn subscriptions in Zuora with the correct product SKUs and customer billing hierarchy, invoice statuses flow back to NAV for automated revenue journal posting, and month-end close requires no manual reconciliation between billing and the general ledger.

What you can do

  • Flow sales orders from Microsoft Dynamics NAV into Zuora as new subscriptions, automatically mapping NAV customers to Zuora accounts and NAV items to Zuora products.
  • Sync invoice status, payment status, and payment records from Zuora back to Microsoft Dynamics NAV to drive automated revenue journal posting.
  • Manage OAuth 2.0 authentication on both sides and refresh tokens as they approach expiry without manual intervention.
  • Respect Zuora's multi-region endpoint requirements and handle region-specific base URLs per customer.
  • Poll on a schedule you control with retries, error replay, and a complete audit trail on every record moved between systems.

Questions

How does the integration handle the differences between NAV customers and Zuora accounts?
ml-connector maintains a mapping between NAV customers and Zuora accounts, either by matching on email domain or company name, or by storing the Zuora account ID in a custom field on the NAV customer record. When a sales order is created in NAV, ml-connector looks up the matching Zuora account and creates a new subscription tied to that account. Payments and invoices flow back to NAV using the same mapping, so finance records always reference the correct customer.
Does the integration work with Microsoft Dynamics NAV on-premises?
Yes. On-premises NAV deployments can use either OAuth 2.0 or the legacy basic authentication method with a web service access key. The OData endpoint must be enabled on the NAV Server Administration tool, and the OData port (default 7048) must be open through the firewall. ml-connector handles the authentication detail, so setup is the same from the configuration perspective.
What happens when Zuora's webhook subscription expires or endpoints are unavailable?
If Zuora webhooks are enabled, Zuora event subscriptions do not expire, but ml-connector can still poll Zuora on a schedule to catch any events missed due to network issues or endpoint downtime. NAV webhooks expire after 3 days on the cloud version and must be renewed by ml-connector before expiry. If webhook renewal fails, ml-connector falls back to polling and raises an alert so you can diagnose the issue.

Related integrations

Connect Microsoft Dynamics NAV and Zuora

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

Get started