Free Shopify store auditSpeed, SEO and conversion leaks — no cost, no obligation.
Claim it
Thriftizer Solutions LLPShopify Select Partner
Book a Growth Audit
Shopify Aug 5, 2026 9 min read

UK Shopify Migration: VAT Rules, EU OSS and Royal Mail Rate Tables

UK VAT registration, tax overrides, IOSS versus Union OSS, the €150 line, and why Royal Mail's dimensional pricing doesn't fit Shopify's weight-based rate tables.

The short version of Shopify UK VAT setup: register for UK VAT once your rolling 12-month turnover passes £90,000 (or voluntarily before that if you're reclaiming input VAT), put your VAT number into Settings → Taxes and duties → United Kingdom, set your prices to include tax, then override the 20% default on any collection that is genuinely zero-rated or reduced-rated. That takes about twenty minutes. The part that takes three weeks is everything that happens the moment an order crosses to Dublin or Berlin, because since Brexit those are exports, and your UK VAT registration does nothing for them.

Most of the UK migrations we handle arrive with the domestic side roughly right and the EU side quietly wrong — either VAT charged twice, or not charged at all and the customer hit with a handling fee at the door. Here's how we sequence it.

Get the domestic setup right before you touch markets

Shopify applies 20% to everything in the UK region by default. That's correct for most catalogues and wrong for several profitable ones.

Zero-rated in the UK: most food, children's clothing and footwear, printed books, newspapers. Reduced 5%: children's car seats, mobility aids for the over-60s, domestic energy. Shopify handles these through tax overrides tied to collections, not tags or product types. So you build a smart collection — "Kidswear 0% VAT" — and point the override at it. If your kidswear range spans adult sizes too, and it usually does, the collection has to filter on size or on a metafield, because HMRC cares whether the garment is designed for a child under 14, not whether it's in your kids category.

Two settings people skip:

  • Charge tax on shipping rates. UK postage takes the VAT treatment of the goods it carries. Shopify's toggle is all-or-nothing per region, so a mixed cart of standard and zero-rated goods will never be perfectly apportioned. For a food brand shipping only zero-rated goods, turn it off. For everyone else, leave it on and accept the rounding.
  • Include tax in prices. UK consumers expect a tax-inclusive number on the PDP. Turn this on before you set a single price, because switching it later re-interprets every price in the catalogue.

OSS and IOSS are two different schemes and you probably need the second one

This is the single most common mix-up we see. They get named interchangeably in agency proposals and they are not interchangeable.

IOSS (Import One-Stop Shop) covers goods shipped into the EU from outside it, in consignments with an intrinsic value at or below €150. That's the scheme a UK-warehoused brand needs. You register in one member state, charge the destination country's VAT rate at checkout, and file a single monthly return covering all 27. Because you're not EU-established, you register through an intermediary rather than directly.

Union OSS covers goods already sitting inside the EU. If you've put stock into a 3PL in the Netherlands or Germany, that's the scheme, and you register in the member state you dispatch from.

The €10,000 distance-selling threshold — the one that lets small sellers keep charging their home rate — applies only to businesses established in the EU. A UK company holding EU stock has no threshold. Destination VAT from the first order, whether that order is €8 or €800.

Neither scheme replaces your UK return. Exports out of GB are zero-rated for UK VAT, and HMRC will want proof of export: commercial invoice, dispatch records, carrier evidence. Keep it for six years. Royal Mail's despatch data covers this if you're actually using their manifest rather than sticking labels on by hand.

Configuring the EU side in Shopify without double-charging

In Markets, create an EU market (or individual country markets if you're pricing differently by country). Then in Settings → Taxes and duties, enter your IOSS number under the EU region. Shopify will apply the destination country's rate — 19% Germany, 21% Netherlands, 23% Ireland, 20% France — instead of your UK 20%.

The setting that decides whether this costs you money is "Include or exclude tax based on your customer's country". With it off, your £24 tax-inclusive price stays £24 in Germany and German VAT is carved out of it. With it on, Shopify holds the net price and recalculates.

Do the arithmetic on one order. A £24 UK price at 20% inclusive is £20 net plus £4 VAT.

  • Dynamic tax on: German customer sees £20 × 1.19 = £23.80. You keep £20.
  • Dynamic tax off: German customer sees £24, of which VAT is £24 × 19 ÷ 119 = £3.83. You keep £20.17.

Seventeen pence in your favour, which sounds like nothing until you look at Hungary at 27%: £24 inclusive leaves you £18.90 net, a 5.5% haircut on every order to Budapest. Across a catalogue with 28% blended margin, that's roughly a fifth of the margin on those orders. Pick deliberately. If you also set fixed per-market price lists, check what the checkout actually charges rather than what the theme displays, because market pricing and dynamic tax adjustment can both be in play and they don't always agree.

Above €150 the rules change completely

IOSS stops at €150 intrinsic value — goods only, excluding shipping and insurance. Cross it and the parcel goes through normal import clearance: import VAT plus any customs duty, payable by whoever is the importer of record.

You get to choose who that is, and the choice is a customer-experience decision dressed up as a tax one.

DAP / customer pays on delivery. Cheap to set up. Your Belgian customer gets a text asking for €41 plus a €15 carrier handling fee before the courier will hand over the box. Refusal rates on those orders are ugly, and the return leg costs you twice.

DDP / you collect at checkout. Shopify's duties and import taxes feature quotes duty and import VAT in the cart. It needs an HS code and a country of origin on every variant to quote accurately, and it needs an EU EORI number, because you're now the importer. Without HS codes it falls back to an estimate, and estimates on a £300 order can be out by £30 either way. Check what your plan includes before you promise the finance team a number.

We push DDP for any brand with an average order value above about £120 into the EU. Below that, the setup cost and the EORI admin rarely pay back inside a year.

One more thing on the horizon: the EU has been consulting on scrapping the €150 duty relief entirely as part of its customs reform. Nothing is in force yet, so build your setup so the threshold logic sits in one place and can be changed without re-tagging the catalogue.

Zero tariff under the TCA is not automatic

Brands assume the UK–EU Trade and Cooperation Agreement means no duty. It means no duty on goods that meet the rules of origin and are accompanied by a statement on origin.

If you cut and sew in Leicester, you're fine. If you import finished goods from Guangzhou, hold them in a Midlands 3PL and ship them to Madrid, those goods are Chinese in origin and the EU will charge the tariff. Repackaging and relabelling do not confer origin. We've had this conversation with three separate apparel founders who had budgeted zero and were looking at 12% on garments.

Get the origin determination from your supplier in writing, put it on the variant, and add the origin statement to your commercial invoice template.

Royal Mail rate tables: build them around dimensions you can't measure

Shopify's manual shipping rates read cart weight and cart price. Royal Mail prices on format, which is dimensional. That mismatch is where domestic shipping margin leaks.

The format boundaries that matter:

  • Large Letter — up to 750g, and no thicker than 2.5cm. The thickness is the constraint, not the weight.
  • Small Parcel — up to 2kg, 45 × 35 × 16cm.
  • Medium Parcel — up to 20kg, 61 × 46 × 46cm.

So the practical approach is to stop trying to model formats with weight tiers and instead split the catalogue into shipping profiles. One profile for genuinely letterbox-friendly SKUs — the single tee, the phone case, the sachet — with rates that assume Large Letter. Everything else in a parcel profile. Products in both profiles in one cart will produce a combined rate, which is roughly what you want anyway.

Set your weight tier breaks below the Royal Mail limit, not at it. A cart Shopify calculates as 740g becomes 780g once you've added a mailing bag and a returns slip, and you've charged Large Letter while paying Small Parcel. Break at 700g. Same logic at 1.9kg. Manual rates never see packaging weight, unlike carrier-calculated rates where you configure package dimensions.

Royal Mail re-prices in April most years. Keep the rate table in a spreadsheet with your buy price, sell price and margin per tier so the annual update is a twenty-minute job rather than an archaeology project. And if you're on Click & Drop, remember it pulls orders and pushes tracking; it does not quote rates at your checkout. Those are your numbers to maintain.

What breaks during the migration itself

Moving from WooCommerce, Magento or BigCommerce to Shopify, the tax and shipping config is not data you migrate. It's data you rebuild. The things that get missed, in rough order of frequency:

  1. Tax overrides. The old platform did them by product attribute; Shopify does them by collection. Nobody rebuilds them until an accountant notices.
  2. Variant-level weights. If they were approximate on the old store, every shipping rate you build on top is approximate too. Weigh a sample of 20 SKUs on real scales.
  3. HS codes and country of origin. Usually absent entirely. Bulk-edit them in via CSV before launch, not after.
  4. Historic order tax data for the VAT return covering the switchover. Export it from the old platform and keep it outside both systems.
  5. Northern Ireland. It's inside your UK region for VAT, but goods moving GB to NI have their own regime under the Windsor Framework. If NI is more than a rounding error in your revenue, talk to your accountant rather than a theme setting.

We run this as part of a Shopify migration rather than as a separate workstream, because the shipping profiles depend on the product data and the product data is what the migration is moving.

What Shopify won't do for you

It calculates and collects. It does not file. Your monthly IOSS return, your quarterly UK return, your Intrastat obligations if you go over the thresholds — those are yours, or your accountant's, or a filing provider's like Avalara or Taxually. Shopify's tax reports give you the numbers by destination country, which is most of the work, but somebody still has to submit them by the end of the following month.

The other thing it won't do is tell you that your override is wrong. A collection-based zero rate on the wrong products will happily undercharge VAT for eight months, and the correction comes out of your pocket, not your customers'.

If you're mid-migration or about to open the EU, send us the store URL and your two or three highest-volume EU destinations. We'll tell you what's misconfigured in the tax and shipping setup before it becomes a VAT correction — our free audit covers it, and if you'd rather talk to someone who has done this for UK stores specifically, that's what our UK team does.

Previous postNext post

Ready to scale your D2C brand profitably?

Let's build a growth engine that drives more traffic, more conversions and more profit.

Book a Growth Audit
📅 Free Audit💬 WhatsApp