For SaaS & e-commerce developers

EU VAT Compliance — Automate VIES Validation, Reverse Charge & Audit Records

EU VAT compliance for B2B SaaS and e-commerce means four things: validate VAT numbers at checkout, apply the correct tax treatment, generate compliant invoices, and re-validate monthly. Get all four right in a day.

The 4 EU VAT compliance obligations for SaaS

Most compliance failures come from missing one of these four steps — particularly step 4 (re-validation).

1

Validate at checkout

When a B2B customer provides a VAT number, validate it in real-time via VIES before completing the order. Store the validation result and request_id.

2

Apply the correct tax treatment

Valid EU VAT number from a different member state → reverse charge (0%). Same country → standard rate. No VAT number → B2C rate via OSS.

3

Generate a compliant invoice

Include your VAT number, the buyer's VAT number, 'reverse charge' notation, and Article 196 reference. Store the invoice with the validation record.

4

Re-validate monthly

Businesses deregister. Re-validate all stored VAT numbers monthly. A stale validation creates the same liability as no validation at all.

What happens if you get it wrong

VAT liability stays with the seller

If you apply zero-rate reverse charge to a customer whose VAT number was not valid at the time of supply — whether because you never validated, or used a stale validation — you are liable for the full VAT amount. Tax authorities can assess the VAT plus interest and penalties going back years.

Get compliant in a day

Three implementation steps cover the core of EU VAT compliance for most SaaS products.

1Validate at checkout

TypeScript — checkout validation
const res = await fetch(
  `https://www.taxid.dev/api/v1/validate/${country}/${vatNumber}`,
  { headers: { Authorization: `Bearer ${process.env.TAXID_API_KEY}` } }
);
const { status, company_name, request_id } = await res.json();

// Store audit record — required for compliance
await db.vatValidations.create({
  customerId, vatNumber, status, company_name,
  request_id, validatedAt: new Date(),
});

if (status === "service_unavailable") {
  // Allow through — VIES is down, not the customer's fault
  // Flag for re-validation once VIES recovers
  return { proceed: true, requiresRevalidation: true };
}

return { proceed: status === "active" };

2Apply the correct tax treatment

Customer typeTreatment
EU business, valid VAT number, different countryReverse charge(0%)
EU business, valid VAT number, same country as sellerStandard rate(Local rate)
EU business, invalid or no VAT numberB2C rate (OSS)(Customer's country rate)
EU consumer (no VAT number)B2C rate (OSS)(Customer's country rate)
Non-EU business or consumerOut of scope / local rules(Depends)

3Re-validate monthly

TypeScript — monthly re-validation job
// Run as a cron job on the 1st of each month
const customers = await db.customers.findMany({
  where: { vatStatus: "active", billingCountry: { in: EU_COUNTRIES } },
});

for (const customer of customers) {
  const { status } = await validateVat(
    customer.vatCountry, customer.vatNumber
  );
  if (status !== "active") {
    await db.customers.update({
      where: { id: customer.id },
      data: { vatStatus: status, vatStatusChangedAt: new Date() },
    });
    // Notify finance team — tax treatment must change on next invoice
    await notifyFinance(customer, status);
  }
}

Integration guides

EU VAT compliance — frequently asked questions

When does EU VAT compliance apply to my SaaS?

As soon as you sell to EU customers. For B2B: validate VAT numbers before applying zero-rate. For B2C digital services: once EU-wide B2C revenue exceeds €10,000/year, register for OSS and collect VAT at each customer's country rate.

What is the penalty for not validating EU VAT numbers?

If you apply zero-rate reverse charge to a customer whose VAT number was not valid at the time of supply, you become liable for the full VAT amount plus interest and penalties. The liability stays with the seller.

Does OSS registration replace VIES validation?

No. OSS is for remitting B2C VAT across the EU from one registration. VIES validation is for B2B reverse charge. Both can apply to your business at the same time.

How often should I re-validate stored VAT numbers?

Monthly. Businesses can deregister at any time. Applying reverse charge based on a stale validation is the same liability as never validating.

What must a compliant reverse-charge invoice include?

Your VAT number, the buyer's validated VAT number, explicit 'reverse charge' notation, net amount at 0%, and a reference to Article 196 of the EU VAT Directive.

Related resources

Get EU VAT compliant today

Free API key, 100 validations/month, all 31 countries. Working integration in under 2 minutes. No credit card required.