ml-connector
Exact OnlineLooker

Exact Online and Looker integration

Exact Online holds your financial transactions, customer orders, and supplier invoices. Looker analyzes data. Connecting the two lets your team query and visualize Exact Online's ERP data in Looker without manual extraction. Invoice trends, customer order patterns, cost center spending, and GL balances become live in your analytics dashboard. ml-connector handles the OAuth dance, regional URL routing, and keeps your Looker models in sync with Exact Online transactions.

How Exact Online works

Exact Online is a cloud ERP for small and medium businesses, accessible via REST APIs using OData v3 query syntax. The API is region-specific, with base URLs for Netherlands, Belgium, UK, Germany, France, Spain, and USA. Authentication is OAuth 2.0 Authorization Code Grant with 10-minute access tokens and 30-day rotating refresh tokens. Access tokens are scoped by the user's role within a division (division ID is required for all API calls). Exact Online exposes GL accounts, cost centers, customers, suppliers, sales orders, sales invoices with line detail, purchase orders, purchase invoices, items, projects, employees, and bank accounts. Webhooks are supported for create/update/delete events on major entities, delivered via HTTPS POST with HMAC-SHA256 validation, but carry only the entity key and action - the full record must be fetched separately via the REST API. Related entities cannot be expanded in a single call, so fetching an invoice with its line items requires separate requests.

How Looker works

Looker is a business intelligence and data analytics platform (part of Google Cloud) that models and exposes warehouse data via REST API. Authentication is OAuth2 client credentials exchanged for a 1-hour bearer token via POST to /api/4.0/login. Looker has no refresh token endpoint; a new token is required each hour. Looker exposes queries, looks (saved reports), dashboards, users, groups, scheduled plans, folders, and data connections via its REST API. Scheduled Plans support cron-driven delivery to webhooks, email, S3, or SFTP and serve as the primary outbound automation mechanism. Looker has no inbound webhooks or real-time change events. Queries are pull-based and limited to 5000 rows per call without streaming. Looker does not natively store ERP data; it models warehouse data extracted from connected sources, so it acts as the analytics layer, not the source of truth. Role-based access control determines API user permissions; OAuth scopes are not used.

What moves between them

Sales orders, sales invoices with line detail, purchase orders, purchase invoices, GL accounts, and cost centers flow from Exact Online into Looker on a schedule tied to your reporting cycle (daily, weekly, or on-demand). Exact Online serves as the source of truth for all financial and operational data. ml-connector polls Exact Online via the OAuth-secured REST API and transforms the OData responses into structured models in Looker, which are then queryable through looks, dashboards, and the REST API. Webhook subscriptions for major entity changes allow near-real-time notification of new transactions, but the full record detail is still fetched via REST to ensure completeness. The refresh cadence is configurable and typically aligns with daily or weekly reporting needs.

How ml-connector handles it

ml-connector stores both Exact Online OAuth credentials and Looker API credentials encrypted and manages token lifecycle on both sides. For Exact Online, it resolves the region-specific base URL per customer (Netherlands, Belgium, UK, Germany, France, Spain, or USA) and passes the division ID with every API call. When a webhook fires (e.g., a sales invoice is created), ml-connector notes the event but fetches the complete invoice and line-item detail from the Exact Online REST API to avoid incomplete records. For Looker, ml-connector exchanges client credentials for a short-lived token, makes the data-model query, and discards the token after each request rather than holding it. If a Looker token expires during a query, ml-connector refreshes and retries. Exact Online's 30-day refresh token rotation is tracked so re-authorization is triggered before expiry. GL account and cost center hierarchies are flattened and loaded first so later invoice line allocations reference valid dimensions. OData filter syntax (filter=...) is used to paginate large datasets and reduce payload size. Every extracted record carries source identifiers and audit timestamps, enabling reconciliation if a query fails.

A real-world example

A mid-sized European B2B distributor uses Exact Online for purchasing, sales, and accounting across three regional divisions (Netherlands, Belgium, Germany). The finance team needs to answer questions like monthly invoice revenue by customer segment, cost center spending trends, and supplier payment aging. Before the integration, they exported GL reports from Exact Online each month and manually built dashboards in a spreadsheet, losing visibility between reporting cycles. With Exact Online and Looker connected, sales invoice line detail, purchase invoice detail, GL balances, and cost center allocation sync daily into Looker. The finance team now has live dashboards showing invoice trends by customer, cost center spending by region, and aging analysis by supplier, all queried directly from Exact Online data without re-keying.

What you can do

  • Extract sales invoices, line items, and revenue by customer from Exact Online and query them live in Looker.
  • Sync GL accounts, cost centers, and cost units from Exact Online to model financial dimensions in Looker.
  • Track purchase invoices and supplier spending via Looker dashboards updated on your schedule.
  • Handle Exact Online's regional URL routing, OAuth token lifecycle, and 30-day rotating refresh tokens automatically.
  • Receive webhook notifications when invoices or orders are created in Exact Online and fetch the complete record detail via REST for accurate analytics models.

Questions

Does the integration handle Exact Online's regional URLs and division requirements?
Yes. ml-connector accepts the region (Netherlands, Belgium, UK, Germany, France, Spain, or USA) and division ID per customer and routes all API calls to the correct regional base URL. The division ID is passed with every REST call as required by Exact Online. If your business spans multiple divisions, each is treated as a separate configuration so Looker models can segregate data by division.
How does ml-connector handle Exact Online's webhook limitation where only the entity key is sent, not the full record?
ml-connector subscribes to Exact Online webhooks to detect when invoices, orders, and GL transactions are created or updated. When a webhook fires, ml-connector immediately fetches the complete record (including all line items and related detail) from the Exact Online REST API. This ensures Looker always receives complete, queryable records rather than just entity keys.
What happens when Exact Online's OAuth refresh token is about to expire?
Exact Online refresh tokens rotate every 30 days and must be refreshed at least once per month or the user must re-authorize. ml-connector tracks token age and proactively refreshes before the 30-day expiry window closes, so your integration stays live without manual re-authorization. If a refresh fails, the connector alerts and stops pulling data until credentials are renewed.

Related integrations

Connect Exact Online and Looker

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

Get started