It is the last week of May. Somewhere in your Shopify admin there is probably a draft discount waiting to go live — a percentage off, maybe free shipping over a threshold, perhaps a bundle to shift slow summer stock. You have run sales before. You know they bring orders in.
The part most merchants never sit down and work out is the maths on a single order once the sale is live: the cost of the goods, the Shopify transaction fee, the shipping you are absorbing, the discount you set — and the second discount code a customer found on a coupon site and stacked on top. The dashboard shows revenue climbing. Whether each of those orders actually made money is a different question, and you usually do not get the answer until weeks later when you reconcile.
This is a guide to setting up a summer sale that moves stock and protects margin, plus the one practical audit you can run today regardless of which tools you use.
Disclosure: ProfitShield is built by JMS Dev Lab, the publisher of this blog.
When you set up a discount in Shopify, you can see the obvious cost: the revenue you are giving up on that order. What is far less obvious is whether the price the customer actually pays still covers everything it costs you to fulfil the order.
Most of us think in gross margin. "This dress costs me $22 and sells for $60. Even at 25% off it is still $45 — loads of room." But gross margin is not profit. Profit is what is left after every cost that attaches to an individual order:
A summer sale takes that already-tight calculation and stacks three or four pressures on it at once. Here is what that looks like with real numbers.
Say you sell a summer dress for $60.00, with $22.00 cost of goods. At full price the order economics are healthy:
Now apply a 25% summer discount, bringing the price to $45.00:
Still comfortably profitable. The trouble starts when a customer also applies a 15% welcome code you forgot to exclude from the sale, bringing the dress to $38.25:
Thin, but still above water. Now run the exact same stacked discount on a cheaper summer impulse buy — a $30.00 accessory with $13.00 cost of goods, the kind of product that sells in volume during a sale:
You just paid $2.22 to send that order out the door. Sell 300 of them across a two-week summer sale and that is $666 gone — on the product that probably featured most prominently in your promotion because it is cheap and tempting. The dress carried the discount. The accessory did not, and you had no way of telling them apart at the moment of sale.
Three things compound during a seasonal sale that do not bite as hard the rest of the year.
The whole point of a summer sale is more orders. But volume scales losses exactly as efficiently as it scales profits. If a handful of your orders are marginally unprofitable in normal trading, a sitewide promotion running at three times your usual volume turns that handful into a number worth noticing.
If your free shipping threshold is set on the pre-discount subtotal, a customer can fill a cart that shows $50 of products, qualify for free shipping, then knock the actual revenue down to $32 with sale and code stacking. You are now shipping for free an order that can no longer carry the shipping cost. A threshold that made sense at full price becomes a trap at sale prices.
"Three for $50" looks like a clean way to move stock. But your cost of goods on those three items does not fall just because the customer paid a bundle price. Bundles are one of the easiest ways to push an order under water without realising it, because the discount is baked into the offer rather than shown as a percentage.
I spent 22 years in retail before building software, and summer sales were always the same story: they reliably moved stock, and they did not reliably move margin. The difference between the two lived entirely in the details we did not model out before the sale went live.
The standard advice is to watch your profit analytics. That is sensible, but every reporting tool shares the same limitation during a sale: it tells you what happened after it happened. You run the report when the month closes, find the orders that lost money, and there is nothing to do about them — they shipped weeks ago. The customer has the product. The loss is booked.
Reporting is a rear-view mirror. During a high-volume sale window, what you actually want is something that checks each order at the moment it is placed and intervenes before it ships. That is a different category of tool: enforcement, not analysis.
ProfitShield is a Shopify app that validates order profitability at checkout in real time. It is built on Shopify Functions — Shopify's framework for running custom logic directly inside the checkout. The validation is written in Rust and compiled to WebAssembly, so it runs in milliseconds inside Shopify's own infrastructure. Customers feel no latency; the checkout behaves exactly as it always has. It is simply smarter about which orders it lets through.
The mechanism is straightforward:
Whether or not you use a tool to enforce it, here is the practical setup that keeps a summer sale profitable. Every step below is worth doing on its own.
This is exactly the set of rules ProfitShield enforces automatically, on every order, so you are not relying on having configured each discount perfectly by hand. But the list stands on its own — do it manually and you will still be ahead of most stores running the same sale.
Before your summer sale goes live, pull the orders from your last promotion and calculate, for each one:
True profit = revenue collected − cost of goods − payment processing (2.9% + $0.30) − shipping − packaging
Sort lowest to highest. The orders at the bottom of that list are your summer sale's blind spots — the product and discount combinations that quietly lose money. Once you can see them, the five steps above tell you what to change before you repeat the sale at higher volume.
Both are configurable. You can set a hard rule that holds or blocks orders falling below your margin floor, or a softer rule that lets the order through but flags it for review. A safe way to start is in flag-only mode, so you can see how many orders would have been caught before you switch anything to a hard block.
No. ProfitShield runs on Shopify Functions, which execute inside Shopify's own checkout infrastructure in milliseconds. Profitable orders pass straight through and the customer sees nothing different. There is no external server sitting in the checkout path to add latency.
ProfitShield reads your cost of goods from the Shopify product metafields where you likely already store it, or you can enter costs manually. It then layers on payment processing, shipping, and packaging to produce the real margin on each order.
A summer sale is one of the best tools you have for moving stock and bringing customers back. It only turns against you when the per-order maths goes unchecked at volume. Decide your floor, find the products that cannot carry the discount, and put something between an unprofitable order and the dispatch desk.
ProfitShield does that last part automatically, at checkout, on every order. It starts at $19/month, with a 14-day free trial and no credit card required — long enough to run it through your summer sale and see exactly what your discounted orders are costing you.
Try ProfitShield or get in touch if you want to talk through your sale economics before you go live.
Related reading: Are You Losing Money on Every Discount? · Is Free Shipping Actually Profitable on Shopify? · ProfitShield vs BeProfit · ProfitShield.