Shopify EU reverse charge B2B VAT: VIES on the cart, tax-exempt customer, VAT off at checkout. Hide the form for your own country. VAT ID on the order.
2026-10-08

Shopify EU reverse charge B2B VAT after VIES — not a blanket 0%

A German wholesaler buys from your Dutch store. You should not put 21% on that invoice: intra-Community B2B, reverse charge, the buyer accounts for VAT. Checkout still adds 21%. Or the opposite: a neighbour with a domestic VAT number gets 0% — that is not reverse charge. Shopify EU reverse charge B2B VAT is that split: a valid *foreign* VIES number → tax-exempt in Shopify; domestic and consumers → VAT stays.

This is not the VIES API check and not the checkout-mode article (Standard vs Draft). This piece is when exemption is reverse charge, when you hide the form for your own country, and what accounting needs on the order. OO - EU B2B & Wholesale puts VIES + EU Tax Exemption on Starter. The app does not file your recapitulative statement; it removes VAT when Shopify treats the customer as tax-exempt.

Reverse charge is not “every B2B account at 0%”

Shopify can mark a customer tax exempt. That is a flag, not an intra-Community rule. Shopify Help on EU taxes covers registrations, Markets, and OSS for consumers. Intra-EU B2B usually needs the *buyer’s VAT ID in another member state*, checked against VIES. A Dutch number on a Dutch shop is typically domestic VAT, not reverse charge.

Without that split you get:

  • consumer VAT on the German wholesaler, credit later;

  • tax-exempt on every wholesale tag, including your own country;

  • a “0% VAT” discount code that retail finds too.

None of those store a validated ID plus VIES company name on the order. A October 2026 listing review (Sensorkranenwinkel.nl) calls out the app’s BTW verlegd (reverse charge) option — that layer, not a second Shopify tax engine.

Workarounds that fail the accountant

Tax-exempt every approved wholesaler

Staff ticks the box after registration approval. Fine until a personal email inherits the tag, or a number lapses. No VIES at purchase. No DE vs NL distinction.

VAT ID in the order note, 21% still on the tax line

The text is there. The tax line is not. You correct it in the books. That does not scale.

VIES form shown to visitors from your own country

Domestic buyers validate, become tax-exempt, and you have 0% on a home-country supply. General Settings include Hide VAT validation form for visitors from same country as your shop — “Domestic VAT numbers should never be VAT-exempt.”

That is the difference between “all B2B at 0%” and reverse charge for the *other* member state.

Starter: VIES, then Shopify’s tax engine

OO - EU B2B & Wholesale is Built for Shopify (5.0 from 34 reviews: 33 five-star, 1 four-star). Listing: Advanced B2B tax management with VAT handling and EU Tax Exemption compliance. Live USD pricing: Free (1 pricing rule, 1 registration form + approve/reject, Flow templates; no caps on development stores). Starter $22/month or $220/year: unlimited custom/volume pricing, unlimited registration forms, EU Tax exemption (VIES + logs), tax display incl/excl, login-to-see-prices, 14-day trial. Growth $37/month or $370/year: + bulk forms, draft checkout, RFQ, order limits. VIES is Starter, not Free. Do not claim this app replaces Shopify Plus B2B catalogues.

The EU Tax Exemption layer does not compute rates. Step 4: the app leans on Shopify Markets. You keep dynamic taxes on.

Cart: email + VAT ID, then VIES

Standard Checkout Logic (mandatory when prices are VAT-exclusive): the shopper enters email and VAT number. That number hits the EU VIES API. On success:

  • the customer is marked tax exempt in Shopify;

  • VAT data lands in cart attributes and order notes;

  • native checkout drops VAT where Shopify can.

The validation email must exactly match the checkout email. Otherwise 21% stays — not a reverse-charge failure, a mismatch.

VAT-inclusive prices, several Markets, or fixed market prices: Draft Order Logic. Do not pair it with exclusive pricing.

Settings the books actually use

In General Settings, besides checkout mode:

  • Require VAT validation before checkout — EU shoppers cannot proceed until VIES succeeds; non-EU can.

  • Hide … same country as your shop — domestic visitors never see the form. No 0% on home-country sales.

  • Hide … non-EU countries — if you only support EU reverse charge.

  • Save validated VAT ID as order note — the number on the order for accounting.

  • Save VIES company address data — name/address when VIES returns them (not every country shares).

  • Add tag to customer / order after VAT validation — filter reverse-charge orders, payment methods, Flow. A VIES tag is not a price list until you point visibility at it.

Default cart attributes: `tax_exempted`, `vat_number`. Do not rename them without a reason; integrations read those keys.

The cart validation block is required (Step 1). No block, no storefront flow.

Worked path: NL shop, DE buyer, NL buyer

Markets: Netherlands, dynamic taxes on. Exclusive prices → Standard Checkout Logic.

Theme: cart block under the summary, above Checkout.

General Settings: validation required, form hidden for NL and non-EU, VAT ID as order note, VIES address on, tag `vat_validated` on customer and order.

Test 1: private window, German address, valid DE VAT ID, same email on validation and checkout. Tax line 0%. Note with the number. Tag on the order. That is the storefront side of reverse charge — ICP filing stays yours.

Test 2: Dutch address. No VIES form. Checkout with NL VAT. Not tax-exempt.

Test 3: DE number, different email at checkout. 21% remains. That is the docs warning, not a VIES outage.

Plus-only: optional EU VAT Validation block in the Checkout Editor (Installation – Checkout Page). Not on Basic. Not a substitute for the cart flow.

Get it live

  1. Install OO - EU B2B & Wholesale. VIES needs Starter $22/month (or $220/year), 14-day trial. Free has no EU Tax exemption.

  2. Add the cart block — Step 1.

  3. Pick checkout logic: exclusive VAT → Standard; inclusive + complex Markets → Draft (do not mix).

  4. Markets: dynamic taxes. Step 4.

  5. General Settings: same-country hide on, VAT ID note on, tags if accounting wants filters.

  6. Test DE (0%) and NL (21%) on the same SKU. Wrong totals: B2B tax-exempt checkout.

The app is not tax advice. Registrations, OSS, and recapitulative statements stay with you and your accountant.

Wrap-up

Shopify EU reverse charge B2B VAT is not a discount code and not tax-exempt on every wholesale tag. It is VIES for the *other* member state, VAT off in native checkout, the ID on the order, and the home country deliberately excluded. Native Shopify does not test a foreign VAT number on the cart. Starter does.

Put that layer in OO - EU B2B & Wholesale and let the next German wholesaler see 0% — while the neighbour still pays 21%.

online origins logo full

The Shopify Select partner for ambitious e-commerce businesses that want to grow!

linkedin online origins iconinstagram online origins icon

Reviews

5/5

Check on Google

Mail: info@onlineorigins.nl

Tel: 073 234 0612

KVK: 89825624

BTW: NL865123639B01

Bruistensingel 500,
5232 AH 's-Hertogenbosch
Cookies

© 2026 Online Origins