How to Stop Unprofitable Orders in Shopify Plus
Some of your orders lose money the moment they are placed. Here is the practical playbook for finding them and shutting them off, without nuking conversion.
Some share of your orders lose money the moment they are placed. Not most of them. But the ones that do tend to be invisible until the books close, and they cluster around exactly the promos you run to grow.
This is the practical version: how to find the unprofitable orders, how to set a rule that stops them, and how to do it without strangling conversion. No theory. The steps I would actually follow.
First, find out how bad it is
You cannot fix a number you have never measured. Most stores have never measured per-order net margin, because Shopify does not show it. The platform knows revenue and discount. It does not know your landed cost.
So start in observe-only mode. Run a margin floor tool in shadow for a week or two. It logs what each order's real margin was, using your COGS plus freight plus the discount stack, and flags the ones that came in below where you would want them. No orders get touched. You are just turning on the lights.
What you usually find: it is not a broad bleed. It is a tail. A small slice of orders, heavily discounted, often to expensive-to-ship zones, doing most of the damage. That tail is the target.
Second, understand the three ways orders go underwater
In practice almost every below-floor order is one of three patterns.
Stacked discounts. A customer combines two or more codes, WELCOME10 plus a 15 percent sale plus a loyalty perk, and the total drops below cost. This is discount stacking, and it is the loudest one.
Freight you did not price for. A flat-rate or free-shipping offer is fine on average and brutal on the edges. The same discounted order is profitable to a nearby zone and a loss to a remote one.
Stale cost. Your COGS went up. The number in Shopify did not. You are running margin math on last year's cost and wondering why the bank balance disagrees.
The fix for all three is the same: decide the floor, then enforce it before the order ships.
Third, set the floor
A profit floor is the minimum net margin an order must clear to ship without a second look. Setting it is a business decision, not a technical one.
Start simple. Pick one global floor that you would never knowingly sell below. Then refine where the catalog forces you to. A blanket 20 percent does not fit a store whose accessories run 70 points and whose electronics run 8. So you set floors per SKU, per category, per freight zone, or per promo type. Thin floors on clearance, by choice. Real floors on the products that pay your rent.
Here is the kind of math the floor is checking, on a single order:
| Line | Amount |
|---|---|
| Price (2 units) | $180.00 |
| COGS | $84.20 |
| Freight (zone 8) | $18.30 |
| Promo (SUMMER25, -25%) | -$45.00 |
| Net margin | -2.1% |
| Floor | 8.0% |
That order is 10 points under the floor. Without enforcement it ships and you find out at month-end. With enforcement, it gets flagged or held within 60 seconds of being placed, before anyone packs it.
Fourth, hold instead of block
This is the part people get wrong, and it is the whole game.
The instinct is to block below-floor carts at checkout. Do not. Blocking carts kills conversion and your team will switch the rule off inside a month. The better move is to let the order be placed, check its true margin within 60 seconds, and hold the below-floor ones before fulfillment. A person decides: ship it, contact the customer, or cancel and refund. Then you fix the discount rule that let it through, so the next one does not happen.
That is how three guardrails behave:
- Coupon stacking: flag the order when stacking breaks the floor, name the codes that combined, and close that combination in your discount settings.
- Margin floor: hold the order before it ships when true net margin lands below your floor.
- MAP protection: flag any order whose effective post-discount price fell below a vendor's MAP, so you fix the promo before a pattern of violations costs you dealer status.
The point of this design: the customer's checkout never changes, and you only intervene on the orders that were never going to make money, not the ones that were.
Fifth, roll it out without drama
You do not need a replatform or a dev sprint, and there are no checkout code changes. The sane sequence:
- Observe-only first. Watch the flags. Quantify the leak in dollars.
- Turn on automatic holds for your worst pattern first, usually stacked discounts.
- Expand to the rest once you trust the numbers.
The slow part is not the setup. It is you deciding what your floors should be, which is work worth doing anyway.
FAQ
Won't customers be annoyed? Their checkout is untouched and the order is placed normally. If a below-floor order is held, your team decides how to handle it, and often the right call is to ship it and fix the rule behind it. The version that blocks carts at checkout is the one that annoys people, and that is the version to avoid.
How is this different from just turning off promo stacking in Shopify? Turning off stacking is blunt and still ignores freight and cost. Enforcement only intervenes on the specific orders that actually break your floor, so your good stacked orders keep flowing.
What if my COGS is wrong in Shopify? Then your floor is enforcing against a fiction. Sync real landed cost from your ERP. For NetSuite, see the NetSuite COGS integration.
The orders bleeding you are findable and stoppable, and stopping them does not cost you sales. Start by measuring the leak.
Run an observe-only test on your store: start a free trial. The bigger picture lives in checkout vs pre-fulfillment margin enforcement on Shopify Plus.