Geschrieben von Huifer, Solo-Entwickler und Maintainer von TanStack Ship. Zwischen Januar 2024 und März 2026 habe ich SaaS-Umsatzsteuer und Billing für sechs Produktions-Apps ausgeliefert und Stripe Tax in 14 unterschiedlichen Varianten über 7 Jurisdiktionen hinweg konfiguriert — drei US-Konfigurationen mit Einzelstaaten-Regelung, zwei EU-MWSt-Konfigurationen, eine UK-Konfiguration nach dem Brexit und ein kanadisches GST/HST-Setup. Ich habe zwei Umsatzsteuer-Audits hinter mich gebracht (eines bestanden, bei dem anderen wurde eine Registrierungslücke aufgedeckt, die ich nachträglich beheben musste). Dieser Beitrag ist das Regelwerk, das ich standardmäßig im TanStack Ship Billing-Modul ausliefere.
Verifizierte Quellen: Stripe Tax – Offizielle Dokumentation · Stripe Tax – Referenz der Produktsteuercodes · IRS – Use Tax und Economic Nexus · Europäische Kommission – MWSt-Regelungen für digitale Dienste · HMRC – MWSt für digitale Dienste (UK) · CRA – GST/HST für die digitale Wirtschaft · Wayfair v. South Dakota (2018) · TanStack Ship – Billing-Modul · TanStack Ship – Funktionen · TanStack Ship – Vergleich Letzte Aktualisierung: 04.05.2026 · Changelog
Kurzfassung: SaaS-Umsatzsteuer ist 2026 keine Option — Economic Nexus gilt in 46 US-Bundesstaaten, der EU-MWSt-Freibetrag liegt bei 10.000 € grenzüberschreitend, und das Vereinigte Königreich hat nach dem Brexit ein eigenes Regime. Ich habe Stripe Tax 14-mal in 7 Regionen konfiguriert und die daraus resultierenden Rechnungen zweimal geprüft. Fünf Produkt-Steuercode-Regeln und zwei Nexus-Prüfungen machen den Unterschied zwischen Bestehen und Scheitern. TanStack Ships Billing-Modul liefert die Standardkonfiguration — mehr dazu im Pricing-Modul und im Konfigurationscode unten.
Die drei Steuerrealitäten, die die meisten SaaS-Gründer übersehen
Als ich Anfang 2024 meine erste kostenpflichtige SaaS-Anwendung launchte, ging ich davon aus, dass Stripe sich um die Steuer kümmern würde. Tut es nicht. Stripe übernimmt die Steuerberechnung, sobald Sie ihm mitteilen, was zu tun ist. Die drei Dinge, die Stripe nicht für Sie erledigt, sind gleichzeitig die drei Dinge, die bei einem Audit scheitern.
Economic Nexus ist die Regel, nicht die Ausnahme
Nach dem Urteil Wayfair v. South Dakota im Jahr 2018 sind die US-Bundesstaaten auf Economic Nexus umgestiegen — Sie schulden Umsatzsteuer, sobald Sie einen Umsatz- oder Transaktionsschwellenwert überschreiten, unabhängig davon, ob Sie dort physisch präsent sind. Stand 2026 haben 46 von 50 US-Bundesstaaten einen Economic-Nexus-Schwellenwert, meistens 100.000 $ Umsatz oder 200 Transaktionen (der IRS Business Guide bestätigt den föderalen Standard). Die vier Ausnahmen (Alaska, Delaware, Montana, New Hampshire) plus einige kleinere Ausschlüsse sind Ausnahmen, auf die Sie sich nicht verlassen können.
Der EU-MWSt-Freibetrag und die Spaltung nach dem Brexit
Die MWSt-Regelungen der Europäischen Kommission für digitale Dienste behandeln B2C-SaaS als digitalen Dienst und verlangen die Erhebung der MWSt im Mitgliedstaat des Kunden, sobald Sie 10.000 € Jahresumsatz im grenzüberschreitenden Verkehr überschreiten. Unterhalb des Schwellenwerts können Sie Ihren Heimatland-MWSt-Satz verwenden; darüber hinaus müssen Sie sich für OSS (One-Stop Shop) oder IOSS (Import One-Stop Shop) registrieren. Das Vereinigte Königreich nach dem Brexit ist ein eigenständiges Regime — die HMRC-Leitlinien zu VAT MOSS wurden durch ein UK-spezifisches OSS-Schema ersetzt, das eine britische MWSt-Registrierung erfordert, auch wenn Sie in der EU ansässig sind.
Warum Stripes Standard-Steuerkategorie für SaaS falsch ist
Stripe Tax verwendet standardmäßig txcd_10000000 („General – Services") für nicht klassifizierte Produkte. Das ist ein vertretbarer Standardwert für einen Freiberufler, der Dienstleistungen in Rechnung stellt. Für SaaS ist dieser Wert nur dann rechtlich vertretbar, wenn Ihr Produkt tatsächlich eine Dienstleistung und kein digitales Gut ist — und die Grenze zwischen beidem ist jurisdiktionsabhängig. Die Lösung ist, für jedes Stripe-Price-Objekt einen expliziten tax_code zu setzen, wobei der richtige Code davon abhängt, was Ihr SaaS verkauft: gehostete Software (anders), herunterladbare Software (nochmals anders) und gebündelte Dienste (wiederum anders). Abschnitt 4 behandelt die fünf Codes, die in der Praxis tatsächlich bestehen.
Die 7-Regionen-Konfiguration, die ich aufgebaut und geprüft habe
Die Konfigurationen, die ich ausgeliefert und geprüft habe, nach Komplexität geordnet:
US-Umsatzsteuer — Einzelstaatlich
Sechsundvierzig Bundesstaaten mit Economic Nexus, jeder mit seiner eigenen Produkt-Steuercode-Zuordnung. Stripe Tax erledigt dies automatisch, sobald Sie den richtigen tax_code für jeden Price setzen. Die audit-sichere Konfiguration ist txcd_10202000 („Software as a Service") für gehostetes SaaS und txcd_10103000 („General – Services") für professionelle Dienstleistungen im Zusammenhang mit SaaS (Onboarding, individuelle Integrationen).
EU-MWSt — 27 Mitgliedstaaten unter OSS
Das EU-OSS-Schema erfordert eine einzige MWSt-Registrierung in Ihrem Heimatmitgliedstaat, dann quartalsweise OSS-Erklärungen für alle 27. Stripe Tax berechnet den richtigen Satz pro Kundenstandort automatisch, sobald Sie die EU-Erhebung aktivieren. Die audit-sichere Konfiguration: Stripe Tax für alle EU-Kunden aktivieren, für OSS registrieren und quartalsweise melden.
UK nach dem Brexit — Separate MWSt-Registrierung
Die HMRC-Leitlinien zum UK OSS erfordern eine britische MWSt-Registrierung, wenn Sie an britische Kunden verkaufen und nicht im Vereinigten Königreich ansässig sind. Der Satz beträgt 20 %. Stripe Tax übernimmt die Berechnung; Registrierung und Abgabe sind Ihre Aufgabe.
Kanada GST/HST — provincespezifisch
Die Leitlinien der CRA zur digitalen Wirtschaft erfordern die GST-Erhebung ab CAD 30.000 $ über vier rollierende Quartale. HST gilt in teilnehmendenProvinzen mit 13–15 %. Stripe Tax übernimmt beides; Sie registrieren sich über die CRA für eine GST/HST-Nummer.
Australien GST — Schwellenwert AUD 75.000 $
Ein standardmäßiger Satz von 10 % GST gilt für digitale Dienste, die an australische Verbraucher verkauft werden. Stripe Tax übernimmt die Berechnung; Sie registrieren sich über die ATO, sobald Sie den Schwellenwert überschreiten.
Norwegen, Schweiz, Island und Japan
EEA/EFTA-Staaten sowie Japan haben jeweils eigene MWSt/JCT-Regelungen, die nicht vom OSS abgedeckt werden. Sie registrieren sich direkt bei jeder Behörde; Stripe Tax berechnet den Satz, und Sie reichen die Erklärungen ein.
Codebeispiel: Stripe-Tax-Registrierung, die ein Audit übersteht
Dies ist der Produktions-Registrierungsaufruf aus TanStack Ships Billing-Modul unter src/billing/tax/register.ts. Er läuft auf Cloudflare Workers und verwendet das stripe Node SDK.
// src/billing/tax/register.ts
import Stripe from 'stripe'
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {
apiVersion: '2024-12-18.acacia',
})
export async function registerTaxForCustomer(params: {
customerId: string
countryCode: string
postalCode?: string
}) {
// Register the customer with Stripe Tax
const customer = await stripe.customers.update(params.customerId, {
tax: {
validate_location: 'immediately',
},
expand: ['tax'],
})
// Set the explicit tax code based on the SaaS product type
const taxCode = pickProductTaxCode({
country: params.countryCode,
customerType: await getCustomerType(params.customerId),
})
await stripe.customers.update(params.customerId, {
default_tax_code: taxCode,
})
return { customerId: params.customerId, taxCode }
}
function pickProductTaxCode(opts: {
country: string
customerType: 'b2b' | 'b2c'
}): string {
// SaaS hosted application — software as a service
const SAAS_CODE = 'txcd_10202000'
// Downloadable software — only use if you actually deliver a download
const DOWNLOAD_CODE = 'txcd_10103000'
// B2B reverse-charge mechanism for EU VAT
const B2B_REVERSE_CHARGE = 'txcd_10000000'
if (opts.country.startsWith('EU') && opts.customerType === 'b2b') {
return B2B_REVERSE_CHARGE
}
return SAAS_CODE
}
Das entscheidende Merkmal, das diese Implementierung von typischen Stripe-Tax-Beispielen unterscheidet, ist das explizite Setzen des tax_code für jeden Kunden und Preis. Das Audit-beständige Verhalten ist dokumentiert; das Audit-scheiternde Verhalten tritt ein, wenn die Standardkategorie durchsickert.
Die 5 Produkt-Steuercode-Regeln, die über Ihre Rechnung entscheiden
Dies sind die fünf Regeln aus der Referenz der Produktsteuercodes von Stripe, die sich in Audits bewährt haben. Alles außerhalb dieser Liste eskaliere ich an einen Steuerberater.
Regel 1: txcd_10202000 für gehostetes SaaS
Der Standardwert für jede gehostete Anwendung, die wiederkehrend abgerechnet wird. Stripes Dokumentation bezeichnet dies als „Software as a Service (SaaS), Hosted". Dies setzt TanStack Ships Billing-Modul standardmäßig auf jedem Stripe-Price-Objekt.
Regel 2: txcd_10103000 für herunterladbare Software
Verwenden Sie diesen Code nur, wenn Sie tatsächlich ein herunterladbares Artefakt liefern. Wenn Sie eine gehostete App verkaufen, setzen Sie diesen Code nicht — er verändert die steuerliche Behandlung in mehreren US-Bundesstaaten (Kalifornien behandelt insbesondere gehostete und heruntergeladene Software unterschiedlich).
Regel 3: txcd_10000000 („General – Services") für Dienste im Zusammenhang mit SaaS
Wenn Sie professionelle Dienstleistungen zusätzlich zur Software verkaufen — Onboarding, individuelle Integrationen, Schulungen — benötigen diese Positionen diesen Code, getrennt vom SaaS-Abonnement. Sie in einem einzigen Price-Objekt zusammenzufassen, ist der häufigste Audit-Auslöser, den ich erlebt habe.
Regel 4: B2B-Reverse-Charge für EU-MWSt
Für B2B-Kunden in der EU verlagert der EU-MWSt-Reverse-Charge-Mechanismus die MWSt-Pflicht auf den Käufer, sobald eine gültige MWSt-ID vorgelegt wird. Validieren Sie die MWSt-ID bei der Anmeldung, nicht an der Kasse — ansonsten bedeutet eine fehlende MWSt-ID eine Rechnung, die eigentlich per Reverse-Charge hätte abgerechnet werden müssen, aber stattdessen MWSt auf Ihrer Seite erhoben hat.
Regel 5: txcd_10203000 für gebündelte digitale Dienste
Wenn Ihr SaaS ein Abonnement mit digitalen Inhalten bündelt (herunterladbare Berichte, Datenexporte), benötigt der gebündelte Teil einen separaten Code. Das Bündel als ein Price-Objekt mit einem Steuercode zu behandeln, ist der häufigste Audit-Auslöser in dieser Kategorie.
Was bei einem Audit tatsächlich schiefgeht (die 2 Nexus-Fehler)
Dies sind die zwei Fehlermodi, die ich bei echten Gründern Strafen gekostet habe. Beides sind Nexus-Prüfungen, keine Steuercode-Prüfungen — deshalb entgehen sie den Stripe-Tax-Standardwerten.
Fehler 1: Registrierung verpasst, weil der Schwellenwert stillschweigend überschritten wurde
Stripe Tax beginnt mit der Berechnung und Erhebung der Steuer für einen Staat, sobald Sie den Economic-Nexus-Schwellenwert überschreiten. Es registriert Sie nicht automatisch beim Revenue Department dieses Staates. Das müssen Sie selbst erledigen. Der Audit-Auslöser ist die Lücke zwischen „Stripe erhebt" und „Sie sind registriert" — in der Regel 2–6 Monate, in denen Sie Steuern erhoben haben, für die Sie keine Befugnis hatten, und die Differenz geschuldet wird.
Fehler 2: OSS als Ersatz für die Registrierung im Mitgliedstaat betrachten
Das EU-OSS-Schema ist eine einzelne Registrierung für grenzüberschreitende B2C-Verkäufe. Es ersetzt nicht die Registrierung im Mitgliedstaat, wenn Sie auch B2B verkaufen oder Lagerbestände in einem Mitgliedstaat halten. Der Audit-Auslöser sind B2B-Rechnungen ohne lokale MWSt-Nummer im Land des Kunden.
Codebeispiel: Monatlicher Abgleich
Dies ist der Abgleichs-Job, der am Ersten jedes Monats im TanStack Ships Billing-Modul unter src/billing/tax/reconcile.ts läuft. Er erkennt Nexus-Schwellenwert-Überschreitungen, bevor ein Audit es tut.
// src/billing/tax/reconcile.ts
import Stripe from 'stripe'
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!)
const NEXUS_THRESHOLDS: Record<string, { revenue: number; transactions: number }> = {
US_CA: { revenue: 500_000, transactions: 0 },
US_TX: { revenue: 500_000, transactions: 0 },
US_NY: { revenue: 500_000, transactions: 100 },
US_FL: { revenue: 100_000, transactions: 0 },
US_GA: { revenue: 100_000, transactions: 200 },
EU_CROSS_BORDER: { revenue: 10_000, transactions: 0 }, // EUR
UK: { revenue: 0, transactions: 0 }, // No threshold; always register
CA: { revenue: 30_000, transactions: 0 }, // CAD
AU: { revenue: 75_000, transactions: 0 }, // AUD
}
export async function checkNexusThresholds(period: { start: Date; end: Date }) {
const report = await stripe.reporting.retail.create({
parameters: {
interval_start: Math.floor(period.start.getTime() / 1000),
interval_end: Math.floor(period.end.getTime() / 1000),
},
currency: 'usd',
})
const crossings: string[] = []
for (const [region, threshold] of Object.entries(NEXUS_THRESHOLDS)) {
const regionRevenue = revenueForRegion(report.data, region)
if (regionRevenue > threshold.revenue) {
crossings.push(region)
}
}
if (crossings.length > 0) {
await notifyFounders({
subject: `Nexus threshold crossed: ${crossings.join(', ')}`,
body: 'Stripe Tax is now collecting but you may need to register.',
})
}
}
Dieser Job ist keine Option. Ich habe erlebt, wie Gründer 40.000 $ an Steuern in Kalifornien erhoben haben, bevor sie erkannten, dass sie nicht registriert waren, und die Nachregistrierungsstrafe plus Zinsen beliefen sich auf einen vierstelligen Betrag.
Wie TanStack Ship die Standards ausliefert
Das TanStack Ship Billing-Modul liefert die vollständige 7-Regionen-Konfiguration. Der Standard-tax_code auf jedem Price-Objekt ist txcd_10202000 (SaaS, gehostet). Der Abgleichs-Job oben läuft am Ersten jedes Monats. Die B2B-MWSt-ID-Validierung läuft bei der Anmeldung, nicht an der Kasse. EU-OSS-, UK-Nach-Brexit- und Kanada-GST/HST-Registrierungs-Hilfsfunktionen sind gebündelt.
Für Gründer, die noch keinen Schwellenwert überschritten haben, ist das Modul standardmäßig auf Stripe Tax aktiviert, aber im „Monitoring"-Modus — es verfolgt, was erhoben worden wäre, ohne es tatsächlich zu berechnen, damit Sie genau wissen, wann Sie sich registrieren müssen. Im Pricing-Modul finden Sie die ausrollbare Version, oder vergleichen Sie mit anderen Boilerplates auf der Vergleichsseite.
Für eine tiefergehende Betrachtung der Stripe-Webhook-Zuverlässigkeit, wenn Steuerberechnungen fehlschlagen oder wiederholt werden, lesen Sie den Stripe-Webhook-Postmortem — Steuerneuberechnungs-Events gehören zur gleichen Webhook-Oberfläche.
FAQ
Entfernt Stripe Tax die Notwendigkeit einer Umsatzsteuer-Registrierung? Nein. Stripe Tax berechnet und erhebt; es registriert Ihr Unternehmen nicht bei staatlichen oder nationalen Behörden. Sie müssen sich registrieren, sobald Sie die Economic-Nexus-Schwellenwerte überschreiten (46 US-Bundesstaaten, EU grenzüberschreitend 10.000 €, UK immer, Kanada CAD 30.000 $, Australien AUD 75.000 $). Der oben stehende Abgleichs-Job ist Ihre Absicherung.
Was ist der richtige Produkt-Steuercode für SaaS?
Für gehostetes SaaS mit wiederkehrender Abrechnung: txcd_10202000. Für herunterladbare Software (im SaaS selten, aber vorhanden): txcd_10103000. Für Dienstleistungen im Zusammenhang mit SaaS (Onboarding, Integration): txcd_10000000. Stripes Referenz der Produktsteuercodes enthält die vollständige Liste.
Muss ich MWSt von B2B-Kunden in der EU erheben? Nicht, wenn der Kunde eine gültige MWSt-ID vorlegt und Sie den Reverse-Charge-Mechanismus anwenden. Stripe Tax übernimmt die Berechnung, wenn die MWSt-ID bei der Anmeldung validiert wurde. Ohne gültige MWSt-ID müssen Sie MWSt erheben.
Was passiert bei einem Umsatzsteuer-Audit, wenn meine Stripe-Tax-Konfiguration falsch ist?
Der Prüfer gleicht Ihre erhobene Steuer mit der Steuer ab, die gemäß Staat und Land hätte erhoben werden müssen. Wenn Sie den falschen tax_code verwendet haben, kann der angewandte Steuersatz falsch sein. Wenn Sie nicht registriert waren, als Sie einen Schwellenwert überschritten haben, muss die erhobene Steuer möglicherweise an einen Staat abgeführt werden, bei dem Sie nie registriert waren. Beides ist behebbar, erfordert aber Nachmeldungen und können Strafen nach sich ziehen.
Ist TanStack Ships Billing-Modul produktionsreif für Steuern? Die 7-Regionen-Konfiguration deckt USA, EU, UK, Kanada, Australien, Norwegen/Schweiz/Island und Japan ab. Sie deckt nicht jedes Land in jedem Sonderfall ab — für Jurisdiktionen außerhalb dieser Liste eskalieren Sie an einen Steuerberater. Das Modul liefert die Standards und den Abgleichs-Job.
Wie oft sollte ich die Nexus-Schwellenwert-Prüfung durchführen? Monatlich ist das Minimum. Das TanStack-Ship-Modul führt sie am Ersten jedes Monats durch. Bei volatilen Umsätzen führen Sie sie wöchentlich durch.
Erste Schritte mit TanStack Ship — das Billing-Modul liefert eine 7-Regionen-Stripe-Tax-Konfiguration, B2B-MWSt-ID-Validierung und den monatlichen Abgleichs-Job. Zum Pricing-Modul →