Plugin Wizards
B2B & wholesale

EU VAT Validation for WooCommerce

A VAT number field at the checkout checked against VIES, with tax exemption (reverse charge) for valid EU businesses, on orders, invoices and My Account.

  • Block cart and checkout
  • Classic cart and checkout
  • High-performance order storage
  • WooCommerce 9 – 11
  • WordPress 6.6 – 7.1
  • PHP 7.4+
yourstore.com/checkout

What EU VAT Validation does

Selling to businesses in the EU means asking for a VAT number, checking it, and not charging VAT when the sale is cross-border. EU VAT Validation does the three in one field: the customer types the number at the checkout, the plugin checks it with the EU's VIES service as they type, and a valid number from another member state takes VAT off the order. The number, the check result and the reverse-charge note are saved on the order and printed on the emails and the invoice.

EU VAT Validation features

At the checkout

  • A VAT number field for EU billing addresses on the block checkout, the classic checkout and the My Account address form
  • Format check per country, then a live VIES lookup; the message under the field says verified (with the company name), not registered, or wrong format
  • Optional, required for every EU address, or required only when a company name is entered
  • Invalid numbers stop the checkout, or are allowed with VAT charged and the order flagged, as you choose
  • When VIES is down: exempt and flag for a later check, charge VAT and flag, or refuse

Tax exemption

  • Reverse charge for valid numbers from a different country than the shop; optionally also domestic numbers, or validation only with no exemption
  • Compare the billing or the shipping country
  • Northern Ireland (BT postcodes) is checked through VIES as XI; UK numbers can be collected with a format check
  • Greece's EL prefix, the AT "U", Dutch "B" suffixes and the other country formats are handled

On the order

  • VAT number, status, company name from VIES and the exemption on the order, with an order note
  • A VAT column and search on the orders list, the details under the billing address and a "Re-check VAT number with VIES" order action
  • The number and the reverse-charge note on the thank-you page, in My Account, in every order email and on PDF invoices that print the order emails' extra lines
  • vat_number, vat_number_status and vat_exempt on the REST API orders endpoint
  • Results are cached for a number of days you set, so VIES is asked once per number

What happens to the VAT, case by case

The plugin asks one question at the checkout and acts on the answer: is this a registered business in another EU country? If so, the sale is reverse charged and no VAT is added. Everything else keeps the VAT rates you already have under WooCommerce > Settings > Tax. The cases, with the defaults:

How a checkout is treated
CustomerVAT numberResult
Consumer in the EUNoneVAT at the rate for their country, as today
Business in another EU countryValid in VIESNo VAT; number, company name and the reverse-charge note on the order and the invoice
Business in the shop's own countryValid in VIESVAT charged (domestic sales are not reverse charged); switch to exempt them if your rules differ
Business in the EUWrong format or not in VIESCheckout stops with a message, or goes through with VAT and a flag, as you choose
Business in the EUVIES is downWell-formed number accepted and exempt, order flagged for a re-check; or charge VAT; or refuse
Northern IrelandXI number, BT postcodeChecked through VIES like an EU number
Business in Great BritainGB numberFormat check only, if you show the field for the UK

Results are cached for the number of days you set, so a returning customer is not checked on every page load, and a "Re-check VAT number with VIES" action on the order re-runs the lookup whenever you want.

One field, three places, and what it does not do

The same field appears on the block checkout, the classic checkout and the My Account address form, and is checked as the customer types, with the company name from VIES shown as confirmation. The number, the status and the exemption are saved on the order, printed in every order email and on PDF invoices that include the emails' extra lines, and exposed on the REST API for accounting integrations.

It is a validation and exemption plugin, not a tax engine. It does not set up your EU VAT rates, apply OSS thresholds or file returns; WooCommerce's own tax tables or a tax service do that, and this plugin decides only whether a given order should carry VAT. Wholesale and Role-Based Pricing can also mark whole customer roles tax exempt, which suits trade accounts you approve by hand; this plugin is for the number a customer types at the checkout.

How to set up EU VAT Validation in WooCommerce

  1. 1

    Upload the plugin to /wp-content/plugins/ or install the zip from Plugins > Add New > Upload Plugin.

  2. 2

    Activate it. Enter the licence key from your purchase email when asked (also under Activate License on the Plugins screen).

  3. 3

    Check WooCommerce > Settings > EU VAT: the defaults exempt valid numbers from other EU countries and stop the checkout on invalid ones. Make sure your EU tax rates exist under WooCommerce > Settings > Tax.

Questions about EU VAT Validation

Where is the number checked?

Against VIES, the European Commission's VAT Information Exchange System, through its public API. No account or key is needed. Results are cached for the period you set so a returning customer is not checked again on every page load.

What happens when VIES is down?

VIES has short outages, and individual member states go offline for maintenance. You choose: accept a well-formed number, exempt and flag the order for a re-check (the default), accept but charge VAT, or refuse the number. Flagged orders show "VIES unavailable, not verified" and have a "Re-check VAT number with VIES" action.

Does it remove VAT for every valid number?

By default only when the customer's country differs from the shop's country, which is the reverse-charge rule for B2B sales inside the EU. You can also exempt domestic numbers, or turn the exemption off and only validate. Shops outside the EU get the same behaviour for the EU tax rates they charge.

Does it work with the block checkout?

Yes. The field is added through WooCommerce's checkout fields API on the block checkout and as a billing field on the classic checkout. Totals update as soon as the address is saved.

Does it work with the UK?

UK numbers can be collected with a format check; HMRC's lookup service needs a registered API account, so they are not verified online. Northern Ireland numbers with BT postcodes are verified through VIES as XI.

Is the reverse-charge note on the invoice?

The note is printed with the order details in every WooCommerce order email, on the thank-you page and in My Account. Invoice plugins that print the order emails' extra lines include it; the text is editable in the settings.

Does it support High-Performance Order Storage?

Yes.

Do I need a licence key?

The key from your purchase email is what delivers updates and support to this site. Enter it on the screen shown after activation, or later through Activate License on the Plugins screen. The plugin's features work either way.

EU VAT Validation changelog

1.0.0
  • Initial release.
B2B & wholesale

Wholesale Pricing

Wholesale prices by customer role, with signup approval, hidden prices, wholesale-only products, minimum orders and tax exemption.

View plugin

B2B & wholesale

Request a Quote

Let customers request a quote for products, then send prices from the order editor and let them accept and pay online.

View plugin

Orders & notifications

Order Export CSV

Export orders to CSV: saved profiles, 90+ columns plus custom meta, filters, one row per order or per item, scheduled email exports, bulk action, WP-CLI.

View plugin