E-Rechnung 2025: What Every German B2B Company Must Do Now
Practical guide to E-Rechnung compliance in Germany: XRechnung, ZUGFeRD, Peppol, DATEV integration, and what B2B companies must implement before the mandate expands.
Summary
Germany's E-Rechnung mandate requires structured electronic invoices for B2B transactions. Companies must implement XRechnung or ZUGFeRD output, validate incoming invoices, and connect billing systems to ERP and DATEV before enforcement deadlines tighten.
Definition
E-Rechnung (electronic invoice) in Germany means a structured, machine-readable invoice: not a scanned PDF or image. Compliant formats include XRechnung (EN 16931 XML) and ZUGFeRD/Factur-X (PDF with embedded XML). The Wachstumschancengesetz phased mandate requires German B2B companies to receive structured invoices now and issue them on a rolling schedule through 2028.
Why It Matters Now
The compliance window is narrower than most finance teams realize. Receiving capability was mandatory from January 2025. Issuance deadlines follow turnover thresholds: large companies first, then the Mittelstand. Companies that treat this as a PDF problem will fail audits, delay payment cycles, and break ERP integrations.
The operational impact extends beyond legal compliance. Structured invoices enable straight-through processing: automatic matching against POs, faster approval workflows, and direct DATEV import without manual data entry. Companies that implement E-Rechnung properly reduce AP processing cost by 60–80% per invoice.
Format Decision Matrix
| Format | Best For | Recipient Requirement |
|---|---|---|
| XRechnung 3.0 | Public sector, large enterprise AP | XML-only processing |
| ZUGFeRD 2.1 (EN 16931) | B2B Mittelstand | PDF reader + XML parser |
| Peppol BIS Billing 3.0 | Cross-border EU trade | Peppol Access Point |
Most Mittelstand companies should standardize on ZUGFeRD 2.1 EN 16931 for outbound invoices and accept both XRechnung and ZUGFeRD inbound.
Technical Architecture
Billing System → Invoice Generator → Validation (KoSIT) → Delivery
↓ ↓
Stripe/ERP Peppol / Email / Portal
↓
DATEV Export (CSV/XML)
Outbound Invoice Generation
Your billing system must emit structured data, not just render PDFs. Here is a minimal Node.js example using @e-invoice-eu/core patterns:
const { createZugferdInvoice } = require('./invoice-builder');
async function generateInvoice(billingEvent) {
const invoice = {
invoiceNumber: billingEvent.number,
issueDate: billingEvent.created,
seller: {
name: 'Muster GmbH',
vatId: 'DE123456789',
address: { street: 'Mainzer Landstraße 1', city: 'Frankfurt', postalCode: '60329', country: 'DE' }
},
buyer: {
name: billingEvent.customer.name,
vatId: billingEvent.customer.taxId,
address: billingEvent.customer.address
},
lineItems: billingEvent.lines.map(line => ({
description: line.description,
quantity: line.quantity,
unitPrice: line.unitAmount / 100,
taxRate: line.taxRate,
taxCategory: 'S' // Standard rate
})),
paymentTerms: { dueDate: billingEvent.dueDate, iban: 'DE89370400440532013000' }
};
const zugferdPdf = await createZugferdInvoice(invoice);
await validateAgainstKoSIT(zugferdPdf);
return zugferdPdf;
}
Validation Before Send
Every outbound invoice must pass KoSIT validation. Run validation in CI/CD, not just at send time:
# Using KoSIT validation tool
java -jar validationtool-1.5.0-standalone.jar \
-s scenarios.xml \
-o validation-report \
-h invoice.xml
Reject and quarantine invoices that fail validation. Sending invalid structured invoices creates liability and breaks recipient AP automation.
Inbound Processing
Receiving E-Rechnungen requires an intake pipeline, not an email inbox:
- Intake channel: Peppol Access Point, dedicated email (ZUGFeRD attachments), or supplier portal
- Format detection: Identify XRechnung XML vs ZUGFeRD embedded XML
- Validation: KoSIT rules + business rules (VAT ID, PO match)
- ERP import: Map to DATEV/Lexware/SAP fields
- Archive: GoBD-compliant storage with hash verification
import xml.etree.ElementTree as ET
from pypdf import PdfReader
def extract_invoice_data(file_path, mime_type):
if mime_type == 'application/xml':
return parse_xrechnung(ET.parse(file_path).getroot())
elif mime_type == 'application/pdf':
reader = PdfReader(file_path)
embedded = reader.attachments.get('ZUGFeRD-invoice.xml')
if embedded:
return parse_zugferd(ET.fromstring(embedded[0]))
raise ValueError(f'Unsupported format: {mime_type}')
DATEV Integration
DATEV Unternehmen online accepts structured invoice data via DATEVconnect or CSV import. Map these fields precisely:
| E-Rechnung Field | DATEV Field | Notes |
|---|---|---|
| BT-1 Invoice number | Belegnummer | Must be unique per vendor |
| BT-2 Issue date | Belegdatum | ISO 8601 → DD.MM.YYYY |
| BT-31 Seller VAT ID | USt-IdNr. | Validate via BZSt |
| BT-109 Tax total | USt-Betrag | Per tax category |
| BT-112 Total incl. VAT | Bruttobetrag | Must reconcile |
Export from your invoice store nightly. Do not rely on manual CSV creation: field mismatches cause DATEV import failures that block month-end close.
Stripe and SaaS Billing Gap
Stripe Invoicing, Chargebee, and most SaaS billing tools output PDF invoices. None produce compliant XRechnung or ZUGFeRD natively as of 2026. Your options:
- Middleware: Tools like InvoicePortal, Storecove, or custom Node/Python services
- ERP-first: Generate invoices in Lexware/DATEV and sync payment status back to Stripe
- Hybrid: Stripe handles payment collection; ERP generates compliant invoice on
invoice.finalizedwebhook
// Stripe webhook handler
app.post('/webhooks/stripe', async (req, res) => {
const event = stripe.webhooks.constructEvent(req.body, req.headers['stripe-signature'], secret);
if (event.type === 'invoice.finalized') {
const stripeInvoice = event.data.object;
await erpService.createEInvoice({
externalId: stripeInvoice.id,
customerId: stripeInvoice.customer,
lines: stripeInvoice.lines.data,
tax: stripeInvoice.tax
});
}
res.sendStatus(200);
});
Implementation Checklist
- Audit current invoice flow: Map every outbound and inbound path
- Choose formats: ZUGFeRD 2.1 for B2B outbound; accept XRechnung + ZUGFeRD inbound
- Select validation tooling: KoSIT validator in CI pipeline
- Build or buy generation layer: Do not depend on PDF-only billing
- Connect DATEV/ERP: Automated import, not manual re-keying
- Train AP team: Structured invoices skip manual entry: update approval workflows
- Test with top 10 vendors/customers: Validate end-to-end before mandate deadlines
Common Mistakes
- Sending PDF invoices labeled as "E-Rechnung": a PDF without embedded XML is not compliant
- Skipping KoSIT validation and discovering failures at the recipient
- Building intake as email-only without format detection
- Ignoring reverse charge and intra-EU VAT rules in structured fields (BT-151 tax category codes)
- Storing invoices without GoBD-compliant immutability (timestamped, hash-verified archives)
Peppol and Cross-Border Delivery
For customers requiring Peppol delivery (increasingly common with large German enterprises), register as a Peppol participant or use a certified Access Point provider. Peppol wraps XRechnung-compatible UBL documents for network delivery:
async function deliverViaPeppol(invoice, recipientPeppolId) {
const ublDocument = convertToUbl(invoice);
await peppolAccessPoint.send({
document: ublDocument,
recipientId: recipientPeppolId, // e.g. '9930:DE123456789'
processId: 'urn:fdc:peppol.eu:2017:poacc:billing:01:1.0',
documentType: 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2'
});
}
Maintain a registry mapping customer VAT IDs to Peppol endpoint IDs. Not every B2B customer uses Peppol, but enterprise procurement portals increasingly require it.
Timeline and Enforcement
| Date | Requirement | Who |
|---|---|---|
| Jan 2025 | Must receive E-Rechnungen | All companies |
| Jan 2027 | Must issue E-Rechnungen | Turnover > €800K |
| Jan 2028 | Must issue E-Rechnungen | All B2B |
BaFin and tax authorities focus initially on public sector and large enterprise compliance. Mittelstand enforcement ramps through 2027–2028. Early implementation avoids rushed vendor selection and untested integrations under deadline pressure.
Business Outcomes
Companies that implement E-Rechnung as structured data infrastructure: not a compliance checkbox: reduce invoice processing time from 15 minutes to under 2 minutes per document, eliminate manual DATEV entry errors, and accelerate month-end close by 2–3 days.
Related: DATEV Integration with Stripe · E-Rechnung integration
Need help connecting your finance systems?
Fynteq connects E-Rechnung, DATEV, Stripe, ERP and bank workflows for German SMEs and growing digital businesses. Frankfurt-based, fixed-scope implementation.
Frequently Asked Questions
Related articles
DATEV Integration with Stripe: A Technical Guide for German Companies
Technical guide to integrating Stripe payment data with DATEV: webhook sync, Buchungsstapel export, tax mapping, GoBD compliance, and reconciliation automation.
How to Automate Accounts Payable with n8n and AI (German Mittelstand Guide)
Step-by-step guide to AP automation for German Mittelstand using n8n workflows, AI invoice extraction, E-Rechnung processing, and DATEV integration.
How to Automate Payment Reconciliation
Learn how to automate payment reconciliation: matching provider settlements to internal records, exception handling, and finance-ready reporting for SaaS and FinTech.
Finance integration insights
Practical guides on E-Rechnung, DATEV, Stripe, reconciliation and finance automation for teams in Germany.
By downloading, you agree to our privacy policy. We use your email to send the PDF and follow up on related services. Or contact info@fynteq.com.