VAT-inclusive prices on Shopify: what cross-border buyers actually pay — and who quietly overpays.
On a tax-inclusive store the sticker price is the contract: €100 means €100. Cross-border, Shopify keeps that promise by changing the VAT inside the price — which is correct, looks wrong in two specific ways, and genuinely is wrong for one kind of buyer.
Measured on real Shopify checkouts · August 2026 · Irish store, tax-inclusive, €100 gross → Germany
§ 1 · What is actually happening
The total holds still; the tax inside it moves.
With tax-inclusive pricing, Shopify backs the destination country's VAT out of the gross: sell €100 from Ireland to a German consumer and the checkout shows €15.97 of German VAT inside €100.00 — 19% of the €84.03 net, not 19% added on top. Different destination, same total, different tax line. That much we measured agreeing with the tax engine's own arithmetic:
| Buyer | Tax line | Buyer pays | ✓ |
|---|---|---|---|
| Guest consumer | €15.97 included | €100.00 | ✓ |
| Reverse-charge-exempt business buyer | €0.00 | €100.00 | ✗ |
The second row is the quiet overpayment: the exempt buyer's tax line is correctly €0.00 — and they still pay the same €100.00 gross as a taxed consumer, so the VAT amount stays in the price they were never supposed to bear.
That second row is Shopify working as configured, not a bug: whether a
zero-rated buyer pays the net or the gross is a per-market setting (Shopify
calls it dynamic tax inclusion — the API name is
inclusiveTaxPricingStrategy). Left unset, everyone pays the
sticker price, exemption or not. For a store with business buyers, that means
every reverse-charge customer overpays by exactly the VAT amount, with a
checkout that looks perfectly correct.
§ 2 · The false alarm
Before the address is complete, the estimate lies to everyone.
One more measured behaviour, because it produces most of the panic: with only a country selected, checkout's tax estimate uses the standard rate for every product in the cart. It survives a page reload. Only when a full delivery address is entered does the line settle to the product's actual rate. If you've been debugging a "wrong VAT rate" from the estimate line, you may have been reading a placeholder.
§ 3 · Check it yourself
Three readings, in the right order.
-
Check the market setting first
If you sell to businesses: is dynamic tax inclusion configured for the markets where they buy? If not, zero-rated buyers are paying the gross sticker price today.
-
Walk a checkout with a full address
Enter the complete delivery address before reading the tax line — the pre-address estimate shows the standard rate for everything. Then wait for the totals to settle; they render asynchronously.
-
Re-check after any change
Price and tax setting changes propagate to checkout on a delay — up to an hour in our measurements. A reading taken right after a change proves nothing in either direction.
§ 4 · The continuous version
VATparity prices inclusive scenarios on every scan.
The scan asks Shopify's own tax engine what each kind of buyer would pay on your store — inclusive or exclusive, guest or business — and compares every answer against a versioned EU/UK rate table, with the evidence attached. Nothing is ordered, paid for, or changed. The paid plan re-scans weekly and alerts you when an answer moves.
§ 5 · Related problems