How to Run a Profitable Shopify Summer Sale (Without Losing Money on Every Order)
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.
The summer sale stack
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:
- Cost of goods. The wholesale price plus inbound freight, duties, and shrinkage — usually a little higher than the supplier's headline price.
- Payment processing. Shopify Payments takes roughly 2.9% + $0.30 per transaction on standard plans, charged on the total collected including shipping, and it is not refunded when a customer returns the item.
- Shipping. Anything you subsidise as "free shipping" comes straight out of margin — typically $4 to $10 a parcel depending on weight and zone.
- Packaging. Boxes, mailers, void fill, inserts. Another $1 to $5 per 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.
A worked example: the 25% summer promo
Say you sell a summer dress for $60.00, with $22.00 cost of goods. At full price the order economics are healthy:
- Revenue collected: $60.00
- Cost of goods: -$22.00
- Payment processing (2.9% + $0.30): -$2.04
- Shipping (free shipping, your cost): -$6.00
- Packaging: -$1.50
- Net profit: $28.46 (47% net margin)
Now apply a 25% summer discount, bringing the price to $45.00:
- Revenue collected: $45.00
- Cost of goods: -$22.00
- Payment processing: -$1.61
- Shipping: -$6.00
- Packaging: -$1.50
- Net profit: $13.89 (31% net margin)
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:
- Revenue collected: $38.25
- Cost of goods: -$22.00
- Payment processing: -$1.41
- Shipping: -$6.00
- Packaging: -$1.50
- Net profit: $7.34 (19% net margin)
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:
- Revenue collected: $19.13 (25% off, then 15% off)
- Cost of goods: -$13.00
- Payment processing: -$0.85
- Shipping: -$6.00
- Packaging: -$1.50
- Net profit: -$2.22
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.
Why summer makes this worse, not better
Three things compound during a seasonal sale that do not bite as hard the rest of the year.
Volume amplifies the losses
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.
Free shipping thresholds break at sale prices
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.
Bundles cut price without cutting cost
"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.
Across retail, summer sales are always the same story: they reliably move stock, and they do not reliably move margin. The difference between the two lives entirely in the details that do not get modelled out before the sale goes live.
Why post-sale reports tell you too late
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.
Catching it at checkout
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:
- It reads your real costs. Cost of goods comes from your Shopify product metafields or manual entry, payment processing is calculated on the actual order total, and your configured shipping and packaging costs are layered on. Each order gets a true margin figure, not an estimate.
- You define the floor. Set a minimum net margin percentage, a minimum absolute profit per order, or rules for specific cases — for example, no stacking a code on items already discounted in the sale.
- It acts at checkout. Orders that clear your floor go through untouched. Orders that fall below it can be blocked, the discount capped to preserve margin, or the order flagged for you to review before it ships.
Setting up margin rules for a sale window
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.
- Decide your margin floor before the sale, not during it. Pick a number — say 10% net, or a minimum of $3 profit per order — and treat it as the line you will not cross. Decisions made mid-sale, when orders are flooding in, drift toward "just let it through".
- Find the products that cannot carry the discount. For each product, work out the maximum discount percentage that still covers all your per-order costs. That is its ceiling. Your cheapest, thinnest-margin items will have a much lower ceiling than your hero products — and they are usually the ones a percentage-off sale hits hardest.
- Turn off discount stacking on sale items. Shopify lets you stop codes combining with automatic discounts. Configure this before the sale so a leaked welcome code cannot pile on top of your promotion.
- Recheck your free shipping threshold. Base it on the post-discount total, or raise it for the duration of the sale, so a discounted cart cannot tip into free shipping it cannot afford.
- Put minimum order values on your codes. A blanket percentage code with no minimum is an open invitation to apply it to your lowest-margin product.
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.
The one audit to run this week
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.
Frequently asked questions
Does ProfitShield block orders, or just warn me?
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.
Will checking margin at checkout slow my store down?
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.
Do I have to enter the cost of every product?
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.
Run the sale, keep the margin
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 has a free plan, with paid plans from $19/month and a 14-day free trial, 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? — The full breakdown of how discounted orders lose money and how to catch them before they ship.
- Is Free Shipping Actually Profitable on Shopify? — How to work out whether your free shipping threshold is helping or quietly eating your margin.
- ProfitShield vs BeProfit — The difference between validating margin at checkout and reporting on it after the fact.
Related reading: Are You Losing Money on Every Discount? · Is Free Shipping Actually Profitable on Shopify? · ProfitShield vs BeProfit · ProfitShield.
Have a problem like the one in this post?
We build focused software for businesses that off-the-shelf tools don't fit. Get a free, no-pitch review — if buying an app or doing nothing is the right call, we'll say so.
— or just leave your email and I'll send the honest fix (one email, no newsletter) —