VIES vs National VAT Databases: Why the Answer Can Differ

28 August 2026

VIES vs National VAT Databases: Why the Answer Can Differ

VIES vs National VAT Databases: Why the Answer Can Differ

You checked a VAT number on the Commission's VIES page and got "valid". You (or a colleague) also checked the same number on the country's own tax portal and got a different answer — invalid, not found, or extra detail VIES doesn't show. Neither system is broken. VIES is a federated real-time query across national systems, not a single database of its own, so a national-portal lookup and a VIES lookup can legitimately diverge — usually for a few minutes, sometimes longer.

VIES is a federated query, not a database

The European Commission describes VIES as a search engine, not a database, and that's the detail that resolves most of the confusion. When you submit a VAT ID, VIES doesn't look anything up itself. It reads the country prefix, routes the query to that member state's own VAT system in real time, and relays back whatever that system says. Poland answers for Polish numbers, Ireland answers for Irish numbers, and VIES owns none of the underlying data for either.

So "checking VIES" for a Polish VAT number and "checking the Polish tax portal directly" are, most of the time, hitting the same authoritative system through two different front doors. When they agree — which is the overwhelming majority of the time — that's not a coincidence, it's the design working as intended.

Two consequences follow directly from that design. First, each of the 28 nodes (EU-27 plus XI for Northern Ireland) can fail independently — see how often that actually happens if you want the measured numbers instead of a guess. Second, because VIES is a relay and not a cache, a stale answer on either side is a synchronization problem, not a design flaw.

Why the two can differ

Given that VIES and most national portals ultimately ask the same national register, a visible mismatch has a small number of real causes.

Publication lag. A registration that changed today — newly issued, cancelled, reactivated — doesn't always propagate to every public-facing surface at the same instant. The national tax authority's own database, the public web portal built on top of it, and the interface VIES talks to can each refresh on a slightly different cycle. You can catch a number in the window where one has the update and the other hasn't picked it up yet.

Different scope. Northern Ireland (XI) is a scope mismatch, not a sync issue. VIES only validates XI numbers for goods, per the Windsor Framework carve-out — it has no visibility into NI's services registrations. A UK government portal checking the same number for a different purpose can legitimately return a different answer, because it's answering a different question.

A number too new to be indexed everywhere. A business that just registered can show up in the national system before every downstream index (VIES included) has synced, or the reverse — visible in the EU-wide layer before a slower national portal has refreshed its own public page.

None of these mean one source is "right" and the other "wrong". They mean you asked two systems that share a source of truth but don't refresh in lockstep, and you happened to ask during the gap.

What vatnode's national-registry fallback actually does — and doesn't

vatnode calls VIES first, on every check, with no exception. A national adapter runs only when VIES itself errors or times out — never to arbitrate a disagreement between two sources that are both reachable and both answering. If VIES is up and says "invalid", vatnode does not go ask a national system for a second opinion; VIES's answer is the answer.

Within that outage path, the fallback splits into two different things depending on the country, and the split matters:

  • Validity fallback. For a subset of member states, the national source vatnode calls is the VAT register itself — the same authority VIES would have routed to. For those countries, a VIES outage can still get you a real valid/invalid answer.
  • Enrichment-only. For other member states, the available national source is a business or company register, not a VAT register. A company can be listed and "active" there without being VAT-registered at all — below a registration threshold, exempt, deregistered from VAT but still trading. Deriving a valid/invalid verdict from that source would produce false positives, so vatnode never does: it's used to enrich an answer VIES already gave (name, address, registration date), never to decide one during an outage.
  • No fallback at all. A handful of countries have neither — a VIES outage there returns VIES_UNAVAILABLE and nothing behind it.

Because this set changes as new adapters get added, we don't hardcode it in prose here — the live, per-country matrix (which countries get real validity fallback, which are enrichment-only, and which have neither) is at /docs/coverage.

One more thing a fallback answer never carries: a consultation number. That reference is issued by VIES itself, so a national-source result has none. Treat national fallback as availability, not correctness — it exists so a check doesn't hard-fail during an outage, not as a stronger truth than VIES.

const res = await fetch(`https://api.vatnode.dev/v1/vat/${encodeURIComponent(vatId)}`, {
  headers: { Authorization: `Bearer ${process.env.VATNODE_API_KEY}` },
})

const data = await res.json()

// data.source tells you what actually answered: 'VIES', or a national
// adapter code like 'MF_PL' / 'ARES_CZ' when VIES itself was down.
// data.consultationNumber is null whenever source !== 'VIES'.
console.log(data.source, data.consultationNumber)

Three outcomes, not two

A VAT check is not a binary. It resolves to one of three states: valid, invalid, or temporarily unavailable. That third state is an operational condition, not a verdict — the check didn't complete, so nothing was learned about the VAT number either way. We've written up the full error-handling side of this separately in handling every VIES error code; the short version that matters here is that VIES_UNAVAILABLE must never get written to storage as a negative result. A national-portal disagreement you noticed manually is the same category of signal — a reason to recheck, not a reason to overwrite a stored answer.

What to do when you see a mismatch

  1. Recheck VIES itself before trusting either older answer. Publication lag and short outages both resolve on their own, usually within minutes.
  2. Check the timestamp on both answers. A "valid" from an hour ago and an "invalid" from just now aren't necessarily contradictory — a registration can lapse in between. Point-in-time is the whole model; neither answer is permanent.
  3. Don't overwrite a stored audit record on the strength of a manual national-portal lookup. If you validated a number through vatnode and logged checkId, source, and verifiedAt, that record stands until you run a new check through the same system — not because someone eyeballed a different portal.
  4. Treat a national portal as informational unless it's the specific fallback vatnode used because VIES itself was unavailable. A person manually cross-checking a different national site is doing due diligence, which is fine — but it doesn't outrank a VIES-backed result just because it disagreed once.

If you're weighing whether to build this fallback logic yourself or use an API that already does it, see exactly which countries have real fallback vs enrichment-only before you commit engineering time to a country that turns out to have neither.

FAQ

Is VIES more accurate than a national VAT portal?

Neither is more "accurate" by design — they're often the same source. VIES routes your query to the member state's own VAT register in real time, so a disagreement usually comes from timing (one side hasn't caught up with a recent change) or scope (XI is goods-only in VIES), not from one system being wrong.

Why does vatnode fall back to a national source instead of VIES?

It doesn't, when VIES is reachable. vatnode calls VIES first, always. A national adapter only runs when VIES itself errors or times out — for the subset of countries where the national source is a VAT register, not a company register. See the live list at /docs/coverage.

Does a national fallback result include a consultation number?

No. The consultation number is issued by VIES itself as part of a VIES response, so a national-source answer never carries one. Frame a fallback result as availability during a VIES outage, not as a replacement for a VIES-backed audit record.

What should I do if VIES and a national portal disagree right now?

Recheck VIES first — outages and sync lag both resolve on their own within minutes to hours. Don't overwrite a stored valid result with a manual national-portal lookup; treat the portal as informational unless it's the specific fallback vatnode used because VIES itself was down.

Get the answer with the source attached

Every vatnode result records which system actually answered — VIES, or a named national fallback when VIES itself was down — so a mismatch is something you can explain, not just notice. Check a VAT number free, or get a free API key and validate through the VIES API — free plan, 100 requests/month.