E-invoicing for SaaS: a compliant invoice from every subscription payment
Stripe Billing creates PDF invoices but no e-invoice under EN 16931; for that, Stripe points you to partner apps. Rechnungskit connects to your billing or runs your subscriptions itself. It turns every subscription payment into a GoBD-compliant ZUGFeRD invoice with the correct service period, prepares the DATEV export and keeps track of the OSS threshold for digital services sold in the EU.
A compliant e-invoice with service period for every subscription payment, plus DATEV export and OSS monitoring, without changing anything in Stripe Billing.
Writing invoices is easy. Writing compliant ones is not.
The difference between a PDF and a compliant e-invoice matters at the next tax audit. Rechnungskit closes exactly this gap.
Four steps to a compliant e-invoice.
- 01Connect your billingThere are two routes. With Stripe Billing, your subscription invoices come straight from Stripe. Or you create orders through the API and connect your payment provider, whether that is Stripe, Mollie, PayPal, GoCardless or Unzer. Rechnungskit sets up the webhook automatically.
- 02The subscription becomes an e-invoiceFrom every subscription charge, Rechnungskit reads the line items, VAT rates and service period and creates a full e-invoice under EN 16931 with your own number range. You get a real invoice, not a PDF copy converted into another format.
- 03VAT and OSSFor private customers in the EU, Rechnungskit sets the VAT rate by the place of supply (§ 3a(5) UStG) and monitors the shared €10,000 threshold for digital services and distance sales. Above the threshold, Rechnungskit prepares the OSS return.
- 04DATEV and archiveFor annual plans, the DATEV export books deferred revenue (passive Rechnungsabgrenzung, pRAP) across the months it belongs to. Every document sits in the GoBD-compliant archive, and the booking batch goes to your tax advisor ready to import.
Your billing tool only makes a PDF
Stripe Billing is good at collecting recurring payments. What it issues afterwards, though, is a PDF, not an e-invoice in the German legal sense. Stripe itself points to partner apps for sending e-invoices. In German B2B business, every company has had to be able to receive e-invoices since 2025; you have to issue them for sales from 2027 (with prior-year revenue above 800,000 euros), otherwise from 2028 (§ 27(38) UStG); details on the e-invoicing mandate 2027 page. German bookkeeping is then missing its most important step: turning the subscription payment into a structured, machine-readable document under EN 16931, archiving it to GoBD standards (the German rules for tamper-proof records) and preparing the DATEV export.
Rechnungskit fills that gap. You connect your billing system once, and every subscription charge automatically becomes a ZUGFeRD invoice with your own number range. There are three routes: Stripe Billing as a direct connection, subscriptions run in Rechnungskit with their own subscription link, or your own API, where you create orders and connect the payment provider (Stripe, Mollie, PayPal, GoCardless or Unzer) for matching. In every case we take the line items, VAT rates and service period rather than a finished PDF, so the result is a real invoice and not a converted copy.
Two routes with Stripe, one e-invoice
Whether you keep Stripe Billing or run your subscriptions in Rechnungskit only decides who manages the subscription. Either way, the money goes through your own Stripe account, and every period becomes the same e-invoice with your number range.
You can switch from route 1 to route 2 without contacting your customers. The takeover from Stripe Billing uses the payment mandates already stored in your Stripe account, so your customers do not sign up again or re-enter their card.
- Load subscriptionsRechnungskit reads all subscriptions from Stripeand checks for each one whether it can be taken over, for example monthly or annual with card or SEPA
- MapOne subscription product per Stripe pricecreated new and prefilled with name, amount and interval, or mapped to an existing plan
- Take overThe Stripe subscription ends at the end of the periodThe first charge through Rechnungskit follows at exactly that point, using the existing mandateCustomer notices nothing
What the subscription checkout looks like for your customers
For route 2, every plan gets a shareable subscription link that you can put on your pricing page, in your app or in a newsletter. There, your customer picks the quantity, private person or business, and a payment method. Rechnungskit handles the rest, from the charge to the invoice.
- Subscription linkCustomer picks plan and seatsThe price is per seat; subtotal and VAT update right away.
- Customer typePrivate person or businessAn EU VAT ID is verified with the BZSt (Federal Central Tax Office) and unlocks the reverse charge.
- PaymentCard or SEPA Direct DebitThrough your Stripe or Mollie account, so the money goes straight to you. With a trial, only the mandate is stored.
- Every periodCharge and e-invoice, automaticallyWith service period, archived and in the DATEV export, with pRAP for annual plans.
- After thatCustomer portal and webhooksYour customer changes seats, downloads invoices or cancels on their own. Your app learns about every step by webhook and grants or revokes access.
The service period SaaS depends on
A SaaS subscription is a service delivered over a period of time. Rechnungskit takes the service period (Leistungszeitraum) straight from the subscription charge and writes it on the invoice and, in structured form, into the e-invoice. For an annual plan whose period runs past the invoice month, the DATEV export can book deferred revenue (pRAP, § 250(2) HGB) across the months it belongs to, monthly or by the day and across the turn of the year. This requires that you prepare a balance sheet and that the pRAP account has been set up with your tax advisor; with cash-basis accounting (Einnahmen-Überschuss-Rechnung), no deferral is needed.
SaaS VAT: OSS, reverse charge and non-EU countries
VAT on a software subscription comes down to two questions. Is your customer a private person (B2C) or a business with a VAT ID (B2B)? And are they in Germany, elsewhere in the EU or outside the EU? That gives six cases. The most common mistake is to think OSS applies to everyone, when it only covers B2C. For B2B in the EU, the reverse charge applies instead.
Legal basis of the matrix: § 3a(2) and (5) UStG (place of supply), § 14a(1) UStG (reverse charge note), § 18a UStG (EC Sales List), § 18j UStG (OSS).
How does Rechnungskit know whether a sale is B2C or B2B? From the VAT ID, not the company name. If a VAT ID is present and confirmed by the BZSt in a qualified check, the customer is treated as a business and the sale goes through the reverse charge. Without a VAT ID, or with an unverified one, Rechnungskit treats the sale as B2C and charges VAT. An unclear case becomes a review task, never a silent tax exemption. With Stripe Billing, the VAT ID comes from the tax IDs of your Stripe customer; with your own API, you pass it in the vat_id field of the billing address.
Rechnungskit makes this decision automatically for each invoice. For B2C sales in the EU, it takes the VAT rate per destination country from the EU's TEDB database and monitors the shared €10,000 threshold (including your earlier sales if you switch mid-year) for the OSS return. For B2B sales in the EU, it runs a qualified VAT ID check with the BZSt, issues a net invoice with the reverse charge note and prepares the EC Sales List. The threshold only concerns B2C and is one shared limit for digital services and physical distance sales; there is no extra allowance for SaaS.
One step you must not forget
If you keep using Stripe Billing (route 1), Stripe sends its own invoice email for every subscription payment. If that stays switched on, your customer gets two invoices for the same purchase: Stripe's and the tax-valid one from Rechnungskit. So you turn off Stripe's own invoice emails once. Rechnungskit reminds you about this step right at the Stripe connection and again at go-live, and links to the right place in the Stripe dashboard. The connector page explains how the Stripe integration works in detail.
FAQ
Rechnungskit is not a tax advisory or law firm. This article explains general principles and does not replace advice from a tax advisor (Steuerberater, § 5 StBerG) or a lawyer (§ 3 RDG). Rechnungskit is built for businesses based in Germany and prepares documents, tax rates and bookings automatically. How your specific case is treated remains your decision, ideally together with your tax advisor or a lawyer.
Ready for the e-invoicing mandate?
Create an account, connect your payment provider, check everything in free test mode. Billing starts when you go live.
Try it now