Skip to content

Profit math

How to calculate COGS for Shopify (the right way)

Most Shopify operators undercount COGS by 30-40%. The product cost is the easy part — it's the shipping, the duties, the packaging, and the supplier-tier breaks that decide whether your margin is real.

10 min read · Updated May 2, 2026

Cost of Goods Sold — COGS — is the most undercounted number in Shopify P&Ls. Operators see "COGS" in their accounting tool, type in what their supplier charged them per unit, and move on. That number is wrong. Often dramatically wrong. And it's wrong in the direction that makes your business look more profitable than it actually is.

This guide walks through what COGS actually means, the four costs every Shopify operator misses, how to handle volume-tier supplier breaks, and the right way to track it without spending three hours per week on a spreadsheet.

What COGS is, in plain English

COGS is the total direct cost of producing and delivering the products you sold during a period. It doesn't include marketing, salaries, rent, software, or anything that doesn't scale 1:1 with units sold. It does include everything that does scale with units sold.

The simplest formula:

Note

COGS per order = (product cost × units) + per-order packaging + inbound shipping share + duties & tariffs share + supplier transaction fees

Most operators stop at "product cost × units" and call it a day. That's the version that under-states COGS by 30-40% on average. Here's what gets missed.

The five things almost everyone misses

1. Inbound shipping (your supplier → your warehouse)

When your supplier ships you a pallet of inventory, that shipping cost is part of COGS — not a "shipping expense". Distribute it across the units in the pallet. If 1,000 units arrive on a $1,200 freight bill, that's $1.20 per unit added to your true cost.

For dropshippers using AliExpress or CJ, the supplier shipping to the customer is part of the per-unit cost they quote you, but customs delays and re-routing fees often aren't. Track those separately.

2. Duties & tariffs

Anything imported across an international border has duty rates that vary by HS code and country of origin. A $10 product from China can carry $1.50-$3.50 of duties depending on category. If you're drop-shipping from China to a US customer, the customer pays via DDP — but if you're importing in bulk, you pay, and that goes into COGS.

2025-2026 reminder

Trade rules around China-origin goods have shifted multiple times in the last 18 months. The de minimis exemption for low-value imports has been narrowed in the US. If you haven't reviewed your duty exposure since early 2025, your COGS estimates are probably outdated.

3. Packaging & insert costs

The branded box, the tissue paper, the thank-you card, the sample sachet, the silica packet, the shipping label, the void fill. Add it all up — most DTC brands run $1.50-$4.00 of pure packaging cost per order before the product even goes in.

This is one of the biggest leaks in operator P&Ls. Operators see packaging as "marketing" or "brand experience" and don't put it in COGS. But every additional unit shipped requires more of it. By definition, that's COGS.

4. Supplier volume-tier breaks

Most factories quote you a tiered price: $8.50 at MOQ 500, $7.20 at 1,000, $6.40 at 2,500, $5.80 at 5,000+. Operators often just record "$8.50/unit" and call it a day, even when they're ordering at the 1,000-unit tier. Or worse, they record "$5.80" because that's the lowest tier — even though they only hit it once a year.

The right approach: record the cost at the tier you actually ordered. If you blend tiers across the year, weight by units. Most ecommerce dashboards (including BeProfit and Triple Whale) force a single COGS number per SKU, which loses this nuance entirely.

Tiered COGS in practice

Ecom Forward supports up to three COGS tiers per SKU, and the auto-COGS engine picks the right tier based on the units in each order. A 5-unit order pulls the tier-3 rate; a 1-unit order pulls the tier-1 rate. The blended tier shows up in your P&L automatically. See it on the Financials tab.

5. Supplier-side transaction fees

AliExpress takes a percentage. CJ Dropshipping takes a percentage. Wire fees from international suppliers add 1-3%. Stripe charges your supplier on bulk orders. None of these show up in your "supplier cost" line — they show up across multiple invoices and bank statements. Track them by adding 2-4% to your supplier-side cost as a "supplier handling" overlay.

A note on currency

Suppliers quote in their local currency. You sell in yours. If your supplier costs are in CNY (China) or EUR (Europe) and your store currency is USD, exchange-rate movement is part of your real COGS.

A 5% strengthening of the supplier currency against your sale currency means your effective COGS just rose 5% — even though your supplier didn't change their price. Most operators ignore this until annual reconciliation and then wonder where the 4% margin went. The right approach: convert at order time, log the rate, and reconcile against actuals quarterly.

Dropshipping vs stocked: different math, same principle

For dropshipping, COGS is mostly transparent — your supplier charges you per order, that's the cost. The leak is usually refund-driven (you eat the supplier cost on returns the customer doesn't ship back) and dispute-driven (chargebacks where you've already paid the supplier).

For stocked inventory, COGS is more complex but more controllable. The hidden cost is dead stock — inventory that doesn't sell at full price and gets marked down or written off. If 8% of your inventory turns into dead stock per year, your real COGS is 8% higher than your nominal COGS, distributed across the items that did sell.

For dropshippers specifically, our Dropshipping Profit Estimator bakes in refund-as-triple-loss and the supplier-side fees that most calculators skip. Worth a 60-second run with your real numbers.

A complete COGS formula for Shopify

Note

True COGS per order =
(supplier_cost × units, at the tier matching units)
+ per-unit inbound shipping (freight ÷ pallet units)
+ per-unit duties & tariffs
+ per-order packaging cost
+ supplier-side transaction fees (~2-4% overlay)
+ dead-stock allocation (annual write-off ÷ annual units sold)
+ currency-conversion adjustment (if multi-currency)

For most stocked DTC brands this lands 25-35% higher than the "supplier cost × units" number you probably have today. For dropshippers it's 10-20% higher because more of the cost is bundled into the per-order supplier charge.

How Ecom Forward handles this

Ecom Forward stores up to three tiered COGS values per product (with optional per-product currency override), auto-derives daily COGS from your Shopify orders × your tier prices, and surfaces the result on your P&L every morning. Edit a COGS field in the Catalog tab and the next day's P&L reflects it automatically. Per-product margin analysis shows up in the Products tab.
See how it works in the product

Common questions

Does Shopify calculate COGS automatically?

Shopify lets you record a "cost per item" on each product, but it doesn't apply tiered breaks, doesn't handle currency conversion, doesn't account for inbound shipping or duties, and doesn't update over time as your supplier prices change. The "cost" field in Shopify is a starting point, not a complete COGS solution.

Should COGS include packaging?

Yes. Anything that scales with units sold is COGS. Branded boxes, tissue paper, inserts, void fill, shipping labels — all of it.

What's a healthy COGS percentage for ecommerce?

For DTC brands with strong margin, 25-35% of revenue. For dropshippers, 35-55% (because supplier shipping eats into per-unit margin). For high-margin categories like beauty and supplements, 15-30%. Anything above 60% means you're running a marketplace business, not a brand.

How often should I update COGS values?

Per shipment. Every time a new pallet arrives at a different unit cost, or a new dropshipping supplier gets brought online, or a duty rate changes. Quarterly at minimum. Annual updates are too slow for any serious brand.

Bottom line

COGS isn't "what your supplier charged you per unit". It's the full cost of producing and shipping the products you sold during the period — at the volume tier you actually ordered, in the currency you actually paid, with the packaging and duties and dead-stock realities baked in.

Get this right and your real margin is visible. Get it wrong and you're optimizing your business based on a fiction. Run your real COGS through the Profit Simulator and see how the contribution margin shifts when you switch from "supplier cost only" to fully-loaded COGS — most operators are surprised by 5-10 percentage points.

Try it on your store

Run your real numbers, not someone else's averages.

Ecom Forward calculates everything in this article — break-even ROAS, contribution margin, cash forecast, balance sheet — live from your real Shopify and ad-platform data. Daily.