WooCommerce EU VAT and OSS: the right rate for every member state
A cross-border sale to an EU consumer is taxed at the customer's rate: from the first order for a store outside the EU, and past €10,000 a year for one inside it. OSS declares all of it in one return.
EU VAT in WooCommerce comes down to two questions: which OSS scheme you fall under, and whether your tax table charges the customer's country rate at checkout. A store established in one EU country, with under €10,000 a year in cross-border consumer sales, can keep its home rate. Everyone else charges the destination rate on every order. The schemes decide how you declare that VAT; the WooCommerce settings decide whether the receipt shows the right number. None of this is tax advice. If you hold stock in more than one country, sell through marketplaces, or are unsure where you count as established, an accountant has to make the call before you change a setting.
Who still charges the home rate under €10,000
The threshold adds together your intra-EU distance sales of goods and any electronic services sold to consumers in other member states, and the total has to stay under €10,000 excluding VAT in both the current and the preceding calendar year. It only works for a business established in a single member state, shipping from there. Under it, those sales are domestic. You charge your own rate and report them in your normal return, not in OSS. The order that crosses the line is the first one taxed at the destination rate; nothing waits for the year to end. Opting in early is allowed and binds you for two calendar years. A US, UK or Canadian business cannot use the threshold at all.
Where the parcel starts decides which OSS scheme you use
OSS is three schemes, and the goods decide which one you file under. The Union scheme is for EU-established businesses, and also for non-EU sellers whose stock already sits inside the EU, say in a 3PL warehouse in the Netherlands, because those sales are intra-EU distance sales rather than imports. The non-Union scheme covers services from businesses with no EU establishment, so a store shipping physical goods has little use for it. IOSS, the import scheme, takes parcels shipped from outside the EU with an intrinsic value of €150 or less. It is filed monthly, and a seller established outside the EU must appoint an EU intermediary to register. Every scheme is optional, but joining one is all or nothing: it then covers each qualifying sale in all 27 member states, and you cannot send Germany through OSS while registering separately in France. For a US store shipping from the US, the choice is IOSS or nothing. The €22 import exemption ended in July 2021, so every consumer parcel carries VAT. Without IOSS that VAT is collected at import, which in practice means the customer pays the carrier before getting the parcel. Refusals follow, and you pay for them. That makes skipping IOSS the worse option as soon as EU orders are regular rather than occasional. From 1 July 2026 to 1 July 2028 both routes also pay a customs duty of €3 per item category on parcels up to €150. Landed cost and duty models are covered under selling internationally. Great Britain left this system in 2021; its rules are in UK VAT for WooCommerce.
The tax table has to carry one row per member state
WooCommerce charges the destination rate only if WooCommerce → Settings → Tax holds it. Core ships no EU rate list, so you add one row per country code under Standard rates or import a CSV. The spread is wide: 27% in Hungary, 17% in Luxembourg, 19% in Germany and 25.5% in Finland, per the EU's Your Europe table last checked on 13 July 2026. Reduced rates for books or food go in an additional tax class assigned per product. For physical goods, set "Calculate tax based on" to the customer shipping address, since the rate follows where transport ends. "Shop base address" is wrong for anyone above the threshold. It charges your home rate on every order and leaves you paying the difference. Nothing updates the table when a country changes its rate.
Geolocation guesses the price, the address sets the tax
Before a shopper enters an address, WooCommerce assumes a location for the VAT-inclusive price it shows, under "Default customer location" in General settings. "Shop country/region" shows every visitor your home rate. "Geolocate" uses MaxMind, which needs a license key under WooCommerce → Settings → Integration; behind a full-page cache, pick "Geolocate (with page caching support)", which adds a ?v= hash to URLs. VPN users and travelers get a wrong guess. Checkout recalculates from the real address anyway.
Keep one shelf price, or let it move with the rate
Selling to consumers, enter prices with tax: EU pricing rules require the total price, including taxes, before the purchase. That means "Prices entered with tax" set to yes. Both display settings go to including tax. Then decide what the shelf price does abroad, because the default catches people out. Scenario: a German store lists a lamp at €119, which is €100 plus 19% VAT. A Hungarian customer reaches checkout. WooCommerce strips the German tax and adds Hungary's 27%, and the lamp now costs €127. The filter woocommerce_adjust_non_base_location_prices returning __return_false keeps it at €119 everywhere, with the VAT inside changing and your net on that order falling to €93.70. Take the fixed price for a consumer store. A jump of €8 between product page and checkout reads as bait-and-switch. A fixed price shows one number on the ad, the product page and the receipt. Letting the price move is the better call only when margins are so thin that the gap between 17% and 27% decides whether an order makes money. WooCommerce's documentation calls the adjustment experimental and asks for separate tests of shipping, coupons, tax-exempt customers and cached prices, so try it on staging with two addresses. Press "Use recommended settings" next to rounding while you are there; mismatched display settings cause one-cent errors.
A valid VAT number moves B2B tax to the buyer
Sales to VAT-registered businesses in other member states stay out of OSS. Since 1 January 2020 they are exempt only if the buyer is identified for VAT in a member state other than the one the goods leave, gives you that number, and you list the sale on your recapitulative statement, the EC Sales List. The buyer then accounts for VAT at home. VIES, the Commission's checker, tells you whether a number is valid; its own terms say that answer "does not in itself give a right to exempt", and it returns MS_UNAVAILABLE when a national database is down. Core WooCommerce has no VAT number field. Woo's EU VAT Number extension adds one, checks it against VIES, removes VAT on a valid number and builds an EC Sales List report; it can no longer validate UK numbers. Of its three "Failed Validation Handling" options, avoid "Accept the order and remove VAT as normal". It strips VAT from numbers that failed the check, which is how a typo or an invented number becomes a VAT-free order. "Accept the order without removing VAT" keeps the sale and lets you refund the tax once the number checks out.
Quarter end: the return is due a month later
Union and non-Union returns cover a calendar quarter and are due by the end of the next month: 30 April, 31 July, 31 October, 31 January. Payment has the same deadline, and a quarter with no OSS sales still needs a nil return. Amounts go in one currency, normally euro, converted at the ECB rate on the last day of the period. Your domestic VAT return does not go away. Records stay for 10 years from the end of the year of each sale, including the evidence that placed the customer in a country. Set "Display tax totals" to itemized and name each rate by country, so the quarter's figures come out of an order export or your accounting integration.
What our free store audit checks before a VAT change
The free store audit reads these settings: the rate table, the tax-based-on and default-location choices, the inclusive-price filter, rounding and VAT number capture. What you owe and where to register stay with your accountant; we do not file returns. NextWoo invoices EU clients in euros at fixed prices, with Launch Setup at €1,799. See pricing.
Frequently asked questions
Do I need OSS if I sell under €10,000 to other EU countries?
No, if your business is established in one EU country, ships from there, and its cross-border consumer sales stayed under €10,000 excluding VAT this year and last. Those sales take your home rate in your normal return. The order that crosses €10,000 switches to the customer's rate.
Can a US WooCommerce store use the €10,000 EU VAT threshold?
No. It is only for businesses established in a single EU member state. A US store charges the customer's rate from the first EU sale, through IOSS for parcels up to €150 shipped from outside the EU, or through the Union scheme if the stock sits in an EU warehouse.
How often do you file an OSS VAT return?
Four times a year for the Union and non-Union schemes, each due by the end of the month after the quarter. IOSS is monthly. A period with no sales still needs a nil return.
Does WooCommerce check EU VAT numbers on its own?
No. Core has no VAT number field and no VIES lookup. Woo's EU VAT Number extension adds both, and cannot validate UK numbers.
Which address does WooCommerce use to pick the VAT rate?
The shipping address, by default. Keep it for physical goods: the rate follows where the parcel arrives, and the shop base option charges your home rate on every order.
Sell internationally
Sell internationally on WooCommerce: pick the market from your own data, quote duties at checkout, plan VAT registration, offer local payment methods.
Multi-currency store
Multi-currency WooCommerce: showing a currency vs charging in it, manual per-market prices over live rates, VAT-inclusive display, and when a plugin will do.
UK VAT
WooCommerce VAT for UK sales: the £90,000 threshold, tax classes for 20%, 5% and 0%, VAT-inclusive prices, the £135 import rule, Northern Ireland and MTD.
Accounting integration
Syncing WooCommerce orders, refunds, fees and taxes into accounting: what to sync, what not to, and the reconciliation rules that keep the books clean.
See how many sales your store is losing
Start with a free speed audit. You'll get your store's real numbers and an honest recommendation — even if it's "you don't need us".