Look at the small order that just came in. One low-price item, maybe a single accessory, a cart total that barely clears the cost of the box it ships in. Shopify took it, charged the card, and dropped it into your queue like any other order. Someone still has to pick it, pack it, print a label, and hand it to a carrier, and the payment processor still took its cut off the top. On a big order none of that stings. On a five-dollar order it is the whole margin and then some. You did not lose a sale. You booked one that cost you money to fill.
Ask in any Shopify merchant group how to stop this and you find the same thread over and over. How do I set a minimum order amount. Can I require a minimum spend before checkout. How do I set a minimum order quantity for wholesale. It is one of the most common questions merchants bring to the platform, and the answers underneath are always the same shrug: there is no setting for it, so edit your theme, use a discount, or install an app. For something this basic, that is a strange gap.
A store can take an order that costs more to fulfil than it brings in. Shopify treats every cart as valid the moment it has one item in it, no matter how little that item is worth to you.
Why Shopify won't stop a too-small order
Shopify's checkout is built to say yes. A cart with a single item is a complete, valid cart as far as the platform is concerned, and nothing in the standard admin lets you say not until it reaches this amount. The closest thing that exists is a minimum purchase condition on a discount, and it is a trap dressed as a solution. That condition only decides when a discount applies. It says spend forty dollars to get free shipping or ten percent off. It does nothing to stop a shopper who is happy to pay full freight on a tiny order from checking out anyway. It gates a reward, not the door.
Two real exceptions exist, and both are narrow. If you are on Shopify Plus you can write checkout logic with Shopify Functions, formerly Scripts, that blocks a checkout under a threshold, but that is a developer feature on the top plan, not a switch the rest of the platform gets. And Shopify's B2B tools let you set quantity rules and minimums on company profiles, which is genuinely useful if you sell wholesale through B2B catalogs, but it does nothing for your regular retail storefront or for a wholesale customer you have not set up as a company. For the everyday case, one item too small to be worth shipping, there is no native floor.
What the "official" fix actually costs you
Go looking for the workaround and you land on two roads, both with a toll. The first is editing the theme. You drop a bit of JavaScript on the cart page that checks the subtotal and disables the checkout button until the cart clears your minimum, with a little message explaining why. It demos well. The problem is where it lives: on the cart page only. Shopify checkout can be reached without ever seeing that page, through a checkout permalink, an accelerated wallet button like Shop Pay or Apple Pay that jumps straight from the product page, or a cart link a customer saved. Your cart-page guard never runs, and the too-small order goes through exactly as before. You have built a fence with a gate standing open beside it.
The second road is a third-party app, and good ones exist. A store that fights this every day should look at one, which is itself proof the native gap is real. But an app is one more subscription and one more thing sitting in your checkout, and most enforce a single flat rule: one number, applied to everyone. That rule cannot tell a retail shopper apart from a wholesale buyer, cannot make an exception for a gift-card-only order, and cannot decide when a minimum is doing more harm than good. It just applies the switch, and you are back to managing the edges by hand.
Why the usual fixes don't hold
Faced with the too-small order, merchants reach for a handful of moves. Each one gives back something you did not mean to trade away.
"I will just put a note in the cart." A line that says orders under twenty-five dollars are not accepted, with no enforcement behind it. Most shoppers do not read it, the ones who do can ignore it, and the order still checks out. You have documented the rule without applying it, which is the same as not having one, except now it looks like you meant to.
"I will use a free-shipping threshold instead." The instinct is right, lift the average order, but a shipping incentive only rewards bigger carts, it never blocks small ones. A shopper perfectly willing to pay shipping on a tiny order sails past it. It moves some carts up and lets the rest through, so it softens the problem without solving it, and you still eat the orders that stay small.
"I will block it with cart-page code." The correct instinct, and the one that does not hold. It works right up until a customer checks out through a wallet button, a saved cart link, or a checkout permalink that never touches the cart page, and then it quietly does nothing. A guard that only covers one path is a guard you cannot trust, because the orders you most want to stop are exactly the ones that slip down the path you did not cover.
"I will set one minimum for the whole store." The blunt version that creates new problems. A flat floor that makes sense for retail blocks the wholesale customer you wanted, or the gift-card top-up that should always go through, or the loyal repeat buyer grabbing one replacement part. One number cannot hold all those cases, so you end up making exceptions by hand, which is the manual work you were trying to escape.
What the automation actually has to do
The real job is not "reject carts under a number." It is watch the cart as it builds, know the right floor for this customer and this mix, tell the shopper early and kindly how much more they need, enforce it everywhere checkout can start rather than on one page, and let the cases that should pass, pass, while pulling in a human for the calls that are really policy decisions. That is detection, judgement, and enforcement that has to hold on every path. As a Dugong playbook, in plain prose, it reads like this:
# trigger
On a cart reaching checkout, from any path:
cart page, wallet button, or checkout permalink
# steps
1. Read the cart: subtotal, item count, customer
tag, and whether it is retail or wholesale
2. Decide the minimum that applies here, not one
flat number for every shopper
3. Signal early on the cart: how far under, and
how much more clears the floor
4. Enforce at checkout itself, so a wallet button
or a saved link cannot slip under it
5. Exempt the carts that should always pass: gift
cards, set customer tags, approved accounts
6. Nudge, do not just block: suggest what gets
the cart over the line
7. Hold for review a wholesale exception or a
one-off approval, so a person makes the policy call
Seven lines. The compiler fills in the rest: reading the cart on every path into checkout instead of one page, applying the floor that fits a retail shopper or a wholesale account rather than a single number, telling the customer how much more they need while there is still time to add it, letting the orders that should always pass go through untouched, and handing the genuine exceptions to a person instead of guessing. The merchant never opened the theme editor. They described how a sharp store manager would handle a cart that is too small to be worth shipping, and let the compiler run it on every order, all the time.
Why this is a compiler problem, not an app problem
There are capable minimum-order apps on the Shopify App Store, and a store that hits this daily should evaluate one. But the thing that makes a minimum safe is not one more number in a settings box. It is judgement about a specific cart at a specific moment: is this a retail shopper or a wholesale account, should this gift-card order be exempt, is this repeat customer worth waving through, and would enforcing the floor here cost more goodwill than the order is worth. Those answers change per cart, per customer, and per day, which is exactly what a flat rule handles badly and a person handles too slowly to sit on every checkout.
A natural-language compiler fits because setting a minimum was never a single action. It is reading the cart, deciding the right floor, warning the shopper early, enforcing on every path, and exempting the carts that should pass, and it has to hold whether checkout starts on the cart page or a wallet button. You can describe the whole behavior in a paragraph. You could never police it by hand across every order that comes in. It sits in the same family as the abandoned cart that gets one email, where the point is to lift a cart rather than lose it, and the sale you have to start by hand, where pricing logic Shopify will not run by rule has to run itself.
The workflow worth building this week
If small orders are quietly eating your margin, or you sell wholesale and need a real floor the storefront will actually enforce, this is the automation to set up now, because the cost is small on each order and constant across all of them. It pairs naturally with the pricing and cart work we have written about, like the price change you make one product at a time, which sets the numbers a minimum leans on, and the repeat customer your store treats like a stranger, which is how the compiler tells a wholesale account from a first-time retail shopper, and it feeds the same flywheel as the Shopify automations no one builds, where the work that compounds is the part merchants never get to.
Describe it the way you would brief a sharp store manager: set a floor a cart has to clear before it checks out, know that wholesale and gift cards play by different rules, tell the shopper early how much more they need, enforce it everywhere checkout can start, and bring me the exceptions that are really policy. That is the whole brief. The compiler does the reading, the judgement, the warning, and the enforcement, on every path a customer can take. The orders you accept are worth accepting, and the shopper with a small cart gets nudged up instead of slipped through.
If you are a Shopify merchant who has built a minimum that actually holds at
checkout, or you have a story about the flood of tiny orders that cost more to
ship than they earned, the inbox is open: field-notes@dugong.live.
We are collecting case studies for the next issue.