VAT-Exempt / Tax-Inclusive Pricing
If you enter prices inclusive of tax and sell into countries with no VAT, this article is the one to read. It is a WooCommerce configuration question rather than a plugin setting, and getting it right takes one table row.
The symptom
Your store is set to “I will enter prices inclusive of tax” (WooCommerce → Settings → Tax), you have a VAT rate for your own country, and you sell worldwide. A visitor in a country with no VAT sees a price that still has your base-country VAT baked into it. The suffix looks right; the number does not.
It usually shows up on archive pages, where several products are priced at once, and it can look inconsistent from one product to the next.
The cause
“No matching tax rate” and “a tax rate of zero” are not the same thing to WooCommerce.
To display an inclusive price ex-VAT, WooCommerce has to know what rate to remove. It works that out by looking up the visitor’s location in your tax table. If your only row is, say, UK 20%, then a visitor in the United States matches no row at all — and a country you have simply left out of the table is not treated as zero-rated, it is treated as unknown.
Simple products survive that. A variable product’s displayed price range does not, so a store can look correct across most of its catalogue and wrong on exactly the products that have variations.
There is a second, separate cause with the same appearance, and it is the one that catches more stores: a product whose Tax class is set to Zero rate. That tells WooCommerce the price contains no tax to begin with, so nothing is ever removed and the price shows exactly as typed — still carrying the VAT you entered. Because tax class is set per product, this hits some products and not others, which is what makes it look random.
The fix
Add a zero-rate row that matches every other country. In WooCommerce → Settings → Tax → Standard rates, insert a row with:
| Field | Value |
|---|---|
| Country code | leave blank (the * wildcard) |
| Rate % | 0.0000 |
| Tax name | Zero rate |
Put it below your real VAT rows, so the specific rows win for the countries they cover and everyone else falls through to the zero row.
The row has to go in Standard rates. A wildcard row on the “Zero rate” rates tab looks like the same thing and does nothing for a normal product, because that tab is a separate tax class that only applies to products you have individually assigned to it. Both stores that have reported this to us had exactly that: a perfectly good * 0.0000 row sitting on the Zero rate tab, and nothing matching in Standard.
The two tabs are separate tables and one does not substitute for the other, so if you already have a wildcard row under Zero rate rates, add the Standard one as well rather than moving it. Leave the existing row alone — it serves any products you have deliberately assigned to that tax class.
Then check the tax class on the products
If only some products are wrong after adding the row, open a wrong one and look at Tax class under Product data → General.
It should read Standard. If it reads Zero rate, that is the cause, and the rate table cannot fix it — set the class back to Standard and the price corrects itself. Bulk-edit handles a catalogue of them: select the products on the Products screen, choose Edit from Bulk actions, and set Tax class to Standard.
Leave the class alone only where it is genuinely deliberate — a product that really is zero-rated in your country, priced accordingly.
Verifying
You can confirm this without leaving wp-admin. On Super Speedy → AJAX Prices, use See what each customer sees, choose By country, and compare your base country against one with no VAT.
Every row in the zero-tax column should be the base price divided by your VAT multiplier. At a 20% rate:
| Inclusive price | Correct zero-tax price |
|---|---|
| £49.99 | £41.66 |
| £64.99 | £54.16 |
| £13.99 | £11.66 |
Check the base-country column is unchanged too — it should be, and a base price that moves means the new row is sitting above your real VAT row rather than below it.
If a figure still carries the full VAT, that product is almost certainly in the Zero rate tax class rather than Standard.
This is a WooCommerce display calculation, not something this plugin computes. The prices it serves over AJAX are the ones WooCommerce produces, so a store with the tax table set up correctly gets correct prices whether AJAX pricing is on or off — and a store missing the zero-rate row gets the same wrong number either way.

Comments