ml-connector
Exact OnlineSlack

Exact Online and Slack integration

Exact Online stores your accounting and ERP data. Slack connects your team. When you link them, financial events surface immediately in Slack channels without manual data entry or waiting for a daily email report. New invoices, payments, purchase orders, and GL journal entries flow from Exact Online into the channels where your operations team works. ml-connector bridges the very different OAuth implementations and webhook models each system uses, so your team stays in the loop.

How Exact Online works

Exact Online is a cloud accounting and ERP platform for small and mid-sized businesses that covers accounting, purchasing, sales, inventory, HR, and project management. It exposes its data through a REST API with OData v3 query syntax, supporting filter, select, orderby, top, and skip parameters. The API uses region-specific base URLs for the Netherlands, Belgium, UK, Germany, France, Spain, and USA, each requiring a division ID for all requests. Exact Online authenticates with OAuth 2.0 Authorization Code Grant, issuing access tokens valid for 10 minutes and refresh tokens valid for 30 days. In addition to polling, Exact Online supports webhooks with HMAC-SHA256 validation on a subset of resources including accounts, invoices, purchase orders, GL accounts, and journal entries. Webhook payloads contain only the entity key and action type, so full entity data must be fetched via the REST API after receiving the webhook notification.

How Slack works

Slack is a team communication platform that provides real-time messaging, channels, file sharing, and workflow automation through the Slack Web API and Events API. All requests use HTTPS with a JSON response format and follow a family.action pattern, such as conversations.list or chat.postMessage. Slack authenticates with OAuth 2.0 Authorization Code flow v2, issuing non-expiring bot tokens (xoxb- prefix) and user tokens (xoxp- prefix) that are passed via the Authorization Bearer header. The Events API delivers workspace activity to a registered HTTPS endpoint via HTTP POST callbacks and requires HMAC-SHA256 signature verification with a constant-time compare. Endpoints must return HTTP 2xx within 3 seconds. Slack retries failed webhook deliveries up to 3 times with exponential backoff.

What moves between them

The main flow runs from Exact Online into Slack. Sales invoices, purchase invoices, purchase orders, and GL journal entries created or modified in Exact Online flow into designated Slack channels as formatted notifications. Payment records and cost transactions are posted as channel updates so your team sees cash flow and cost allocation changes in real time. The sync runs on a schedule you define, typically triggered by Exact Online webhooks when financial records change, and can fall back to polling if webhooks are unavailable. Messages flow one direction only, from Exact Online to Slack.

How ml-connector handles it

ml-connector stores the Exact Online OAuth credentials and the region-specific base URL per division, refreshing the access token before it expires at the 10-minute mark. For Slack, it stores the non-expiring bot token securely and verifies all incoming webhook events using constant-time HMAC-SHA256 comparison against the X-Slack-Signature header. When Exact Online sends a webhook notification, ml-connector fetches the full entity data via the REST API, since Exact Online webhook payloads contain only the key and action type. The connector maps Exact Online financial records to Slack message templates, formatting invoices, orders, and GL transactions with line-item details and cost center references. It respects Slack's 1-per-second rate limit on chat.postMessage per channel and batches or throttles posts to avoid 429 responses. Every record is logged with its source ID, timestamp, and status, so failed postings can be retried without duplication.

A real-world example

A mid-sized wholesale distributor uses Exact Online for order-to-cash and procurement across three distribution centers. Before the integration, the AP team reviewed purchase invoices in Exact Online once a day and manually notified the accounting team in Slack of high-value or exception invoices. With Exact Online and Slack connected, every purchase invoice above a threshold posts automatically to a dedicated Slack channel with line-item details and cost center allocation, and the AP team triages exceptions in real time. Payment confirmations post to the same channel, so cash flow is visible as it happens. Month-end close accelerates because the accounting team already has the invoice journal in Slack with attachments and cost-center breakdown.

What you can do

  • Post sales and purchase invoices from Exact Online to Slack channels with line-item detail and cost center allocation.
  • Notify teams of purchase orders, GL journal entries, and payment records as they are created or modified.
  • Handle Exact Online's region-specific base URLs and OAuth token refresh on the 10-minute cycle.
  • Verify Slack webhook signatures using constant-time HMAC-SHA256 comparison to prevent spoofing.
  • Throttle posts to respect Slack's 1-per-second rate limit and log every record for error replay.

Questions

Which direction does data move between Exact Online and Slack?
Data flows from Exact Online to Slack only. Invoices, orders, GL entries, payments, and cost transactions created or updated in Exact Online post as formatted messages to Slack channels. Slack messages do not flow back to Exact Online, so Slack is a notification and visibility layer, not a data entry point.
How does the integration handle Exact Online's region-specific URLs and division IDs?
ml-connector stores the region-specific base URL and division ID per customer and includes the division ID in every Exact Online API request. When a customer changes regions or divisions, the connector routes requests to the correct URL and validates the division ID before fetching data.
What happens when Exact Online webhooks are unavailable or delayed?
ml-connector falls back to polling on a schedule you define if webhooks are not available. When a webhook arrives late or is missed, the next poll cycle catches the change. Slack webhook signature verification is mandatory on every request, so spoofed events are rejected at the signature check.

Related integrations

Connect Exact Online and Slack

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

Get started