Shopify Subscriptions: Tax & VAT Handling for UK and EU Stores
Shopify subscriptions tax for UK and EU stores: OSS thresholds, post-Brexit VAT, B2B reverse charge, refund reversal and which apps get recurring tax right.
The most common Shopify subscription tax mistake is assuming the tax that calculated correctly on the first order will stay correct on every recurring order after it. It will not necessarily. A subscription is not one sale that gets tax applied once. It is a first sale followed by an indefinite series of automated re-sales, and the tax on each is recalculated by code, on a schedule, against whatever settings are in force the day the charge runs. Not the day the customer signed up. The day the charge runs.
That distinction is the whole article. The first order goes through Shopify checkout, VAT calculated live against the customer's address and your registrations, and it usually looks fine. Then your subscription app creates order two, order three, order twelve, each a brand new order with its own freshly calculated tax. If anything drifted in between, the customer's country, your registrations, the applicable VAT rate, your tax configuration, the recurring order can quietly be wrong while the original still looks perfect. Owners treat subscription tax as a thing set up once at signup. It is actually re-evaluated on every billing cycle, and it needs watching. One thing to say plainly first: this is practical guidance from people who build and audit Shopify stores for a living, not formal tax advice, and VAT is complicated enough that anything high-stakes deserves a real accountant.
Why a recurring charge is a brand new order
Most owners imagine the subscription as a single standing arrangement with the tax decided once. What really happens is closer to a robot placing a fresh order on the customer's behalf every month.
When a recurring charge runs, the app creates a new order in Shopify, and Shopify calculates tax on it the same way it does for any order: it reads the shipping address, your current tax registrations and settings, the current rates, and produces a tax line. This is correct behaviour, not a bug. But the inputs are live values, read at the moment the charge runs, and any can have changed since the customer first subscribed. The customer can change their delivery address in the portal. You can cross a sales threshold that changes your VAT obligations. A government can change a VAT rate. You can edit your own tax settings. Each changes the answer, and the recurring order reflects the new answer, with nobody in the loop. Subscriptions are designed to run untouched, which is exactly why a tax error in a recurring charge can compound for a year before anyone notices.
UK VAT after Brexit, for subscription stores
For a UK store, the post-Brexit position is the starting point. The UK is now outside the EU VAT system, which changes how a UK subscription business is taxed depending on where its subscribers live.
A VAT-registered UK store charges UK VAT on sales to UK consumers, the standard rate being 20% with reduced and zero rates for certain goods. The change is cross-border. A UK store shipping physical subscription goods to an EU customer is now exporting. The sale can typically be zero-rated for UK VAT, but import VAT and possibly duty then become a question at the EU border, which historically meant the customer or carrier got an unexpected bill. For a subscription that is a real problem, because it does not happen once. It happens on every recurring shipment, and a customer surprised by a customs charge on box three tends to cancel.
There is also the £135 rule working the other way. For goods sold to GB consumers in consignments valued at £135 or under, an overseas seller is generally expected to charge UK VAT at the point of sale rather than leaving it for import. An EU store running subscriptions into the UK applies that per shipment, because each recurring delivery is its own consignment, tested on its own value. Twelve boxes a year is twelve consignments. Digital products follow the customer: a UK store selling a digital subscription to a UK consumer charges UK VAT.
The EU OSS scheme: what replaced VAT MOSS, and why subscriptions trip the threshold
You may remember VAT MOSS, the Mini One Stop Shop, which only ever covered cross-border digital services. Since July 2021 it has been replaced and widened into OSS, the One Stop Shop, which covers cross-border business-to-consumer sales of both goods and digital services within the EU. This is the scheme that matters for an EU subscription store, and where subscriptions cause trouble that one-off sellers never see.
Here is the mechanism. There is now a single pan-EU threshold of 10,000 EUR per year, a combined figure across all your cross-border B2C sales into other EU countries, not a separate allowance per country. Below it, an EU seller can charge their home-country VAT rate on those sales. Above it, they must charge the VAT rate of the customer's country, and OSS exists so they can do that without registering in every member state: they file one quarterly return in their home country and OSS distributes the VAT.
Now add recurring revenue. A one-off seller crossing 10,000 EUR is making active sales, so they tend to be paying attention. A subscription store crosses the threshold passively. The recurring charges stack up month after month while nobody watches the cumulative figure, and the day you sail past 10,000 EUR, the correct VAT rate on your next cross-border recurring charge changes from your home rate to the destination country's rate. If your tax configuration has not been updated, every cross-border recurring charge after that point is wrong. This is the single most common way we see subscription stores get VAT wrong, and we will come back to it.
A note on the UK and OSS, because the internet muddles this. A UK-established business does not use Union OSS the way an EU-established business does. A UK store selling digital services to EU consumers typically registers for Non-Union OSS through a chosen EU member state. There is also IOSS, the Import One Stop Shop, for low-value goods imported into the EU from outside, consignments up to 150 EUR, and that is the one a UK store shipping subscription boxes into the EU should be looking at. The detail depends on your business, so treat this as a map and get the route confirmed by an accountant.
Business or consumer? VAT-ID validation and the reverse charge
So far this has been about consumers. Selling to other businesses is taxed differently, and a subscription store that serves a mix of the two has a detection problem.
Within the EU, a cross-border B2B sale where the buyer is a VAT-registered business in another member state is generally handled by the reverse charge: the seller does not charge VAT and the buyer accounts for it themselves. But that treatment depends on the buyer's VAT number being real and verified, which in practice means checking it against VIES, the EU's VAT number validation system. If you do not validate the number, you cannot safely apply the exemption.
This is where subscriptions and Shopify collide. Shopify checkout does not, on its own, robustly capture and validate an EU VAT number and apply reverse-charge treatment without a tax service or app. So a store selling to both consumers and businesses needs a way to collect the buyer's VAT ID, validate it, apply the exemption, and keep applying it correctly on every recurring order. The lazy outcome, and we see it constantly, is the store charges consumer VAT to everyone. That over-charges every B2B customer and creates a reconciliation mess. Shopify Tax and external engines such as Avalara can handle VAT-ID validation. A basic native setup with no tax service usually cannot.
Tax-inclusive pricing and what happens when the rate changes
UK and most EU consumer pricing rules expect prices shown to consumers to include VAT, so a B2C subscription store generally advertises tax-inclusive prices. A box is "£24 a month," and that £24 already contains the VAT. That is the right call for B2C, but it creates a subtle problem the moment a recurring charge's applicable rate changes.
Say you advertise a subscription at a fixed tax-inclusive price, a customer in another EU country signs up, and later you cross the OSS threshold so the applicable rate on their charge becomes their country's rate rather than yours. The inclusive price was a single fixed number, so something has to give. Either the gross price stays at the advertised figure and your net revenue moves, because a different slice of that gross is now VAT, or the gross price moves and the customer sees a charge that does not match what they signed up for. Neither is wrong, but it is a decision, and your store has to be configured to reflect the decision you made rather than landing on one by accident.
B2B buyers, meanwhile, usually expect tax-exclusive display. A store serving both audiences needs a coherent answer to who sees which. Shopify can include or exclude tax in displayed prices and adjust prices by the customer's country, but how faithfully a subscription app carries that through to the recurring charge varies, and it is worth testing rather than assuming.
If reading this is making you uneasy about your own store, that feeling is the useful part. A Shopify subscription tax-config audit is a contained piece of work: WitsCode checks whether your recurring orders actually run through Shopify's tax engine, whether your registrations match where your subscribers really are, and whether your inclusive-pricing setup does what you think it does. It is the kind of last-mile check that is cheap to do and expensive to skip.
Refunds: reversing the VAT correctly
When you refund a subscription order, the VAT collected has to be reversed, fully or proportionally, because a refund unwinds part of the sale and the VAT went with it. Processed properly through Shopify, a standard refund handles the tax reversal for you. The trouble is the cases that do not go through Shopify properly.
Partial refunds need care. If you refund one item out of a multi-item subscription box, or issue a goodwill partial credit, the tax must reverse on the refunded portion only, and you want Shopify calculating that rather than guessing. Refunds processed outside Shopify are the real danger: a bank chargeback, or a manual refund pushed through your payment processor, returns the customer's money but does not touch the Shopify order, so the VAT line never reverses and your records overstate the VAT you actually collected. The rule is simple. Refund through Shopify whenever you can, and when a chargeback or external refund happens, reconcile it manually so your VAT figures stay honest. Never just send the money back through the bank and consider it done.
The subscription apps, and what "handles tax" actually means
Every subscription app vendor tells you their app handles tax. That sentence does less work than it sounds.
Shopify Subscriptions, Shopify's own free app, leans entirely on Shopify's native tax engine. For a single-country store that is fine. It is weaker on B2B VAT-ID validation and will not flag when a recurring charge's tax has drifted. Recharge, the long-standing incumbent, historically ran its own checkout with its own tax handling, a known source of mismatch with Shopify's calculations, and it has been moving toward Shopify Checkout to fix that. Newer apps such as Loop, Skio, Appstle and Seal are mostly built on Shopify's native checkout, which means tax on both first and recurring orders is calculated by Shopify's engine, the more reliable arrangement. None of them, on their own, solves B2B VAT-ID validation without Shopify Tax or a tax service alongside.
Here is the honest framing. The real question is never "which app does tax." It is "does this app's recurring order pass through Shopify's tax engine, and is my Shopify tax configuration actually correct." A subscription app is a billing scheduler. It hands the order to whatever tax engine is wired up and applies the result. If your configuration is wrong, no OSS registration, no VAT-ID validation, the wrong inclusive-pricing setting, the app will faithfully apply that wrong tax on every charge, forever, without complaint. The correctness lives in the configuration and your registrations, not the app.
Which brings us back to the insight that matters most. The dangerous moment in subscription tax is not signup. It is the silent threshold crossing. We have repeatedly been called into UK and EU subscription stores that set their tax up correctly on day one, with a handful of home-country customers, and never looked again. Eighteen months later they have a healthy recurring base spread across several EU countries, they have quietly passed the 10,000 EUR threshold, and every cross-border recurring charge since has carried the wrong rate. Nothing alerted them. The app billed happily. The fix is not a clever plugin, it is a quarterly habit: check where your subscribers are, add up your cross-border B2C revenue for the year, see whether you are over a threshold, and confirm your registrations match. If that habit does not exist yet, or you would rather have someone verify the plumbing first, that is exactly the audit WitsCode runs, and a sensible conversation to have before the next billing cycle rather than after.
Get weekly field notes.
Practical writing on shipping products, straight to your inbox. No spam.
Need help with this?
WordPress Development
We design and build web apps, MVPs, and SaaS products. Talk to us about what you are working on.
Talk to usWant to discuss shopify niche topics (gap-fill) for your business?
Start a project and we'll talk through where you are, what's working, and the highest-leverage moves for the next 90 days.