Troubleshooting
VAT is not being applied at checkout
Work through these in order — the first four cover almost every case:
- Setup incomplete. No assessment happens until the plugin is configured. Check that establishment country and ship-from country are set under WooCommerce → IOSS → Settings (the IOSS number itself is not required for charging, but the setup steps around it are).
- Rates not imported. The IOSS Import VAT tax class is empty until you run the one-click import — from the wizard’s last step or Settings. Verify under WooCommerce → Settings → Tax → IOSS Import VAT that per-country rows exist.
- Charge VAT at checkout is off. That is record-only mode, and not charging is its entire point. If an external tax service is supposed to be charging instead, check that service; if not, turn the setting back on. See Checkout VAT.
- The destination is not an EU VAT destination. US and UK (GB) addresses are correctly uncharged. Also remember the excluded territories: a Canary Islands or Réunion address carries an EU country code but is outside the EU VAT area, and the plugin excludes it by postcode.
- Still stuck? Place a test order and read the order’s IOSS meta box — the recorded verdict and reason usually name the cause directly. Also confirm WooCommerce taxes are enabled at all (WooCommerce → Settings → General → Enable taxes).
VAT is being applied to an order over EUR 150
The ceiling is tested on the intrinsic value in EUR at the ECB rate captured at payment acceptance — not on your store-currency total, and not at today’s rate. Three legitimate explanations before suspecting a bug:
- Shipping doesn’t count. A EUR 160 order with EUR 15 of separately-stated shipping is a EUR 145 consignment — correctly charged.
- Multi-currency edge. On non-EUR stores, $165 may genuinely be under EUR 150 at the captured rate. Check the order meta box for
_ioss_fx_rateand_ioss_intrinsic_eur— the math shown there is the math that was applied. - ECB availability. If the rate looks stale or missing, check that your server can reach
www.ecb.europa.euover HTTPS. When no rate is available at all, orders are markedfx_unavailableand excluded rather than charged — so VAT actually being charged means a rate was found. See Currency conversion.
Checkout notices are not showing
- Each notice has its own toggle and text under Settings — confirm the relevant one is enabled and its text is not empty.
- Notices only render once the destination is known — before an EU shipping country is entered, there is nothing to announce.
- On the block checkout, notices are delivered through WooCommerce’s notice system and appear in the checkout’s notice area rather than inline; that placement difference is expected. Heavily customized checkout templates that suppress
wc_print_noticeswill also suppress these. - In record-only mode, notices are intentionally disabled along with charging.
HPOS
The plugin declares full compatibility with WooCommerce High-Performance Order Storage. The orders-list column, the order meta box, capture, refund handling, and the monthly aggregates work identically on HPOS and legacy post storage — no settings involved. If order meta looks missing right after switching storage modes, complete WooCommerce’s own data synchronization first.
Conflicts with other EU VAT plugins
Running two plugins that both implement the EUR 150 boundary means double exemptions, duplicated notices, or conflicting tax classes — do not run the €150 logic twice. Pick one owner for IOSS checkout behavior:
- If another plugin (or an external tax service) owns VAT charging, put this plugin in record-only mode — you keep the eligibility records, EUR capture, and monthly figures without touching checkout.
- General-purpose EU VAT plugins built for intra-EU selling (OSS-style) are solving a different scheme; their destination-VAT logic does not implement the IOSS ceiling and should not be active for the same carts.
- VAT-number field plugins coexist fine — a VAT number they collect feeds the B2B exclusion.
The monthly figures look wrong
Order meta is the source of truth; the monthly tables are rebuildable aggregates. After an import, bulk status changes, or a migration, run Recalculate from Settings and compare a few orders’ meta boxes against the dashboard.
Getting further help
Check the changelog for recent fixes, then contact support with your WordPress, WooCommerce, and plugin versions, your store currency, and one example order number.