ml-connector
DATEVMicrosoft Power BI

DATEV and Microsoft Power BI integration

DATEV is the accounting backend for German and Austrian businesses, and Microsoft Power BI is where their numbers turn into dashboards. This connection reads the client companies and document metadata DATEV exposes, together with the booking batches and document uploads ml-connector stages for DATEV, and pushes that data into Power BI datasets so analysts can report on it. Because DATEV does not return posted journal entries through its API, the integration reports on the readable client and document data and on what the connector submitted, rather than reading the on-premise ledger back. ml-connector handles the very different authentication on each side and moves the data on a schedule you control.

How DATEV works

DATEV is not a conventional REST system. It exposes the client company list and document metadata through REST APIs on product-specific hosts such as accounting-clients.api.datev.de and accounting-documents.api.datev.de, while actual bookings are submitted as asynchronous file jobs: EXTF CSV batches to the on-premise Rechnungswesen engine and DXSO XML jobs to DATEV Unternehmen Online. Authentication is OAuth 2.0 Authorization Code with PKCE through Login mit DATEV, which always requires an interactive user session, plus an X-DATEV-Client-Id header on every call. DATEV emits no webhooks, so job status is tracked by polling, and posted journal entries and the full chart of accounts cannot be read back through the API.

How Microsoft Power BI works

Microsoft Power BI is a reporting and analytics destination, not a source-of-truth ERP, so it owns no native vendor, invoice, or GL objects. It exposes datasets, push datasets, reports, and workspaces through the Power BI REST API at api.powerbi.com/v1.0/myorg, scoped per workspace by group GUID. The connector path is push: you create a push dataset with a defined table schema and POST rows to it, then optionally trigger a dataset refresh. Authentication is OAuth 2.0 client credentials using a Microsoft Entra service principal with the analysis.windows.net/powerbi/api/.default scope, and the service principal must be added as Member or Admin on each target workspace. Power BI sends no outbound webhooks, so the connector pushes on a schedule.

What moves between them

Data moves from DATEV into Microsoft Power BI. ml-connector reads the DATEV client list and per-client document metadata, and it captures the booking batches and document uploads it stages for DATEV, then maps those records into Power BI table schemas and POSTs them as rows into push datasets. Client companies become one table, document records another, and booking-batch lines a third, each carrying fields such as client number, document type, GL account, cost center, amount, and document date. The cadence is scheduled, typically tied to your booking and upload runs, because DATEV emits no events and Power BI accepts no inbound webhooks. Power BI is treated as read-only reporting, so ml-connector never writes anything back into DATEV from Power BI.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the DATEV side it carries the OAuth bearer token from the interactive Login mit DATEV session, refreshes it before the 900-second access token expires by sending client_id only, and adds the X-DATEV-Client-Id header to every request. On the Power BI side it requests a service principal token with the analysis.windows.net/powerbi/api/.default scope, refreshes it near its one-hour expiry, and resolves the target workspace name to a group GUID once at setup. Because DATEV exposes no posted journals or chart of accounts, the connector reports on what it can actually see: the client list, document metadata fetched after calling document-types per client, and the EXTF and DXSO batches it submitted, including their async job status from polling. Rows are pushed within Power BI limits, batched under 10,000 rows per POST, and duplicates are avoided by deleting and replacing a table or tracking a watermark, since push datasets are append-only. A failed push is retried with backoff on a Power BI 429, and every record carries a full audit trail and can be replayed.

A real-world example

A regional German manufacturing firm with about 200 staff keeps its books in DATEV through its Steuerberater and wants a live finance dashboard the controller can open without waiting for a monthly export. Before the integration, someone pulled figures out of DATEV by hand and pasted them into spreadsheets, so the dashboard was always weeks behind and the document backlog was invisible until close. With DATEV and Microsoft Power BI connected, the client and document records and each submitted booking batch flow into a Power BI dataset on a schedule, so the controller sees invoice volumes, document types, and posting activity refresh on their own. The manual export step is gone, and the team can spot a stalled upload or a spike in incoming invoices the same day it happens.

What you can do

  • Push DATEV client company and document metadata into Microsoft Power BI datasets for reporting.
  • Stage DATEV EXTF and DXSO booking batches and push their lines and job status into Power BI tables.
  • Bridge DATEV's interactive Login mit DATEV OAuth session and Power BI's Entra service principal credentials.
  • Map DATEV client numbers, GL accounts, and cost centers to Power BI table columns.
  • Push on a schedule within Power BI row limits, with retries and a full audit trail on every record.

Questions

Which direction does data move between DATEV and Microsoft Power BI?
Data moves from DATEV into Microsoft Power BI. ml-connector reads the DATEV client list and document metadata and captures the booking batches it stages for DATEV, then pushes that data into Power BI datasets. Power BI is a reporting destination with no finance records of its own, so the connector never writes anything from Power BI back into DATEV.
Can the integration report on posted journal entries from DATEV?
No, because DATEV's API does not return posted journal entries or the full chart of accounts. Finalized EXTF bookings are write-only to the on-premise Rechnungswesen engine and cannot be read back. The connector instead reports on the readable client and document data and on the booking batches it submitted, including the async job status it gets by polling.
How does the connector handle authentication on each side?
DATEV requires an interactive Login mit DATEV OAuth session with PKCE, so a user authorizes access once and ml-connector then refreshes the short-lived 15-minute token automatically using the client_id. Power BI uses a Microsoft Entra service principal with client credentials and the Power BI .default scope, which must be granted Member or Admin rights on the target workspace. ml-connector stores both credential sets encrypted and keeps each token current.

Related integrations

Connect DATEV and Microsoft Power BI

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

Get started