DATEV and GoCardless integration
DATEV runs accounting and tax for German and Austrian businesses. GoCardless collects recurring and one-off bank debit payments. Connecting the two turns each collected payment, payout, and refund into a DATEV booking without re-keying from the GoCardless dashboard. ml-connector verifies every GoCardless webhook, maps customers to the right debtor accounts, and submits the bookings as the EXTF file jobs DATEV expects. The cash you collect in GoCardless lands in your DATEV ledger on the schedule you set.
What moves between them
The flow runs from GoCardless into DATEV. When a payment is confirmed or paid out, or a refund is paid, ml-connector reads the event and posts a booking into DATEV as an EXTF CSV job, debiting or crediting the bank and debtor accounts with the GoCardless reference as the document number. Payout events drive the reconciliation booking, with payout items enumerated so each payment, fee, and chargeback in a payout is accounted for. Customer master data maps to DATEV debtor accounts so each booking lands on a real party. Bookings are write-only in DATEV, so ml-connector never reads ledger entries back into GoCardless; the cadence follows your webhook events plus a scheduled sweep for anything missed.
How ml-connector handles it
ml-connector stores both credential sets encrypted: the GoCardless access token and the DATEV OAuth client id, secret, and refresh token. It verifies the GoCardless Webhook-Signature HMAC-SHA256 against the raw request body before anything is posted, and returns 401 on a mismatch so GoCardless keeps retrying rather than marking the endpoint healthy. DATEV access tokens last only 900 seconds, so it refreshes using the client id alone, never the secret. Because DATEV bookings are asynchronous, it submits each EXTF CSV job and polls the job status with exponential backoff and jitter until the import completes or fails. GoCardless amounts are integers in the smallest currency unit, so they are converted to DATEV decimal amounts with the currency code, and the debit or credit indicator is set from the event type. EXTF filenames are made stable and deterministic so a retry is de-duplicated by DATEV rather than posted twice, and document types are fetched per client before any PDF upload since they are client-specific. Because the standard chart of accounts is not readable from DATEV, the GL and tax accounts are mapped during setup. Every record carries a full audit trail and can be replayed if a job fails.
A real-world example
A subscription software company in Germany with around 60 staff bills several thousand customers by SEPA direct debit through GoCardless and keeps its books in DATEV with its tax advisor. Before the integration, a bookkeeper exported the GoCardless payout report each week and hand-keyed the collected payments, fees, and failed-payment reversals into DATEV, and reconciling a single payout against the bank statement took most of an afternoon. With DATEV and GoCardless connected, each confirmed payment and each payout posts into DATEV as a booking the moment GoCardless reports it, with fees and chargebacks split out from the payout items. The advisor opens a period that is already reconciled, and the weekly re-keying is gone.
What you can do
- Post confirmed GoCardless payments and refunds into DATEV as EXTF booking jobs with the payment reference as the document number.
- Turn each GoCardless payout into a reconciliation booking, with payout items split into payments, fees, and chargebacks.
- Map GoCardless customers to DATEV debtor accounts so every booking lands on a real party.
- Verify the GoCardless webhook HMAC-SHA256 signature before posting, and return 401 on a mismatch so retries continue.
- Bridge the GoCardless access token with DATEV OAuth and refresh the 15-minute DATEV token automatically.
Questions
- Which direction does data move between DATEV and GoCardless?
- Data moves from GoCardless into DATEV. Confirmed payments, payouts, and paid refunds become DATEV bookings, and GoCardless customers map to DATEV debtor accounts. DATEV bookings are write-only and cannot be read back, so ml-connector never writes ledger entries into GoCardless.
- Does the integration use GoCardless webhooks or polling?
- It uses GoCardless webhooks as the primary path, since GoCardless pushes signed events the moment a payment confirms, fails, or pays out. Each batch is verified with HMAC-SHA256 before any booking is created. A scheduled sweep backs up the webhooks so nothing is missed, because DATEV itself never pushes and must be polled.
- How are GoCardless payment amounts written into DATEV bookings?
- GoCardless amounts are integers in the smallest currency unit, such as cents for euros, so ml-connector converts them to DATEV decimal amounts and includes the currency code. The debit or credit indicator is set from the event type, and the GL and tax accounts are mapped during setup because DATEV does not expose its chart of accounts by API.
Related integrations
More DATEV integrations
Other systems that connect to GoCardless
Connect DATEV and GoCardless
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started