Sales tax and VAT obligations for SaaS products vary by jurisdiction and are expanding: the EU VAT Directive (2006/112/EC) applies to digital services sold to EU consumers regardless of where the seller is based, and US economic nexus thresholds mean many SaaS businesses now have multi-state obligations. Failing to collect and remit applicable taxes creates retroactive liability — tax authorities can assess back taxes plus penalties. This is an informational check because the legal picture varies significantly, but ignoring the question entirely is a clear risk signal for any product with meaningful revenue.
Info because tax obligations are jurisdiction-dependent and the check flags unanswered questions rather than definitive violations — but the risk is real for products with non-trivial revenue.
Stripe Tax is the lowest-friction solution: enable it on your checkout sessions and subscription creation, configure your business address in the Stripe Dashboard, and Stripe handles rate lookup and collection automatically.
// Enable automatic tax on checkout sessions
const session = await stripe.checkout.sessions.create({
automatic_tax: { enabled: true },
customer: customerId,
line_items: [{ price: priceId, quantity: 1 }],
mode: 'subscription',
})
// And on subscription creation directly:
await stripe.subscriptions.create({
customer: customerId,
items: [{ price: priceId }],
automatic_tax: { enabled: true },
})
If you've consciously decided not to collect tax (e.g., B2B sales where the customer self-remits), document that decision in docs/compliance/tax-policy.md so it's visible to auditors.
ID: saas-billing.financial-data.tax-calculation
Severity: info
What to look for: Determine whether the application collects and remits sales tax or VAT. Look for Stripe Tax integration (automatic_tax: { enabled: true } in checkout sessions or subscription creation), TaxJar or Avalara integration, manual tax rate configuration in Stripe, or a documented decision to not collect tax. Also look for whether the pricing page shows tax-inclusive or tax-exclusive pricing.
Pass criteria: Count every checkout session and subscription creation call. At least 1 of: (a) Stripe Tax is enabled on checkout sessions and subscription creation, (b) a third-party tax service is integrated, (c) tax rates are manually configured in Stripe for applicable regions, or (d) there is evidence that the team has consciously decided not to collect tax (documented, or a market where this is legally acceptable for the product type). This is an informational check — tax obligations vary significantly by jurisdiction.
Fail criteria: No tax configuration of any kind exists, there is no indication the team has addressed this question, and the product is likely subject to tax collection obligations (SaaS sold to consumers or businesses in applicable jurisdictions).
Skip (N/A) when: No billing integration detected.
Detail on fail: "No tax configuration found — Stripe Tax not enabled, no third-party tax service, no tax rates configured. Depending on your markets, you may have tax collection obligations." (Note: this is informational — flag it for review, not as a definitive compliance failure)
Remediation: Stripe Tax is the simplest path to automated tax calculation and is included in Stripe's standard pricing:
// Enable automatic tax in checkout sessions
const session = await stripe.checkout.sessions.create({
automatic_tax: { enabled: true },
customer: customerId,
// ... other options
})
For subscriptions, enable it in the subscription creation as well. Note that Stripe Tax requires your business address to be configured in Stripe Dashboard and may require additional setup for some jurisdictions.