July 30, 2026 · CostSentry

Choosing a Margin Floor: One Number Won't Fit Your Whole Catalog

A margin floor is the line below which a SKU stops paying its way — the point where you'd honestly rather not make the sale. Most stores either don't have one, or have exactly one, applied to everything from fast-moving filters to a bumper that ships freight. The first mistake means you find out about sick SKUs from the annual accounts. The second means your alarm rings for the wrong products and stays silent for the right ones.

Floor and target are different numbers

Two thresholds do two jobs, and conflating them is where most margin policies go wrong:

If floor equals target, every routine cost wiggle becomes an alarm and you learn to ignore the alarms. If there's no floor at all, "we'll reprice when things get bad" has no definition of bad. A sensible gap is 5–15 margin points, depending on how volatile your suppliers are.

The floor has a physical meaning: cost-to-serve

The floor shouldn't be a round number you like. It has a hard lower bound: the margin at which a sale stops contributing anything, because the gross profit is consumed by the cost of processing the order. That stack is knowable for your store. A typical shape, for a $30.00 item shipped parcel:

Cost-to-serve on a $30.00 sale · illustrative stack
Payment fee (2.9% + 30¢)$1.17 · 3.9%
Blended shipping subsidy$2.40 · 8.0%
Packaging & pick-pack$0.75 · 2.5%
Returns allowance ~2%$0.60 · 2.0%
Cost-to-serve$4.92 · 16.4%

On this stack, a SKU showing an 18% margin isn't a thin performer — it's a passenger. Its $5.40 of gross profit nets $0.48 after serving the order: 1.6% of the sale, before a cent of overhead, ads or your time. This is the same arithmetic that makes Shopify's profit reports read high — the report shows the 18%, not the 1.6%.

So the recipe for the base floor is: measure your own stack (your fees, your average label subsidy, your return rate), then add the minimum contribution you're willing to accept per sale. Cost-to-serve of 16% plus a required 9-point contribution gives a 25% floor. Now the number means something, and when someone asks "why 25?", there's an answer.

Why one floor can't cover the catalog

Because the two things the floor depends on — cost-to-serve and what a sale is worth to you — both vary wildly across a catalog. The clearest way to see it is to follow a dollar of inventory for a year.

A fast-moving commodity SKU costs $10.00, sells at $12.50 — a 20% margin, $2.50 a unit — and turns its stock twelve times a year. Each stocked unit returns $30.00 of gross profit annually on $10.00 invested. A long-tail SKU also costs $10.00 and carries a fat 45% margin ($18.18 retail, $8.18 a unit) — but it sells through once a year. Each stocked unit returns $8.18 annually on the same $10.00.

The "thin" SKU out-earns the "fat" one almost four to one per dollar of shelf. That's why velocity buys a lower floor: the fast mover can survive on less margin per sale, while the slow mover must earn more per sale to pay for the months it sits. A single catalog-wide floor gets this exactly backwards — set it low and the long tail rots quietly below a threshold that never fires; set it high and your best-working inventory pages you daily about margins that are, for its velocity, perfectly fine.

A tiering that works in practice

Three or four tiers are enough. More than that and nobody remembers the rules. A starting framework — the specific numbers are yours to derive, the structure travels well:

TierTypical contentsFloorTargetRationale
Fast commodityFilters, fasteners, consumables12%20%Velocity carries it; heavily price-checked
Core catalogThe 80% of revenue in the middle25%35%Pays the bills; standard cost-to-serve
Long tail / slowSells a few times a year35%45%Each sale funds months of shelf time
Heavy / oversizeFreight or dimensional-weight items30%40%Shipping eats a bigger slice of price

Two placement rules cover most edge cases. Anything under MAP or contract pricing keeps its tier floor but loses the reprice lever — a breach there goes straight to the renegotiate-or-drop conversation. And deliberate traffic drivers you knowingly run thin should be excluded explicitly, on a written list — not by quietly lowering the whole tier's floor to stop the alerts.

If you do start with one number: fine — one floor beats none, and 20–25% is a defensible opening for a typical parcel-shipped catalog. But treat every false alarm and every missed rot as data. When the same category triggers exceptions twice, that's the catalog telling you where the next tier boundary is.

When a price file pushes a SKU through the floor

Floors earn their keep on the day a supplier reprices. Concretely: a core-catalog SKU retails at $15.99 with a cost of $10.00 — a 37.5% margin, comfortably above its 30% floor. The new price file lands the cost at $11.80, up 18%. The margin is now (15.99 − 11.80) / 15.99 = 26.2% — through the floor, and nothing about the product page looks any different.

The floor turns that from a silent fact into a queue of decisions:

  1. Reprice to target. Hold-target price = 11.80 / (1 − 0.35) = $18.15; rounding to a $17.99 shelf price lands at 34.4%. Whether the product survives a 12.5% retail increase is a judgment call — the repricing math and its options are a separate article.
  2. Renegotiate or re-source if the retail is capped by competition or MAP.
  3. Drop or run out if neither works — an honest outcome the floor forced you to reach in July rather than at year-end.

What the floor is not is an auto-repricer. It's a tripwire that converts a line in a spreadsheet into a decision with a deadline.

The floor is only as honest as the cost behind it. A floor checked against a cost field that's three price lists old will happily report the whole catalog healthy. The alarm needs the new cost the week it lands — which means diffing every incoming price file against what's recorded, the discipline described in reading supplier price lists. And if you import, remember the floor should clear your landed cost, not the bare invoice price.

Maintaining the floors

Floors drift stale the same way costs do. Two habits keep them honest:

Find what's already under your floor

Load your latest supplier price list and your Shopify export into the free Supplier Price Margin Checker: it recomputes every matched SKU's margin at the new cost and shows you exactly which ones just went through whatever floor you set.

Open the free checker ↗
Runs in your browser. Nothing uploaded, no account.