Skip to content
Rechnungskit
E-invoicing software · made in Germany

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.

No credit card · set up in under an hour · personal onboarding
The gap

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.

Without RechnungskitWith Rechnungskit
Your billing tool only produces a PDF, not an e-invoice under EN 16931 Every subscription payment becomes a ZUGFeRD invoice with your own number automatically
Annual plans deferred by hand into the right periods (pRAP) Service period taken from the subscription, deferred revenue (pRAP) booked in the DATEV export for annual plans
EU VAT for digital services worked out per country yourself The right EU VAT rate per destination country and OSS threshold monitoring
Customers get two invoices if Stripe keeps sending its own GoBD-compliant archive and a finished DATEV export for your tax advisor
How it works

Four steps to a compliant e-invoice.

  1. 01
    Connect your billing
    There 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.
  2. 02
    The subscription becomes an e-invoice
    From 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.
  3. 03
    VAT and OSS
    For 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.
  4. 04
    DATEV and archive
    For 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.

Stripe · with or without Stripe Billing
Who does what?
Keep Stripe BillingRoute 1
Subscription managed byStripe Billing
Payment collected byStripe
InvoiceRechnungskit, as soon as Stripe reports the subscription invoice as paid with line items, VAT rates and service period
Stripe invoice emailsturn off once otherwise your customer gets two invoices
Cancellation, payment methodthrough Stripe
A good fit ifyou already have a Stripe setup running, including usage-based pricing or several line items
Rechnungskit subscriptionsRoute 2
Subscription managed byRechnungskit, through a subscription link checkout.rechnungskit.de/s/…
Payment collected byyour Stripe account or Mollie, card or SEPA no Stripe Billing needed
InvoiceRechnungskit, with every charge
Seats, add-ons, upgradesprorated by the day supplementary invoice under § 31 UStDV, credit note under § 17 UStG
Cancellation, withdrawalcustomer portal with a cancellation button and a withdrawal button § 312k and § 356a BGB
A good fit ifyou sell monthly or annual plans and want subscription, invoice and customer portal in one place
Both routes produce one ZUGFeRD invoice per period with your number range, GoBD archive and DATEV export. More on the first route under Stripe Billing.

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.

Takeover from Stripe Billing
Move over in three steps, with no gap in charges
  1. 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
  2. MapOne subscription product per Stripe pricecreated new and prefilled with name, amount and interval, or mapped to an existing plan
  3. 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
Subscriptions with usage-based pricing, several line items or intervals other than monthly and annual cannot be taken over. They keep running on route 1.

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 checkout · example
From subscription link to first invoice
Example Software GmbH
Team plan, monthly
€29.00 per seat per month
Seats −  3  +
Private person Business
ATU12345678 ✓ verified with the BZSt
Card SEPA Direct Debit
3 × €29.00€87.00
VATReverse charge
Due today€87.00
Order with obligation to pay
  1. Subscription linkCustomer picks plan and seatsThe price is per seat; subtotal and VAT update right away.
  2. Customer typePrivate person or businessAn EU VAT ID is verified with the BZSt (Federal Central Tax Office) and unlocks the reverse charge.
  3. 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.
  4. Every periodCharge and e-invoice, automaticallyWith service period, archived and in the DATEV export, with pRAP for annual plans.
  5. 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.
Example values chosen freely. More on seats, add-ons and changes under subscription billing, all features under subscriptions.

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.

VAT by customer & region · § 3a UStG
Who owes the VAT, and which procedure applies?

Rechnungskit decides this automatically for each invoice, from customer type, country and verified VAT ID. The matrix shows the logic behind it.

B2C · private customer
B2B · business (VAT ID)
🇩🇪 Germany
19% German VAT

A normal domestic supply. You charge German VAT.

19% German VAT

B2B within Germany too: a normal invoice with German VAT, no reverse charge.

🇪🇺 Other EU
OSS above €10,000

Below the threshold German VAT, above it the rate of the customer's country, reported through OSS.

Reverse charge + ZM

Net invoice, the customer accounts for the VAT (§ 3a(2), § 14a(1) UStG). No OSS, but an EC Sales List (ZM).

🌍 Rest of world
no German VAT

For electronically supplied services (§ 3a(5) UStG), the place of supply is the customer's country, so the sale is not taxable in Germany. Check the local rules of the destination country.

no German VAT

Not taxable in Germany, no ZM. Whether the customer owes tax locally depends on local law.

Rule of thumb for builders: B2C in the EU goes through OSS, B2B in the EU through the reverse charge. The two never apply together. Whether your EU customer counts as B2B depends on a valid VAT ID, which Rechnungskit verifies with the BZSt (qualified check).

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

FAQ

As a record for yourself, yes. As an e-invoice, no. Stripe Billing creates PDF invoices without a structured data record. In German B2B business, the structured e-invoice under EN 16931 (for example ZUGFeRD or XRechnung) has been the norm since 2025: every business has had to be able to receive it since then, and you have to issue it for sales from 2027 if your prior-year revenue was above 800,000 euros, otherwise from 2028 (§ 14(2) UStG, § 27(38) UStG). A PDF does not meet that requirement. It also comes without a GoBD archive, German VAT logic or a DATEV export.
Last reviewed:

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
de en