help1
shopify eu dutyshopifyiosseu complianceshipping

Following Shopify's EU 3-Euro Duty on Rollout Day

On July 1 the Shopify EU duty line showed zero for merchants who had done every setup step right. Here is what I found chasing it down.

help1 Team
Following Shopify's EU 3-Euro Duty on Rollout Day

The line item said "Duty" and the amount was 0.00 EUR. A merchant messaged me the morning of July 1, 2026, saying their test order to France was showing the duty field at checkout but the number was blank. They had spent two weeks preparing for the 3-euro EU customs duty going live that day. HS codes on every product. Duties collection enabled under Settings > Taxes and Duties. Shipping via DDP for years. The Shopify changelog entry from June 26 said no additional configuration was required. And the value at checkout was still zero.

If you want to reproduce this in your own admin, open Settings > Markets, pick your EU market, and place a test order shipping to a French address with at least one product that has an HS code populated. If the Duty line appears with a non-zero amount, you are collecting. If the line is missing or shows zero, you are absorbing the 3-euro fee your carrier will still charge on the outbound label.

Below is the trail I followed with that merchant. Some of the dead ends are more useful than the fix, so I am leaving them in.

What I checked first

The obvious first pass is data integrity on the products. Missing HS codes are the classic cause of a zero duty calculation, and I have seen it three times this year alone. I opened three products in the admin, verified the six-digit HS classification was present under Product > Shipping, confirmed country of origin was set, and re-ran the test order. Still zero.

Then I checked the market configuration. Under Settings > Markets > France > Duties and import taxes, the toggle for "Collect duties and import taxes" was on. Under the same market's Price adjustments tab, no offsetting rule was suppressing the value. Under Settings > Taxes and Duties > EU, the IOSS number was there and validated. I refreshed the checkout, waited for the cache, tried a private window. Still zero.

At this point I would normally suspect a Shopify Function or a checkout extension intercepting the calculation. This merchant runs a stock Horizon theme with no custom checkout extensions and no discount functions in play. Nothing was standing between the Shopify EU duty engine and the checkout page. The setup, in other words, was clean.

Why that was not it

The instinct with a checkout number returning zero is to assume the merchant's setup is wrong. That framing burns hours. In this case the setup was correct. The engine that was supposed to compute the number was not running yet.

Around 4:30 PM my time on July 1, a merchant using the handle VOCLA posted in the Shopify Community thread called "3-EUR duty and Shopify": "is not working... it's not adding the 3-EUR fees, it's doing nothing." Three hours later they added a follow-up: no products with customs codes were showing the fee, despite the changelog indicating a June 26 rollout. Then Rostislav from EAS Project, an IOSS intermediary that watches the API surface across many stores, added his read: "none of orders that came to EAS from Shopify contain 3 EUR duty, meaning that it is still not rolled out." That was enough signal that this specific merchant's store was not the problem.

Shopify Support told at least two merchants on that thread that the feature was "still rolling out." A staff member named Moeed confirmed the fee is folded into the total duties line rather than shown as a separate line, which was already documented in the June 26 changelog. What was not documented anywhere was that "rolling out" would take another 24 to 36 hours.

Where the trail went cold

The confusing part of a day-one platform rollout is that the vendor confirms the feature exists while also confirming it does not work for you specifically. No status page entry. No proactive email. The only signal is a support ticket reply, and the reply says wait.

I sat on the merchant's account for about an hour trying to force the calculation with new test orders, thinking maybe the endpoint needed a cache warm. It did not. If the Shopify EU duty engine is not on for your store, it stays off until Shopify flips it on. Everything else I could think to try was theater.

If you are staring at this same symptom in your admin and the calendar says the feature launched more than 48 hours ago, that is when it stops being "still rolling out" and becomes an active support case. If you want a second pair of eyes on your Shopify EU duty configuration before you spend the afternoon writing a ticket, help1's first 15 minutes is free and that is usually enough to rule your setup in or out.

The clue I almost missed

Around July 2, the calculator finally came online for the merchant's store. The Duty amount was no longer zero. That should have been the end of the investigation. It was not.

The test order I ran to celebrate had two SKUs in it: two color variants of the same t-shirt. Both share the same HS 6109 classification. By regulation, that cart should incur one 3-euro charge. Shopify charged 6.

I nearly missed this because the visible number at checkout looks correct in isolation. It only looks wrong when you know what the legal rule says. Rostislav flagged it in the same community thread: "calculated at item level, not HS code line as legislation requires. Multiple identical items = one charge; different items with same HS code = multiple charges (incorrect)." AnyDevil, another merchant on the thread, added the same day: "Fix now active but incorrect: charging EUR 3 per SKU instead of per commodity code, matching Royal Mail error."

That distinction matters. A parcel with five different SKUs sharing two HS codes should pay 6 euros total. Shopify was charging 15. Over a hundred orders a week for a store with a diverse catalog, that is a real overcollection from customers who cannot audit the math, and it is exactly the kind of thing a consumer protection regulator will notice before the merchant does.

As of the day I am writing this, Shopify has not published a fix confirmation for the per-HS-code calculation. That second half of the Shopify EU duty story is not on the changelog either.

What we actually did

The merchant needed to make a decision the same day, not wait for Shopify's calculator to be legally correct. Here is the pattern we settled on. It is neither elegant nor scalable, but it is close to what UK and Irish merchants are running post-July 1.

  1. Turn on duties collection in Shopify so the checkout at least surfaces a Duty line and customer expectations are set at the checkout page rather than at the mailbox.
  2. Add a flat markup to the EU market via Settings > Markets > (market) > Price adjustments to buffer the expected duty cost. This is imperfect for stores with wide HS diversity, but reasonable for single-category catalogs.
  3. Route outbound EU parcels through Royal Mail Click and Drop OBA in IOSS_DDP mode, where IOSS handles VAT and the carrier account pays duties and fees on the label. This is a shipping change, not a Shopify change.
  4. Flag the per-SKU overcollection to your accountant and set a reminder to re-test the calculator every two weeks until it matches the per-HS-code rule.

The reason this is a pattern rather than a fix is that Shopify is the only party who can correct the calculator. Everything the merchant can do lives in the workaround layer.

I have not tested this pattern on Shopify Plus. If you are on Plus and collecting the 3-euro duty via Managed Markets, the fee behavior may differ from what I saw on the non-Plus checkout. Merchants on Managed Markets pay a 3.25 percent per-order fee, which changes the compliance math entirely. If you are already running a UK Shopify shipping setup that pre-dates July 1, I wrote about the older half of that dual-stack pattern in what I find in every UK Shopify shipping setup; the EU changes above sit on top of it.

What the rollout actually cost

The people who lost the most in the first week were the merchants who did the compliance work early. They read the changelog on June 26. They enabled duties collection. They ran test orders. Their setups looked correct because the setups were correct. What they did not know was that the platform behind the setting was not on. That week, every EU order they fulfilled ate 3 euros per tariff line on the carrier invoice with nothing collected from the customer to offset it.

The support response of "still rolling out" is technically honest and operationally useless. When the changelog says something is live and the calculator says zero, the merchant has no way to distinguish a broken setup from a delayed rollout. That gap between announcement and function is the actual defect. The zero at checkout is only the symptom.

EU compliance on Shopify has always felt like buying a leaky bucket and a sponge, to borrow a line from an r/shopify thread I keep coming back to. The July 1 Shopify EU duty rollout is another patch, and the sponge is going to be busy for a while.

Still stuck? Talk to an expert.

Our vetted Shopify experts can fix this issue for you in a live session. $39 per session. Your first 15 minutes are free.