WooCommerce collects a VAT number if you add a field for it, but it does not check the number and it does not know when a sale is zero-rated. This plugin does both, and keeps the EU VAT rate table current while it is at it.
Neither job needs any configuration to get started.
1. Your tax table stays correct. The plugin pulls standard VAT rates for every EU member state from the European Commission’s Taxes in Europe Database (TEDB) and writes them into the WooCommerce tax table. It re-checks daily, so a rate change lands in your store within 24 hours instead of whenever you happen to read about it.
2. Your B2B buyers can pay without VAT. The plugin adds a VAT number field at checkout. The number is checked against its country format offline, stored on the order, and — once you add a vatnode API key — verified live against the official VIES service. When a buyer’s VAT number is valid and they are in another EU country, VAT is removed and the reverse charge applies.
Get a key at vatnode.dev/woocommerce — the free plan includes a monthly request quota. Paste it into WooCommerce EU VAT Rates and save. Nothing else changes.
If your store is registered for the One Stop Shop, consumers in other EU countries are charged the rate of their own country. That is the default. If you are not registered, untick the OSS box: every EU buyer is then charged your own country’s rate, which is what applies while cross-border sales stay under the EU-wide €10,000 threshold.
If the check cannot be made — no key, quota spent, VIES down — the order still goes through with VAT charged, and the reason is written to the order notes. A checkout is never blocked by an upstream service.
Rates come from the European Commission TEDB. The dataset is open source and also published on GitHub, npm, PyPI, Packagist and RubyGems. A full copy ships inside the plugin, so nothing has to be downloaded for it to work — the daily refresh exists because rates change by law between plugin releases.
The plugin ships with a full copy of the rate dataset and works without contacting anything. Two external services are used on top of that.
1. eu-vat-rates-data (rate refresh) — keeps the bundled rates current
VAT rates are set by law and change during the life of a plugin release, so the plugin refreshes its bundled dataset from https://raw.githubusercontent.com/vatnode/eu-vat-rates-data/main/data/eu-vat-rates-data.json, hosted by GitHub. This happens once a day and when you click “Sync now”. Nothing is downloaded during a page load or a checkout, and if the refresh fails the bundled dataset is used, so the store keeps working. The request sends no personal data: only your site URL as part of the user agent, which GitHub logs as it does for any file download.
GitHub terms: https://docs.github.com/site-policy/github-terms/github-terms-of-service — privacy: https://docs.github.com/site-policy/privacy-policies/github-privacy-statement
2. vatnode API (VAT number validation) — only if you add an API key
When you configure a vatnode API key and enable validation, the plugin sends the VAT number entered at checkout to https://api.vatnode.dev, which queries the EU Commission’s VIES service and returns the result. The request contains the VAT number, your API key and the plugin user agent. It does not contain the customer’s name, email, address or order contents. The answer is cached in your site for 24 hours, so entering a VAT number costs one request no matter how often the checkout refreshes.
No requests are made to vatnode until you enter an API key.
vatnode terms: https://vatnode.dev/legal/terms — privacy: https://vatnode.dev/legal/privacy