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.
| Setting | What the shopper sees | How 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.
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.
| Step | Calculation | Result |
|---|---|---|
| Gross the customer pays | 3 × 9.99 | 29.97 |
| Taxable base, extracted | 29.97 ÷ 1.19 = 25.184873… | 25.18 |
| VAT by subtraction | 29.97 - 25.18 | 4.79 |
| VAT by multiplication | 25.18 × 19% = 4.7842 | 4.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.
What to do about it
- Decide which number is fixed. The gross the customer paid is fixed. It was charged, and the payment record proves it. Everything else on the invoice has to be derived so that it adds back up to that figure.
- Recalculate at invoice time, do not copy. Reading Shopify's per-line tax fields straight into an e-invoice is how the inconsistency travels. The taxable base and VAT per rate should be recomputed as a set, then checked against the order total.
- Check the total, every time. Net plus VAT must equal the amount charged, to the cent, before the file is sent. Not after a buyer complains.
- For B2B-only stores, price in net. The taxable base becomes the number you set, the VAT is a multiplication, and the whole class of problem disappears.
- Watch mixed-rate orders. Books at a reduced rate next to standard-rated goods means two breakdown groups, two roundings, and two chances to be a cent out.
Quick audit of your own store
- Open Settings, then Taxes and duties, and write down which of the three settings is on. Most people do not know.
- If you sell to EU consumers with tax excluded, that is a price indication issue to fix first.
- Take a real order with an odd quantity. Divide the gross by one plus the rate, round the base, then multiply it back. If you get a different VAT figure than the order shows, you have the trap.
- Check a mixed-rate order the same way, per rate rather than on the order total.
- Look at whatever generates your invoices and ask whether it recalculates or copies.
Go deeper
- EN 16931 explained, the standard whose consistency rules reject a one-cent break.
- Shopify VAT in Germany, rates, setup and a §14 UStG compliant invoice.
- Shopify VAT exempt B2B customers, what happens when the tax is zero and why the invoice still needs work.
- EU B2B e-invoicing on Shopify, the hub guide: mandates, formats and deadlines.
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.