COGS Drift: When Stale Cost Inputs Make ROI Look 30% Better Than Reality

Metricuno
July 31, 2026
7 min read
COGS Drift: When Stale Cost Inputs Make ROI Look 30% Better Than Reality — Stale COGS in Shopify silently inflates ROI by 20-30%. Learn how to audit cost freshness, spot drift, and fix the gap between reported and real margin.
Quick answer

Most operators set COGS once in Shopify and forget. Meanwhile suppliers, freight, packaging, and 3PL rates have moved 15-30% — quietly inflating reported ROI while real margin bleeds.

Quick answer

If your Shopify 'Cost per item' fields haven't been touched in over 6 months, your reported ROI is almost certainly overstated by 15-30%. Supplier prices, freight, packaging, and 3PL pick rates typically drift 8-12% per year each — compounded, that gap is larger than most attribution errors people chase. Audit COGS freshness before you touch your channel mix.

Definition
Financial hygiene

COGS Drift

The gap that opens between the unit costs recorded in your store and the real landed cost of goods, once supplier, freight, packaging, and fulfilment rates have moved.

COGS drift is what happens when the 'Cost per item' fields in Shopify (or the equivalent in WooCommerce and Magento) stay frozen while every input feeding into that number keeps moving. Supplier price lists get renegotiated, freight surcharges reset, packaging vendors pass through material inflation, and 3PL contracts renew with higher pick-and-pack rates. Each change is small enough to ignore in isolation. Together, over 12-18 months, they routinely add up to 15-30% higher real COGS than what your store, your P&L, and your ad platforms believe. The consequence is a systematically overstated gross margin — and downstream, an overstated ROI on every euro of ad spend.

Also known as
stale COGS
cost input decay
landed cost drift

Most operators discover COGS drift the same way: ROAS looks healthy, cash doesn't. You are hitting a 3.2x blended MER, the Meta dashboard is green, and the bank balance still slides every month. Before you rebuild attribution, check the cost side.

Why COGS drift happens (and why it hides)

Shopify treats 'Cost per item' as a static field on the variant. There is no expiry, no reminder, no diff against your latest supplier invoice. Whoever set it 18 months ago is still setting your gross margin today.

Meanwhile the real landed cost is a moving stack: FOB unit price, inbound freight, duty, inspection, packaging, inserts, and the per-order fulfilment fee. Each layer has its own drift rate. Freight and duty creep alone commonly adds 8-12% to landed cost that never gets logged back into the product record.

The reason it hides: none of these changes trigger an alert. Your 3PL raises pick rates in a contract renewal PDF. Your packaging vendor slips a 6% surcharge into a quarterly quote. Your supplier moves from FOB Shenzhen to EXW factory-gate terms. Nothing in your analytics stack notices.

The compounding trap

A 4% supplier increase, 6% freight surcharge, 5% packaging pass-through, and 3% 3PL rate rise across a year don't add to 18% — they compound to closer to 20%, and on a product with a 45% starting gross margin that eats roughly 9 margin points. Your reported contribution margin still says 45%. Reality is 36%.

How to detect COGS drift in your own store

Pick your top 10 SKUs by revenue. For each, pull the most recent supplier invoice, the current freight quote per unit, the packaging cost, and the current 3PL pick-and-pack fee. Sum them into a fresh landed cost. Compare to the 'Cost per item' field in Shopify.

If any SKU is off by more than 5%, you have drift. If more than half your top-10 are off by more than 10%, your entire ROAS-to-ROI conversion is wrong — and any channel decisions you have made in the last 6 months were made against overstated margin. This is the core of a proper quarterly cost-per-item audit.

The clearest tell at the reporting layer: MER looks fine while cash flow deteriorates. That MER-vs-ROI gap is the COGS-blind efficiency ratio trap in action — a healthy revenue-over-spend number sitting on top of a rotting margin denominator.

How to fix it — a repeatable cadence

Set a 90-day COGS freshness rule. Every quarter, one person (usually ops or finance) reconciles the top 20 SKUs by revenue against the latest supplier invoices, freight bills, packaging quotes, and 3PL statements. Updated landed costs get pushed to Shopify's 'Cost per item' field the same day.

For EUR-priced stores sourcing in USD or CNY, add an FX layer: recompute landed cost at the trailing 90-day average FX rate, not the rate on the day you first entered the SKU. Ignoring this alone typically overstates margin by a full point when the euro weakens.

Longer term, the fix is structural. Renegotiate supplier MOQs for a step-change reduction rather than absorbing quarterly increases. Rebid your 3PL on a two-year cadence. Keep a live packaging BOM. Each of these has its own playbook — but none of them help if the numbers never make it back into Shopify.

What good looks like

A team running the 90-day freshness rule sees reported contribution margin stay within 1-2 points of actual contribution margin at month-end. Ad decisions get made against real numbers. The CAC ceiling you allow Meta to bid against is honest — you stop overspending against a phantom margin cushion.

Experiment ideas once your COGS is honest

First, rerun your channel-mix analysis on refreshed contribution margin. SKUs that looked profitable on Meta at a 3.0x ROAS may need 3.6x once COGS is corrected. Cap bids accordingly and watch what happens to blended ROI over the next 30 days — this is the direct link between stale COGS and Meta overspend.

Second, test a price increase on the 3-5 SKUs that lost the most margin to drift. On beauty and apparel especially, a 4-6% price rise rarely dents conversion measurably but restores nearly a full margin point per point of price. Instrument the test against contribution margin per session, not revenue per session.

Frequently asked

Frequently asked questions

Materially, every quarter. Supplier invoices, freight surcharges, packaging quotes, and 3PL rates all move on independent cycles. Even in a low-inflation environment, expect 1-3% drift per quarter across the landed cost stack. In a high-inflation year, 8-12% per quarter is not unusual.

Your accountant reconciles it in the P&L, but that's 3-15 months too late for ad decisions. By the time year-end books close, you have already spent a full quarter or two bidding against inflated margin. The point of a quarterly cost audit is to fix the number in the system operators actually use — Shopify — not just in the general ledger.

Export the products CSV, update the Cost per item column offline against your fresh landed-cost sheet, and re-import. For stores with more than a few hundred variants, use a bulk-edit app or the Admin API. Do the whole top-20 by revenue in one pass — piecemeal edits are how drift returns.

Include them. Shopify's Cost per item is the only field that feeds gross-margin reporting and third-party profit tools. If freight and duty live in a separate spreadsheet, they will not show up in any dashboard your marketing team looks at — and that's exactly the freight-and-duty creep gap most operators miss.

Packaging — the box, void fill, tissue, insert card, thank-you note — is part of landed cost per unit. Vendors have been passing through paper and board inflation for two years. If your unboxing hasn't been recosted since 2022, it is almost certainly a margin leak that belongs in Cost per item.

Yes, especially on renewal. Most 3PL contracts include annual escalators of 3-6%, plus surcharges for peak season, dim-weight, and returns handling. Fulfilment renewals silently compress contribution margin because the higher rates apply immediately but rarely trigger a COGS refresh.

Recompute landed cost at the trailing 90-day average of your sourcing currency, not the rate from when you first onboarded the SKU. For EUR-priced stores sourcing in USD, a 5% currency move is a full margin point on a 45% GM product. Refresh whenever FX moves more than 3% off your booked rate.

Stale COGS is one of the top three causes of the ROAS-positive, ROI-negative pattern — often larger than attribution error. Fresh contribution margin measurement is the prerequisite for trusting any downstream ROI number. Fix COGS first, then argue about attribution.

Partially. Some ERPs and PIM tools ingest supplier invoice PDFs and update landed cost automatically. For most stores under €15M, a quarterly manual reconciliation against invoices, freight bills, and 3PL statements is faster to implement and catches more edge cases than automation.

On stores that haven't refreshed COGS in 12+ months, expect reported gross margin to drop 5-9 points and reported ROI on paid channels to drop 20-30%. That is not a loss — it is the number reality has been quietly running at. The point is to make decisions from it, not from the flattering version.

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.