Sample e-invoices put to the test: 810 XRechnung and ZUGFeRD files against the current rules

Anyone building an e-invoice starts from a sample: the KoSIT test suite, a FeRD package, a library's test folder, or the "XRechnung sample to download" a software vendor offers. We collected 1,396 such files from 19 publishers and checked them on 19 October 2026 with the official KoSIT validator against the current rule set.

Run · Rule set v2026-08-31

Collected and checked with the official KoSIT validator by Dmytro Yalanskyi, NormAPI.

At a glance

810
distinct files their publisher offers as a valid sample
548
pass the current rule set
102
are rejected without any rule applying: an outdated version, an unknown identifier, or not an e-invoice at all
22 / 53
official ZUGFeRD samples: KoSIT and the validation report FeRD ships with them reach different verdicts

Why this exists

A sample gets copied, not checked. Whoever uses it as a template inherits its mistakes — and its version. KoSIT changes the rule set about twice a year; a sample that was valid when published stays online when the rules move.

So the question is not whether a sample was once valid, but whether it passes today — at a recipient who validates with the current rule set.

Method

Collected on 19 October 2026: the official KoSIT test suite as the control group, FeRD's current ZUGFeRD sample invoices (release 2.5.2 of 22 September 2026), CEN's EN 16931 examples, the sample folders of earlier FeRD packages (1.0 to 2.4) as they sit publicly on GitHub, the test files of Mustangproject and horstoeko, and the downloads offered on 12 vendor and guide sites. Freely downloadable files only; anything behind a form is not included.

Only files their publisher offers as a valid sample are counted — by folder name (correct, examples, Beispiele), README, or the wording on the download page. Deliberately broken test files are recorded separately and appear in none of the numbers below. Files with identical content (same SHA-256) count once.

Checked with KoSIT validator 1.6.3 and the XRechnung configuration v2026-08-31, the same one NormAPI's validator uses; for ZUGFeRD PDFs, the embedded XML. Every file gets exactly one verdict, and the verdict says why. A file declaring XRechnung 2.1 is rejected without a single rule being checked — so it counts as outdated, not as "failed the rules".

The official ZUGFeRD samples: two checks, two verdicts

FeRD ships a validation report with every sample invoice of release 2.5.2, produced with Valitool (DWC and validool UG). On 31 of the 53 invoices the KoSIT validator reaches the same verdict; on 22 it does not.

FeRD's report calls 19 EXTENDED invoices "GÜLTIGE eRechnung" (a valid e-invoice); the KoSIT configuration recommends rejecting them. It checks EXTENDED against the EN 16931 core rules, and EXTENDED permits elements those rules exclude — most often a formatted date (CII-DT-027), which FeRD's report does not object to. That is not necessarily a defect in the file. A recipient that validates with the KoSIT configuration rejects it all the same.

FeRD's report calls 3 invoices "FEHLERHAFT" (faulty); the KoSIT validator accepts them.

CaseProfileKoSITFeRD reportKoSIT codes
E22_01_RechnungsUebertragungEN 16931acceptfaulty
X01_01_600700800900_Dauermietrechnung_unbefristet_EXTENDEDrejectvalidCII-DT-027
X01_02_600700801000_NK_Abrechnung_zur_DauermietrechnungEXTENDEDrejectvalidCII-DT-027
X01_03_7600700800900_Dauermietrechnung_KorrekturRE_EXTENDEDrejectvalidCII-DT-027
X02_01_SubInvoiceLines_Buero_Material_Bsp3__EXTENDEDrejectvalidBR-CO-10, BR-S-08
X03_01_Abschlagsrechnung_SubInvoiceLine_u_LV_NrEXTENDEDrejectvalidBR-22, BR-23, BR-26, BR-27, BR-CO-04, BR-CO-10, CII-DT-021, CII-SR-439
X04_01_Sammelrechnung_3_BestellungenEXTENDEDrejectvalidCII-DT-027
X05_03_einfach_Bau_Schlussrechnung_mit_Steuer_ZusammenstellungEXTENDEDrejectvalidcvc-complex-type.2.4.a
X06_01_Fallschutz-Set_SubInvoiceLine_Bsp5EXTENDEDrejectvalidCII-DT-027
X07_01_FremdwaehrungEXTENDEDacceptfaulty
X08_01_Herkunftsland_Zolltarif-Nummer__HS___UNSPSC__TST___eCl_ss__STQEXTENDEDrejectvalidCII-DT-027
X09_01_InnergemeinschLieferungMehrereBestellungenEXTENDEDacceptfaulty
X11_01_KostenrechnungEXTENDEDrejectvalidBR-CO-12, BR-S-08
X12_01_Maschinen-Serial_NR__BT-X-307EXTENDEDrejectvalidCII-DT-027
X13_01_ProjektabschlussrechnungEXTENDEDrejectvalidcvc-complex-type.2.4.a
X15_01_steuerfreie_Innergemeinschaftliche_LieferungEXTENDEDrejectvalidCII-DT-027
X16_01_Stornogutschrift_zu_REEXTENDEDrejectvalidCII-DT-027
X16_02_Rechnung_für_Storno_Gutschrift_EXTENDEDrejectvalidCII-DT-027
X17_01_SubInvoiceLines_Hardware_Bsp2EXTENDEDrejectvalidBR-CO-10, BR-S-08
X18_01_SubInvoiceLines_Kaffee_Bundle_Set_Bsp4___EXTENDEDrejectvalidBR-CO-04, BR-CO-10
X19_01_WarenrechnungEXTENDEDrejectvalidBR-CO-12, BR-S-08
X20_01_SubInvoiceLines_Buero_Material_Bsp3__EXTENDEDrejectvalidBR-CO-10, BR-S-08

So the BDI's question — whose validation result is the authoritative one — already arises with the official samples. For senders: use EXTENDED only when the recipient explicitly processes it, and test with the recipient's check. ZUGFeRD EXTENDED or XRechnung?

The rules move, the samples stay

23 files fail exactly one rule: CII-SR-465, "only one seller contact point (BT-41)". The CEN rules flag it as a warning; KoSIT raised it to an error in release v2026-08-31, published on 2 September 2026. Mostly affected are the XRECHNUNG samples of FeRD packages 2.3 to 2.4.0 (2024–2025), as they sit on GitHub. They were valid when published. FeRD's current package 2.5.2 no longer contains XRECHNUNG samples.

Similarly BR-CL-25: several EN 16931 samples from FeRD packages 2.0 to 2.2 give the electronic address with scheme 9958, the former identifier for the Leitweg-ID. The current EAS code list no longer carries it; 0204 replaced it.

55 files declare a version the current rule set no longer knows: XRechnung 1.2 to 2.3 (29) and ZUGFeRD 1.0 (26). They are rejected without any rule being checked — with a message that names no rule.

The samples offered for download on vendor and guide sites

12 sites offer 57 sample files between them. 48 of those pass. On 4 sites at least one file does not; what exactly is listed below the table.

getzugferd.com
Two files are MINIMUM and BASIC WL — labelled by the page itself as a booking aid, not a complete invoice. All the others pass.
zugferd-minimum-beispiel.pdf — not an e-invoice (MINIMUM/BASIC WL)zugferd-basic-wl-beispiel.pdf — not an e-invoice (MINIMUM/BASIC WL)
hyreka.de
The XRechnung sample is rejected: the buyer reference BT-10 is missing (BR-DE-15), and so are the buyer's and seller's electronic addresses (PEPPOL-EN16931-R010, -R020). The ZUGFeRD sample passes.
XRechnung-Beispiel.xml — rejected: business rules (BR-DE-15, PEPPOL-EN16931-R010, PEPPOL-EN16931-R020)
orgaMAX
The XRechnung sample (UBL) and the ZUGFeRD sample (a PDF carrying XRechnung in CII) are both rejected with PEPPOL-EN16931-R008: an empty element. In the XML file it is the buyer's electronic address, <cbc:EndpointID schemeID="EM"/>.
orgaMAX_Beispielrechnung_XRechnung.xml — rejected: business rules (PEPPOL-EN16931-R008)orgaMAX_Beispielrechnung_ZUGFeRD.pdf — rejected: business rules (PEPPOL-EN16931-R008)
PDFlib
The files date from 2019/2020. The ZUGFeRD 1.0 sample is a version the rule set no longer carries; the ZUGFeRD 2.0 sample spells its profile identifier with "EN16931" in capitals, which the check does not recognise. The Factur-X sample passes.
zugferd1_invoice_pdfa3b.pdf — outdated versionzugferd2_invoice_pdfa3b.pdf — unknown profile identifier
solytics.de
Both XRechnung samples declare "urn:cen.eu:en16931:2017#compliant#urn:xoev-de:kosit:standard:xrechnung_3.0": the namespace of versions up to 2.x with the version number 3.0. No version defines that identifier, so the check does not recognise the files as XRechnung and rejects them without applying a rule. For 3.0 it reads "…#compliant#urn:xeinkauf.de:kosit:xrechnung_3.0".
xrechnung-beispiel-ubl.xml — unknown profile identifierxrechnung-beispiel-cii.xml — unknown profile identifier

Profiles that are not e-invoices

41 sample files are ZUGFeRD MINIMUM or BASIC WL. The German Federal Ministry of Finance lists ZUGFeRD from version 2.0.1 as a permitted format, excluding exactly these two profiles; they carry only an invoice's basic data. The KoSIT configuration has no scenario for them. They are no template for an invoice, though they are a fair example of the profile — when labelled as such.

Every publisher

A file counts once per publisher. Where the same publisher offers a file more than once (as the German and English edition of a package, say), it counts once.

PublisherFilespassrejected after checkingoutdated / not an e-invoicenot judged
KoSIT XRechnung-Testsuiteofficial8686000
FeRD ZUGFeRD 2.5.2 Beispielrechnungenofficial105683700
CEN/TC 434 EN 16931 examplesofficial3326034
ZUGFeRD-csharp (FeRD 1.0–2.4)library42727386680
ZUGFeRD/corpuslibrary191105224222
Mustangprojectlibrary198191
horstoeko/zugferdlibrary32100
rechnex.dewebsite2020000
getzugferd.comwebsite1210020
einvoicedesk.comwebsite66000
rechnora.dewebsite44000
sevdesk.dewebsite22000
namequick.appwebsite22000
digital-rechnung.dewebsite11000
xrechnung.prowebsite11000
hyreka.dewebsite21100
orgaMAXwebsite20200
PDFlibwebsite31020
solytics.dewebsite20020

Of the rejections after checking, 94 are EXTENDED, where the KoSIT configuration is not the only authoritative tool (see above).

The most frequent reasons outside EXTENDED

Outside EXTENDED, 541 files were checked against a current scenario; 39 of them were rejected. These rules appeared most often in the reports (number of files):

Which samples you can use

What follows if you generate e-invoices

  1. A sample is a snapshot. Re-check your templates and test files after every new KoSIT release — CII-SR-465 invalidated samples on 2 September that had passed until then.
  2. Check the profile identifier first. An outdated or misspelt identifier is rejected without a single rule message; it is the failure easiest to overlook in a report.
  3. EXTENDED only by agreement with the recipient, and tested with the recipient's tool.
  4. MINIMUM and BASIC WL are no template for an invoice.

The data

Every file as one row: publisher, file URL, SHA-256, declared profile, scenario, verdict and rule codes — including the deliberately broken and the unclear files, which the numbers above leave out. With the URL and the checksum every row can be re-checked. Under CC BY 4.0.

All results as CSV

How to cite this measurement

NormAPI (2026). Sample e-invoices put to the test: 810 XRechnung and ZUGFeRD files against the current rules. https://normapi.com/en/study/sample-invoices

A snapshot of one day. When a new KoSIT release appears we repeat the run and carry the date here forward. A correction is recorded as one.

What this measurement does not show

The other measurements: eleven online validators, the same invoice · two validators, 29 documents

Deutsche Fassung

NormAPI provides technical validation, not tax or legal advice.