Allocating Duty And FX To Per-Order COGS For EU Stores Sourcing From Asia

A practical playbook for EU DTC stores sourcing from Asia: how to push import duty, VAT-on-import, and FX movement into per-order COGS instead of discovering the variance at year-end.
Quick answer
Build a landed unit cost that bakes in duty %, freight per unit, and a rolling 90-day FX rate — then re-stamp it on every PO receipt, not every order. Leave VAT-on-import out of COGS (it's reclaimable) and track FX variance in a separate P&L line so per-order margin stays clean.
Duty & FX allocation to per-order COGS (EU importers)
Pushing import duty, freight, and FX swing into per-unit landed cost so every EU DTC order shows true margin — not an averaged guess.
For EU stores sourcing finished goods from China, Vietnam, or Bangladesh, the invoice from the factory is only part of the true cost of a sold unit. Import duty, inbound freight, customs brokerage, and the EUR/USD or EUR/CNY rate on the day you paid the supplier all move the real per-unit cost by 8–25% versus the factory PO.
Allocating these correctly means stamping a landed unit cost onto each SKU at goods-receipt time — so when Shopify fires an order, per-order COGS reflects what that specific inventory batch actually cost to land in your Rotterdam or Barcelona 3PL.
Most Shopify finance stacks default to using the supplier invoice price as COGS. That's fine if you buy locally in EUR. It falls apart the moment your supplier invoices in USD, ships DDP-optional, and the goods clear through Rotterdam three weeks later at a different exchange rate.
The result: gross margin looks healthy on the Shopify dashboard, then contracts by 4–7 points when the annual accounts land. That gap is where duty allocation and FX allocation live — and it belongs in per-order COGS, not in a year-end surprise.
Why the variance shows up at year-end
The mechanism is simple. Your supplier invoice is in USD. You pay it 30 days later at a different rate. Freight and duty invoices from your forwarder arrive weeks after the goods physically land, and often reference a third rate.
If your accounting tool (Xero, Dext, A2X) only imports the supplier invoice as COGS, the freight and duty float into an "import costs" GL account that no one reconciles per SKU. At year-end the auditor pushes them back into COGS in aggregate — and reported margin drops.
The Incoterms trap
EXW and FOB terms leave duty, freight, and insurance on your side of the ledger. DDP shifts them to the supplier — but the supplier bakes an FX buffer of 3–5% into the unit price to protect themselves. Neither is free; both need to sit inside per-unit landed cost, or you're comparing apples to oranges across POs.
How to detect that your COGS is under-allocated
Signal one: your Shopify or Metricuno per-order margin sits 3–8 points above your Xero P&L gross margin for the same quarter. That gap is almost always unallocated duty, freight, or FX sitting in a holding account.
Signal two: SKU margin looks identical across all units of one style, even though the batches were sourced from different factories or received in different quarters. Real landed cost drifts batch to batch — flat SKU margin is a symptom of using invoice price only.
Signal three: you can't answer "what did that specific unit cost me to land in the 3PL?" without a spreadsheet. If the answer requires cross-referencing three tabs and a currency converter, per-order margin decisions are being made on stale data.
Typical landed-cost stack by category
Illustrative landed cost breakdown as a % of ex-factory FOB price — EU importer sourcing from Asia
| Category | FOB unit price | Sea freight + insurance | EU import duty | Customs & broker | FX buffer (90-day) | Landed cost multiplier |
|---|---|---|---|---|---|---|
| Apparel (cotton knit) | 100% | 6-9% | 12% | 1-2% | 2-3% | 1.22-1.26x |
| Footwear (leather upper) | 100% | 5-8% | 8-17% | 1-2% | 2-3% | 1.18-1.30x |
| Beauty / skincare | 100% | 4-7% | 0-6.5% | 1-2% | 2-3% | 1.10-1.19x |
| Small electronics | 100% | 3-6% | 0-4% | 1-2% | 2-3% | 1.08-1.15x |
| Home textiles | 100% | 7-11% | 8-12% | 1-2% | 2-3% | 1.21-1.28x |
| Handbags / accessories | 100% | 5-8% | 3-9.7% | 1-2% | 2-3% | 1.14-1.23x |
The multipliers are the number that matters. If you sell a €40 cotton tee and your Shopify COGS shows the €8 FOB price, real per-order COGS is closer to €9.80. On 40,000 units a year that's €72k of margin sitting in the wrong GL account.
How to fix it: the per-PO landed cost method
The pragmatic approach: calculate a landed unit cost once per PO receipt, not once per order. When goods arrive at the 3PL, sum the supplier invoice (converted at pay-date FX), inbound freight, duty, and broker fees. Divide by units received. Stamp that number onto the SKU-batch.
Every order that ships from that batch inherits the stamped landed cost. When a new PO lands, new landed cost, new stamp. This is standard weighted-average or FIFO cost accounting — most inventory tools (Cin7, Katana, Unleashed) support it natively but need to be configured to include duty and freight lines, not just supplier invoice.
What about VAT-on-import and FX variance?
VAT-on-import (typically 19-25% depending on member state) does NOT go into COGS. You reclaim it on the next VAT return, so it's a cash-flow item, not a cost. Track it separately in a VAT receivable account. Mixing it into landed cost inflates COGS by 20 points and destroys margin comparability.
FX variance between the rate you used to stamp landed cost and the rate on the day you actually paid the invoice belongs in a "realised FX gain/loss" P&L line — below gross margin. Keep it out of per-order COGS or your SKU-level margin becomes unreadable. This ties back to the broader parent topic of COGS allocation: allocate what's truly product cost, isolate what's timing or financing noise.
Frequently asked questions
Use the rate on the invoice payment date for the supplier invoice, and the rate on the customs clearance date for duty. A 90-day rolling average is acceptable for forecasting and pricing decisions, but for booked COGS use the actual transaction-date rate — it's what your auditor will expect.
No. Import VAT is reclaimable on your next VAT return (assuming standard registration), so it's a cash-timing item, not a cost. Book it to a VAT receivable account. The only exception is if you sell under a scheme where the VAT isn't recoverable — rare for standard EU DTC brands.
Under DDP, the supplier absorbs freight, duty, and clearance and charges you a higher unit price. That means your invoice price already IS your landed cost — no additional allocation needed. But note that DDP suppliers typically embed a 3-5% FX buffer, so you pay a premium for the simplicity.
No. Shopify's cost-per-item field is a single static number per variant. To get true batch-level landed cost you need an inventory layer above Shopify — Cin7, Katana, Unleashed, or a custom ledger — that stamps landed cost per PO and feeds it back to your finance system.
Most EU importers sourcing in USD build a 3-5% FX buffer into retail pricing to absorb quarterly EUR/USD moves. For CNY-denominated purchases the historical volatility is lower, so a 2-3% buffer is typical. Review it quarterly against realised rates.
Per SKU (or at least per HS code). Duty rates vary dramatically — cotton apparel is 12%, leather footwear can hit 17%, small electronics are often 0%. A blended rate distorts SKU-level margin and leads to bad merchandising decisions on what to promote.
IOSS covers the VAT collection on cross-border sales to EU consumers under €150 — it doesn't change how you allocate import duty on your inbound stock. Your landed-cost calculation for goods entering your EU 3PL is unaffected. IOSS is about the outbound sale, not the inbound stock movement.
On every PO receipt at minimum. If FX has moved more than 3% or duty rates have changed (post-Brexit adjustments, new trade agreements), re-run the stamp on existing on-hand stock as well. Quarterly reconciliation against your accounting system catches drift.
Then your supplier invoice already includes their landed cost plus margin. You lose the ability to see the underlying duty and FX components, but your COGS allocation becomes simpler — invoice price is landed cost. The trade-off is 8-15% higher unit cost versus direct import.
If Shopify COGS understates true landed cost by 5-8 points, your gross-margin-per-order feeding into ROAS targets is inflated. You end up setting acquisition ceilings that look profitable but actually break even at best. Fixing landed-cost allocation typically tightens ROAS targets by 15-25%.
Get an AI expert review of your site
Paste your URL — Metricuno's AI runs the same heuristic checks a senior CRO consultant would, scoring your page and prioritising the fixes that'll move conversion fastest.