ml-connector
Exact OnlineZendesk

Exact Online and Zendesk integration

Your support team helps customers who are also in your accounting system. Zendesk holds the support conversation, but Exact Online holds the customer's credit standing, purchase history, and open orders. Connecting the two means every ticket comes with full context: the agent sees the customer's AR balance and recent orders without leaving Zendesk. When a customer record changes in Exact Online, Zendesk picks up the change automatically so your support team always has current data.

How Exact Online works

Exact Online is a cloud ERP serving SMEs across Europe and North America. It exposes customers, suppliers, contacts, sales invoices, purchase invoices, GL accounts, cost centers, items, and projects through a REST API with OData v3 query syntax, available in region-specific base URLs for Netherlands, Belgium, UK, Germany, France, Spain, and USA. Authentication is OAuth 2.0 Authorization Code Grant with access tokens that expire after 10 minutes and refresh tokens that rotate and expire after 30 days. Exact Online supports webhooks with HMAC-SHA256 signature verification for entities including Accounts, Contacts, SalesOrders, SalesInvoices, PurchaseOrders, and GLAccounts. Every API call requires the division ID, which must be fetched from the /current/Me endpoint. Webhook payloads contain only the entity key and action (create, update, delete), so full entity data must be fetched separately.

How Zendesk works

Zendesk is a cloud-based customer support platform that manages support tickets, users, organizations, and knowledge base articles. It exposes these entities through a REST API scoped to the customer's subdomain, with authentication via OAuth 2.0 or API token with basic auth. Zendesk supports webhooks configured through the Admin Center with HMAC-SHA256 signature verification via the X-Zendesk-Webhook-Signature header. OAuth tokens do not expire unless revoked, and there is no native finance or ERP entities in Zendesk. Email fields on users are writable only at creation, with subsequent updates stored as secondary emails. Webhook ticket events must be connected to a trigger or automation, not simply subscribed to.

What moves between them

Customer records flow one-way from Exact Online into Zendesk. Accounts (where IsCustomer=true) and Contacts from Exact Online are synced into Zendesk Users and Organizations, carrying over names, email addresses, and custom fields. Sales invoices and open sales orders from Exact Online are stored as custom fields or notes in the Zendesk organization so support agents see the customer's recent purchase history and outstanding commitments. The sync is event-driven where Exact Online's webhook notifications alert ml-connector to changes; for initial load and backfill, ml-connector polls Exact Online on a schedule you control. Zendesk remains the system of record for support tickets and agent activity.

How ml-connector handles it

ml-connector maintains OAuth 2.0 sessions with both Exact Online and Zendesk, refreshing Exact Online's access tokens every 9 minutes before expiry and re-authorizing if the refresh token expires beyond its 30-day window. On receiving an Exact Online webhook notification (verified using the webhook secret from Exact Online App Center), ml-connector fetches the full Account or Contact record via the REST API, checks the division ID, and maps the customer to a Zendesk Organization or User. Custom fields carry over account number, contact name, email, and phone; invoice and order summaries are stored as organization notes for agent reference. For initial load, ml-connector paginates through Exact Online's Accounts endpoint using OData select and filter parameters, respecting the lack of expand support by fetching contacts and invoices in separate requests. Zendesk users and organizations are upserted by email address to avoid duplicates. Rate limits from both sides are handled with exponential backoff and jitter, and every record update carries an audit timestamp so a downstream ticket can be replayed if an API call fails.

A real-world example

A mid-market B2B software company based in the Netherlands runs Exact Online for billing, AR, and GL, and uses Zendesk for customer support across three regions. Before the integration, support agents looked up customers manually in Exact Online whenever a ticket came in, or asked the finance team for AR balances and recent order summaries, slowing first response time. With Exact Online and Zendesk connected, each support ticket shows the customer's organization with current AR balance, credit standing, and the list of open orders. When a customer's billing address or contact changes in Exact Online, Zendesk picks up the change within minutes. Support agents now resolve payment disputes faster because they see the invoice detail and payment history without context switching.

What you can do

  • Sync Exact Online customers and contacts into Zendesk users and organizations so support agents see AR balance and account status in every ticket.
  • Display recent sales invoices and open orders in Zendesk organization records so agents have purchase history without leaving the ticketing system.
  • Authenticate Exact Online with OAuth 2.0 and refresh tokens automatically before expiry, and map customers across region-specific Exact Online instances.
  • Receive real-time updates from Exact Online webhooks and verify signatures using the webhook secret from Exact Online App Center.
  • Backfill and periodically re-sync customers from Exact Online to Zendesk using OData pagination and handles division IDs automatically.

Questions

Which direction does data move between Exact Online and Zendesk?
Customer and contact records flow one-way from Exact Online into Zendesk. Support agents in Zendesk see current AR balance, recent invoices, and open orders. Ticket data, agent activity, and support metrics stay in Zendesk and do not flow back to Exact Online.
Does ml-connector handle Exact Online's region-specific base URLs and division IDs?
Yes. ml-connector accepts the full Exact Online base URL for the customer's region (Netherlands, Belgium, UK, Germany, France, Spain, or USA) and fetches the division ID from the /current/Me endpoint on first connection, then includes it in every subsequent API call. The division ID changes if the user switches divisions in Exact Online, so ml-connector refetches it periodically.
How does ml-connector handle Exact Online's short-lived access tokens and 30-day refresh token rotation?
ml-connector refreshes the Exact Online access token every 9 minutes, well before the 10-minute expiry, and monitors refresh token age. If a refresh token approaches its 30-day limit, ml-connector alerts the user to re-authorize before the token expires, preventing service interruption. Webhook verification uses the webhook secret stored securely from App Center.

Related integrations

Connect Exact Online and Zendesk

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

Get started