Exact Online and Tableau integration
Exact Online handles your accounting, purchasing, and sales across multiple regions. Tableau visualizes and analyzes that data for decision-making. Connecting the two keeps your BI dashboards fed with current financial and operational records from Exact Online without manual exports. Purchase invoices, sales invoices, GL accounts, cost centers, and journal entries flow into Tableau data sources on a schedule you control, so your financial reports and dashboards always reflect your books.
What moves between them
Financial records flow from Exact Online into Tableau. Purchase invoices, sales invoices, GL accounts, cost centers, and journal entries are extracted from Exact Online via its webhook notifications and REST API, then loaded into Tableau datasources as extract refreshes. The sync runs on a schedule you define, capturing changes from Exact Online and updating Tableau's data sources so reports and dashboards reflect current financial state. Tableau datasources and views remain read-only; ml-connector does not write financial entries back to Exact Online.
How ml-connector handles it
ml-connector subscribes to Exact Online webhooks for invoice, GL account, and journal entry changes, validates each webhook signature using the HMAC-SHA256 hash and the webhook secret retrieved from the Exact Online App Center, and fetches full entity data via the REST API. It extracts the division ID from Exact Online's current user endpoint and uses it in all subsequent API calls. Because Exact Online does not support $expand for related entities, ml-connector fetches each GL account, cost center, and contact in separate API calls and enriches the records before publishing. Access tokens expire after 10 minutes, so ml-connector refreshes them on every fifth API call or when a 401 response is received. On the Tableau side, ml-connector authenticates using a Personal Access Token, exchanges it for a session token, and publishes enriched data as extract refreshes to the target datasources. Refresh job status is polled until the extract completes or fails. If Exact Online's refresh token is not used within 30 days, the user must re-authorize the connector.
A real-world example
A mid-sized European manufacturing and distribution company runs Exact Online for accounting, purchasing, and inventory across two divisions and three countries. The finance team uses Tableau dashboards to track accounts payable, receivable, and project profitability. Before the integration, financial reports required a weekly manual export from Exact Online into CSV, then a re-upload to Tableau's data source, creating lag and error risk. With Exact Online and Tableau connected, each time an invoice or journal entry is created or updated in Exact Online, ml-connector captures it, enriches it with related GL account and cost center details, and loads it into Tableau within minutes. The team's dashboards always show current payables, project costs, and revenue recognition without manual intervention.
What you can do
- Sync purchase invoices, sales invoices, GL accounts, and cost centers from Exact Online to Tableau datasources on a defined schedule.
- Validate Exact Online webhook signatures using HMAC-SHA256 and webhook secrets from the Exact Online App Center.
- Handle Exact Online's division-scoped APIs and 10-minute OAuth2 access token refresh automatically.
- Fetch related GL accounts, cost centers, and contacts in separate calls and enrich invoice and journal entry records before publishing to Tableau.
- Manage Tableau Personal Access Token expiry and session token renewal, and poll extract refresh jobs until completion or failure.
Questions
- How does ml-connector handle Exact Online's division-scoped API and division ID requirement?
- ml-connector retrieves the division ID from Exact Online's /api/v1/current/Me endpoint at the start of each sync. It then includes the division ID in all subsequent API calls to the region-specific base URL. This allows the same connector to work across multiple Exact Online divisions by storing the division ID per customer.
- Why does ml-connector make separate API calls for related entities like GL accounts and cost centers?
- Exact Online does not support the $expand query parameter for fetching related entities in a single request. ml-connector fetches invoices, GL accounts, and cost centers in separate calls, then joins them locally to enrich the data before publishing to Tableau. This adds latency but ensures all required fields are available in the final datasource.
- What happens if Exact Online's OAuth2 refresh token expires?
- Exact Online's refresh token is valid for 30 days and rotating on each refresh. If the refresh token is not used within 30 days, the token expires and the user must re-authorize the connector in the Exact Online App Center. ml-connector logs a warning when a refresh token refresh succeeds and tracks the token's creation date to alert the user before the 30-day window closes.
Related integrations
More Exact Online integrations
Other systems that connect to Tableau
Connect Exact Online and Tableau
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started