Skip to content
Ecom

International Shipping Rules on Shopify That Trip Up US Brands

DDP vs DDU, HS codes, customs declarations, restricted products. Shopify shipping profiles get you most of the way, but not all. A concrete playbook for US brands shipping to the UK, EU, and Canada.

By WitsCode11 min read

The first international order a US Shopify brand ships almost always goes out clean. A customer in Manchester buys a sixty dollar hoodie, Shopify prints a DHL label from the shipping profile, the box lands on the doorstep four days later, and the founder feels good about global expansion. The fifth order is where the story breaks. A friend of that customer in Dublin is holding a FedEx invoice for forty-seven euros of import VAT and broker fees on an order she thought cost eighty. She refuses the parcel, disputes the charge, and writes a review. The founder opens Shopify, looks at the shipping profile that covers the EU, and cannot find where any of this was supposed to be handled.

It was not supposed to be handled there. Shopify shipping profiles are a rate engine, not a customs engine. They say almost nothing about duties, import VAT, HS codes, merchant-of-record status, or country-specific product restrictions. This article walks through the parts Shopify does not handle out of the box, the trade-offs between the three serious ways of handling them, and the concrete technical patterns that separate brands scaling cross-border cleanly from the ones stalling at ten percent international revenue.

Why DDU quietly destroys your UK and EU conversion rate

Every cross-border order has a commercial term attached to it, whether the merchant thinks about it or not. The two that matter for direct-to-consumer are Delivered Duty Paid and Delivered at Place, which the industry still mostly calls DDU out of habit. The difference is who pays import VAT, duty, and the broker handling fee, and when. Under DDP the merchant collects the full landed cost at checkout, remits the VAT and duty to the carrier or to the tax authority directly, and the customer pays nothing at delivery. Under DDU the merchant ships cheap, the carrier fronts the duty and VAT to customs, and the customer gets an email or a card through the door asking for thirty or fifty or a hundred extra currency units before the parcel will be released.

Most US brands start on DDU without naming it, because that is the default when you do nothing. The damage shows up in two places. The first is the eight to fifteen percent of UK and EU parcels that get refused at the door when the customer sees the surprise charge, which becomes a return-to-sender cost plus a refund plus lost outbound margin. The second is the repeat rate, which quietly collapses. Customers who paid an unexpected thirty pound fee do not usually complain. They simply do not come back. Published split tests from Zonos, Reach, and Global-e put the DDP-versus-DDU gap on UK and EU cart-to-order at roughly eleven to twenty-eight percent in favour of DDP, with the gap widening as AOV rises because the absolute duty amount gets scarier. On repeat purchase rate the gap is larger still, closer to twenty to forty percent.

The practical implication is that every US brand doing more than token volume to the UK or EU should be running DDP, not debating whether to. The debate is about how.

Shopify Markets, Markets Pro, and third parties: who is merchant of record

Shopify gives you three serious paths to DDP, and the differences between them are less about features than about a single legal question. Who is the merchant of record for the cross-border sale. The answer decides who registers for VAT, who files returns, who gets audited, and who carries the compliance liability when a customs authority decides to look at a shipment.

Shopify Markets is the baseline and is included with every store. You set up a market for the United Kingdom, another for the European Union, another for Canada, and Shopify gives you per-country pricing, local currency display, a country-specific domain or subfolder, and a duties-and-import-taxes calculation at checkout powered by an embedded Avalara classification. The calculation is reasonable but not perfect, and you remain the merchant of record. That means you are the party responsible for registering for UK VAT, registering for IOSS in the EU, filing the quarterly or monthly returns, and remitting the collected tax. Shopify does none of that for you. The platform collects the money; you handle the paperwork. For a brand doing fifty thousand pounds a quarter in UK revenue this is perfectly workable with a competent accountant. For a brand testing the market with two thousand pounds a quarter it is bureaucratic overkill.

Shopify Markets Pro, available to US merchants on Shopify Payments, flips the legal relationship. Shopify becomes the merchant of record for cross-border orders. Shopify handles the VAT and IOSS registrations, the filings, the remittance, the duty calculation, the returns paperwork, and the compliance exposure. You get paid in dollars, Shopify takes roughly fifteen percent of the cross-border order value as a combined platform and service fee, and you stop thinking about any of it. The trade-off is real. At a sixty dollar average order value the Markets Pro fee is survivable. At a six hundred dollar AOV the same percentage is an agency retainer, and you almost certainly want the third path.

The third path is a cross-border specialist sitting in front of your Shopify checkout. Zonos, Easyship, Reach, ESW, and Global-e all play in this space. You keep merchant-of-record status in your own name, handle your own VAT and IOSS registrations, and the specialist provides the duty calculation API, landed-cost display at checkout, carrier integration, and sometimes a managed returns flow. A reasonable heuristic is that Markets Pro wins below roughly one million dollars a year of cross-border revenue, specialists win above two million, and the gap in between depends on your AOV and how much compliance ambition your team has.

HS codes per variant: the metafield pattern nobody writes about

The Harmonized System is the international framework that lets customs authorities decide what a parcel contains and what duty rate applies. It is six digits at the global level, extended to eight or ten digits per country, and every physical product crossing a border needs one. Shopify has a country-of-origin and HS code field on the product record, which most brands fill in once when they launch and forget.

The trap is that HS codes are not per-product. They are per-variant, and sometimes per-variant-in-a-specific-country. A merino wool T-shirt and a polyester T-shirt sold under the same product listing are different HS codes in every major customs system. A leather belt and a vegan leather belt are different. A silver ring and a silver-plated ring are different, and the duty rates can differ by four or five percentage points. When a customer orders the polyester variant and Shopify declares the cotton HS code on the customs invoice, the parcel either gets held at the border while the carrier reclassifies it, or it clears with the wrong duty amount and the customer is overcharged or undercharged at the door. Both outcomes hurt.

The pattern that works is a variant-level metafield. Create a metafield definition at the product variant scope, namespace custom and key hs_code, and populate it per SKU. For country-specific overrides, a JSON metafield at custom.hs_codes holding an object like {"GB": "6109.90.10", "CA": "6109.90.00"} handles the handful of cases where the tariff line differs meaningfully by destination. On order creation, a Shopify Flow step or a small app writes the correct variant-level HS code into the line item before the order hits the carrier or your duty calculator. Zonos, Easyship, and Markets all accept variant-level HS codes if you give them. Most brands never do this, keep a single HS code at the product level, and pay for it in misclassified customs invoices and hold-at-border delays.

UK, EU, Canada thresholds that change the math

The three major destinations a US brand expands into each have a low-value threshold that changes whether you collect tax at checkout or whether import VAT is assessed at the border. Getting these wrong is the most common compliance mistake.

The United Kingdom sets the line at a hundred and thirty-five pounds per consignment. Below that figure the seller is required to register for UK VAT, collect twenty percent at checkout, and remit through a quarterly return. Above the figure, import VAT is handled at customs and the merchant can choose between DDP and DDU. Most brands should still run DDP above the threshold to avoid the doorstep surprise, but the legal collection mechanism is different.

The European Union uses the Import One Stop Shop scheme with a one hundred and fifty euro threshold per consignment. Below that figure the seller registers for IOSS through an intermediary, collects destination-country VAT at checkout (which varies by country from sixteen to twenty-seven percent), and files a single monthly return covering all twenty-seven member states. Above one hundred and fifty euros the scheme does not apply and import VAT plus potential duty is assessed at the border, which again is where DDP via a carrier like DHL Express with a duty-paid billing account becomes the right answer.

Canada is both simpler and more complicated. The CUSMA agreement gives shipments from the United States a forty Canadian dollar de minimis for sales tax and a hundred and fifty Canadian dollar de minimis for duty. Below forty dollars, nothing is collected. Between forty and a hundred and fifty, GST and provincial taxes apply but duty does not. Above one hundred and fifty, both may apply. Provincial variation is the complicated part. Ontario charges thirteen percent HST, Nova Scotia fifteen, British Columbia collects a separate seven percent PST on top of federal GST, and Quebec runs its own QST at just under ten percent. Shopify Markets handles this automatically if you configure the Canadian market with tax collection enabled, but a surprising number of US brands ship to Canada with tax collection off entirely and wonder why returns cost so much.

Restricted products: block at the product page, not the shipping calculator

Every expansion market has a list of products the merchant cannot legally ship into. The EU bans cosmetics with specific actives that are fine in the United States. The UK blocks melatonin supplements that sit on Amazon US in the tens of thousands. Vape and e-liquid sales into the UK are governed by MHRA notification rules most US brands have not completed. Certain pocket knives, loose lithium batteries, and CBD products above specific concentrations are blocked across most of Europe.

The wrong way to handle this is to set up the restriction in the Shopify shipping profile, because that only triggers at rate calculation. The customer sees a no-rates-available message at checkout with no explanation, thinks the site is broken, and either abandons or writes to support. The right way is to block earlier, at the product detail page and the cart, with a clear message the customer understands.

The pattern is a Liquid conditional that reads the visitor's market from localization.market.handle or from the geolocated country code exposed via Shopify's localization object, and compares it against a metafield on the product called restricted_countries. A simple block on the product template checks whether the visitor's country appears in product.metafields.custom.restricted_countries and swaps the add-to-cart button for a short note explaining the product is not available in that region. The same check runs on the cart template to handle visitors who got to the cart through a different entry point. For Shopify Plus stores, the cart transform function API lets you enforce the restriction server-side at checkout as a final safety net, so that a customer who manipulated the DOM cannot still get to payment. Shopify Markets includes a product-exclusion-per-market feature that handles the simple case cleanly, and for most brands that is enough. The Liquid pattern matters when the restriction is more nuanced than a simple on-off per market, for example a product that ships to Germany but not to Italy, or a product whose restriction depends on a customer attribute you already know.

The DDP conversion math worked through

Consider a US brand with a ninety dollar AOV selling into the UK. Carriage via a commercial rate runs about twelve dollars. Import VAT at twenty percent adds roughly eighteen pounds, call it twenty-three dollars. A typical carrier broker fee adds another fifteen pounds, around nineteen dollars. Under DDU the customer sees a ninety dollar product plus twelve dollar shipping, hits a total of a hundred and two, and days later gets a card through the door asking for forty-two dollars before the parcel will be released. Roughly one in ten refuses and one in four who accept never buy again.

Under DDP the same brand collects the landed cost upfront. The cart shows a ninety dollar product, twelve dollar shipping, and a separate twenty-three dollar duty-and-tax line, for a total of a hundred and twenty-five. The customer signs for the parcel and never sees another charge. Split data from Zonos puts the DDP cart-to-order rate at this price point roughly fifteen percent higher than DDU and the repeat rate more than thirty percent higher. On a brand doing thirty thousand dollars a month of UK DDU volume, the switch moves first-order revenue to about thirty-four thousand five hundred, eliminates refused-parcel losses worth about two thousand, and over twelve months the repeat-rate improvement adds roughly another forty thousand of lifetime revenue. The compliance cost of running DDP properly is materially less than that number.

A four-week rollout for a US brand going cross-border

A workable sequence starts with one market, not three. Pick the market where the acquisition cost is lowest, typically the United Kingdom for a US brand because language and customer behaviour match. Week one is diagnostic. Pull the last ninety days of international orders, measure the actual refused-parcel rate and the repeat-rate gap versus domestic, and decide based on volume whether Markets Pro, direct VAT registration with Markets, or a specialist like Zonos is the right fit. Week two is the HS code and restricted-product pass. Audit every SKU for a correct variant-level HS code, build the metafield, and run a Liquid restriction block on the PDP and cart for any product that should not ship to the target market. Week three wires in the DDP flow. Whether that is enabling Markets Pro, installing Zonos Checkout, or configuring Markets duties-at-checkout with a fresh UK VAT registration, the work is the same shape. Test five representative orders end to end, capture the customs invoice each carrier generates, and compare against what Shopify declared. Week four goes live and runs the one metric that matters, which is the refused-parcel rate on the first two hundred cross-border orders under the new flow. If it sits under two percent, the stack is working. If it does not, the HS codes or the duty calculation are wrong and one of them needs correcting before scale.

None of this is conceptually hard. It gets skipped because Shopify shipping profiles look close enough to finished, and close enough is exactly where cross-border CVR goes to die. Brands that win in the UK, EU, and Canada treat the customs engine as a first-class part of the store, build HS metafields properly, run DDP from the first order, and block restricted products at the product page rather than the checkout.

→ If you want a team to run the playbook end to end across your Shopify store, from HS metafield setup to DDP rollout to restricted-product Liquid blocks, the WitsCode cross-border engagement is built for exactly that.

Get weekly field notes.

Practical writing on shipping products, straight to your inbox. No spam.

Need help with this?

Shopify Development

We design and build web apps, MVPs, and SaaS products. Talk to us about what you are working on.

Talk to us

Want to discuss ecom 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.