# DATEV EXTF file validator

Check a DATEV import file before you import it: header, columns and every booking line, with a plain-language message per line. For Buchungsstapel and Debitoren/Kreditoren files, free and entirely in your browser.

## What gets checked

The main rules from DATEV's “DATEV-Format” description (format version 13 for Buchungsstapel, 5 for Debitoren/Kreditoren), with the mistake that usually breaks them.

| Field | Rule | Typical mistake |
| --- | --- | --- |
| Line 1 (header) | Starts with "EXTF";700; then format category, name and version, 31 fields in all | Header missing because the file was saved from Excel without its first line |
| Berater / Mandant | Berater 1001 to 9999999, Mandant 1 to 99999, matching the target client | Old number after a change of Steuerberater or fiscal year |
| Sachkontenlänge | 4 to 8, exactly as set for the client | Export writes 4, the client uses 5 |
| Datum vom / bis | YYYYMMDD, within one calendar year and the fiscal year | Batch spanning New Year (#REW04404) |
| Umsatz (amount) | Positive, decimal comma, two decimals, no thousands separator | 12.50 instead of 12,50, or a minus sign instead of H |
| Soll/Haben | S or H, relative to the account | Empty, or + / - |
| Konto / Gegenkonto | Digits only; ledger accounts as long as the account length, customer/supplier accounts one digit longer | Six-digit customer accounts with an account length of 4 |
| BU-Schlüssel (tax key) | One to four digits, quoted, not on automatic accounts | Key 3 on top of automatic account 8400 |
| Belegdatum | DDMM; the year comes from the header | A full date, or 501 instead of 0501 because Excel dropped the zero |
| Belegfeld 1 | At most 36 characters: letters, digits and $ & % * + - / | Invoice number with a space, dot or underscore |
| Buchungstext | At most 60 characters, quoted | An unquoted semicolon in the text shifts every field after it |
| Encoding | Windows-1252 (ANSI); UTF-8 only with a BOM | “Bürobedarf” arrives as “BÃ¼robedarf” |
| Debitoren/Kreditoren | Account exactly one digit longer than the account length, addressee type 0/1/2, valid IBAN | Name in the company column while the addressee type says person |

## What the tool can't check

The tool knows the format rules, not your client file in DATEV. These errors only show up on import:

- Whether an account exists in the client. If it doesn't, DATEV reports “Konto existiert nicht”.
- Whether Berater and Mandant belong to your firm's data. Otherwise it's “Beraternummer nicht gefunden”.
- Whether a tax key fits the account and the transaction for tax purposes. The tool only knows DATEV's standard automatic accounts.
- Whether the period is already locked, or your Steuerberater has already closed the month.

## Run the checks in your own code

Building DATEV exports yourself? The same rules come as an open-source library for TypeScript and JavaScript. It validates files, writes Buchungsstapel and returns the messages in German and English. MIT licence, no dependencies. [@seamless-engineering/datev-extf on npm](https://www.npmjs.com/package/@seamless-engineering/datev-extf)

*As of 25 September 2026. Based on DATEV's “DATEV-Format” description on developer.datev.de, DATEV's own format checker and the import messages in the DATEV Hilfe-Center. This check doesn't replace a test import. DATEV releases and import paths (Stapelverarbeitung, Buchungsdatenservice) differ in the details.*

## Frequently asked questions

### What is the EXTF format?

EXTF is the marker at the start of every file in “DATEV-Format”, the CSV format third-party software uses to hand bookings and master data to DATEV. Line 1 is a header with Berater, Mandant, fiscal year, account length and period, line 2 holds the column headings, and each line after that is one booking or one account.

### Why does DATEV say there's no data when the file is full?

Usually the header doesn't match the client: a different Berater or Mandant number, a different fiscal year, or a period outside the client's data. File names that don't start with EXTF_ and files without the header line also keep the batch import from offering the file.

### Which encoding does a DATEV import file need?

The default is Windows-1252 (also called ANSI or ISO-8859-1). DATEV Rechnungswesen only reads UTF-8 when the file starts with a byte order mark (BOM). Without it, umlauts turn into the wrong characters.

### Why is the document date only four digits?

In a Buchungsstapel the Belegdatum is DDMM, day and month. The year comes from the period in the header, which is also why one batch can't span New Year.

### Is my file uploaded?

No. The file is read and checked in your browser and nothing is sent anywhere. We only count that the tool was used, not what's in the file.

## DATEV integrations where this matters

- [Shopify ↔ DATEV](https://seamless.engineering/integrations/shopify-datev/): Shopify DATEV integration
- [Amazon ↔ DATEV](https://seamless.engineering/integrations/amazon-datev/): Amazon DATEV integration
- [WooCommerce ↔ DATEV](https://seamless.engineering/integrations/woocommerce-datev/): WooCommerce DATEV integration
- [Stripe ↔ DATEV](https://seamless.engineering/integrations/stripe-datev/): Stripe DATEV integration
- [PayPal ↔ DATEV](https://seamless.engineering/integrations/paypal-datev/): PayPal DATEV integration
- [JTL ↔ DATEV](https://seamless.engineering/integrations/jtl-datev/): JTL DATEV integration
- [lexoffice ↔ DATEV](https://seamless.engineering/integrations/lexoffice-datev/): lexoffice DATEV integration
- [sevDesk ↔ DATEV](https://seamless.engineering/integrations/sevdesk-datev/): sevDesk DATEV integration

## Request a scoping call

Your DATEV export breaks on something different every month? We build and operate the integration that creates batches, checks them and only hands them to your Steuerberater once they go through. Fixed-price scoping quote within 48 hours.

- Email: hello@seamless.engineering
- Contact form: https://seamless.engineering/#contact
