ml-connector
VismaLooker

Visma and Looker integration

Visma runs your accounting and procurement. Looker models and visualizes your data warehouse. When you connect the two, your financial records flow from Visma into Looker for analysis, reporting, and KPI tracking without manual re-entry. Visma supplies the source of truth for invoices, accounts, and supplier data; Looker transforms that into dashboards and scheduled reports that stakeholders depend on.

How Visma works

Visma is a cloud ERP platform that covers financial management, accounts payable, accounts receivable, purchasing, inventory, and project accounting. It exposes suppliers, supplier invoices, purchase orders, purchase receipts, customers, invoices, accounts, dimensions, journal transactions, and budget data through a REST API at https://api.finance.visma.net or https://integration.visma.net/API/controller/api/v1/ (deprecated). Authentication uses OAuth2 via Visma Connect with a service-account client_credentials grant that supplies client_id, client_secret, and tenant_id. The API supports both webhooks registered via POST /v1/subscription and delta polling via lastModifiedDateTime query parameters. Webhook notifications are sent once without automatic retry if the receiver is unavailable, so polling is the more reliable method for integrations.

How Looker works

Looker is a Google Cloud business intelligence platform that connects to data warehouses and exposes modeled data through a REST API at https://<instance>.cloud.looker.com/api/4.0/. It authenticates using OAuth2 client credentials, exchanging client_id and client_secret for a bearer token that expires after one hour and must be refreshed by calling the login endpoint again. Looker does not natively store ERP data; instead it models data from connected warehouses and provides read-only API access to queries, looks, dashboards, and scheduled plans. Scheduled Plans support cron-driven webhooks for outbound delivery to webhook, email, S3, or SFTP destinations, but Looker has no inbound webhooks or real-time change events. There is no native write path to financial data, so Looker is strictly analytical.

What moves between them

Supplier invoices, accounts, dimensions, and journal transactions flow from Visma into Looker on a configurable schedule. ml-connector polls Visma for records modified since the last sync, extracts the financial structure, and stages that data for Looker to query and model. The flow is one-directional from Visma to Looker because Looker is read-only on financial data. Customer invoices and budget data may also be included depending on the reporting needs. Scheduled Looker queries and dashboards then expose this data to stakeholders for analysis.

How ml-connector handles it

ml-connector manages two separate OAuth2 flows. On the Visma side, it uses service-account credentials to obtain a session token that stays valid for multiple calls, then polls Visma's REST endpoints for supplier invoices, accounts, and dimensions using lastModifiedDateTime to fetch only records changed since the prior sync. On the Looker side, it exchanges client_id and client_secret for a bearer token every hour before that token expires, since Looker tokens do not refresh. ml-connector stages the Visma financial data so that Looker queries can read it, either by writing to the connected warehouse that Looker models or by using Looker's import endpoints where available. Visma's ipp-company-id header requirement is included on every call, and ETag/If-Match headers are respected for optimistic locking on updates. Rate limits from Visma (500 calls per hour for test clients) are tracked, and ml-connector backs off and retries on 429 responses. Every record carries a full audit trail of when it was read from Visma and staged for Looker.

A real-world example

A Nordic manufacturing company runs Visma for accounting and procurement, and uses Looker as the data warehouse and BI platform for executive reporting. The finance team needs to analyze supplier spending by account and cost center, track invoice aging, and compare actual spend to budget forecasts. Before the integration, finance exported Visma invoices and account master data as CSV files, then manually uploaded them to the Looker warehouse and refreshed dashboards. With Visma and Looker connected, supplier invoices and GL accounts sync automatically on a nightly schedule, the warehouse stays fresh, and dashboards update without manual intervention. Finance can now drill down into spending by supplier, account, and time period in real time.

What you can do

  • Pull supplier invoices, customers, and invoice documents from Visma and stage them for Looker analysis.
  • Sync accounts and dimensions from Visma so Looker dashboards can drill down by GL structure and cost center.
  • Handle Visma OAuth2 service-account authentication and manage token expiry across calls.
  • Manage Looker token refresh every hour, since Looker bearer tokens do not refresh.
  • Poll Visma on a configurable schedule using lastModifiedDateTime to fetch only changed records, with full audit trail and retry on failures.

Questions

Why is polling better than Visma webhooks for this integration?
Visma webhooks are delivered once only with no automatic retry if the receiver is unavailable, so if ml-connector is down or overloaded when a notification arrives, the record is lost. Polling using lastModifiedDateTime ensures that no changes are missed, even if there is a network outage or service interruption between syncs.
How does ml-connector handle Looker token expiry?
Looker bearer tokens expire after one hour and do not refresh. ml-connector tracks token age and calls the Looker login endpoint again before the token expires, obtaining a new token using the same client_id and client_secret credentials. This ensures that API calls never fail due to token expiry.
What data can flow from Visma into Looker?
Supplier invoices, customer invoices, purchase orders, GL accounts, dimensions, journal transactions, and budget data can all be synced from Visma into Looker for modeling and analysis. Looker does not write financial data back to Visma, so the flow is always read-only from Visma's perspective.

Related integrations

Connect Visma and Looker

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

Get started