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

EU Parcel Identifiers From 1 November: What UAE Exporters Must Add

From 1 November 2026, EU parcels under €150 need item-level HS codes, country of origin and a specific goods description. Where those fields live in Shopify, and what a rejected parcel costs a Dubai-based brand.

EU Parcel Identifiers From 1 November: What UAE Exporters Must Add

From 1 November 2026, every direct-to-consumer parcel entering the EU under €150 has to carry item-level product identifiers on the customs declaration. Three fields do the work: a Harmonised System code, a country of origin, and a goods description specific enough that a customs officer can tell what is in the box. Shopify Shipping and Managed Markets labels now populate these from your product data, which means the deadline is really a catalogue data deadline. If the fields are blank in your Shopify admin, the label prints blank, and the parcel gets held, returned or destroyed at your cost.

For a brand fulfilling from Dubai or Riyadh, this lands in an awkward spot. The EU is the market you grow into once Noon and Amazon.ae have squeezed your margins at home, and it is the market where a single rejected shipment wipes out the profit on five good ones. So this is worth two weeks of unglamorous spreadsheet work before White Friday traffic arrives.

The three fields, and where they live in Shopify

Open any product, scroll to the Shipping section of the variant, and you will find a block for customs information. It holds the HS code and the country or region of origin. The third field, the description, is pulled from the product title unless your shipping setup overrides it.

HS code. The first six digits are the international Harmonised System subheading and they are the same everywhere. For consignments at or under €150 the EU accepts the six-digit code on the simplified declaration. Above €150 you are into full declarations and the EU's eight-digit Combined Nomenclature, where duty rates actually bite. Most D2C parcels from the GCC sit under the threshold, so six digits is the practical target — but if your average order value is AED 650 or more, a chunk of your orders cross €150 and need the longer code.

Country of origin. Where the goods were manufactured or substantially transformed. Not where the parcel was posted from. More on this below, because it is the field GCC exporters get wrong most often.

Goods description. "Cotton kaftan, women's, long sleeve" clears. "Item", "Gift", "Apparel" or "Sample" does not. Neither does a product title that is only in Arabic. If you run a bilingual RTL storefront — and you should, if a meaningful share of your traffic is Gulf-based — make sure the customs description resolves to English or an EU language, not the Arabic title. We have seen this exact failure on stores where the Arabic locale was set as primary.

Why country of origin is the one GCC brands get wrong

A lot of UAE catalogues are set to AE across the board, because the warehouse is in Al Quoz or Jebel Ali and that is the address on the airway bill. That is a declaration error, and it is the kind that gets a shipper flagged rather than a parcel held once.

If you buy finished goods from a factory in Guangdong, store them in a JAFZA free-zone warehouse and re-export them to a customer in Munich, the origin is China. Re-export from a free zone does not confer UAE origin. Neither does repackaging, labelling or kitting. Origin changes only when the goods undergo substantial transformation, and putting three imported items into a branded box is not that.

Where it gets genuinely fiddly is bundles. A skincare set with a serum made in France, a cleanser made in India and a pouch made in China is three origins on one line item. The clean fix is to declare the bundle as its components, which means your Shopify bundle has to be built from real variants with real customs data rather than as a single SKU with a made-up code. Brands that sell gift sets for Ramadan and Eid tend to find this out in the worst week of the year.

Mainland versus free-zone licence does not change your origin obligations. It changes your VAT position and who can sell domestically, nothing more.

Adding HS codes in Shopify admin without doing it four thousand times

Three realistic routes, depending on catalogue size.

Under about 150 SKUs, use the bulk editor. Products list, select all, Edit products, then add the Harmonised System code and Country/Region of origin columns. It behaves like a spreadsheet, you can paste a column down, and it is the fastest path for a small catalogue. Budget an afternoon.

Larger catalogues hit a wall: the default Shopify product CSV export does not carry the customs fields, so you cannot do the usual export-fill-import loop with the native file. You either use a third-party import app that exposes those columns, or you write to the Admin API. We generally do the API route when a client has a few thousand variants and an ERP that already holds the tariff codes, because then it is a sync rather than a one-off cleanup and it keeps working when the buying team adds a new category. If you want that built properly rather than hacked together, our Shopify app and integration team does this kind of catalogue plumbing.

For getting the codes in the first place: classify at category level, not SKU level. Every unlined cotton blouse in your catalogue shares a subheading. Your freight forwarder or customs broker will usually classify a category list for you at no charge because it reduces their own clearance problems. Shopify also suggests codes from the product title, and the suggestions are a decent starting point for apparel and homeware. They are unreliable for anything with a material-dependent classification — supplements, cosmetics with active ingredients, electronics with batteries, jewellery where gold content changes the line. Check those with a human.

One warning. Guessing a plausible-looking code to make the field non-empty is worse than leaving it blank. A wrong code that clears today becomes an underpayment claim later, and the importer of record on a DDP shipment is you.

What a rejected parcel actually costs

Return-to-origin on an EU parcel is not one fee. Here is the arithmetic on a store shipping 200 parcels a month from Dubai into Europe, at a 4% rejection rate:

  • 8 rejected parcels a month
  • Outbound express freight already spent and non-refundable: roughly AED 90 each
  • Return-to-origin charge plus re-import handling: roughly AED 110 each
  • Receiving, inspection and restock labour: AED 20 each

That is AED 220 per failed parcel, or AED 1,760 a month in pure cost. Then the lost sale: at an average order of AED 450 and 55% gross margin, each refund removes AED 247.50 of gross profit, so 8 of them removes AED 1,980. Monthly total AED 3,740. Annualised, AED 44,880 — before you count the payment-processing fee you do not get back on a refund, the customer who never orders again, and the time your support team spends on it.

Rates vary by carrier and lane, so run your own numbers from an Aramex or DHL invoice. The shape holds. A data cleanup that takes two people a week pays for itself in under a quarter, and that is at a 4% rejection rate. Stores sending parcels with empty customs fields after 1 November will be well above 4%.

Worth saying plainly: in some cases the carrier abandons or destroys goods rather than returning them, particularly low-value consignments where the return freight exceeds the declared value. You lose the stock and still pay a fee.

Shopify Shipping label customs fields — and what to do when you cannot buy those labels

This is where a lot of GCC advice goes wrong by copying US guidance. Shopify Shipping is only available to merchants fulfilling from a short list of countries. The UAE and Saudi Arabia are not on it. So if you ship from Dubai or Riyadh, you are not printing Shopify Shipping labels — you are on an Aramex or DHL account, a connected label app, or a 3PL's portal.

That changes nothing about the requirement and everything about the plumbing. The customs data still has to be correct in Shopify, and it has to reach whatever system generates the airway bill. Check three things:

  1. Does your shipping app read variant-level HS code and origin, or does it fall back to a single default per shipment? Defaults are what produce a parcel of twelve different products all declared as one code.
  2. Does your 3PL pull customs fields from the Shopify order payload, or from its own product master that someone keyed in eighteen months ago? If it is the second, your Shopify cleanup will not reach the label.
  3. Does the declared value on the label match the order value after discounts, in EUR? Mismatches between the declared value and the payment record are a common hold reason, and they are more common on stores pricing in AED and SAR through Shopify Markets with rounding rules applied per market.

Run one live test parcel per fulfilment path before November. Print the label, read it, confirm the six-digit code and origin appear per line item. Ten minutes that saves a month.

Managed Markets, EU customs data and the IOSS question

Managed Markets handles duty and tax calculation at checkout, acts as the importer on the shipment and files the customs data for you, which removes most of the declaration risk if your merchant location qualifies for it. It does not invent your product data. It reads the same HS code and origin fields from your catalogue. Garbage in, held parcel out.

Separately, and more urgently for most Gulf-based sellers: are you registered for IOSS? For consignments at or under €150, IOSS lets you collect EU VAT at checkout and remit it monthly through a single registration, and the shipment clears without a VAT charge at the door. Without it, your Munich customer gets a message from the carrier asking for VAT plus a handling fee of roughly €10 to €15 before delivery. A meaningful share of those customers simply refuse the parcel. In our experience that, not missing tariff codes, has been the number one driver of EU return-to-origin volume from the GCC — and it stays the number one driver after November unless you fix it.

You cannot register for IOSS directly from outside the EU; you appoint an EU intermediary. Budget a few hundred euros a month for one. If your EU volume does not justify that yet, ship DDU and say so loudly on the product page and at checkout, in the customer's language. Surprise charges cause refusals. Disclosed charges mostly do not.

Also: do not try to run COD into Europe. It barely exists on express lanes, and the Tabby and Tamara habits that make your UAE checkout convert do not travel. Your EU checkout is cards, PayPal, and local methods like iDEAL and Klarna. Set up a separate EUR market in Shopify Markets with its own payment methods rather than bolting Europe onto your Gulf configuration.

A two-week plan

Week one: export your catalogue, group SKUs into classification categories, send the category list to your broker, and audit your top 100 sellers by EU revenue first. Those hundred products are probably 70% of your EU parcels. Fix them before you touch the long tail.

Week two: load the codes and origins, correct every SKU currently marked AE that is not actually made in the UAE, fix bundle composition, confirm the customs description resolves to English, and run live test labels through each fulfilment path. Then decide on IOSS.

Teams in Dubai and Riyadh run on different carriers and often different 3PLs, so test both separately if you fulfil from both. We see data that is clean on the Dubai side and stale on the Riyadh side more often than the other way round.

Questions we keep getting

What exactly happens if a parcel is rejected at EU customs? It sits in a bonded facility while the carrier requests the missing information from you or the buyer. If nobody responds inside the carrier's window, typically a few working days, it is returned to origin or abandoned. You pay the return leg, re-import handling at the UAE end, and you refund the customer. Repeated incomplete declarations from the same shipper account lead to more inspections on your subsequent shipments, which is the slow version of the same cost.

Does this apply to parcels over €150? Those already required full customs declarations with duty assessment. The November change tightens the data required on the low-value lane that most D2C orders travel on, so it is the sub-€150 flow that needs attention.

Do I need a GTIN or EAN as well? Keep barcodes populated anyway. They cost nothing to maintain, they feed Google Shopping and marketplace feeds, and where a declaration asks for a commercial product reference, having one already in the variant record means no scramble.

Can I declare a lower value to stay under the threshold? No. Under-declaration is fraud, and the payment record in your Shopify order is discoverable.

We sell gold jewellery from Dubai into Europe. Anything different? Yes. Classification depends on metal content and whether stones are set, the value usually exceeds €150 so you need full declarations, and several EU states apply hallmarking rules on import. Treat EU jewellery shipping as its own workstream with a broker, not as a catalogue field exercise.

If you want a second pair of eyes on what your labels are actually carrying, send us a store URL and one recent EU airway bill and we will tell you what would get held. Start with a free store audit.

Next 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