ml-connector
Exact OnlineMicrosoft Dynamics 365 Sales

Exact Online and Microsoft Dynamics 365 Sales integration

Exact Online runs accounting, purchasing, and sales for European and UK businesses. Microsoft Dynamics 365 Sales drives the CRM pipeline. Connecting the two ensures that every customer, contact, and sales order created in Exact Online flows into Dynamics 365 Sales, so your sales team works with current data and your CRM pipeline stays synchronized with actual invoiced sales. ml-connector bridges the two platforms, handling OAuth authentication on both sides and moving records on a schedule you control.

How Exact Online works

Exact Online is a cloud-based ERP and accounting platform covering accounting, purchasing, sales, inventory, HR, and project management. It exposes accounts (which may be customers or suppliers), sales invoices and orders, purchase orders, GL accounts, cost centers, items, contacts, and employees through a REST API with OData v3 query syntax. Authentication uses OAuth 2.0 with a 10-minute access token lifetime and 30-day refresh token lifetime. Exact Online supports webhooks via a subscription model with HTTP POST delivery and HMAC-SHA256 signature verification, but webhook payloads contain only the entity key and action; full entity data must be fetched separately via the REST API. Division ID is required for all API calls. Note that $expand is not supported, so related entities must be fetched in separate requests.

How Microsoft Dynamics 365 Sales works

Microsoft Dynamics 365 Sales is a cloud-based CRM built on Microsoft Dataverse. It manages leads, opportunities, accounts, contacts, quotes, orders, and invoices across the sales pipeline through an OData v4.0 REST API. Authentication uses OAuth 2.0 via Microsoft Entra ID with the Client Credentials flow for server-to-server integrations, with tokens expiring in approximately 60 minutes. Dynamics 365 Sales supports webhooks via the Dataverse Event Framework for Create, Update, Delete, and custom actions with synchronous or asynchronous execution, but has a 256 KB payload size limit and uses a shared secret for signature verification rather than HMAC. Dynamics 365 Sales does not include GL accounts, AP/AR ledger entries, or vendor records; those require Dynamics 365 Finance or Business Central.

What moves between them

Sales records flow from Exact Online into Microsoft Dynamics 365 Sales. Customers (represented as Accounts with IsCustomer=true in Exact Online) sync to Dynamics 365 Sales accounts; contacts in Exact Online sync to Dynamics 365 Sales contacts; sales invoices and sales orders from Exact Online map to Dynamics 365 Sales orders and invoices. The sync runs on a schedule you set, typically after daily or weekly batches in Exact Online. Exact Online webhooks can trigger immediate syncs for high-priority events, but because webhook payloads contain only the entity key, ml-connector fetches the full record via the REST API.

How ml-connector handles it

ml-connector stores both credential sets encrypted and refreshes OAuth tokens automatically before they expire, respecting Exact Online's 10-minute lifetime and Dynamics 365 Sales' 60-minute lifetime. On the Exact Online side, it handles the region-specific base URL (Netherlands, Belgium, UK, Germany, France, Spain, or USA) and the required division ID, which must be fetched from the /api/v1/current/Me endpoint on first connect. It maps Exact Online accounts (filtered by IsCustomer=true) to Dynamics 365 Sales accounts, Exact Online contacts to Dynamics 365 Sales contacts, and Exact Online sales orders to Dynamics 365 Sales orders by matching on external ID or primary key. Because Exact Online webhook payloads contain only the entity key, ml-connector fetches the full record via REST when a webhook fires, and it polls the Exact Online REST API on a regular schedule as a fallback. Dynamics 365 Sales webhooks validate the shared secret (WebhookKey) on each delivery. The integration respects Dynamics 365 Sales' 256 KB payload limit and Exact Online's 30-day refresh token requirement, warning before re-authorization is needed.

A real-world example

A mid-sized distributor in the Netherlands runs Exact Online for invoicing, inventory, and customer accounts, and uses Microsoft Dynamics 365 Sales to manage the sales pipeline and track opportunities. Before the integration, new customers created in Exact Online had to be manually entered in Dynamics 365 Sales before quotes and orders could be created, leading to duplicate data entry and lost time during the sales cycle. With Exact Online and Dynamics 365 Sales connected, new customers and their contacts flow automatically from Exact Online into Dynamics 365 Sales within minutes of registration, and completed sales orders sync back into Exact Online so the fulfillment and accounting teams see the same order data. The sales team always works with current customer records, and month-end reconciliation between CRM and accounting is automatic.

What you can do

  • Sync customers and contacts from Exact Online to Microsoft Dynamics 365 Sales, keeping account records current across both platforms.
  • Map Exact Online sales orders to Dynamics 365 Sales orders and invoices, so the CRM pipeline stays synchronized with actual sales.
  • Refresh OAuth tokens automatically on both sides, respecting Exact Online's 10-minute access token lifetime and Dynamics 365 Sales' 60-minute expiry.
  • Handle Exact Online's region-specific base URLs and required division ID, with fallback polling when webhooks are not enabled.
  • Validate Exact Online webhook signatures (HMAC-SHA256) and Dynamics 365 Sales webhook secrets, with a full audit trail on every record.

Questions

Which direction does data move between Exact Online and Microsoft Dynamics 365 Sales?
The main flow is from Exact Online into Dynamics 365 Sales. Customers (accounts), contacts, and sales orders move from Exact Online into Dynamics 365 Sales so the CRM pipeline reflects actual business data. Completed orders may also sync back to Exact Online for fulfillment and accounting. Reference data such as account categories and product lists are aligned in both directions.
How does the integration handle Exact Online's region-specific URLs and division ID requirement?
ml-connector accepts the region-specific base URL (Netherlands, Belgium, UK, Germany, France, Spain, or USA) per customer and fetches the division ID from the /api/v1/current/Me endpoint on first connect. Every API call includes the division ID in the path. Because Exact Online OAuth tokens expire in 10 minutes, ml-connector refreshes the token before each request, and Exact Online requires that refresh tokens be used at least once every 30 days or the user must re-authorize.
What happens when Exact Online webhooks are not available or disabled?
ml-connector falls back to polling the Exact Online REST API on a schedule you set. Since Exact Online webhook payloads contain only the entity key and action, ml-connector fetches the full record via REST after a webhook fires anyway. Polling and webhooks can both be enabled, with webhooks triggering immediate syncs for high-priority events and polling serving as a reliable secondary mechanism.

Related integrations

Connect Exact Online and Microsoft Dynamics 365 Sales

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

Get started