EU VAT for B2B SaaS: A Practical Guide for Founders and Developers

If you sell software to businesses across EU borders, VAT is mostly about one thing: knowing when not to charge it, and being able to prove you were right. Here is the practical version — reverse charge, why you validate the buyer's VAT number, place of supply, and what to store.

The one rule that matters most: reverse charge

Under normal VAT rules the seller charges VAT and remits it. For cross-border B2B sales inside the EU, that would force you to register for VAT in every customer's country — clearly impractical for a SaaS company with customers in twenty countries. The reverse charge mechanism solves it: when you sell to a VAT-registered business in another member state, you issue the invoice with no VAT, and the buyer accounts for the VAT in their own country (usually netting to zero because they reclaim it on the same return).

For your billing system this means a binary decision at invoice time: charge local VAT, or zero-rate with a reverse-charge note. The note typically reads something like “Reverse charge — VAT to be accounted for by the recipient.” The full mechanics, including the conditions and wording, are covered in the VAT reverse charge guide.

Why you must validate the buyer's VAT number first

Reverse charge is conditional on the buyer actually being a VAT-registered business. If you zero-rate an invoice and the buyer's VAT number is invalid, cancelled, or fabricated, you have made a supply without charging VAT and without a legal basis for the exemption. The tax authority can then come back to you for the VAT, plus interest and penalties — money you never collected from the customer.

This is why VAT validation belongs in your checkout or onboarding flow, not in a quarterly accountant review. Before applying the reverse charge, confirm the buyer's number is currently valid in VIES (the EU's VAT Information Exchange System). You can run a one-off check with the free tool at vatnode.dev/check, or automate it with a single API call:

TypeScript — decide VAT treatment at invoice time
interface VatDecision {
  applyReverseCharge: boolean
  vatRate: number
  note?: string
  checkId?: string
  verifiedAt?: string
}

async function decideVatTreatment(
  buyerVatId: string,
  sellerLocalRate: number,
): Promise<VatDecision> {
  try {
    const res = await fetch(
      `https://api.vatnode.dev/v1/vat/${encodeURIComponent(buyerVatId)}`,
      { headers: { Authorization: `Bearer ${process.env.VATNODE_API_KEY}` } },
    )

    if (!res.ok) {
      // VIES temporarily unavailable — fail safe: charge VAT, retry async
      return { applyReverseCharge: false, vatRate: sellerLocalRate }
    }

    const result = await res.json()

    if (result.valid === true) {
      return {
        applyReverseCharge: true,
        vatRate: 0,
        note: 'Reverse charge — VAT to be accounted for by the recipient',
        checkId: result.checkId,
        verifiedAt: result.verifiedAt,
      }
    }

    // Known-invalid number — do not zero-rate
    return { applyReverseCharge: false, vatRate: sellerLocalRate, checkId: result.checkId }
  } catch (err) {
    // Network/unexpected error — be conservative and log
    console.error('VAT check failed:', err)
    return { applyReverseCharge: false, vatRate: sellerLocalRate }
  }
}

Fail safe, never fail open. If you cannot confirm the VAT number — VIES is down, the network failed — default to charging VAT and re-check later. Charging VAT you could have avoided is recoverable; zero-rating you could not justify is a liability.

Place of supply, briefly

“Place of supply” is the rule that decides which country's VAT applies to a sale. For digital and electronically supplied services — which is what most SaaS is — the general B2B rule places supply where the business customeris established. That is precisely what makes the reverse charge work for cross-border B2B: the supply is treated as taking place in the buyer's country, and the buyer accounts for the VAT there.

Two practical consequences for a SaaS billing system:

  • 1For B2B, you need the buyer’s country and a valid VAT number — both come out of the validation step, so capture and store them together.
  • 2For B2C (selling to consumers), the place of supply is generally the consumer’s country and you charge that country’s rate, often reporting via the One-Stop Shop (OSS). That is a separate flow from this B2B guide.

Place-of-supply rules have exceptions and special cases. Treat the above as the common SaaS path, not legal advice, and confirm the specifics for your product and customer base with a tax adviser.

There is also a status question hiding inside place of supply: is the customer actually a business? The reverse charge depends on it. A buyer who provides a valid VAT number is treated as a business; a buyer who has none is generally treated as a consumer and falls into the B2C path. This is why the VAT number is doing double duty in your billing system — it determines both whether you can zero-rate and whichcountry's rules govern the sale. Capturing it correctly at the start of the relationship saves re-work later, especially if a customer's status changes when they register for VAT partway through a subscription.

What to store for audit

If you ever face a VAT audit, the question will be: how do you justify zero-rating these invoices? The answer is the records you kept at the time. For every reverse-charge invoice, store at minimum:

StoreWhy
Buyer's VAT number (normalized)Identifies who you zero-rated and links to the registry record
Validation timestamp + check IDProves the number was valid at the time of invoicing, not just generally
Consultation number (when available)EU-issued reference — the strongest documentary evidence of the check
Company name as returned by the registryConfirms the number belongs to the customer you invoiced

The single most valuable item is the consultation number — an EU-issued reference that proves you checked a specific VAT number at a specific time. How to capture and retain all of this is covered in the VAT audit trail guide.

Common mistakes to avoid

  • Trusting a format check. A correctly formatted number can still be invalid. Always do a live VIES validation, not just a regex match.
  • Checking once and never again. Registrations lapse; re-validate active subscriptions periodically.
  • Hard-blocking on VIES downtime. An unavailable country node should not reject a legitimate customer — fail safe and retry.
  • Not keeping evidence. A pass/fail in memory is worthless at audit. Persist the check ID, timestamp, and consultation number.
  • Confusing B2B and B2C. Reverse charge is B2B only; consumer sales follow OSS rules and rates.

Frequently asked questions

Do I charge VAT to EU business customers?

For cross-border sales to a VAT-registered business in another EU member state, you generally do not charge VAT — the reverse charge applies and the buyer accounts for it in their own country. You charge VAT when the customer is in your own country, when the customer is a consumer (B2C), or when you cannot confirm the buyer is a VAT-registered business. Always confirm the buyer’s VAT number before zero-rating.

What happens if I zero-rate an invoice for an invalid VAT number?

If you apply the reverse charge but the buyer’s VAT number turns out to be invalid or unverifiable, the tax authority can treat the supply as if VAT should have been charged and assess you for the missing VAT, plus interest and penalties. The defence is documentary: validate the number at the time of invoicing and keep the proof. That is why VAT validation is a compliance control, not a nice-to-have.

Is reverse charge the same for SaaS as for physical goods?

The mechanism is similar but the legal basis differs. SaaS is a service, so the place-of-supply and reverse-charge rules for services apply. For intra-EU B2B supplies of goods, a valid customer VAT number is a substantive condition for exemption under the 2020 quick fixes. For services, the buyer’s VAT status drives the place of supply and whether the reverse charge applies. In both cases you verify the buyer’s VAT number — but consult a tax adviser for the exact treatment of your product.

What about B2C SaaS sales to EU consumers?

Reverse charge does not apply to consumers. For digital services sold to EU consumers you generally charge VAT at the consumer’s country rate and remit it, commonly via the One-Stop Shop (OSS) scheme. This guide focuses on B2B; B2C digital VAT has its own rules and thresholds and is worth a dedicated conversation with your accountant.

How often should I re-validate a customer’s VAT number?

VAT registrations can lapse, so a check is only good for the moment it was made. Validate at signup or first invoice, and re-validate on a recurring basis for active subscriptions — typically each billing cycle, or at minimum periodically. Storing the check ID and timestamp for each validation gives you a continuous audit trail rather than a single stale check.

Validate buyer VAT numbers in your SaaS billing flow

One HTTP call returns validity, company details, and an audit reference you can store against the invoice. Start with the free tool or get an API key.