Launch pricing: Lock in Pro at $79/yr before prices go up View pricing →

WooCommerce EU VAT compliance: the end-to-end OSS workflow

If you sell goods or digital services from one EU country to consumers in other EU countries, woocommerce eu vat compliance is less a single task than a six-step workflow that runs all year. Most of it is bookkeeping that’s easy to get subtly wrong — counting a sale that shouldn’t count, missing the moment you cross a threshold, or charging the wrong rate. Sellinor EU VAT One Stop Shop (OSS) for WooCommerce turns that workflow into something your store does for you. Here is the full checklist, and exactly which parts the plugin automates.

Not tax advice. This page describes how the plugin works, not what you must do. Confirm your obligations with a qualified tax professional.

1. Classify every order correctly (free)

Compliance starts with knowing which sales are even in scope. The plugin classifies every WooCommerce order automatically into one of five types — Domestic, Non-EU, EU B2B, EU B2C, or No country — and only genuine cross-border EU B2C sales count toward the threshold.

The hard parts are handled for you:

  • Place of supply. Digital-only orders use the billing country (digital supplies are taxed where the customer belongs); physical orders use the shipping country, falling back to billing.
  • Special territories that carry an EU country code but sit outside the VAT area — the Canary Islands, Åland, Büsingen, Mount Athos and others — are detected from the postcode and excluded.
  • Northern Ireland is the reverse: a GB address with a BT postcode is recognised as XI under the NI Protocol and stays in scope for goods.

You can see the verdict on every order: a color-coded OSS status column in the orders list and an EU VAT OSS box on each order screen, both on HPOS and legacy storage. There’s no manual override by design — classification is always recomputed from the order’s real data, which keeps the threshold total auditable. See Order classification.

2. Track the EUR 10,000 OSS threshold live (free)

Under OSS you can keep charging home-country VAT on cross-border B2C sales until they pass EUR 10,000 in a calendar year. The plugin keeps one running total per year, broken down per destination country, updated as orders come in.

The total reflects reality, not gross sales. The tracked amount per order is order total minus tax (shipping in, VAT out), in EUR. Orders count once they reach Processing or Completed; moving an order to Cancelled, Refunded, Failed, On hold, or Pending — or to the trash — reverses it out, and a per-order refund ledger means partial refunds subtract at their net amount without ever double-counting.

Crucially, the plugin implements the “once crossed, stays crossed” rule: after a crossing the year keeps reporting as exceeded even if refunds pull the total back under the line, and the following year starts obligated. You get a dashboard progress bar, per-country breakdown, manual adjustments for off-platform sales (Amazon, eBay, in person), a Recalculate button, and one free email alert at 100%. See threshold tracking.

The free plugin tracks EUR stores. On a non-EUR store, tracking pauses until the Pro multi-currency module converts amounts using European Central Bank reference rates.

3. Capture B2B VAT numbers to exclude business buyers (free)

B2B sales don’t count toward the threshold — but only if you can tell they’re B2B. The free plugin adds an optional VAT number field at checkout, on both the classic and block checkout, and stores it on the order. Format validation is done locally (country prefix plus each member state’s length and pattern), with no external call.

The design principle worth knowing: a bad number never hides a sale. A malformed VAT number keeps the order counting toward the threshold and flags it with a warning icon for your review, rather than silently dropping it. A company name alone never makes an order B2B — only a usable VAT number or an explicit VAT exemption does. See B2B VAT capture at checkout.

4. Validate VAT numbers via VIES and zero-rate (Pro)

Format-valid isn’t the same as real. The Pro VIES validation feature verifies the entered number live against the EU’s official VIES service. When VIES confirms a number that belongs to another member state, VAT is removed from the cart during checkout — the customer pays the zero-rated total, and the order (and its emails) carry the required statement:

Zero-rated intra-Community supply — Article 138 of Council Directive 2006/112/EC; VAT to be accounted for by the customer.

Outages are handled gracefully — a VIES outage is never recorded as “invalid”; the order falls back to the format check. You can also enable strict mode so orders are excluded only once VIES confirms them. See VIES VAT validation.

5. Apply destination VAT rates once you cross (Pro)

Knowing you crossed is only half the job — from that moment you must charge each customer’s destination rate. With Pro auto-apply VAT rates enabled, the plugin imports the standard VAT rate for every other EU member state into your WooCommerce tax tables at the exact point you cross, and carries the obligation into the following year. It updates changed rates in place, never touches rates you created yourself, and warns you if WooCommerce tax settings would stop the rates from actually being charged. See auto-apply VAT rates.

Standard rates only. Reduced and zero rates for specific product categories are not handled automatically — configure those yourself if they apply.

6. Prepare the quarterly OSS return (Pro)

Once destination VAT applies, the Pro Reports tab produces a country-by-country breakdown for each quarter — Country, standard VAT rate, net sales (EUR), and VAT due (EUR), with a totals row — the same figures an OSS return asks for. Refunds are attributed to the quarter they happen in, matching how OSS corrections are reported, and each quarter has Print and Export CSV actions. See OSS return reports.

The plugin prepares these figures; it does not file or submit them. There’s no IOSS or import-VAT handling, and reports use standard rates only. Pro also adds predictive forecasting: a projected crossing date, 70% and 90% early-warning emails, and a monthly digest.

Free vs. Pro, honestly

StepFreePro
Order classification + OSS statusYes
Live EUR 10,000 threshold tracking (EUR stores)Yes
B2B VAT field + local format validationYes
100% threshold email alertYes
Live VIES validation + zero-ratingYes
Auto-apply destination standard ratesYes
Quarterly OSS reports + CSVYes
Multi-currency (non-EUR stores)Yes
70%/90% emails + forecast + digestYes

Start free on an EUR store and add Pro when you actually approach the line. Explore the full feature set on the EU VAT OSS plugin page.

Frequently asked questions

What does WooCommerce EU VAT compliance actually involve for a B2C seller?

For a cross-border B2C seller it comes down to a few moving parts: classify every order correctly (place of supply, special territories, Northern Ireland), watch the EUR 10,000 OSS threshold across the calendar year, exclude genuine B2B buyers who give you a VAT number, and once you cross the threshold, charge each customer's destination-country rate and prepare a quarterly OSS return. The plugin automates the tracking and classification; filing remains your responsibility. This is not tax advice — confirm your obligations with a qualified tax professional.

What counts toward the EUR 10,000 OSS threshold?

Only genuine cross-border B2C sales to other EU member states. Domestic sales, sales outside the EU, sales to excluded special territories, and B2B orders with a usable VAT number (or marked VAT-exempt) are excluded automatically. For each qualifying order the tracked amount is the order total minus tax — shipping included, VAT not — in EUR. Once you cross in a year, that year stays crossed and the following year starts obligated.

Does the plugin handle B2B customers and zero-rating?

The free plugin adds an optional VAT-number field at checkout (classic and block) and validates its format locally, excluding format-valid B2B orders from the threshold. Pro adds live VIES validation: a confirmed-valid cross-border number is zero-rated during checkout, the customer pays the zero-rated total, and the order carries the Article 138 reverse-charge statement. A bad number never silently hides a sale — it stays counted and is flagged for review.

What happens after I cross the threshold?

From the moment you cross, destination-country VAT applies. Pro can auto-import each member state's standard VAT rate into your WooCommerce tax tables at the crossing point, and the Reports tab produces country-by-country quarterly tables (net sales and VAT due) you can print or export to CSV for your OSS return. Standard rates only — reduced and zero rates are not handled automatically.

Does the plugin file my OSS return for me?

No. It prepares the figures — a country-by-country, quarter-by-quarter breakdown ready to transcribe — but it does not file or submit anything to a tax portal. You (or your accountant) still lodge the return. It does not handle IOSS or import VAT, and it tracks against standard rates only.

Is this tax advice?

No. The plugin is a tracking, classification, and reporting aid. EU VAT rules vary by situation and change over time, so confirm your actual registration and reporting obligations with a qualified tax professional before relying on any figure it produces.

Make WooCommerce EU VAT compliance a workflow, not a worry

Install EU VAT One Stop Shop (OSS) for WooCommerce for live, refund-aware threshold tracking, automatic order classification, and a free alert at 100% — on EUR stores, free.

See plans & pricing

Or read the documentation.