vatnode – EU VAT Validation and Reverse Charge
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.
What is free
- Daily rate sync from the European Commission TEDB for the EU-27 plus XI
- Manual “Sync now” whenever you want it
- VAT number field on both the classic and block checkout
- Offline format checking against the country pattern
- VAT number stored on the order and shown in the admin
What needs a vatnode API key
- Live VIES verification of the VAT number
- Automatic reverse charge for verified EU business buyers
- Company name from the official register stored with the order
- VIES consultation number stored as audit evidence, when your vatnode account has a requester VAT configured
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.
OSS and the €10,000 threshold
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.
How the reverse charge decision is made
- Empty field → nothing happens, VAT is charged
- Wrong format for the country, or a VAT country that does not match the billing country → the shopper is asked to fix it
- Same country as your store → domestic sale, VAT is charged
- Another EU country and VIES confirms the number → VAT removed, reverse charge applied
- VIES says the number does not exist → the shopper is asked to correct it or remove it
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.
Data source
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.
External services
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
