Back to Blog Listing

The stale-COGS problem: how eCommerce brands lose margin quarterly without noticing

The stale-COGS problem: how eCommerce brands lose margin quarterly without noticing
Karol Sobieraj Jul 11, 2026 4 min read

Written by: Karol Sobieraj, Founder & CEO, Digital Colliers

Your finance team updated the COGS sheet in Q1. It's now Q3. Freight rebounded, your Malaysian supplier raised unit cost 6%, packaging is up, and your 3PL renegotiated pick fees in July. Nobody flagged any of it in your P&L view because the master COGS file is still showing January numbers. Every order you shipped this quarter was priced against a fantasy cost base.

This is the stale-COGS problem, and it's the quietest way eCommerce brands lose margin. No alarm goes off. Revenue looks fine. Ad ROAS looks fine. But contribution margin has been sliding for months and the dashboard can't see it.

Why COGS drift is invisible until it isn't

COGS in a real eCommerce brand isn't one number. It's a stack: landed unit cost, inbound freight, duty, 3PL receiving, pick and pack, outbound shipping, payment fees, returns processing, and the ad cost you had to spend to acquire that order. Each line moves on its own schedule. Suppliers renegotiate quarterly. Carriers adjust twice a year. Meta CPMs for DTC advertisers rose year over year through 2024 and 2025, so the ad component of your per-order cost has been climbing whether you noticed or not. Customer acquisition cost across DTC brands is up roughly 40% since 2023.

Meanwhile the spreadsheet that drives your pricing gets touched once a quarter, if that. Finance owns it. Ops has half the data. Nobody owns the whole picture.

The pattern I keep seeing: brands discover the drift only when a full P&L close forces the reconciliation. By then you've been selling at the wrong price for 90 to 180 days.

What six months of drift actually costs

Here's the uncomfortable arithmetic. Roughly 30% of SKUs at a typical multi-channel brand already lose money per order after returns and ad spend are booked properly. That's the baseline before drift. Now layer on stale COGS.

If your true unit cost has risen 4% and your ad cost per order has risen another few points, and you haven't repriced, you're giving away 200 to 500 basis points of contribution margin on every order in that category. On a brand doing £10M a year, that's £200k to £500k walked out the door before anyone noticed.

It gets worse if you sell apparel. Online return rates run around 19 to 20% of gross sales generally, but UK apparel sits at 25 to 40% depending on category. Every returned unit carries outbound shipping, inbound shipping, and reprocessing cost that most brands still don't fully load into their SKU-level margin view. Stale returns cost assumptions compound the stale unit-cost problem.

And this is happening in a market where UK eCommerce grew about 3% in 2024. Single-digit top-line growth is the new baseline. You can't out-grow a margin leak anymore.

What live COGS visibility actually looks like

The operators who've solved this aren't running fancier spreadsheets. They've done four boring things:

  1. Pulled unit cost, freight, and 3PL fees out of static files and into a data model that reads from source systems (ERP, WMS, freight invoices) on a schedule.
  2. Attributed ad spend to orders at the SKU or collection level, not just at the account level.
  3. Loaded returns cost per SKU as a live figure based on the last 30 to 90 days of actual returns, not an annual average.
  4. Exposed one contribution-margin-per-order number that a merchandiser or brand manager can see next to every SKU, updated daily.

None of that requires a platform migration. It requires somebody to model it and wire it up. Most brands under £50M revenue simply haven't done it because it sits between finance, ops, and data, and none of them own it.

Triggers worth setting

Once the pipe exists, the value is in the alerts, not the dashboard. A dashboard nobody opens is worse than nothing. Useful triggers:

  • Any SKU whose contribution margin drops more than 300 bps week over week.
  • Any SKU where returns rate crosses a category threshold (say 30% for apparel).
  • Any supplier whose landed cost variance vs the master exceeds 3%.
  • Any ad set whose blended CAC on the last 14 days exceeds 90-day contribution margin.

Route those to a human. In Slack, in email, wherever they'll actually get read. The alert closes the loop that quarterly reviews leave open.

The cost of not doing this isn't a line item you'll see. That's precisely why it keeps winning.

Related Posts