Tariffs and Customs in Shopify COGS: The Real Landed Cost
For brands importing inventory, a tariff change can quietly compress margin across the entire catalogue overnight. The Shopify dashboard does not notice; the InventoryItem unit cost stays at last week's number, every per-order profit calculation continues using the old cost, and the bank balance starts disagreeing with the report a quarter later when the importer invoices reconcile. This guide walks through what belongs in landed cost, how to update Shopify when duty rates change, and the operational pattern that keeps the per-order profit honest as trade policy moves.
What Actually Belongs in Landed Cost
Five line items belong in the landed cost per unit, every time:
- Wholesale or manufacturing cost from the supplier.
- Inbound freight cost, divided across units in the shipment. Ocean freight per container, divided by units per container, gives the per-unit ocean charge.
- Customs duty, which is the value declared at the border multiplied by the applicable duty rate, divided across units.
- Port and customs handling fees, including customs broker fees, terminal handling, and any port security charges.
- Inbound carriage to warehouse, the truck or rail cost from port to your fulfillment centre, allocated per unit.
Two items that often get missed: insurance on the inbound shipment, and the cost of money tied up between purchase and arrival, since payment terms with overseas suppliers are typically less generous than domestic. Both can be folded in or treated separately depending on accounting complexity.
The total of these inputs divided by units becomes the value entered in Shopify InventoryItem.unitCost. The setup workflow is exactly the same one we cover in our Shopify COGS setup guide, the only difference is making sure the figure entered already includes duty and freight rather than just wholesale.
What a Tariff Change Actually Costs
Run a worked example on a brand importing furniture at 100 dollars wholesale per unit, sold at 300 dollars. The starting position:
- Wholesale: 100
- Ocean freight: 12
- Duty at 4 percent: 4
- Port handling and inland: 6
- Landed cost per unit: 122
- Sale price: 300, gross margin: 178 (59 percent)
A duty rate change moves the rate from 4 percent to 14 percent. The landed cost is now:
- Wholesale: 100
- Ocean freight: 12
- Duty at 14 percent: 14
- Port handling and inland: 6
- Landed cost per unit: 132
- Sale price still 300, gross margin: 168 (56 percent)
The headline margin moves three percentage points. On a brand selling 10,000 units a year, that is 100,000 dollars of gross margin removed annually, unrecouped, simply because a duty rate moved. The damage is invisible inside the Shopify dashboard until someone updates the cost field. The same compounding pattern we describe in ten hidden costs eating your Shopify margin applies; it just shows up in a single bigger step rather than as a thousand small leaks.
Updating Shopify When Duty Rates Move
The operational response has three parts:
- Recalculate landed cost per affected SKU. The same formula as setup, with the new duty rate inserted. Be careful about HS code classification; one duty change often affects a subset of the catalogue, not the entire book.
- Update Shopify InventoryItem.unitCost. Through the admin UI for a small number of SKUs, or via a bulk CSV import for catalogues larger than a few dozen variants. The same workflow you would use for any unit cost update.
- Decide on existing on-hand inventory. Stock already in your warehouse was imported at the old duty rate. Whether you remeasure it at the new landed cost depends on your accounting method. Weighted average cost suggests blending until existing stock turns; standard cost suggests applying the new cost prospectively.
The most common mistake is updating the unit cost on the variant but forgetting to update it on all sales channels and integrations. If your fulfillment or 3PL system reads cost from a separate field, update both. If a subscription app caches cost at the time of subscription creation, force a refresh.
Pricing Decisions After a Tariff Move
Once landed cost is updated, the strategic question is whether to pass the cost to customers, absorb it, or split it. Three considerations:
- Price elasticity. If your category is price-sensitive (commodity), passing the full duty increase usually loses volume that erases the margin defence. If your category is differentiated (brand, design), a modest price increase often holds.
- Competitor response. Watch what competitors do over the first few weeks. Their pricing tells you what the market will bear.
- Channel mix. A price increase on DTC is straightforward; on wholesale it requires renegotiating with buyers on their next purchase order, which may be quarters away.
The middle path most brands choose is a partial pass-through: raise retail by 30 to 50 percent of the duty cost increase, absorb the rest. The decision needs accurate landed cost as the baseline, otherwise the pricing math is built on stale assumptions. And the per-order profit lens we cover in how to calculate true profit on Shopify tells you whether the new pricing is actually defending margin order by order, not just on average.
Operational Discipline Going Forward
Brands that handle tariff change well share three operational habits:
- HS code audit. Verify the classification of every imported SKU annually with a customs broker. Wrong classifications can mean overpaying or under-paying duty for years.
- Duty rate monitoring. Subscribe to trade publications or set alerts for changes to the rates that affect your SKUs. Tariff changes are public information but often go unnoticed until the importer invoice arrives.
- Quarterly landed cost recalculation. Even without explicit duty changes, ocean freight rates, fuel surcharges, and port handling fees move quarter to quarter. Reset the landed cost number every quarter rather than letting it drift.
The same operational lens that improves per-order profit visibility, the kind we describe in profit per order vs revenue, is what makes tariff response manageable. When you have a real cost per order, a 3-point margin compression triggers a flag the moment it shows up. When you do not, the same compression hides for a quarter and only surfaces when the bank account starts disagreeing with the report.
Frequently asked questions
Should tariffs and customs be included in Shopify COGS?
Yes. The right unit cost is landed cost: wholesale plus inbound freight plus customs duties plus any port handling fees, divided by units. Excluding these understates COGS and systematically overstates per-order profit.
How do I update Shopify COGS when a tariff changes?
Recalculate the landed cost per unit for affected SKUs and update InventoryItem.unitCost via the Shopify admin or a bulk CSV import. The new cost should be applied to new inventory; consider whether to remeasure existing on-hand stock at the new landed cost depending on your accounting method.
Can I pass tariff increases to customers?
Sometimes, depending on price sensitivity and competition. Most brands absorb part and pass part by raising retail price by a percentage of the duty increase, not the full amount, to protect conversion. Modelling the trade-off requires accurate landed cost as the baseline.
What is the HS code and why does it matter?
The Harmonised System code classifies your product for customs purposes. The right code determines the duty rate; the wrong code can mean overpaying duty for years or facing penalties for under-classifying. Verify HS codes per SKU with a customs broker periodically.
Want accurate profit per order, even after a tariff change?
Profit Guard reads your real InventoryItem unit cost on every order, so when landed cost updates, every per-order profit number updates with it. Free plan available, no credit card.
Install Profit Guard on Shopify