VAT display · Shopify settings

Shopify tax-included vs tax-excluded prices: what the EU invoice needs

Last updated 3 September 2026

Shopify has three ways of showing tax in your prices, and the setting is usually chosen once, early, by whoever built the store. It decides what shoppers see, which EU consumer law has opinions about. It also decides how VAT is calculated, which is where a cent goes missing and an e-invoice gets bounced. This guide covers both, plus the part the setting never touches: what has to be on the invoice either way.

The three settings

They live in Settings, then Taxes and duties. Shopify moves labels around, so match on what the option does rather than on the exact wording.

SettingWhat the shopper seesHow VAT is derived
Prices exclude tax Net price on the product page, tax added as a line at checkout. Multiplication. Your price is the taxable base and VAT is calculated from it.
All prices include tax One gross number, the same one that gets charged. Subtraction. Your price is the gross and the taxable base is extracted from it.
Include or exclude tax based on the customer's country A gross number that changes per destination country. Subtraction, then re-application at the destination rate. Requires tax-inclusive pricing to be on.

Which one to pick in the EU

If you sell to consumers, the answer is decided for you. Directive 98/6/EC defines the selling price as the final price including VAT, and national implementations say the same thing in blunter language: in Germany the Preisangabenverordnung requires a Gesamtpreis, the total a consumer actually pays. A German storefront quoting net prices to shoppers is a price indication problem, and those are policed by competitors and consumer associations rather than by the tax office.

If you sell only to businesses, net pricing is normal, expected, and easier to keep arithmetically clean. Buyers reclaim the VAT, so the number that matters to them is the net one.

Most EU stores sell to both and land on tax-inclusive pricing, because the consumer rule is the strict one. That is the right call. It also imports the rounding problem below, which is fixable but not by a setting.

The third option is a pricing decision, not a tax one. Showing prices by destination country keeps your net revenue per unit fixed while the shopper's price moves with their VAT rate. The alternative, one gross price everywhere, keeps the shopper's price fixed and moves your margin instead. Neither is more compliant. Pick the one you can explain to yourself in a year.

What the setting does not change

Whatever the storefront displays, the invoice has to show the same three things. Article 226 of the VAT Directive requires the taxable amount per rate, the rate applied, and the VAT amount payable. A gross total on its own is not an invoice, in any of the three configurations.

That is worth saying out loud because tax-inclusive pricing makes stores feel finished. The customer saw one number, paid that number, and got a confirmation email showing it. The legal document still needs the breakdown, and from January 2027 German B2B buyers need it as structured data rather than as a PDF. The 2027 mandate has the timeline.

The one-cent trap

Here is the whole problem in one order. Three units at 9.99 euro gross, German VAT at 19 percent.

StepCalculationResult
Gross the customer pays3 × 9.9929.97
Taxable base, extracted29.97 ÷ 1.19 = 25.184873…25.18
VAT by subtraction29.97 - 25.184.79
VAT by multiplication25.18 × 19% = 4.78424.78

Both figures are honest arithmetic and they disagree. Take the subtraction answer and the invoice says 4.79 euro of VAT on a base of 25.18 euro, which does not multiply out. Take the multiplication answer and net plus VAT comes to 29.96 euro, a cent less than the customer was charged. The cent has to live somewhere.

This is not a Shopify bug. Any system that starts from a gross price hits it, and it gets more frequent with awkward prices, odd quantities, and orders that mix VAT rates, because each rate forms its own breakdown group with its own rounding.

Why a cent gets an invoice rejected

EN 16931, the standard behind XRechnung, ZUGFeRD and Peppol BIS Billing 3.0, is strict about internal consistency. Its business rules require each VAT breakdown group's tax amount to equal that group's taxable amount multiplied by its rate, the document's total VAT to equal the sum of those groups, and the gross total to equal net plus VAT. A file where VAT was found by subtraction can satisfy the totals and still fail the multiplication check.

How much slack you get depends on the validator, the format profile and the version, which is exactly why you should not plan around slack. An invoice that passes one buyer's accounts payable system and gets rejected by the next is worse than one that fails everywhere, because you find out weeks later from a customer instead of immediately from a tool.

The rounding amount field is not the escape hatch. EN 16931 does have a rounding amount, but it exists to round the amount payable, for instance where cash rounding to five cents applies. It does not excuse a VAT figure that disagrees with its own taxable base.

What to do about it

Quick audit of your own store

Go deeper

Frequently asked questions

Should Shopify prices include tax in the EU?

For consumer sales, yes. Directive 98/6/EC defines the selling price as the final price including VAT, and national rules such as Germany's Preisangabenverordnung say the same. For business-only stores, net prices are normal and easier to keep arithmetically clean.

What does "include or exclude tax based on your customer's country" do?

It holds your net price steady and lets the gross move with the destination rate, so a German 19.99 euro product is shown to a Dutch buyer with German VAT stripped and Dutch VAT applied. It needs tax-inclusive pricing switched on, and it only makes sense once you are registered for OSS or locally.

Does tax-inclusive pricing change what my invoice must contain?

No, only how the figures are derived. Article 226 of the VAT Directive requires the taxable amount per rate, the rate, and the VAT payable regardless of what the storefront shows. Tax-inclusive pricing means those numbers are extracted from the gross rather than added to a net.

Why is my invoice one cent out?

VAT was found by subtraction instead of multiplication. Three items at 9.99 euro gross with 19 percent VAT total 29.97 euro. The base rounds to 25.18 euro, so subtraction gives 4.79 euro while 25.18 euro times 19 percent gives 4.78 euro. The document has to pick one and stay consistent.

Will one cent fail EN 16931 validation?

Assume yes. The standard requires each VAT breakdown group's tax amount to match its taxable amount times the rate, and the totals to add up from there. Tolerance varies by validator, profile and version, so a file that one buyer accepts can be rejected by the next.

Can the rounding amount field absorb the difference?

No. That field rounds the amount payable, for example where cash rounding to five cents applies. It does not justify a VAT figure that disagrees with its own taxable base.

Is net pricing safer?

Arithmetically, yes, because the taxable base is the number you set. It is not available for EU consumer sales, where the displayed price has to be the final price. Stores selling to both usually keep tax-inclusive pricing and fix the calculation in the invoicing layer.

This guide is general information for Shopify merchants, not legal or tax advice. VAT rules, national price indication rules and validator behaviour vary and change, and edge cases exist. Confirm your own obligations with a qualified tax adviser.

E-invoices from your Shopify B2B orders

Zeppol turns every B2B order into an EN 16931 document, checks it against the EU and the German rules, and sends it over Peppol or by email. Join the list and I'll be in touch before the deadline.