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).
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.
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.
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.
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.
- Applying zero-rate reverse charge to an unvalidated VAT number — you are liable for the full VAT
- Treating service_unavailable as invalid — you will wrongly reject valid customers when VIES is down
- Not re-validating stored numbers — deregistrations can happen at any time
- Missing 'reverse charge' notation on invoices — the invoice is non-compliant even if the VAT number was validated
- Ignoring the €10,000 OSS threshold for B2C digital services — you may owe back taxes to multiple EU countries
Get compliant in a day
Three implementation steps cover the core of EU VAT compliance for most SaaS products.
1Validate at checkout
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 type | Treatment |
|---|---|
| EU business, valid VAT number, different country | Reverse charge(0%) |
| EU business, valid VAT number, same country as seller | Standard rate(Local rate) |
| EU business, invalid or no VAT number | B2C rate (OSS)(Customer's country rate) |
| EU consumer (no VAT number) | B2C rate (OSS)(Customer's country rate) |
| Non-EU business or consumer | Out of scope / local rules(Depends) |
3Re-validate monthly
// 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.