ml-connector
DATEVSAP SuccessFactors

DATEV and SAP SuccessFactors integration

DATEV is the accounting backend for German tax advisors and their clients, and SAP SuccessFactors is the HR system of record for workers, jobs, org structure, and cost centers. Connecting the two means the labor cost picture from SuccessFactors reaches the DATEV ledger without re-keying. ml-connector reads worker, compensation, and cost center data from SuccessFactors and submits the matching booking batches to DATEV as EXTF files, mapped to valid cost centers and accounts. Because SuccessFactors has no general ledger and DATEV exposes no readable chart of accounts, ml-connector keeps each system in its own role and moves only the data that crosses the boundary.

How DATEV works

DATEV is not a conventional REST API. A small REST surface lists clients and uploads documents to DATEV Unternehmen Online, but finalized bookings reach the on-premise Rechnungswesen engine as asynchronous EXTF CSV file imports, and booking suggestions go to Unternehmen Online as DXSO XML jobs. Authentication is OAuth 2.0 Authorization Code with PKCE through Login mit DATEV, so a tax advisor or client must consent interactively; there is no machine-to-machine grant, and access tokens last 900 seconds. DATEV has no outbound webhooks, so job results are read by polling the job status endpoint, and posted journals cannot be read back because EXTF import is write-only.

How SAP SuccessFactors works

SAP SuccessFactors exposes Employee Central through the HCM Suite OData V2 API over HTTPS and JSON, including PerPerson, EmpEmployment, EmpJob, EmpCompensation, FOCostCenter, and FODepartment. The API host is datacenter-specific, so the hostname is captured per tenant. Authentication is OAuth 2.0 SAML Bearer Assertion: an RSA private key signs a SAML assertion that is exchanged for a Bearer token valid for up to 24 hours, and a valid token still needs Role-Based Permissions for every entity read. Reads use delta sync on lastModifiedDateTime, and Intelligent Services can push HR events such as NewHire or JobInfoChange to a configured endpoint, signed with HMAC-SHA256.

What moves between them

The flow runs from SAP SuccessFactors into DATEV. ml-connector reads worker, compensation, cost center, and department records from SuccessFactors and posts the derived labor cost journals into DATEV as EXTF booking batches, with each line carrying the matching DATEV cost center and account. Cost center and department reference data is aligned so every booking lands on a valid dimension, and any employee whose reimbursements need a creditor record is written into the EXTF master data rows. DATEV cannot return posted journals, so the SuccessFactors side stays the source of HR truth and ml-connector never writes employee or org data back into SuccessFactors.

How ml-connector handles it

ml-connector stores both credential sets encrypted. On the SuccessFactors side it signs a SAML assertion with the customer's RSA private key, exchanges it for a Bearer token, and refreshes the token before its 24-hour expiry, calling the datacenter-specific host for that tenant; a missing Role-Based Permission shows up as a 403 rather than a 401, so the integration user needs grants for each entity it reads. On the DATEV side it runs the PKCE Authorization Code flow against Login mit DATEV, keeps the state parameter at least 20 characters, and refreshes the 900-second access token sending only the client_id. SuccessFactors is read by delta sync on lastModifiedDateTime with $top set to 1000 so records are not silently missed, and Intelligent Services events can trigger an immediate pull where they are configured. Cost centers and departments are mapped first, so every EXTF line references a DATEV cost center that already exists, and the chart of accounts is configured up front because DATEV does not expose it for reading. Each EXTF file is submitted as an asynchronous job and polled with exponential backoff until it completes, with deterministic filenames so a retry reuses the same name and DATEV's duplicate check does not reject a safe re-submit. Employees are deactivated, not deleted, in SuccessFactors, so termination logic keys on status changes, and every record carries a full audit trail and can be replayed if a DATEV job fails.

A real-world example

A German engineering firm of roughly 400 staff across two sites runs DATEV through its tax advisor for bookkeeping and uses SAP SuccessFactors Employee Central as the HR system of record. Before the integration, an accountant exported a payroll cost summary each month and typed the labor totals into DATEV by hand, splitting them across cost centers from a spreadsheet that drifted out of date whenever a department was renamed or a worker moved sites. With DATEV and SAP SuccessFactors connected, each period's labor cost journal is built from SuccessFactors data and submitted to DATEV as an EXTF batch allocated to the correct cost center, and worker and department changes keep the allocation current. The manual re-keying is gone and the cost center splits in the ledger match the HR records.

What you can do

  • Post labor cost journals derived from SAP SuccessFactors into DATEV as EXTF booking batches.
  • Map SAP SuccessFactors cost centers and departments to DATEV cost centers so every booking line lands on a valid dimension.
  • Read workers and compensation from SAP SuccessFactors by OData delta sync on lastModifiedDateTime.
  • Bridge the SAP SuccessFactors SAML Bearer token and DATEV's PKCE user-consent OAuth login.
  • Submit each DATEV EXTF job, poll it with backoff, and keep a full audit trail with replay on every record.

Questions

Which direction does data move between DATEV and SAP SuccessFactors?
The flow is SAP SuccessFactors into DATEV. Worker, compensation, cost center, and department data moves from SuccessFactors into DATEV, where ml-connector posts the labor cost journals as EXTF booking batches. DATEV's EXTF import is write-only and posted journals cannot be read back, so ml-connector never writes HR or financial data back into SuccessFactors.
Does SAP SuccessFactors hold invoices or GL accounts that post into DATEV?
No. SAP SuccessFactors is an HCM system with no invoice, purchase order, or general ledger objects. What it provides is workers, jobs, compensation, and cost center codes in EmpJob and FOCostCenter, and ml-connector maps that into DATEV as booking lines against cost centers rather than as ledger accounts, since DATEV does not expose its chart of accounts for reading.
How does the integration handle authentication on each side?
On the SuccessFactors side ml-connector signs a SAML assertion with the customer's RSA private key and exchanges it for a Bearer token that lasts up to 24 hours, and the API user must also hold Role-Based Permissions for each entity. On the DATEV side it uses the OAuth 2.0 Authorization Code flow with PKCE through Login mit DATEV, which requires interactive consent from the tax advisor or client and a 15-minute access token that is refreshed automatically.

Related integrations

Connect DATEV and SAP SuccessFactors

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

Get started