Skip to content

Checking VAT IDs

A check validates one VAT or business ID against an official registry. You can start it from the dashboard, the API, or a schedule — the flow and the stored outcome are always the same.

Three objects are involved in every check:

flowchart LR
    TI["Tax Identifier
the stored ID"] VR["Validation Request
a check in progress"] RES["Validation Result
the permanent record"] SCH["Schedule"] TI --> VR VR --> RES SCH --> VR RES --> TI
  • Tax Identifier — the stored, de-duplicated ID itself. It is created automatically the first time you check an ID and acts as the hub for that ID’s history, schedules, and exports. See Tax Identifiers below.
  • Validation Request — a check in progress. Requests are transient: once a check completes (or is cancelled), the request disappears and only the result remains. Open requests are shown on the Overview page and on the identifier’s detail page.
  • Validation Result — the permanent, audit-ready record of a completed check, including the registry’s raw response. See Results, Evidence & Reports.

Every check is metered when the request is created — an unreachable registry or a manual review does not consume a second validation.

Start a single check from VAT Checker → Overview → New validation (or from an identifier’s detail page, which pre-fills the ID). Batches are available via the API.

The New validation modal with country code, VAT-ID, company name, address details, and schedule options

FieldRequiredNotes
Country codeYes2-letter ISO code (e.g. DE, GB, CH). Determines the ID scheme and registry.
VAT-IDYesThe ID to check. Spaces, dots, dashes, and underscores are stripped and letters uppercased — DE 123.456-789 and de123456789 are the same ID (max. 20 characters after normalization).
Company nameNoMax. 256 characters. Enables company-name matching against the registry record.
ModeYesAutomatic (query the registry) or Manual (send straight to the Manual Review Queue). Defaults to the mode set in Settings.
Preferred providerNoPin a specific registry instead of automatic routing. Only providers included in your plan are listed.

Add address details (optional) enables address matching:

FieldConstraints
StreetMax. 256 characters
Postal codeMax. 32 characters
CityMax. 128 characters
RegionMax. 128 characters
Address country code2 letters

Advanced options:

FieldPurpose
Requester VAT-IDYour own VAT ID. Required for Germany’s BZSt qualified confirmation and forwarded to VIES qualified checks.
Idempotency keyMax. 128 characters. A retried request with the same key isn’t processed twice.
Correlation IDMax. 128 characters. Your own tracing ID, echoed back on the result.

If your plan includes scheduled validation, the modal also offers “Repeat this validation on a schedule” — this creates a schedule (monthly, quarterly, or yearly) for the same ID in one step.

Via the API you can additionally attach customer metadata: up to 20 key/value pairs (keys 1–64 characters, a-z0-9_-; values up to 512 characters) stored with the request and result.

The 2-letter country code determines the scheme — which normalization applies and which registry can answer:

SchemeCountry codesNormalized formAutomatic source
EU VATAll 27 EU states + XI (Northern Ireland); Greece is ELCountry prefix added if missing (DE…)VIES (or BZSt)
UK VATGBGB prefix added if missingHMRC
Swiss UIDCHCHE prefix + 9 digitsSwiss UID registry (Zefix)
Norwegian Organization NumberNO9 digitsBrønnøysund (BRREG)
Australian Business NumberAU11 digitsABR
New Zealand Business NumberNZ13 digitsNZBN
Singapore UENSGas entered— manual only
Malaysian TINMYas entered— manual only
Indian GSTININas entered— manual only
Canadian Business NumberCAas entered— manual only
Otherany other codeas entered— manual only

Schemes without an automatic source can still be stored and checked — the request goes to manual review (or completes as Not supported if manual-review fallback is disabled).

Each automatic check is answered by one provider. All registry calls time out after 10 seconds and store the registry’s raw response as evidence.

ProviderCoversWhat it returns
VIES (EU)EU VATValid/invalid; usually the registered name and address; a consultation number as source reference. With company name or address in the request it performs a qualified check and returns per-field match verdicts. Some member states withhold name/address data.
BZSt (Germany)EU VAT outside Germany, queried by a German companyGermany’s qualified confirmation (eVatR). Used automatically when your requester VAT-ID starts with DE and the target is a non-German EU ID. Returns valid/invalid plus per-field match verdicts — but never the counterparty’s stored record itself.
HMRC (UK)UK VATValid/invalid, registered name and address.
Swiss UIDSwiss UID (CHE + 9 digits)Checks the UID register (Zefix); valid while the company is active. Returns name and address.
Brønnøysund (Norway)Norwegian org. numbers (9 digits)Valid unless deregistered; returns name and address.
ABR (Australia)ABN (11 digits)Valid while the ABN is active; returns entity name, state, and postcode, plus GST registration status as a provider message.
NZBN (New Zealand)NZBN (13 digits)Valid while registered; returns the entity name (no address).
ManualanythingA human verdict recorded via manual review or Record result.

A request moves through these statuses:

StatusMeaning
PendingAccepted, waiting for a worker (picked up within ~15 seconds).
ProcessingThe registry is being queried.
Waiting for retryThe registry was unavailable — the check will retry automatically.
Waiting for manual reviewA human needs to decide — see Manual Review.
CompletedFinished; the request is replaced by its result.
CancelledCancelled before completion (API only); no result is produced.

Retries: when a registry is down, times out, rate-limits, or errors, the check retries automatically up to 5 attempts with increasing backoff — after 1, 5, 15, 60, and 240 minutes. A check stuck in Processing for more than 5 minutes (e.g. a crashed worker) is safely re-queued.

When all retries fail (or the scheme has no automatic provider):

  • with “Send to manual review when an automatic validation fails” enabled (the default, see Settings) the request moves to the Manual Review Queue and notifies your recipients;
  • otherwise a result is stored with the failure outcome (e.g. Source unavailable), so the attempt is still on record.

Every completed check produces exactly one of five outcomes:

OutcomeMeaning
ValidThe registry confirmed the ID.
InvalidThe registry rejected the ID (not registered, deregistered, or inactive).
UnknownNo verdict could be reached.
Source unavailableThe registry couldn’t be reached (after all retries).
Not supportedNo registry can check this scheme automatically.

Alongside the outcome, the result records a provider status — what technically happened at the registry: Success, Invalid input, Source timeout, Source unavailable, Rate limited, Authentication failed, Technical error, Not supported, or Not used (manual results).

If you provide a company name or address, the result includes a match verdict per field — for the company name, the overall address, and each address component (street, postal code, city, region, country):

Match statusMeaning
MatchRegistry data confirms your value.
No matchRegistry data contradicts your value.
Partial matchSome address fields match, others don’t (overall address only).
Not requestedYou didn’t provide this field.
Not providedYou provided it, but the registry returned no data for it.
UnknownCouldn’t be evaluated — e.g. the outcome wasn’t Valid.

How verdicts are computed:

  • Where the registry itself evaluates matches (VIES qualified checks, BZSt), its verdict is used directly.
  • Otherwise your value is compared case-insensitively against the registry’s returned record.
  • If the outcome isn’t Valid, all match fields are Unknown.
  • The overall address verdict aggregates the field verdicts: any No matchNo match; all evaluated fields matching ⇒ Match; a mix ⇒ Partial match.

Every ID you check is stored once under VAT Checker → Tax Identifiers — the same ID checked five times is one identifier with five results.

An identifier's detail page with the latest result, open requests, result history, and editable name

On an identifier’s detail page you can:

  • Start a new validation or record a result for this ID (pre-filled).
  • See the latest result, any open requests, the full result history, and whether a schedule is active.
  • Give the identifier a name (max. 128 characters) and description (max. 1,024 characters) — the name appears in the identifiers list.
  • Export data (ZIP) — a combined report over all of this ID’s checks (plan feature, see Results).
  • Delete the identifier — this permanently removes the identifier and everything linked to it: requests, results, evidence, and schedules. You must type the ID to confirm.

The number of stored identifiers is a plan limit, shown as a quota badge (e.g. 2 / 500 identifiers) on the Tax Identifiers page.