

WooCommerce order page with verified VAT status and VIESAC certificate download button
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 52 VAT/GST jurisdictions, standard VAT/GST rate setup for 115 countries, and a decision engine that chooses tax treatment from cart contents and destination. Free plan includes 50 live validations per month.
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 native 5-digit STV MWST register for Liechtenstein companies (Liechtenstein and Switzerland form a unified VAT territory; Liechtenstein VAT numbers follow STV or 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).
* Kenya (KE): 11-character KRA PIN (P or A + 9 digits + letter); live check via Kenya Revenue Authority (KRA) iTax register.
* Oman (OM): 10-character VATIN (optional OM + 9 digits + digit/X); live check via Oman Tax Authority (OTA) VATIN register.
* Bangladesh (BD): 13-digit or 9-digit e-BIN; live check via National Board of Revenue (NBR).
* Liechtenstein (LI): 5-digit STV MWST number; live check via the Liechtenstein Tax Administration (STV) register.
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.
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.
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.
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 keyVIESAC includes client-side syntax, prefix normalization, and statutory checksum checks for all 27 EU member states, Northern Ireland (XI), Monaco (MC), and 24 non-EU jurisdictions:
* EU-27: Austria (AT), Belgium (BE), Bulgaria (BG), Croatia (HR), Cyprus (CY), Czechia (CZ), Denmark (DK), Estonia (EE), Finland (FI), France (FR), Germany (DE), Greece (EL/GR), Hungary (HU), Ireland (IE), Italy (IT), Latvia (LV), Lithuania (LT), Luxembourg (LU), Malta (MT), Netherlands (NL), Poland (PL), Portugal (PT), Romania (RO), Slovakia (SK), Slovenia (SI), Spain (ES), Sweden (SE).
* United Kingdom & Europe: Great Britain (GB), Northern Ireland (XI), Switzerland (CH), Liechtenstein (LI), Norway (NO), Iceland (IS), Serbia (RS), Albania (AL), Bosnia and Herzegovina (BA), North Macedonia (MK).
* Middle East & Africa: United Arab Emirates (AE), Egypt (EG), Oman (OM), South Africa (ZA), Kenya (KE).
* Asia-Pacific & Americas: Australia (AU), Japan (JP), Singapore (SG), India (IN), Taiwan (TW), Bangladesh (BD), Armenia (AM), Georgia (GE), Turkey (TR), Argentina (AR).
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.
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:
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:
https://viesac.eu/api/v1/validatehttps://viesac.eu/api/v1/auditshttps://viesac.eu/api/v1/accountDepending on the action, the plugin may send:
Service provider documentation:
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.