Why Stripe VAT ID Verification Is Not Enough for Reverse Charge
If you apply reverse charge on Stripe without independently validating your customer's VAT ID, there's a good chance you have a compliance gap. Here's how VIES validation works and how to build a more reliable workflow.
If you apply reverse charge on Stripe without independently validating your customer's VAT ID, there's a good chance you have a compliance gap.
In practice, reverse charge treatment is usually supported by a valid EU VAT ID and evidence of validation. And "valid" doesn't mean "they typed something into a form field." It means the VAT ID has been checked against VIES, the EU's official validation system, and the result has been stored with a timestamp.
Many SaaS companies skip this step entirely. They collect a VAT ID at checkout, apply zero VAT, and move on. That gap may only surface months later, during a VAT review or audit.
This guide explains how VIES validation works, what Stripe does and does not handle, and how to build a more reliable VAT ID validation workflow for reverse charge.
This article is for educational purposes only and does not constitute formal tax advice. For complex cases, consult a qualified accountant or tax adviser.
What VIES is and why it matters
VIES (VAT Information Exchange System) is the European Commission's system for checking whether an EU VAT number is currently registered. When a VAT ID is checked through VIES, the result typically includes:
- Whether the VAT ID is valid or invalid
- The registered business name and address (in most countries)
- A consultation number confirming the check took place
This matters because collecting a VAT ID is not the same as validating it. If a tax authority later asks why VAT was not charged on a transaction, "the customer told us they were a business" is not a strong answer. A stored VIES validation result with a timestamp is.
What Stripe does with VAT IDs
Stripe gives SaaS companies a useful starting point. It can collect tax IDs from customers and store them on the customer record. In practice, Stripe helps with:
- Storing the VAT ID on the Customer object
- Format checking — verifying the ID matches the expected pattern for the country (e.g.,
DEfollowed by 9 digits for Germany) - Surfacing a verification status such as
verified,unverified,pending, orunavailable
That is helpful, but it is not the same as having a full reverse charge evidence workflow.
What Stripe does not solve for reverse charge compliance
For most teams, the real gap is not tax ID collection. It is timing, evidence, and traceability.
Stripe does not give you:
- Proof that the VAT ID was valid at the time of a specific transaction. Stripe's verification is asynchronous — a customer can be charged before verification completes.
- Periodic re-validation. A VAT ID that was valid six months ago may not be valid today. Stripe does not re-check on a schedule.
- Transaction-level linkage. Stripe's
verificationfield tells you the current status, not whether the ID was valid at the moment of a specific charge. - A workflow that prevents unsupported reverse charge. A customer with an unverified VAT ID can still be charged at zero VAT if your checkout flow allows it.
- An exception process for inconclusive results. Stripe processes the payment. The VAT treatment decision — and the evidence behind it — is your responsibility.
This is why seeing verification: verified on a Stripe customer does not automatically mean reverse charge treatment is fully supported for every charge tied to that customer.
Why validation timing matters
VAT registrations can change. A VAT ID that was valid in January may be invalid by March — the business deregistered, changed status, or lost its VAT registration.
For SaaS companies with recurring billing, this creates a real problem. A customer signs up, provides a valid VAT ID, and pays monthly. If you validated the ID once at signup and never again, you're relying on a single check to support twelve months of reverse charge treatment.
| Validation approach | Practical risk |
|---|---|
| Validate once at signup only | Higher — no evidence of ongoing validity |
| Re-validate periodically | Better, but gaps can remain |
| Re-validate each billing cycle | Stronger evidence per transaction |
| Re-validate on a rolling 30-day basis | Good practical balance |
There is no universal re-validation rule that fits every case. But recent, stored evidence is usually more defensible than stale or missing evidence.
How VIES validation works in practice
There are three common approaches.
Manual checks
Go to the VIES website, enter the country code and VAT number, and review the result. This works for one-off cases, but it does not scale — and it creates an evidence problem unless someone consistently stores the result and timestamp.
Direct API integration
VIES exposes an API, but it has well-known reliability issues:
- Downtime is common. Member state databases go offline regularly, sometimes for hours.
- Rate limiting is aggressive. Bulk queries can be throttled or blocked.
- Response times vary wildly. Some countries respond in milliseconds, others take 10+ seconds.
- No SLA. This is a government-operated service with no uptime guarantee.
For a live billing or classification workflow, calling VIES directly can be fragile.
Third-party validation providers
Third-party validation providers sit in front of VIES and offer higher reliability, REST APIs, stored proof of validation with consultation numbers, and bulk validation support. For some companies, this is the easier path — though it is also possible to integrate with VIES directly if you're willing to handle the operational complexity yourself.
The validation outcomes you need to handle
Valid
The VAT ID is active at the time of the check. This is the strongest basis for reverse charge treatment, provided the result is stored with a timestamp and reference.
Invalid or expired
The VAT ID does not validate — it may be incorrect, inactive, deregistered, or the registration has lapsed. Reverse charge generally should not be applied. In most cases, the safer default is to treat the sale as non-B2B until the issue is resolved.
Unavailable
VIES or a member state source cannot be reached. This is more common than you'd expect. The right approach is to retry later, not to guess. Flag the transaction for review rather than classifying it either way.
Pending
In asynchronous workflows, validation may not complete immediately. A robust workflow should avoid final reverse charge classification until validation is resolved — or route the transaction to review if the result doesn't arrive in time.
What goes wrong when this is handled badly
When reverse charge is applied without reliable validation, the problems tend to show up later:
- Undercharged VAT. If the customer isn't actually VAT-registered, you likely should have charged VAT. You may owe that VAT regardless of whether you collected it.
- Incorrect VAT reporting. Misclassified transactions distort your VAT return — reverse charge and B2C sales are reported differently.
- Weak audit evidence. If a tax authority asks why you applied zero VAT on a sale to a customer in France, you need to show a validation result. "We assumed they were a business" is not evidence.
- Expensive corrections. Discovering misclassifications months later means amending returns, potentially paying interest, and spending accountant time untangling the mess.
The exposure scales with volume. A SaaS company processing hundreds of EU transactions per month with unvalidated reverse charge treatment has a proportionally larger gap to close.
A practical VAT ID validation workflow
If you want a process that is operationally realistic, here is a solid starting point.
1. Collect the VAT ID clearly
Capture the full VAT ID with the country prefix (e.g., DE123456789, not just 123456789), either through Stripe's tax ID collection flow or your own form.
2. Validate as early as possible
As soon as you receive the VAT ID, check it through VIES or a validation provider. Store the full result: status, timestamp, company name, address, and consultation number.
3. Link the result to the transaction
Do not just store a general note that "this customer had a valid VAT ID once." A stronger record ties a specific validation result to the relevant billing period or transaction. "Customer X's VAT ID was validated on 2026-04-15 at 14:32 UTC, result: valid, consultation number: WAPICC123456" is what you want.
4. Re-validate on a schedule
For recurring billing, re-check VAT IDs on a rolling basis — every 30 days is a practical interval. If a re-validation comes back invalid, flag future transactions for review.
5. Handle failures as exceptions
When VIES is down (and it will be), don't silently apply reverse charge anyway. Flag the transaction as pending validation. Retry later. Only classify once you have a result.
6. Flag, don't guess
If a VAT ID can't be validated, don't treat it as valid and don't treat it as invalid. Route it to an exception queue for review. A wrong classification is worse than a delayed one.
Where Clearkite fits
Clearkite handles VAT ID validation as part of its automated classification pipeline for SaaS companies on Stripe:
- Direct VIES validation — every VAT ID is checked directly against VIES, with results stored alongside transaction data
- Timestamped evidence — each validation includes the result, timestamp, and consultation reference, tied to specific transactions
- Periodic re-validation — older validations don't silently support future billing forever
- Exception handling — unavailable or inconclusive validations are flagged for review, not guessed at
The goal is not just to validate VAT IDs once. It is to make reverse charge treatment easier to support, explain, and reconcile over time.
Stop relying on unproven reverse charge treatment
If your process today is "collect a VAT ID in Stripe and hope that's enough," it is worth tightening the workflow before the cleanup gets harder.
Clearkite helps SaaS companies validate VAT IDs, store supporting evidence, and flag unclear cases before they become reconciliation problems.
Stop reconciling Stripe VAT by hand
Clearkite connects to Stripe, classifies transactions, validates VAT IDs, flags exceptions, and produces cleaner Xero-ready outputs for reconciliation and reporting.
Clearkite is currently in private beta for UK and EU SaaS companies using Stripe.
Get early access to Clearkite