VIES VAT validation for Shopify: how to check an EU VAT number — and prove you did
Last updated 27 July 2026
A business customer in another EU country types a VAT number into your Shopify checkout, and your store drops the VAT to zero. That's reverse charge — and it is only legitimate if the number is real. This is a practical guide to VIES: what it actually checks, why the zero rate depends on it, what the German rules add on top, what to keep as evidence, and how to stop an unverified number from turning into an invoice you can't defend.
What VIES actually is
VIES — the VAT Information Exchange System — is a service run by the European Commission for checking whether an EU VAT identification number is valid for intra-EU trade. The important detail, and the one that explains most of its odd behaviour: VIES holds no database of its own. Every query is forwarded to the tax administration of the country that issued the number, and their answer is passed back to you in real time.
That has three consequences worth knowing before you build anything on it:
- Answers are point-in-time. A number valid this morning can be deregistered next month. The answer you got is only evidence for the day you asked.
- Coverage varies. Some member states return the registered name and address with the result; others return only a yes or no.
- It can be unavailable. If a national system is down, VIES says so — that is not the same as "invalid", and treating it as such is one of the most common integration bugs.
Why it matters: no valid number, no reverse charge
When you sell to a VAT-registered business in another EU country, you normally invoice at 0% VAT and the buyer accounts for the tax in their own country. That's the reverse charge, and it is the reason your margin calculation and your invoice look the way they do.
Since the EU's 2020 "quick fixes", the buyer's valid VAT identification number — issued by a member state other than yours — is a substantive condition for zero-rating the supply, together with correctly reporting it in your recapitulative statement (the EC Sales List; Zusammenfassende Meldung in Germany). It is no longer a formality you can fix afterwards.
Get it wrong and the exposure is yours, not the buyer's. If the number turns out to be invalid, the tax authority can refuse the zero rate and assess the VAT against you as the seller — often years later, when you can no longer go back and charge the customer for it. On a run of B2B orders that is a real, compounding liability, which is why the check belongs in the order flow rather than in a quarterly clean-up.
Germany adds a second step: the qualified confirmation
If you're a German seller — and if you're reading this for the 2027 mandate, you probably are — the standard EU check is not the end of it. Germany's Bundeszentralamt für Steuern (BZSt) operates its own confirmation procedure for foreign VAT numbers, in two flavours:
| Check | What it tells you |
|---|---|
| Simple confirmation (einfache Bestätigungsabfrage) | Whether the VAT number is valid at the time of the query. The same narrow question VIES answers. |
| Qualified confirmation (qualifizierte Bestätigungsabfrage) | Whether the company name, legal form, address and postcode you submit match the details registered against that number — returned field by field. This is the one German auditors expect to see for regular customers, and the BZSt can issue an official confirmation of the result for your records. |
The practical rule German advisers give: run a qualified confirmation when a new B2B customer starts buying, repeat it periodically for ongoing relationships, and keep the confirmation. A valid-number screenshot with no name match, and no date, is thin evidence when someone asks in 2029 what you knew in 2026.
Manual checking vs automated checking
You can do all of this by hand. The Commission publishes a public VIES lookup page, the BZSt has its own online form, and for a store doing two B2B orders a month that is a perfectly reasonable answer.
It stops being reasonable quickly, and always for the same reasons:
| Manual lookup | Automated check | |
|---|---|---|
| When it happens | Whenever someone remembers — often after the invoice went out at 0%. | At the moment the order is placed, before anything is issued. |
| Evidence | A screenshot in a folder, if you're diligent. Usually nothing. | Result, timestamp and reference stored against the order automatically. |
| Typos | Re-typed by a human into a second window. Country prefixes get dropped. | The exact string on the order is what gets queried. |
| Service downtime | "It didn't work" → the check quietly never happens. | Retried, and the invoice is held until there's a real answer. |
| Re-checking | Never happens for repeat customers. | Re-run on a schedule, or on each new order. |
The failure mode with manual checking is rarely a wrong answer. It's no answer at all — an invoice at 0% VAT that nobody ever verified, discovered during an audit.
What to store — and for how long
Treat the VIES result as part of the invoice record, not as a transient API response. For each check, keep:
- the exact VAT number queried, including the country prefix, as submitted;
- the country code that issued it;
- the timestamp of the query — the date is what makes it evidence;
- the result: valid, invalid, or service unavailable (three states, not two);
- the consultation or request identifier where the service returns one, and, in Germany, the BZSt confirmation of a qualified query;
- the name and address returned, if the member state provides them, so you can show they matched the buyer.
Keep it for as long as you keep the underlying invoice. In Germany that is eight years for invoices under §14b(1) UStG, shortened from ten with effect from 1 January 2025; the ten-year period in §147(3) AO covers the books, which is a different set of records. Build for the long horizon rather than for this quarter. And keep it linked to the order: evidence you can't connect to a specific supply is evidence you'll struggle to use.
The mistakes that actually cost money
- Treating "service unavailable" as "invalid" — or as "valid". Both are wrong. One blocks a legitimate sale; the other issues an unverified zero-rated invoice. Retry instead.
- Confusing German tax numbers. Only the USt-IdNr (DE + 9 digits) works for intra-EU trade. A customer who gives you their Steuernummer has given you the wrong number, and it will never validate.
- Assuming every domestic VAT number is visible in VIES. In some member states — Spain's ROI register and Italy's opt-in are the classic examples — a company is VAT-registered domestically but not enabled for intra-EU transactions. The number fails the check, correctly. Your customer has to fix it on their side.
- Checking once, forever. Registrations get withdrawn. For a repeat customer, an eighteen-month-old check is not evidence about today's invoice.
- Not matching the name. A valid number belonging to a different company doesn't support your zero rate — that's exactly what Germany's qualified confirmation exists to catch.
- Validating, then not gating. The check is worthless if a failed result doesn't stop the 0% invoice from going out.
How Zeppol validates — and gates the invoice
Zeppol treats the VAT check as a precondition of the invoice, not a nice-to-have field. For each B2B order:
| Step | What happens |
|---|---|
| 1 · Capture | The buyer's company details, country and VAT number are taken from the order and stored against the customer — with a Peppol ID too, where one is used. |
| 2 · Validate | The number is checked, and the outcome is recorded on the customer record together with when it was checked — not just a boolean floating free of a date. |
| 3 · Classify | Zeppol works out whether this is genuinely a cross-border intra-EU B2B supply — both parties in the EU, in different member states, buyer holding a VAT number — before reverse charge is even considered. |
| 4 · Gate | If that situation applies but the number is not validated, the invoice is blocked, with a plain reason: the VAT number was not validated, so intra-EU reverse charge cannot be applied. Validate, then re-issue. No silent 0% invoice. |
| 5 · Invoice correctly | Where reverse charge does apply, the invoice carries 0% with the right EN 16931 VAT category code and the legal note — "Reverse charge — VAT to be accounted for by the recipient (Art. 196 EU VAT Directive 2006/112/EC)" — and net, VAT and gross reconcile to the cent. |
That last point is where format tools and compliance tools part ways. Producing a valid EN 16931 file is a solved problem; deciding, per order, whether this supply may be zero-rated — and refusing to issue when it may not — is the part that keeps you out of trouble.
Frequently asked questions
What is VIES?
The European Commission's VAT Information Exchange System — a service for checking whether an EU VAT number is valid for intra-EU trade. It holds no database itself: each query goes to the issuing country's tax administration and their answer comes back to you, valid for the moment you asked.
Do I have to check my buyer's VAT number before applying reverse charge?
In practice, yes. Since the 2020 EU quick fixes, holding a valid VAT number issued by another member state is a substantive condition for zero-rating an intra-EU supply, alongside reporting it in your EC Sales List. If it's invalid and you can't show you checked, the VAT can be assessed against you as the seller.
Can Shopify validate EU VAT numbers on its own?
Not for a standard store. Shopify can collect a VAT number and its B2B features can exempt a company from tax, but there's no built-in VIES lookup that verifies the number, records when it was checked, or holds the invoice when the check fails. That comes from an app or your own process.
What should I store as evidence of a VIES check?
The exact number queried, the country code, the timestamp, the result, and any consultation or request identifier the service returns — plus the BZSt confirmation if you used Germany's qualified procedure. Keep it linked to the order, for as long as you keep the invoice (eight years in Germany under §14b(1) UStG since 1 January 2025; the ten-year period covers the books, not invoices).
What happens if VIES is unavailable when the order comes in?
Member state systems go down for maintenance and VIES returns "unavailable", which is not the same as "invalid". Retry rather than deciding; hold the invoice until you have a real answer instead of issuing it at 0% on an assumption.
Is a valid VIES result the same as knowing my customer is a business?
Nearly. It confirms the number is registered for intra-EU trade right now. Some countries also return the registered name and address to match against your order; others don't. Confirming the number actually belongs to the customer you're invoicing is still on you — which is what Germany's qualified confirmation is for.
Keep reading
- EU B2B e-invoicing on Shopify — mandates, formats and deadlines, in one place.
- EN 16931 explained — the standard your zero-rated invoice has to satisfy.
- Germany's 2027 B2B mandate — what changes, and when.
This guide is general information for Shopify merchants, not legal or tax advice. Rules, thresholds and evidence requirements vary by country and change over time — confirm your obligations with a qualified tax adviser.
E-invoices from your Shopify B2B orders
Zeppol turns every B2B order into an EN 16931 document, checks it against the EU and the German rules, and sends it over Peppol or by email. Join the list and I'll be in touch before the deadline.