ml-connector
DATEVAnaplan

DATEV and Anaplan integration

DATEV runs accounting and tax filing for German businesses. Anaplan runs the budgeting, forecasting, and workforce planning that sets the numbers. Connecting the two lets approved plan and budget figures from Anaplan flow into DATEV as bookings without re-keying. ml-connector exports the agreed values from Anaplan, formats them as DATEV EXTF or DXSO booking files, and submits them into DATEV Rechnungswesen or DATEV Unternehmen Online on a schedule you control. Because both systems are pull-only, the connector drives every step by polling rather than waiting for a push.

How DATEV works

DATEV is not a conventional REST API. A REST surface exists for client lookup and document upload, but finalized bookings go through asynchronous file jobs. You submit an EXTF CSV file to DATEV Rechnungswesen or a DXSO XML file to DATEV Unternehmen Online, receive a job ID, then poll the job status endpoint until it completes, since there are no webhooks. Authentication is OAuth 2.0 Authorization Code with PKCE against the DATEV login provider, with 15-minute access tokens that require refresh. The standard DATEV chart of accounts cannot be read through the API, and finalized bookings are write-only, so posted journal entries cannot be read back.

How Anaplan works

Anaplan exposes its data through the Integration API v2.0 over REST with JSON and CSV payloads. It is a planning platform, so it has no native invoice, vendor, or GL account objects; everything lives inside a workspace and model as lists, modules, and line items. Reads and writes run as asynchronous bulk export and import tasks: you start an action, receive a task ID, poll until it reports COMPLETE, then download the file chunks for an export. Authentication is Basic auth or OAuth2 against the Anaplan auth service, with tokens that last 35 minutes. The tenant is capped at 600 requests per minute, and a model is locked while a task runs.

What moves between them

The main flow runs from Anaplan into DATEV. ml-connector runs an Anaplan export action to pull approved budget, forecast, and actual planning values, then writes them into DATEV as an EXTF booking batch for Rechnungswesen or a DXSO booking suggestion for Unternehmen Online, mapped to the correct DATEV accounts and cost centers. Reference data such as cost centers and accounts is aligned so each booking line lands on a valid DATEV dimension. The cadence follows your planning cycle, typically after each budget approval or month-end close. DATEV finalized bookings are write-only and its chart of accounts is not readable, so ml-connector does not read posted journals back into Anaplan.

How ml-connector handles it

ml-connector stores both credential sets encrypted. For DATEV it completes the OAuth2 Authorization Code with PKCE login, refreshes the 15-minute access token with the client ID only, and sends the X-DATEV-Client-Id header on every call. For Anaplan it holds the Basic auth or OAuth2 token and refreshes it before the 35-minute expiry. It maps Anaplan list members to DATEV accounts and cost centers up front, because DATEV does not expose its chart of accounts and the EXTF format demands valid account numbers. EXTF files are written as UTF-8 with precomposed characters and deterministic filenames so DATEV duplicate detection allows safe retries, and document uploads use the GUID-based PUT so they are idempotent. Because neither side pushes events and both bulk jobs are asynchronous, ml-connector polls the Anaplan export task and the DATEV import job to completion with exponential backoff. It serializes work against a single Anaplan model since a model locks during a task, and backs off on the Anaplan 600-per-minute rate limit. Every record carries a full audit trail and can be replayed if a step fails.

A real-world example

A mid-sized German manufacturer with around 300 staff runs its statutory accounting through a DATEV tax advisor and builds its annual budget and rolling forecast in Anaplan. Before the integration, the finance team approved the budget in Anaplan, exported it to a spreadsheet, and a bookkeeper keyed the opening budget and monthly accruals into DATEV by hand, reconciling cost center codes line by line. With DATEV and Anaplan connected, each approved plan version exports from Anaplan and posts into DATEV as a booking batch allocated to the right accounts and cost centers, so the ledger reflects the agreed plan without re-keying. The manual export-and-type step disappears and the planning numbers and the books stay in step.

What you can do

  • Export approved budget, forecast, and actual figures from Anaplan and submit them into DATEV as EXTF or DXSO booking files.
  • Map Anaplan list members to DATEV accounts and cost centers, since DATEV does not expose its chart of accounts through the API.
  • Bridge the DATEV OAuth2 PKCE login session and Anaplan Basic or OAuth2 token, refreshing each before it expires.
  • Drive the asynchronous Anaplan export task and DATEV import job by polling to completion, because neither system supports webhooks.
  • Write retry-safe EXTF files with deterministic filenames and back off on Anaplan rate limits, with a full audit trail on every record.

Questions

Which direction does data move between DATEV and Anaplan?
The main flow is Anaplan into DATEV. Approved budget, forecast, and actual planning values are exported from Anaplan and submitted into DATEV as EXTF or DXSO booking files. DATEV finalized bookings are write-only and its chart of accounts is not readable through the API, so ml-connector does not read posted journal entries back into Anaplan.
Does Anaplan hold invoices or GL accounts that can post to DATEV?
No. Anaplan is a planning platform and has no native invoice, vendor, or GL account objects. Its data lives in a workspace and model as lists, modules, and line items, so ml-connector exports the planned values and maps them to valid DATEV accounts and cost centers when it builds the booking file.
How does the integration handle that neither system supports webhooks?
Both DATEV and Anaplan are pull-only, and their bulk jobs run asynchronously. ml-connector starts the Anaplan export action and the DATEV import job, receives a task or job ID for each, and polls the status endpoints with exponential backoff until they report complete. It serializes work against a single Anaplan model because the model locks while a task runs.

Related integrations

Connect DATEV and Anaplan

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

Get started