
Belege
Synthetic German invoices with pixel-box ground truth
Building document-extraction training data for the German market hits a wall fast: real invoices are full of personal data, so GDPR blocks collecting a training corpus from actual customer documents, and the public English-language datasets (SROIE, FUNSD) don't have a single German tax construct in them. Two of Germany's own invoice types carry zero VAT line by law: Section 19 UStG Kleinunternehmer and Section 13b reverse charge. A model trained on English or generic invoices expects a tax row on every document and hallucinates one where German law says there should not be one.
I wrote a generator that produces German invoices and credit notes (Rechnungen/Gutschriften) with the tax variants that actually break models -- Section 19, Section 13b, Gutschrift (negative amounts), mixed 19%/7% rates on one document. Each comes out as a photographed-quality image (perspective warp, lighting falloff, sensor noise, scan skew) plus a JSON label with a pixel box for every field: invoice number, both dates, IBAN, VAT ID, every line item split into description/quantity/price/total.
40 documents free on Hugging Face: https://huggingface.co/datasets/laterrr/belege-de-invoices-sample
Full 1000-document set is 14 EUR (launch price): https://j4zz.eu/belege/
Honest limits: everything is generated, not collected. Company names, amounts and IBANs are invented, checksummed against a bank code the Bundesbank has never assigned, so nothing can collide with a real account. No GDPR exposure for me or the buyer, but it's synthetic data, not a real-world sample -- I say so on the page too.
163 downloads of the free sample on Hugging Face so far, no sales yet. This is the first time I've posted it somewhere that isn't Hugging Face's own passive discovery -- curious whether anyone here has hit the same German-invoice-training-data wall.
About
GDPR blocks training on real German invoices, and public datasets like SROIE/FUNSD have no German tax constructs in them. I generate invoices with the tax cases that break models, plus a pixel-box label for every field.

Comment