← Back to Supply Chain Review Trade Policy

EU makes product identifiers mandatory Nov 1, adding EUR 5 per item on small parcels

Source: PortCalls · 2026-10-21 · 15 min read
中文

Supply Chain Action Points

Read this first — the conclusion, and the moves to make:

  1. By 25 October 2026, decide the identifier type for every product family you ship to EU consumers, choosing between S-PID, NS-PID and M-PID per family, and freeze the codes so no re-platforming can change them mid-quarter.
  2. By 31 October 2026, make the commercial invoice template and the file that feeds each carrier's customs dataset read from one shared SKU master, and reject any order line whose identifier field is empty at pack time.
  3. Before 30 November 2026, push at least 50 live parcels through and confirm on the customs side that the identifier arrived intact in the dataset, logging any line where the invoice and the dataset disagree.
  4. Rebuild your per-order cost model with the EUR 5 charge as a floor rather than an estimate, and show the sensitivity to a change in the provisional EUR 2 handling fee to whoever signs the pricing.
  5. Test the bulk import alternative against your actual turnover: using the EUR 9.50 per order difference from the worked example, net of an assumed EUR 3 fulfilment cost and EUR 0.50 per unit per month holding cost, before committing to EU stock.
Skip to the detailed analysis ↓
Summary

From 1 November, businesses shipping direct to EU consumers must put product identifiers on the invoice and customs dataset for consignments of EUR 150 or less. The EU charges EUR 5 per item: the EUR 3 flat duty started in July 2026 and runs to July 2028, plus a provisional EUR 2 handling fee. Three identifiers are accepted: M-PID, NS-PID and S-PID, using GTIN, EAN or UPC. Missing data can hold parcels and trigger fines. Dutch customs logged 46% fewer e-commerce declarations in July and August.

The Analysis

Here is the parcel. A EUR 40 order placed by a consumer in Rotterdam, picked and packed outside the EU, handed to a carrier, and presented to Dutch customs with a commercial invoice and an electronic customs dataset. From November 1, two things about that presentation change on the same day. The dataset has to carry a product identifier, and the parcel starts carrying a fixed per-item charge of at least EUR 5. Neither is a rate you can negotiate around. One is a new mandatory data element; the other is a floor under the cost of every order you ship.

The EUR 5 is not a single new tax, it is two things stacked. Three euros of customs duty on e-commerce parcels valued below EUR 150, which already started in July 2026 and runs until July 2028. Plus a provisional EUR 2 Union Handling Fee, meant to compensate EU customs authorities for processing, data verification, risk analysis and release. The duty is already running and its end date is already written down. The handling fee is provisional, and the rate can still move before final EU confirmation.

The direction of travel is visible in one number. Dutch customs recorded 46 per cent fewer e-commerce declarations in July and August than the average for the first half of 2026. That is not a statistical wobble. That is a channel repricing itself while everyone is still reading the notice.

The way I read any rule change is to ask which document it lands on and which field on that document changes. This one lands on two documents at once: the commercial invoice and the customs dataset. The field that changes is new, and it is a product identifier, known as a PID. So the job list is not pay EUR 5 and move on. The job list is get an identifier onto every SKU you sell into the EU, in a form the customs authority will accept, on both the invoice and the electronic filing. The money is the easy half.

There are three types, and knowing which one you need is most of the work. A Standardised Manufacturer Product Identifier, the S-PID, is a globally recognised barcode: a GTIN, an EAN or a UPC. A Non-Standardised Manufacturer Product Identifier, the NS-PID, is a code from the supplier or the factory, used when there is no global barcode. A Merchant Product Identifier, the M-PID, is the seller's own item code or stock keeping unit. Customs will use whichever you supply for product safety checks and regulatory compliance.

Now the part the coverage has not resolved, and it is the part that decides whether your cost model is right or wrong by a factor of three. The same report describes the charge both as at least EUR 5 per item and as at least EUR 5 per product type. Those are not the same parcel. A consumer order containing three units of the same SKU is one product type and three items. On a EUR 60 basket, the first reading costs you EUR 5 and the second costs you EUR 15, which is 8.3 per cent of goods value against 25 per cent. Until both the operative text and your carrier's billing logic are clear, do not build a price list on either number, and do not let a marketplace template pick one silently on your behalf. I have watched a quarter of margin go out through a field nobody owned, because the system filled it in and nobody checked what it filled.

The choice of identifier has a second-order effect most sellers will meet the hard way. M-PID, the seller's own SKU, is the tempting option because it needs no barcode purchase and no supplier cooperation. It is also the least stable. Every SKU renumbering, every re-platforming, every quiet merge of two listings into one changes what customs sees. If the same physical product shows up in the data under three codes across six months, the risk engine does not read that as a clerical habit. It reads it as a pattern, and patterns get parcels held. If you go the M-PID route, freeze the code, version it, and reconcile the invoice to the dataset line by line.

Then there is the question of who fills the field. The obligation sits with the business shipping directly to an EU consumer, including non-EU sellers trading through online marketplaces. In practice the marketplace often populates the commercial invoice from its own catalogue, the carrier populates the dataset from its own shipping file, and the seller assumes both are drawing from the same source. Usually they are not. When the two disagree, the one customs reads first is the electronic dataset, and the mismatch is yours to explain. Documents that do not reconcile are trouble all the way down.

A PID is not a tariff classification and does not replace one. The identifier answers what this product is; the HS code still answers what it is dutiable as, and the origin statement still answers where it comes from. I am already hearing people treat a barcode as if it closes the classification question, which is the wrong way round: the barcode makes the product easier to look up, and the easier you are to look up, the faster a wrong classification gets found. Fix the code and the origin first, then attach the identifier, not the other way round.

The identifier work is a data governance job before it is a customs job. Somebody has to own the mapping between what your catalogue calls a product and what goes in the field, and the moment a new SKU is listed, that mapping has to be created rather than guessed. New listings appear faster than any classification table gets updated, which is why the failure mode here is not a wrong code but an empty one. Put the identifier into the listing workflow as a required field, with a fallback that fails the listing rather than shipping a blank.

Read the wording carefully on the money. The charge is described as at least EUR 5 per item for customs and handling fees, which means it is a floor under those two components rather than the total incremental cost of the order, and it says nothing about what your carrier adds for presenting and billing it. Ask each carrier for the line items that will actually appear, in writing, before you reprice anything. The distance between the published floor and the invoiced amount is where the margin goes.

Who feels it first. Low-value, high-frequency, single-unit orders to EU consumers carry the exposure, and it concentrates in apparel, small consumer electronics accessories, home goods and beauty, for a plain reason: a fixed EUR 5 survives a EUR 90 order and guts a EUR 12 one. The second group is the overseas seller using small parcels as the replenishment mechanism for a European warehouse. That move just acquired a fixed cost per unit, which changes the arithmetic of how often you top up and in what size.

Run the arithmetic on your own book before deciding anything. Assume 300 parcels a day to EU consumers, average value EUR 40, all of it below the EUR 150 line. At the EUR 5 floor that is EUR 1,500 a day, or about EUR 45,000 over a 30-day month. Split it: the EUR 3 duty is EUR 900 a day and about EUR 27,000 a month, the EUR 2 handling fee is EUR 600 a day and about EUR 18,000 a month. Against a EUR 40 order, EUR 5 is 12.5 per cent of goods value. If contribution margin on that order is 15 per cent, most of it just went to a charge that does not move when your freight rate moves.

Now set the Dutch number beside it. A 46 per cent fall in e-commerce declarations against the first-half average is not one shipper changing lanes, it is the pattern of a whole channel moving. The advisory firm quoted in the report gave a worked example: an order shipped as a parcel costs EUR 19.50, the same order picked from stock held in the Netherlands costs EUR 10.00, a difference of EUR 9.50 per order. At 300 orders a day that is about EUR 2,850 a day in avoided cost. Do not spend that figure yet. Subtract EU fulfilment at an assumed EUR 3 per order and stock holding at an assumed EUR 0.50 per unit per month, and a 60-day inventory turn leaves roughly EUR 5.50 per order of net benefit, about EUR 1,650 a day. The bulk route still wins, by less than the headline suggests.

Timing is fixed and close. November 1 is days away, which means the identifier work cannot wait behind a consultation exercise or a software project. My sequencing would be: this week, decide the identifier type per product family and freeze the codes; within two weeks, get the identifier into the commercial invoice template and into whatever file feeds the carrier's customs dataset; before the end of November, run 50 live parcels through and confirm the code arrives intact on the customs side rather than merely printing on the invoice. Printing it is not filing it. I have seen invoices carrying perfect identifiers sitting next to datasets with the field blank, and customs reads the dataset.

The EUR 150 line will attract the worst kind of creativity. Splitting a EUR 160 order into two EUR 80 parcels to stay under the threshold is the first idea everyone has, and it is the fastest route to a penalty that costs more than the duty it avoided. Authorities have been screening for structured splitting for years, and a product identifier makes the pattern easier to see rather than harder: the same S-PID on four parcels to the same address in the same week is not four orders. Do not build the model around it.

The provisional status of the EUR 2 handling fee is its own trap. Because the rate may still change before final confirmation, any per-unit cost model built today will be wrong by some amount in either direction. Build the model with the fee as a variable rather than a constant, and put the sensitivity in front of whoever signs the pricing. Three euros moves, two euros moves, and the difference between the two is the entire decision on low-value baskets.

The consequence of getting this wrong is not a late fee. Parcels that fail the identifier requirement can be put on hold, and fines may follow. A hold is the expensive outcome, because it is not a cost you can price in: the goods are not moving, the customer is asking questions, and the clock on your delivery promise is running while you try to find out which field was empty. One bad week of holds costs more than the classification work you are putting off.

My colleague Dr. Ingrid Voss, who insists on nailing down the conditions of application before anyone acts, would start somewhere else: at the boundary of the obligation itself. The identifier requirement attaches to businesses shipping directly to an EU consumer, so the moment a marketplace or an EU-established importer is placed in the structure as the party making the declaration, the analysis changes, and the question of who is the declarant has to be answered on paper before the first November parcel moves. Where your structure sits on that line decides whether any of this is your obligation at all. It is a boring question and it is worth an hour with someone who reads the texts for a living.

Where the consensus could break. If the Union Handling Fee is confirmed at EUR 2 and stays there, the arithmetic favours bulk import plus EU stock for anyone with predictable demand and a turnover under roughly 60 days, and the 46 per cent Dutch decline has further to run. If the fee is raised, or extended beyond the e-commerce channel, low-value direct shipping to the EU stops looking like a viable retail model in its current form. If it is reduced or pushed back, the sellers who restructured into European stock will have taken on inventory risk for nothing. I do not know which way it lands, and I would be careful around anyone who says he does.

The carriers have already done some of this thinking for you. DHL, FedEx and UPS have all issued guidance on the new calculations and the identifier requirements, which tells you two things: the billing logic will differ by carrier, and the practical test of whether your data is acceptable is what their systems accept. Get the three documents, read the identifier section of each, and reconcile them against your own SKU master before assuming one template covers every lane.

Expect national practice to differ as well. This sits inside the EU Customs Code reform approved by the European Parliament on September 16, and the way a national authority screens a missing identifier is not something you can generalise from one member state to another. It depends on the port. If most of your volume clears through the Netherlands, Belgium and Germany, get confirmation from each, in writing, on what happens to a parcel with the field empty, because the answer determines whether your exposure is a delay or a penalty.

Keep the mapping under version control with a named owner, because a product identifier is only useful to customs if it is stable. A code that means one thing in March and another in September is worse than no code at all: it gives the authority two records for one product and no way to tell which is current. Renumber only when the product changes, and record the date and the reason when it does. That discipline is cheap in October and expensive to reconstruct in a January audit.

Then the inventory question, because that is where this lands for anyone shipping regularly. A fixed per-unit charge changes the optimum order frequency. If you replenish a European warehouse weekly in small parcels, the charge now scales with the number of parcels rather than with the value of the goods, which pushes towards fewer and larger shipments. Larger shipments mean more stock sitting in the EU, and stock costs money every month it sits. The turning point is your inventory turnover, not the fee. Work out your own number rather than copying the 46 per cent.

One count worth running before the end of November: pull a week of your own orders and tally how many lines would fail the identifier requirement today, split by marketplace and by carrier. That figure is the real size of the job, and it usually comes out worse than anyone's estimate, because catalogue data is maintained per sales channel rather than per physical product. Fix the worst channel first rather than spreading the work evenly, then re-run the tally weekly through December to see whether the fixes are landing in the dataset or only on the invoice.

So the list, in the order I would do it. Decide the identifier type per product family and freeze the codes. Map the invoice and the dataset to the same source of truth, then test that they agree with each other. Confirm with each marketplace and each carrier which of them writes the field and what they do with it when it is empty. Price the EUR 5 as a floor rather than an estimate, and re-run the model when the handling fee is confirmed. And for anything above EUR 150, or anything a partner authority would take an interest in, keep the formal route warm, because a held parcel costs more than a filed one.

The paperwork here is not difficult. What is new is that a data field has become the gate, and the gate closes on a fixed date. Do the identifier work in the next two weeks and the fee is just a line in your pricing. Leave it, and it becomes a hold notice with your customer's name on it. This one can still be fixed this quarter, but the code freeze has to happen this week.

↑ Back to the key points

— By Derek Xu

eucustomsparceldutycompliance