Directory / plugin

VIESAC – Free VAT Validation for WooCommerce

v1.2.4 · by viesac

WooCommerce VAT & GST validation via EU VIES and 20+ national registries (UK, CH, NO, AE, JP, SG, IN, AU, ZA, AR), plus 115 standard tax rates.

About this plugin

VIESAC helps WooCommerce stores validate VAT and GST numbers and apply B2B reverse-charge and place-of-supply rules at checkout. It combines local format and checksum checks, live registry lookups across 48 VAT/GST jurisdictions, standard VAT/GST rate setup for 115 countries, and a decision engine that chooses tax treatment from cart contents and destination.

Official registries used for live checks:
* European Union (EU-27) & Monaco (MC): Real-time checks via the European Commission’s EU VIES system for all 27 EU member states, plus Monaco (MC) through the French VIES route and DGFiP register.
* United Kingdom (GB & XI): Great Britain VAT validation via the official HMRC VAT API; Northern Ireland (XI) validation via EU VIES.
* Switzerland (CH) & Liechtenstein (LI): Support for 9-digit CHE UID format and Liechtenstein companies (Liechtenstein and Switzerland form a unified VAT territory; Liechtenstein VAT numbers follow the Swiss UID registry).
* Norway (NO): 9-digit MVA format & Modulo 11 checksum verification; live VAT registration check via the Brønnøysund Register Centre (Enhetsregisteret).
* Serbia (RS): 9-digit PIB format & ISO 7064 MOD 11,10 checksum verification; live company check via the Serbian Tax Administration VAT Register.
* Turkey (TR): 10-digit VKN algorithmic format verification; live taxpayer check via the Turkish Revenue Administration (GİB) e-Fatura registry.
* Bosnia and Herzegovina (BA): 12-digit PDV identifier; live check via the Indirect Taxation Authority (UINO). The 13-digit direct-tax JIB is a different identifier.
* North Macedonia (MK): 13-digit EDB tax number with Modulo 11 check digit verification; live check via the Public Revenue Office (UJP).
* Albania (AL): NIPT / NUIS, a letter, eight digits, and a letter; live business registry check via the National Business Center (QKB).
* Iceland (IS): 5–6-digit VSK number or 10-digit kennitala with Modulo 11 checksum; live check via Skatturinn. Kennitala identifies the entity; the registry determines VAT registration.
* Australia (AU): 11-digit ABN with Modulo 89 checksum; live ABN status check via the Australian Business Register (ABR). An active ABN does not itself establish GST registration.
* United Arab Emirates (AE): 15-digit Tax Registration Number (TRN); live VAT registration check via the Federal Tax Authority (FTA) register.
* Armenia (AM): 8-digit Taxpayer Identification Number (TIN / ՀՎՀՀ, including /1 VAT suffix notation); live check via the State Revenue Committee (SRC / Petekamutner).
* Georgia (GE): 9-digit or 11-digit taxpayer identification code; live VAT registration check via the Georgia Revenue Service (rs.ge).
* Egypt (EG): 9-digit Tax Registration Number (TRN); live taxpayer registration check via the Egyptian Tax Authority (ETA).
* Taiwan (TW): 8-digit Unified Business Number (UBN / BAN) with statutory Modulo 5 checksum; live verification via the MOEA GCIS Open Data API and Ministry of Finance (MOF) tax register.
* Japan (JP): Qualified Invoice Issuer Registration Number (T + 13 digits); live check via the National Tax Agency (NTA) Qualified Invoice Issuer Register.
* Singapore (SG): Unique Entity Number (UEN formats A, B, C) or IRAS M GST number; live verification via the ACRA Open Data API and IRAS GST register.
* India (IN): 15-character Goods and Services Tax Identification Number (GSTIN) with statutory base-36 Modulo 36 check character; instant format and checksum verification at checkout, followed by a live GSTN / IRIS IRP portal lookup when the order audit is created.
* South Africa (ZA): 10-digit VAT reference number (starting with 4) with statutory SARS Luhn / Modulo 10 checksum; live verification via the South African Revenue Service (SARS).
* Argentina (AR): 11-digit CUIT (prefixes 20, 23, 24, 27, 30, 33, 34) with statutory Modulo 11 checksum; live taxpayer and IVA status verification via ARCA (formerly AFIP).

Intelligent B2B Reverse-Charge & Place of Supply Engine

VIESAC automatically determines the correct tax treatment during checkout without complex configuration:
* Physical Goods vs. Digital/Virtual Services: Dynamically resolves the place of supply based on cart contents. Physical shipments evaluate the delivery/shipping destination; digital or purely virtual orders evaluate the customer’s billing country.
* Intra-EU B2B Reverse Charge: 0% VAT is applied automatically only when a buyer enters a valid VAT number from a different EU member state.
* Domestic Sales Protection: Domestic orders (destination matching the store’s base country) always retain standard local VAT, even if a valid local VAT number is provided.
* Unified Swiss-Liechtenstein Territory: Sales between Switzerland and Liechtenstein stay domestic within the customs union and keep local tax.
* Monaco & Isle of Man: Monaco uses French VAT numbers (FR); Isle of Man uses UK VAT numbers (GB). Both stay in the same VAT territory as France and the United Kingdom.
* Places outside the EU VAT area: Canary Islands, Ceuta, Melilla, Åland, Jersey, Guernsey, Heligoland, Büsingen, Livigno, Campione d’Italia, and Mount Athos are treated as outside the EU VAT area for place-of-supply, even when the country code looks EU.
* Cross-Border Exports: Verified non-EU businesses (across all supported national registries including GB, CH, NO, RS, TR, BA, MK, AL, IS, AU, AE, AM, GE, EG, TW, JP, SG, IN, ZA, and AR) can receive 0% export VAT. An invalid number for a supported registry keeps shop tax. For countries without live VIESAC validation, an alphanumeric tax number can remove tax as an unverified export with no API call and no VIESAC audit; the merchant confirms that number later.
* Instant Checkout Feedback: Validation runs when the customer leaves the VAT field (blur / focusout), with debounce while typing.
* Official registry unavailable: Checkout still completes if VIES, HMRC, or another official VAT registry does not answer in time. For a qualifying cross-border order, the store can finish checkout without VAT and keep checking in the background. The order shows the result when the registry responds. In WooCommerce VIESAC you can instead keep the normal tax until the registry confirms the number. A paid virtual order stays on hold by default, so the download is not sent until the registry confirms the number. Physical orders are fulfilled as usual unless you turn that hold on.

1-Click Standard VAT Rate Setup (115 Countries)

Merchants can import and configure the official standard VAT or GST rate for their store base country in WooCommerce with a single click directly from the VIESAC settings page (WooCommerce -> VIESAC). VIESAC covers 115 countries and territories across the EU-27, the UK, Europe, the Caucasus, Central Asia, the Middle East, Asia-Pacific, Africa, and the Americas. Existing rates and custom reduced rates remain completely untouched.

Stored Proof & Audit Certificates

Eligible verified B2B orders can store a timestamped VIESAC audit record, registry evidence, and a downloadable PDF certificate in order details, subject to the stored-proof allowance. This is a VIESAC certificate containing registry evidence; it is not a certificate issued by the tax authority.

Features

  • Automated Reverse-Charge Engine – Dynamic place of supply evaluation for goods vs. virtual services
  • Real-time EU VIES Validation – Live verification for all 27 EU member states, Northern Ireland (XI), and Monaco (MC)
  • UK VAT checks via HMRC – Validate Great Britain (GB) VAT numbers through HMRC’s official API
  • 20 Non-EU National Tax & Business Registries – Live validation for Switzerland & Liechtenstein (UID), Norway (Brønnøysund), Serbia (Tax Administration), Turkey (GİB e-Fatura), Bosnia and Herzegovina (UINO), North Macedonia (UJP), Albania (QKB), Iceland (Skatturinn), Australia (ABR), United Arab Emirates (FTA), Armenia (SRC), Georgia (Revenue Service), Egypt (ETA), Taiwan (MOEA GCIS & MOF), Japan (NTA Qualified Invoice Register), Singapore (ACRA & IRAS), India (GSTN), South Africa (SARS), and Argentina (ARCA)
  • VAT Territory Aliases – Switzerland–Liechtenstein, Monaco–France, and Isle of Man–United Kingdom stay in one tax territory where the rules require it
  • Developer Hooks – Country-aware VAT/company labels, placeholders, visibility and required fields in Classic Checkout; product/destination exemption restrictions in Classic and Blocks; live checks and audits for supported countries stay on the VIESAC path (docs)
  • Instant Checkout Validation – Checks on field blur/focusout with typing debounce
  • 1-Click Standard VAT/GST Rate (115 Countries) – Import the official standard rate for the store country across 115 jurisdictions without touching reduced rates
  • Country-specific Format & Checksum Checks – Client-side syntax, domestic prefix normalization (CHE, ABN, TRN, UBN, BAN, UEN, GST, GSTIN, CUIT, CVR, NIP, OIB, PIB), and statutory checksum validation (NO, RS, TR, AU, IS, DK, MK, TW, IN, ZA, AR) without an API key
  • Audit Records & Certificates – Timestamped registry evidence and downloadable VIESAC PDF certificates on eligible WooCommerce orders
  • Usage Transparency – Separate views for monthly checks, hourly capacity, and stored proof quotas
  • HPOS & Blocks Compatible – Works with WooCommerce Custom Order Tables and Checkout Blocks
  • Multilingual Ready – 28 languages; works with WPML, Polylang, and TranslatePress

VAT number validation by country

VIESAC includes country-specific VAT/GST number format validation for every jurisdiction below. Live validation uses EU VIES for EU member states, Northern Ireland, and Monaco, plus official national registries for 20 non-EU countries:

  • Albania (AL/ALB) – NIPT / NUIS, letter + 8 digits + letter; QKB registry check
  • Argentina (AR/ARG/CUIT) – 11-digit CUIT (20, 23, 24, 27, 30, 33, 34) with Modulo 11 checksum; ARCA registry check
  • Armenia (AM/ARM) – 8-digit TIN (with optional /1 VAT suffix); State Revenue Committee (SRC) registry check
  • Australia (AU/AUS/ABN) – 11-digit ABN with Modulo 89 checksum; ABR status check (active ABN is separate from GST registration)
  • Bosnia and Herzegovina (BA/BIH) – 12-digit PDV; UINO registry check (not 13-digit JIB)
  • Egypt (EG/EGY) – 9-digit TRN; Egyptian Tax Authority (ETA) registry check
  • Georgia (GE/GEO) – 9-digit or 11-digit taxpayer ID; Georgia Revenue Service (rs.ge) check
  • Iceland (IS/ISL) – 5–6-digit VSK or 10-digit kennitala with Modulo 11 checksum; Skatturinn registration check
  • India (IN/IND/GSTIN) – 15-character GSTIN with Modulo 36 check character; format + checksum at checkout and full GSTN portal verification on order audit creation
  • Japan (JP/JPN) – T + 13 digits (or 13-digit corporate number normalized with T); National Tax Agency (NTA) Qualified Invoice Issuer check
  • North Macedonia (MK/MKD) – 13-digit EDB with Modulo 11 checksum; UJP registry check
  • Singapore (SG/SGP/UEN/GST) – 9–10 character UEN (formats A, B, C) or IRAS M GST number; ACRA & IRAS GST registry check
  • South Africa (ZA/ZAF) – 10-digit VAT number starting with 4 with SARS Modulo 10 checksum; SARS registry check
  • Taiwan (TW/TWN/UBN/BAN) – 8-digit Unified Business Number with Modulo 5 checksum; MOEA GCIS & MOF tax register check
  • United Arab Emirates (AE/ARE/UAE/TRN) – 15-digit TRN; Federal Tax Authority (FTA) registry check
  • Austria (AT) – Austrian VAT numbers
  • Belgium (BE) – Belgian VAT numbers
  • Bulgaria (BG) – Bulgarian VAT numbers
  • Croatia (HR/OIB) – Croatian VAT/OIB numbers
  • Cyprus (CY) – Cypriot VAT numbers
  • Czechia (CZ) – Czech VAT numbers
  • Denmark (DK/CVR) – Danish 8-digit CVR/VAT numbers
  • Estonia (EE) – Estonian VAT numbers
  • Finland (FI) – Finnish VAT numbers
  • France (FR) & Monaco (MC) – French and Monegasque VAT numbers
  • Germany (DE) – German VAT numbers
  • Greece (EL/GR) – Greek VAT numbers
  • Hungary (HU) – Hungarian VAT numbers
  • Ireland (IE) – Irish VAT numbers
  • Italy (IT) – Italian VAT numbers
  • Latvia (LV) – Latvian VAT numbers
  • Lithuania (LT) – Lithuanian VAT numbers
  • Luxembourg (LU) – Luxembourg VAT numbers
  • Malta (MT) – Maltese VAT numbers
  • Netherlands (NL/NLD) – Dutch VAT numbers (with suffix normalization)
  • Poland (PL/NIP) – Polish VAT/NIP numbers
  • Portugal (PT) – Portuguese VAT numbers
  • Romania (RO) – Romanian VAT numbers
  • Serbia (RS/SRB/PIB) – 9-digit PIB with checksum; live registration check through the Serbian Tax Administration with an API key
  • Slovakia (SK) – Slovak VAT numbers
  • Slovenia (SI/SL) – Slovenian VAT numbers
  • Spain (ES) – Spanish VAT numbers
  • Sweden (SE) – Swedish VAT numbers (including 10-digit organisation number auto-completion)
  • Switzerland (CH/CHE) & Liechtenstein (LI) – CHE UID format; live UID register check; unified territory with Liechtenstein
  • Turkey (TR/TUR) – 10-digit VKN with checksum; live GİB e-Fatura taxpayer register check with an API key
  • Northern Ireland (XI) – Northern Irish VAT numbers through EU VIES (goods destination rules)
  • Great Britain (GB/UK) – UK VAT numbers through HMRC for England, Scotland, and Wales
  • Norway (NO) – 9-digit MVA with checksum; live VAT registration check through the Brønnøysund Register Centre with an API key

Getting started

  1. Install and activate the plugin.
  2. Go to WooCommerce -> VIESAC.
  3. Get your free API key from https://viesac.eu/app/api.
  4. Enter the API key and save.

Languages

VIESAC is available in 28 languages: English, Norwegian Bokmål, German, French, Spanish, Italian, Polish, Dutch, Romanian, Greek, Czech, Swedish, Hungarian, Portuguese, Bulgarian, Danish, Finnish, Slovak, Croatian, Serbian (Cyrillic), Latvian, Estonian, Lithuanian, Slovenian, Russian, Turkish, Arabic, Ukrainian.

Multilingual compatibility

VIESAC uses standard WordPress gettext for its interface and VAT validation messages, so it works with WordPress language packs and the Gettext translation tools in WPML, Polylang, and TranslatePress.

Custom VAT field label and VAT field placeholder values are supported too:

  • WPML: translate them in WPML -> String Translation after saving the VIESAC settings.
  • Polylang: translate them in Languages -> String translations after saving the VIESAC settings.
  • TranslatePress: translate them as regular strings in its translation editor after visiting checkout in the target language.

External services

This plugin connects to the VIESAC API to validate VAT numbers, retrieve account usage information, and optionally create audit records with certificate storage.

It sends data to https://viesac.eu only when a store administrator enters an API key and the plugin performs one of these actions:

  • Live VAT validation via https://viesac.eu/api/v1/validate
  • VAT audit creation via https://viesac.eu/api/v1/audits
  • Account and usage lookup via https://viesac.eu/api/v1/account

Depending on the action, the plugin may send:

  • VAT country code and VAT number
  • Company name
  • Company address
  • Order number
  • Order audit details in XML format for certificate generation

Service provider documentation:

For developers

English hook reference: https://viesac.eu/extensions/woocommerce/developers

Hooks can wrap validation, change checkout text, or keep tax on. They cannot replace a live VIESAC result for a supported country, and they cannot skip the audit when that result removes tax. Countries without live VIESAC checks never create a VIESAC audit.

Plugin tags