Compliance14 min readAlberto García

SaaS VAT Compliance: A Developer's Complete Guide for EU Markets

Selling a SaaS product to EU customers means navigating B2B vs B2C VAT rules, determining the place of supply, registering for OSS if needed, and generating compliant invoices. This guide covers the complete implementation.

saascompliancevateub2bbilling

If you sell a SaaS product to EU customers, you're subject to EU VAT rules. The good news is that the rules are logical once you understand the underlying framework. The bad news is that most developers encounter them in the middle of a billing implementation, without time to read EU directives. This guide gives you the practical framework without the legal theory.

The Two Fundamental Rules

Everything in EU VAT for SaaS flows from two rules: (1) For B2B sales, VAT is accounted for by the buyer in their country (reverse charge). (2) For B2C sales, VAT is charged at the customer's country rate and reported by you. These two rules have very different implementation implications.

ScenarioVAT Charged ByRate AppliedInvoice Note
B2B EU customer, valid VAT numberCustomer (reverse charge)0% on your invoice"Reverse charge - Art. 196 EU VAT Directive"
B2C EU customerYou (supplier)Customer's country rateVAT amount shown explicitly
Non-EU customer (B2B or B2C)Neither party0% (out of scope)"Not subject to EU VAT"

Place of Supply for Digital Services

For digital services (SaaS, APIs, software downloads), the place of supply is always where the customer is located, not where you are. This means a German company selling SaaS to a French customer must apply French VAT rules — not German ones. This is different from physical goods, where origin-based rules often apply.

Note

If your annual B2C sales to all EU countries combined exceed €10,000, you must either register for VAT in each country individually or use the EU One Stop Shop (OSS) scheme to file a single quarterly return covering all EU sales.

Implementing VAT in Your SaaS Checkout

javascriptsaas-vat-checkout.js
async function computeVatTreatment({ customerCountry, vatNumber }) {
  const EU_COUNTRIES = ['AT','BE','BG','CY','CZ','DE','DK','EE','ES','FI',
                        'FR','GR','HR','HU','IE','IT','LT','LU','LV','MT',
                        'NL','PL','PT','RO','SE','SI','SK'];

  // Non-EU: no EU VAT
  if (!EU_COUNTRIES.includes(customerCountry)) {
    return { rate: 0, mechanism: 'out_of_scope', invoiceNote: 'Not subject to EU VAT' };
  }

  // B2B with VAT number: validate and apply reverse charge
  if (vatNumber) {
    const res = await fetch('https://api.taxid.dev/v1/validate', {
      method: 'POST',
      headers: { 'Authorization': `Bearer ${process.env.TAXID_API_KEY}`, 'Content-Type': 'application/json' },
      body: JSON.stringify({ taxId: vatNumber })
    });
    const { valid } = await res.json();
    if (valid) {
      return { rate: 0, mechanism: 'reverse_charge', invoiceNote: 'Reverse charge - Art. 196 EU VAT Directive' };
    }
  }

  // B2C: apply customer country standard rate
  const ratesRes = await fetch(`https://api.taxid.dev/v1/rates?country=${customerCountry}`, {
    headers: { 'Authorization': `Bearer ${process.env.TAXID_API_KEY}` }
  });
  const { standard_rate } = await ratesRes.json();
  return { rate: standard_rate, mechanism: 'standard' };
}

OSS Registration

The EU One Stop Shop (OSS) lets you file a single VAT return for all your B2C EU sales, rather than registering in each country separately. You register in your home country, then file quarterly returns reporting sales to each EU country at that country's rate. For non-EU businesses, the Import One Stop Shop (IOSS) handles B2C sales of goods.

VAT Invoice Requirements

  • Your legal company name and address
  • Your VAT registration number
  • Customer's legal name, address, and VAT number (B2B)
  • Invoice date and a unique sequential invoice number
  • Description of services supplied
  • Net amount (ex-VAT), VAT rate, VAT amount, and total including VAT
  • For reverse charge: explicit note citing Art. 196 EU VAT Directive
  • For OSS sales: customer's country VAT rate applied

Start validating EU VAT numbers

Free plan — 100 validations/month. No credit card required.

AG
Alberto García

Founder, TaxID

Building EU VAT validation tools for developers. Obsessed with compliance automation and developer experience.