DATEV and SPS Commerce integration
DATEV is the accounting backend German suppliers use to keep their books and file tax. SPS Commerce is the EDI network that carries orders and invoices between those suppliers and large retailers. Connecting the two means the sales activity flowing through SPS Commerce is recorded in DATEV without anyone re-keying it. ml-connector pulls purchase orders and outbound invoice documents from SPS Commerce and posts the corresponding accounts-receivable bookings into DATEV, then files the invoice PDFs or e-invoices in DATEV Unternehmen Online. It handles the very different authentication and data formats on each side and runs on a schedule you control.
What moves between them
Data moves from SPS Commerce into DATEV. ml-connector polls SPS Commerce for new retailer purchase orders and for the supplier's outbound sales invoices, then records the matching accounts-receivable bookings in DATEV as EXTF CSV booking batches, mapped to the correct GL account, tax code, and cost center. The invoice document itself is uploaded to DATEV Unternehmen Online under the client-specific Rechnungsausgang type, so the booking and its source paperwork sit together. Cadence follows a poll you set, since neither system pushes events. DATEV bookings are write-only and SPS Commerce holds no accounting data, so nothing is written back from DATEV into the EDI network.
How ml-connector handles it
ml-connector stores both credential sets encrypted and runs two different OAuth flows: client credentials against Auth0 for SPS Commerce, refreshed when a call returns 401, and the interactive DATEV PKCE login whose authorization request uses an S256 challenge and a state of at least 20 characters, with the 15-minute access token refreshed using the client ID only. It resolves the DATEV client ID once and uses it as the path parameter on every later call. Because SPS Commerce webhooks are not yet in production, it polls the Transaction API with cursor paging and de-duplicates on the RSX purchaseOrderNumber and invoiceNumber, then builds an EXTF booking batch per invoice with amount, debit and credit accounts, document date, tax code, and cost center, written as NFC-normalized UTF-8 with a deterministic filename so DATEV's filename-plus-type duplicate check makes resubmission safe. Invoice files are uploaded with PUT and a stable GUID, which DATEV treats as idempotent. Submitted EXTF and document jobs are polled with backoff until they complete or fail, GL accounts and cost centers are mapped up front since DATEV cannot return its chart of accounts, and every record carries a full audit trail and can be replayed if a job fails.
A real-world example
A mid-sized German consumer-goods supplier ships to several large retail chains and runs its books in DATEV through its tax advisor. The retailers require EDI, so orders and invoices pass through SPS Commerce, but the accounting was disconnected: a clerk exported invoice lists from the EDI portal each week and typed the sales totals into a DATEV booking batch by hand, picking the GL account and tax code each time and risking a transposed figure right before the VAT return. With DATEV and SPS Commerce connected, each retailer order and the invoice raised against it flow into DATEV automatically as a booking with the right account, tax code, and cost center, and the invoice file lands in DATEV Unternehmen Online next to it. The weekly re-keying disappears and the tax advisor opens a period where the sales ledger already ties out.
What you can do
- Pull retailer purchase orders and outbound sales invoices from SPS Commerce on a schedule you set.
- Post the matching accounts-receivable bookings into DATEV as EXTF booking batches with the correct GL account, tax code, and cost center.
- Upload each invoice file to DATEV Unternehmen Online under the client-specific outgoing-invoice document type.
- Bridge SPS Commerce client-credentials OAuth and the interactive DATEV PKCE login, with token refresh on each side.
- Poll for new SPS Commerce documents and DATEV job status with cursor paging, deterministic filenames, retries, and a full audit trail.
Questions
- Which direction does data move between DATEV and SPS Commerce?
- Data moves from SPS Commerce into DATEV. Retailer purchase orders and the supplier's outbound invoices are pulled from SPS Commerce and recorded in DATEV as bookings, with the invoice files filed in DATEV Unternehmen Online. DATEV bookings are write-only and SPS Commerce holds no accounting data, so ml-connector never writes financial entries back into the EDI network.
- Does the integration use webhooks or polling?
- It uses polling on both sides. DATEV supports no outbound webhooks at all, and SPS Commerce's webhook framework is still under development, so production integrations rely on scheduled pulls. ml-connector polls SPS Commerce for new documents using cursor pagination and polls each DATEV import job with backoff until it completes or fails.
- How does ml-connector handle DATEV's strict booking files and missing chart of accounts?
- DATEV accepts finalized bookings only as EXTF CSV import jobs and cannot return its chart of accounts through the API, so GL accounts, tax codes, and cost centers are mapped in advance. ml-connector writes each EXTF file as NFC-normalized UTF-8 with a deterministic filename, which lets DATEV's filename-plus-document-type duplicate check make any resubmission safe. Invoice uploads use a stable GUID with PUT, which DATEV treats as idempotent.
Related integrations
More DATEV integrations
Other systems that connect to SPS Commerce
Connect DATEV and SPS Commerce
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started