VibeWeek
Home/Grow/Tax & VAT Handling: Collect, Remit, and File Without Going to Jail or Bankrupting Margins

Tax & VAT Handling: Collect, Remit, and File Without Going to Jail or Bankrupting Margins

⬅️ Growth Overview

Tax Strategy for Your New SaaS

Goal: Ship a tax-handling system that complies with global rules — collect VAT in EU, sales tax in US states where you have nexus, GST in Canada / Australia / India, etc. — without becoming a tax accountant. Use Stripe Tax (or Paddle/Lemon Squeezy as merchant of record), surface tax in the checkout UX, validate VAT numbers for B2B reverse charge, file returns where required, and reconcile carefully. Avoid the failure modes where founders skip tax entirely (eventual tax-authority knock; back-taxes + penalties), under-collect (eat the difference; margins crushed), or DIY a tax engine (months of engineering when Stripe Tax is one toggle).

Process: Follow this chat pattern with your AI coding tool such as Claude or v0.app. Pay attention to the notes in [brackets] and replace the bracketed text with your own content.

Timeframe: Stripe Tax (or merchant-of-record provider) shipped in 1-2 days. Tax IDs in checkout + invoices in week 1. Returns / filing setup in week 2-4. Quarterly review baked in.


Why Most Founder Tax Handling Is Broken

Three failure modes hit founders the same way:

  • Skip tax entirely. Founder ships subscriptions; charges customer the displayed price; doesn''t collect tax. Two years later, EU tax authority sends a letter: customer X paid €500 across 24 months — VAT was due of €100; pay it now plus penalties. Multiply by hundreds of customers; founder learns they owe back-taxes that exceed quarterly revenue.
  • Under-collect (eat the difference). Founder shows price as "$50/mo"; charges $50; customer owes 9% sales tax in California; founder pays the tax out of revenue. 9% margin drop on every Cali customer. Compounds across states / countries.
  • DIY a tax engine. Founder builds their own tax-calculation. Months of engineering for: rate tables, jurisdiction logic, threshold tracking, return filing. Stripe Tax does this for ~0.5% of transaction; the build cost dwarfs the revenue from doing it themselves.

The version that works is structured: pick a tax engine (Stripe Tax / equivalent) OR a merchant-of-record (Paddle / Lemon Squeezy), surface tax clearly in checkout, collect tax IDs for B2B, file returns where required, and reconcile per quarter.

This guide assumes you have already done Trial-to-Paid, Pricing Page, and Refunds & Chargebacks, and have a payment provider (Stripe / Paddle / Polar / Lemon Squeezy).


1. Decide: Direct vs Merchant of Record (MoR)

The biggest tax-handling decision. Made early; hard to switch.

Help me decide: direct billing or merchant of record (MoR)?

The two paths:

**Path A: Direct billing (Stripe / Polar)**

- You are the merchant of record
- You collect tax (Stripe Tax handles calculation)
- You file returns in jurisdictions where you have nexus
- More flexibility; cheaper transaction fees
- More operational burden

**Path B: Merchant of record (Paddle / Lemon Squeezy)**

- The MoR is the legal seller
- They collect tax; they file returns
- You get a single payout; tax is their problem
- Higher transaction fees (5%+ typically vs Stripe''s 2.9%)
- Less operational burden

**Decision criteria**:

**Pick Path A (direct) when**:
- ARR is meaningful (>$500K) and saving 2-3% on transaction fees matters
- You have or will hire finance / accounting capacity
- You sell primarily in the US (sales-tax less complex than VAT)
- You want pricing flexibility / custom contracts

**Pick Path B (MoR) when**:
- You sell globally (EU, Asia, etc.) and don''t want VAT compliance burden
- Solo founder or small team
- ARR <$500K (transaction-fee delta is small in absolute dollars)
- You hate tax / accounting and would skip without MoR

**The hybrid pattern**:

Some products use:
- Direct billing for US customers (simpler tax; lower fees)
- MoR for international customers (let Paddle handle EU VAT)

Implementing this is harder; usually not worth it until $5M+ ARR.

**For most indie SaaS in 2026**:

- Solo founder / global sales: Lemon Squeezy (MoR; simple)
- Small team / US-heavy: Stripe + Stripe Tax
- Mid-market: Stripe + Stripe Tax + dedicated finance hire

For my product:
- ARR
- Geographic mix
- Operational capacity
- Tolerance for tax complexity

Output:
1. The path chosen
2. The provider
3. The reasoning
4. The transition trigger if you switch later

The biggest unforced error: picking direct billing without realizing the EU VAT compliance burden. A solo founder selling to 200 EU customers across 15 countries needs to file in each — or use OSS (One-Stop-Shop) which simplifies but still requires quarterly filings. MoR eliminates this entirely.


2. Use Stripe Tax (If Direct)

Stripe Tax is the closest thing to a "checkbox solution" for tax. Enable it.

Configure Stripe Tax.

The pattern:

**Enable in Stripe Dashboard**:

1. Stripe Dashboard → Tax
2. Configure registrations:
   - For each US state where you have nexus: register; provide registration number
   - For EU: register for OSS (One-Stop-Shop) for B2C; provide VAT number
   - For other countries: register where needed
3. Configure tax behavior on products:
   - "Inclusive" (price includes tax) or "Exclusive" (tax added at checkout)
   - Most B2B SaaS: exclusive (e.g., "$100/mo + tax")
4. Enable on products/prices:
   - Per Stripe product: tag as "tax-collected"
   - Stripe Tax calculates per transaction

**Pricing**:

- Stripe Tax fee: 0.5% of transaction (in addition to standard Stripe fees)
- Caps at certain volumes
- Free for the first $100K of taxable transactions per year

**What Stripe Tax handles**:

- Real-time tax-rate calculation per jurisdiction
- Determines nexus thresholds (warns when you''re crossing into a new state)
- VAT validation (checks customer''s VAT number with EU systems)
- Reverse-charge for B2B (customer''s VAT number = no VAT collected; customer self-assesses)
- Includes/excludes tax appropriately on invoices
- Tax reports for filing

**What Stripe Tax doesn''t handle**:

- Filing returns (it generates the reports; you / your accountant file)
- Registration in jurisdictions (you do this)
- Determining nexus (it warns; you act)
- 1099-K reporting (you handle)
- US state-specific exemptions (limited)

**Critical implementation rules**:

1. **Register in jurisdictions BEFORE collecting tax there.** Collecting tax without registration is illegal in some jurisdictions.
2. **Track nexus thresholds.** Most US states have $100K-$500K revenue or 100-200 transaction thresholds; cross them and you must register.
3. **Use Stripe Tax''s warnings.** "You may be approaching nexus in [state]" — don''t ignore.
4. **Invoice line items must show tax.** Customer needs to see what was collected for what jurisdiction.

**Don''t**:
- Skip Stripe Tax to save 0.5% (the 0.5% is much cheaper than DIY)
- Trust Stripe Tax to handle every edge case (consult an accountant for complex cases)
- Forget to file returns (Stripe collects; you remit)

Output:
1. The Stripe Tax config
2. The list of jurisdictions registered
3. The nexus-monitoring process
4. The accountant relationship

The single biggest tax-handling lift: enabling Stripe Tax + a $100/mo accountant relationship. Stripe Tax handles 95% of mechanical work; the accountant handles the 5% of judgment calls (registration timing, return filing, audits). Together they''re much cheaper than the DIY route.


3. Or: Use a Merchant of Record (Paddle / Lemon Squeezy)

If you''re going MoR, the integration shape is different.

Configure a merchant of record.

The pattern (Lemon Squeezy / Paddle):

**Setup**:

1. Sign up; complete onboarding (some merchant approval required)
2. Connect your domain
3. Configure products in their dashboard
4. Use their checkout flow / API

**What MoR handles**:

- Customer payment
- Tax collection across all jurisdictions globally
- VAT/GST/sales-tax registration in all required jurisdictions
- Tax filing in all jurisdictions
- Currency conversion
- Refunds / chargebacks
- Invoices / receipts (tax-compliant)

**You handle**:

- Product pricing and packaging
- Customer onboarding / support
- Subscription management (some MoRs do this; some defer to you)
- Receiving payouts (single bill from MoR; in your home currency)

**Pricing**:

- Lemon Squeezy: 5% + 50¢ per transaction
- Paddle: 5%-7% + 50¢ + 50¢ rapid-payout fee
- Polar: 4% + 40¢ for direct billing through them

Compared to Stripe direct (2.9% + 30¢ + 0.5% Stripe Tax = 3.4% + 30¢):

- MoR adds ~1.6-3.6% in fees
- For solo founders selling globally: usually worth it
- For mid-market US: usually not

**Critical implementation rules**:

1. **Document customer-facing**: invoice from MoR, not from you.
2. **Refund through MoR**: not direct.
3. **Subscription updates through MoR**: customer portal lives there.
4. **Customer can email MoR for billing questions**: brief them.

**Limitations**:

- Some customers prefer direct billing (large enterprise might require an MSA with you, not the MoR)
- Less flexibility on custom contracts
- Currency / FX is the MoR''s problem (good for you; sometimes weird for the customer)

**Don''t**:
- Run BOTH MoR and direct billing for the same product without clear separation
- Hide that you''re using a MoR (customer sees it on the invoice)
- Switch MoRs frequently (each switch is a customer-facing change)

Output:
1. The MoR provider chosen
2. The setup steps
3. The customer-facing communication
4. The customer-support handoff (who handles billing questions)

The biggest predictor of MoR success: clearly explaining to customers that the MoR is the seller of record on receipts. Customers see "Paddle.net" or "Lemon Squeezy" as the merchant on their credit-card statement; if they can''t connect that to your product, they file disputes. Communicate; explain.


4. Surface Tax in Checkout UX

Tax appears at checkout. Make it clear.

Design the checkout tax UX.

The pattern:

**For B2C (consumer / individual)**:

- Show pre-tax price prominently: "$100/mo"
- Show tax line in cart: "Tax (CA 9%): $9.00"
- Show total: "Total: $109/mo"
- After payment: receipt shows breakdown

Don''t surprise the customer with tax on the receipt.

**For B2B (companies)**:

- Same as B2C, plus:
- Field for VAT number / Tax ID (optional but encouraged)
- If valid VAT number: reverse charge applies (no VAT collected; "VAT reverse charge applies to this invoice")
- Field for company name / billing address (different from end-user contact)

**The tax-ID field**:

- For EU customers: VAT number (validated via VIES API; Stripe Tax does this automatically)
- For US customers: usually no field needed (sales tax applies regardless of B2B status in most states)
- For Canadian: GST/HST number
- For Australian: ABN
- For Indian: GSTIN

**Show jurisdiction logic**:

- Customer enters address (or IP-detected)
- Tax line updates dynamically
- "Your location requires VAT/sales tax" if applicable

**For tax-exempt customers** (rare; non-profits, governments):

- "Are you tax-exempt?" checkbox
- Upload exemption certificate
- Manual review process
- Mark customer as tax-exempt in CRM/billing

**On invoices**:

Per [trust center](../../../LaunchWeek/content/4-convert/trust-center-security-page.md) requirements (legal), invoices need:
- Your business name and address
- Customer name and address
- Invoice number, date
- Line items with tax rates per jurisdiction
- Total tax collected
- Your VAT/Tax registration number (where applicable)
- Customer''s VAT number (B2B reverse charge)

Stripe Tax / MoR generate these automatically.

**Don''t**:
- Hide tax until receipt
- Show tax-inclusive pricing without disclosing
- Forget to validate VAT numbers (keeps you compliant)

Output:
1. The pre-tax / post-tax pricing display
2. The tax-ID field flow
3. The exemption-handling process
4. The invoice template

The single biggest checkout-conversion impact: showing tax before the customer commits. Surprise tax at the end of checkout drops conversion 10-30% in EU/CA. Show it upfront; they''re going to pay it anyway.


5. Track Nexus Thresholds

In the US, "nexus" = obligation to collect sales tax in a state. Cross thresholds = register or face penalties.

Help me track nexus.

The thresholds (US states, varies):

- **Economic nexus**: $100K-$500K of revenue OR 100-200 transactions in the state per year
- **Physical nexus**: office / warehouse / contractor in the state
- **Marketplace nexus**: sell through a marketplace (Etsy, Amazon)
- **Click-through nexus**: certain types of affiliate referrals

**For SaaS specifically**:

- States that tax SaaS: 20+ US states (varies; updates yearly)
- States that don''t tax SaaS: California, Florida, Virginia (currently)
- VAT in EU: applies to all SaaS sales

**Stripe Tax''s nexus warnings**:

Stripe Tax tracks per-state revenue and warns when you approach thresholds:
- "You''re at 80% of nexus threshold for [state]"
- "You''ve exceeded threshold; consider registering"

**The registration process**:

1. State''s Department of Revenue website
2. File registration form
3. Receive sales tax registration number
4. Provide to Stripe Tax
5. Stripe begins collecting and remitting

**For EU**:

- OSS (One-Stop-Shop) for B2C: register in your home country (or Ireland if non-EU); file quarterly through OSS portal; covers all EU
- B2B: reverse charge applies if customer has valid VAT number; no VAT collected
- For >€10K in EU sales: OSS registration required

**For other countries**:

- Canada GST/HST: register if >$30K CAD in sales
- Australia GST: register if >$75K AUD
- India GST: register if any digital service sales (no minimum)
- Each requires periodic filing

**The "should I register early?" question**:

- Pros: clean compliance from day 1; no back-tax scramble
- Cons: filing burden; small accounting cost

For most indie SaaS:
- Register in the EU via OSS once you have any EU customers (low overhead; high compliance value)
- Register in US states as you cross thresholds
- Register in other major markets (UK, Canada, Australia) as revenue justifies

**Don''t**:
- Wait for the tax authority letter (back-taxes + penalties hurt)
- Over-register prematurely (filing burden)
- Forget that nexus is per-state in US (each is its own beast)

Output:
1. The nexus-tracking spreadsheet
2. The registration timeline
3. The threshold-monitoring process
4. The accountant relationship for filings

The biggest tax-failure pattern: "I''ll deal with it when I have time." A founder with $200K ARR who hasn''t registered anywhere accumulates back-tax liability quietly. The cost of fixing 12 months of missed filings is much higher than registering as you cross each threshold.


6. File Returns on Schedule

Collecting tax is half the job. Filing returns is the other half.

Set up filing.

The pattern:

**For US states**:

- Frequency varies (monthly / quarterly / annual depending on volume)
- File via state DOR website
- Pay via state portal
- Stripe Tax provides a "tax report" with the data needed
- Most states have no fee for filing

**For EU OSS**:

- Quarterly filing through your home-country OSS portal
- Single filing covers all 27 EU member states
- Stripe Tax / Paddle / Lemon Squeezy provide the data
- File within 20 days of quarter end

**For other countries** (Canada, UK, Australia, etc.):

- Each has its own portal and frequency
- Usually quarterly

**Tools**:

- **Stripe Tax** generates filing-ready reports
- **TaxJar / Avalara** automate filing in many US states
- **Accountant** handles complex jurisdictions

**Costs**:

- TaxJar / Avalara: $50-300/mo + per-filing fees
- Accountant: $200-500/quarter for review
- Self-file: free; takes time

**The "should I outsource filing?" question**:

- Few states (<5): self-file is OK
- Many states (5+): outsource via TaxJar or accountant
- International: usually outsource (each country has weird rules)

**Critical implementation rules**:

1. **Track filing deadlines.** Late = penalties.
2. **Keep records for 7 years.** Audits happen.
3. **Reconcile collected vs filed.** Stripe Tax data should match what you remit.
4. **Have an accountant review quarterly.** Cheap insurance.

**Don''t**:
- Miss filing deadlines (penalties)
- File late returns without paying penalties (compounds)
- Forget non-tax-related filings (annual reports, franchise tax in some states)

Output:
1. The filing calendar
2. The tools / accountants used
3. The reconciliation process
4. The records-retention policy

The biggest hidden cost: the time tax compliance takes when you''re a solo founder. Hours each quarter of filing across multiple jurisdictions adds up. Either outsource ($300-1000/mo) or use MoR (let them handle it). DIY at scale is expensive in founder hours.


7. Handle Special Cases

Tax has edge cases. Plan for them.

The edge case checklist.

**Edge case 1: Customer changes location mid-subscription**

- Subscription started in Texas (no SaaS tax); customer moves to California (taxes SaaS)
- New tax applies on next renewal
- Communicate proactively

**Edge case 2: Refund crosses tax period**

- Customer paid in Q1; refunded in Q3
- Tax was already remitted in Q1 filing
- Q3 filing claims refund of remitted tax
- Stripe Tax handles automatically; verify

**Edge case 3: VAT number invalid**

- Customer provides VAT number; VIES validation fails
- Stripe Tax flags; you decide:
  - Charge VAT (safer)
  - Reject VAT number; ask customer to verify
- Don''t silently apply reverse charge with invalid VAT

**Edge case 4: Currency conversion + tax**

- Customer pays in EUR; you''re USD-based
- Tax calculated in customer''s currency
- Reconcile FX impact at filing time

**Edge case 5: Tax-exempt entity (university, government)**

- Customer claims exemption
- You require exemption certificate
- Mark account exempt in billing
- Periodic re-verification

**Edge case 6: B2B reseller / partner**

- Customer is a SaaS reseller; not the end user
- May qualify for resale exemption
- Requires resale certificate
- Region-specific rules

**Edge case 7: Free trial → paid (taxable transition)**

- Free trial: no tax (no transaction)
- First paid charge: tax applies
- Trigger: Stripe Tax handles automatically

**Edge case 8: Annual prepay + monthly add-ons**

- Customer prepays annual; mid-year adds usage-based fees
- Each transaction taxed separately
- Stripe Tax handles per-transaction

**Edge case 9: Audit from tax authority**

- State / country requests records
- Provide: transactions in jurisdiction, tax collected, returns filed
- Have an accountant / lawyer respond
- Don''t ignore (fines compound)

**Edge case 10: Customer demands tax refund post-filing**

- Customer disputes tax that was correctly collected
- If correct: explain; refund tax only if remitting authority refunds
- If incorrect: investigate and adjust

Output:
1. Handling per edge case
2. The audit-response runbook
3. The exemption-verification process

8. Reconcile Quarterly

Every quarter, verify: did we collect what we should have? Did we remit what we collected?

Quarterly tax reconciliation.

**The reconciliation process**:

1. Pull tax-collected report (Stripe Tax / MoR)
2. Pull tax-remitted report (filings made)
3. Compare:
   - Total collected this quarter
   - Total remitted this quarter
   - Adjustments (refunds, corrections)
   - Outstanding (held for next filing)
4. Investigate any discrepancies

**Common discrepancies**:

- **Collected > remitted**: held for next filing OR forgot to file
- **Remitted > collected**: overpaid (rare); request refund from authority
- **Tax differs from rate**: jurisdiction rate change you missed

**The accountant review**:

Quarterly: have your accountant verify:
- All collected matches filed
- Records support all returns
- No new jurisdictions hit nexus
- No registration lapses

**Records to keep**:

- Tax-collected reports per quarter
- Tax-filed copies
- Tax-paid receipts
- VAT-number validations
- Exemption certificates

**Audit preparation**:

Even if not audited, organize:
- All records by quarter
- Easy to retrieve by jurisdiction
- 7-year retention minimum

**Don''t**:
- Skip reconciliation ("the numbers will work out")
- Miss accountant review
- Forget to update for rate changes (states update quarterly)

Output:
1. The quarterly reconciliation template
2. The accountant''s checklist
3. The records-retention system
4. The audit-readiness review

The biggest invisible debt: untracked tax discrepancies that compound. A 2% under-collection per quarter for 3 years = significant back-tax liability. Reconcile early; correct quickly.


9. Decide on Pricing Display

Show tax pre-pricing? Post-pricing? Inclusive vs exclusive?

Help me design pricing display.

The patterns:

**Pattern A: Tax-exclusive pricing (B2B default)**

- Show "$100/mo" on pricing page
- Tax added at checkout: "$100 + tax"
- Standard for B2B SaaS in US

Pros: clean pricing comparison; tax is "their problem"
Cons: surprise at checkout if customer in high-tax jurisdiction

**Pattern B: Tax-inclusive pricing (B2C / EU default)**

- Show "$109/mo (incl. VAT)"
- All-in price; tax baked into displayed price
- Standard for B2C in EU (legally required for some jurisdictions)

Pros: no surprises; conversion-friendly
Cons: pricing varies by customer location; harder to compare

**Pattern C: Adaptive pricing display**

- Detect customer location (IP / country selector)
- Show appropriate format: exclusive for US/B2B; inclusive for EU/B2C

Pros: best UX per audience
Cons: more complex; can''t cache pricing pages

**For most indie B2B SaaS in 2026**: Pattern A (exclusive) for the US-facing site; Pattern B (inclusive) for EU-facing.

**Legal requirements**:

- EU consumer law: B2C must show inclusive prices
- US: no requirement for inclusive
- UK: similar to EU

**Implementation**:

If using Stripe Tax:
```ts
// Set product tax_behavior
product.update({ tax_behavior: 'exclusive' }) // or 'inclusive'

If using MoR (Paddle/Lemon Squeezy): they handle the display logic.

The pricing-page transition:

  • For US-targeting: show exclusive on pricing page; checkout handles tax addition
  • For EU-targeting: show inclusive
  • Pricing page can have a country selector / detect location

Don''t:

  • Mismatch pricing-page display from checkout (creates surprise)
  • Skip the pre-tax estimate ("$100 + tax depending on your location")
  • Use inclusive without complying with local laws (it''s mandatory in some jurisdictions)

Output:

  1. The pricing display strategy
  2. The legal compliance check per market
  3. The Stripe Tax / MoR config
  4. The pricing-page logic

---

## 10. Quarterly Review

Tax compliance rots. Quarterly review keeps it healthy.

Quarterly tax review.

Compliance:

  • All jurisdictions current? Any new nexus crossings?
  • Filings up to date?
  • Reconciliation clean?

Cost:

  • Tax compliance cost (Stripe Tax fees + accountant + tools)
  • Compare to revenue impact

Customer impact:

  • Tax-related support tickets?
  • Pricing complaints in high-tax markets?

Operational:

  • Records organized?
  • Accountant relationship healthy?
  • Any audits pending?

Strategic:

  • New markets to enter? (Each adds tax obligations.)
  • Considering MoR transition?

Output:

  • Compliance snapshot
  • 1-2 fixes
  • 1 process improvement

---

## What "Done" Looks Like

A working tax-handling system in 2026 has:

- A documented choice: direct billing (Stripe Tax) or MoR (Paddle / Lemon Squeezy)
- Active registrations in jurisdictions where required
- Stripe Tax (or MoR) calculating and collecting at checkout
- VAT number validation for B2B reverse charge
- Tax-line on invoices and receipts
- Filing schedule on calendar
- Accountant relationship for review and complex cases
- Quarterly reconciliation process
- Records retained for 7 years
- Customer-facing UX (pricing page + checkout) compliant with applicable laws

The hidden cost of weak tax handling: **back-tax + penalties from a jurisdiction you didn''t register in.** A $50K bill from a tax authority is normal-shape after 2 years of unregistered selling. The infrastructure (Stripe Tax: 0.5%; MoR: 5%) is much cheaper than the audit. Pay the small fee; sleep well.

---

## See Also

- [Trial-to-Paid](trial-to-paid-chat.md) — first taxable transaction
- [Pricing Page](pricing-page-chat.md) — pricing display
- [Refunds & Chargebacks](refunds-chargebacks-chat.md) — tax on refunds
- [Dunning & Failed Payments](dunning-failed-payments-chat.md) — tax preserved on retries
- [Multi-Tenant Data Isolation](multi-tenancy-chat.md) — workspace billing
- [Audit Logs](audit-logs-chat.md) — billing changes logged
- [Account Deletion & Data Export](account-deletion-data-export-chat.md) — tax records retention
- [Payment Providers](https://www.vibereference.com/auth-and-payments/payment-providers) — Stripe / Polar / Paddle / Lemon Squeezy
- [Subscription Billing Providers](https://www.vibereference.com/auth-and-payments/subscription-billing-providers) — full billing engines
- [Stripe](https://www.vibereference.com/auth-and-payments/stripe) — Stripe Tax deep-dive
- [Stripe Customer Portal](https://www.vibereference.com/auth-and-payments/stripe-customer-portal) — customer self-serve

[⬅️ Growth Overview](README.md)