</> JMS Dev Lab
Services Pricing About Blog Contact Get in Touch
Get in Touch
  1. Home
  2. /
  3. Blog
  4. /
  5. Are You Losing Money on Every Discount?

Are You Losing Money on Every Discount? How to Know Before the Order Ships

14 April 2026

You ran a 30% flash sale last month. Three days, sitewide. Orders poured in. Your Shopify dashboard showed record revenue. You posted about it on social media. Your team was buzzing.

Then you sat down with the numbers. After subtracting what you actually paid — the cost of goods, the payment processing fees, the shipping, the packaging — you hadn't made money on that sale. You had lost roughly $3,000. Three thousand pounds, gone. Not because the sale failed, but because it succeeded too well on products that couldn't carry the discount.

If that scenario sounds familiar, you are not alone. If it sounds impossible, it probably means you haven't done the maths yet.

Disclosure: ProfitShield is built by JMS Dev Lab, the publisher of this blog.

The Maths Most Merchants Skip

When you set up a discount in Shopify — whether it is a percentage off, a BOGO deal, or free shipping — you are reducing your revenue on that order. That part is obvious. What isn't obvious is whether the reduced revenue still covers your actual costs.

Most merchants think about discounts in terms of gross margin. "My product costs me $12 and I sell it for $50. A 30% discount brings the price to $35. That's still $23 above my cost. Plenty of room."

But gross margin is not profit. Profit is what remains after all the costs that attach to every single order:

  • Cost of Goods Sold (COGS). The wholesale price plus inbound freight, duties, and shrinkage. If you are just using your supplier's quoted price, your COGS is probably understated.
  • Payment processing. Shopify Payments charges 2.9% + $0.30 per transaction on most plans. That percentage applies to the amount collected, including shipping charges. And when a customer returns the item, Shopify does not refund this fee.
  • Shipping. If you offer free shipping (or subsidised shipping as part of a promotion), this cost comes straight out of your margin. Domestic parcels typically run $4 to $10 depending on weight and zone.
  • Packaging. Boxes, mailers, tissue paper, void fill, branded inserts. This adds $1 to $5 per order depending on your standards.
  • Returns. Industry average return rates sit between 10% and 30% depending on your category. Every return costs you the original shipping, the return shipping (if you cover it), the payment processing fee (non-refundable), and often the product value itself if it can't be resold as new.

When you layer all of these costs onto a discounted order, the "plenty of room" you thought you had can vanish entirely.

A Worked Example: The 30% Flash Sale

Let's put real numbers on this. Say you sell a candle set for $50.00. Here is what the order economics look like at full price versus a 30% discount.

At full price ($50.00)

  • Revenue collected: $50.00
  • COGS: -$12.00
  • Payment processing (2.9% + $0.30): -$1.75
  • Shipping (free shipping, your cost): -$4.50
  • Packaging: -$1.50
  • Net profit: $30.25

That is a 60.5% net margin. Healthy.

At 30% off ($35.00)

  • Revenue collected: $35.00
  • COGS: -$12.00
  • Payment processing (2.9% + $0.30): -$1.32
  • Shipping (still free, still costs you $4.50): -$4.50
  • Packaging: -$1.50
  • Net profit: $15.68

Still profitable. Your margin dropped from 60.5% to 44.8%, but you are making money. So far, so good.

Now here is where it goes wrong. That same candle set, but the customer also stacks a 10% welcome code that you forgot to exclude from the sale:

At 30% off + 10% welcome code ($31.50)

  • Revenue collected: $31.50
  • COGS: -$12.00
  • Payment processing (2.9% + $0.30): -$1.21
  • Shipping: -$4.50
  • Packaging: -$1.50
  • Net profit: $12.29

Margin is now 39%. Getting thinner, but still above water. However, consider a cheaper product in your range — a single candle at $20.00 with $8.00 COGS — under the same stacked discount:

$20 candle at 30% off + 10% welcome code ($12.60)

  • Revenue collected: $12.60
  • COGS: -$8.00
  • Payment processing (2.9% + $0.30): -$0.67
  • Shipping: -$4.50
  • Packaging: -$1.50
  • Net profit: -$2.07

You just paid $2.07 to fulfil that order. The customer got a candle. You got a loss.

If 200 customers bought that candle during your flash sale, you lost $414. On a single product. Now multiply that across every low-margin item in your catalogue that was included in the "sitewide" promotion.

Why This Gets Worse at Scale

The single-order loss above is manageable. The problem is that discounts create compound margin erosion across your entire operation. Here is how:

Discount stacking

Shopify allows multiple discount types to combine by default. Automatic discounts can stack with discount codes. A customer applies your flash sale discount, then adds a welcome code, then qualifies for free shipping. Each layer shaves off margin. By the time all three apply, a product with a healthy full-price margin can be underwater.

Coupon abuse

Your "exclusive" discount code ends up on coupon aggregator sites within hours. Customers who would have paid full price now search for a code at checkout. You aren't gaining new customers — you are discounting orders that would have happened anyway. This is pure margin destruction with no incremental volume to offset it.

Free shipping thresholds during sales

Your normal free shipping threshold is $50. During the flash sale, discounted prices mean customers hit $50 in cart value but the actual revenue (after discounts) is $35. You are shipping orders for free that can't carry the cost. The threshold that made sense at full price becomes a trap at sale prices.

Volume amplification

Flash sales drive volume. That is the point. But volume amplifies losses just as effectively as it amplifies profits. If 8% of your orders are unprofitable during normal trading, a sitewide discount can push that figure to 25% or more — and you are processing three times the normal order volume. The total loss figure grows fast.

The Spreadsheet Approach (And Why It Breaks)

The responsible thing to do before running any discount campaign is to model the economics. Pull your product costs into a spreadsheet, apply the proposed discount, layer on processing fees and shipping, and check whether the discounted price still produces an acceptable margin.

This works. It is exactly what you should do. But it has three serious limitations:

  1. It is a snapshot, not a system. Your spreadsheet models the scenario you planned. It does not account for the customer who stacks an extra code, or the order that ships to a remote zone with higher postage, or the product whose COGS changed since you last updated the sheet.
  2. It is reactive. You run the spreadsheet before the sale and again after, when you reconcile. In between, you are flying blind. If something unexpected happens — a discount code leaks, stacking rules aren't configured properly, a supplier price increases — you won't know until the damage is done.
  3. It doesn't scale. A shop with 50 products can model this in a morning. A shop with 500 products across multiple collections, each with different COGS, different shipping weights, and different discount eligibility? That spreadsheet becomes a full-time job. And it is still only a model — real orders will deviate from the model every single time.

The spreadsheet is a planning tool. What you need is an enforcement tool — something that checks profitability on every order, in real time, and intervenes when the numbers don't work.

What Pre-Sale Validation Looks Like

Imagine this: a customer adds items to their cart, applies a discount code, and proceeds to checkout. Before the order is confirmed, the system calculates the true cost of fulfilling that specific order — COGS for those exact products, payment processing on the actual total, the real shipping cost to that customer's address, packaging for that order size.

If the order is profitable, it goes through. The customer never notices anything happened.

If the order falls below your minimum margin threshold — say 10% net — the system can do one of several things:

  • Block the discount. Prevent the code from applying on orders where it would create a loss. The customer sees a message that the code isn't valid for those items.
  • Adjust the discount. Cap the discount at a level that preserves your minimum margin. The customer still gets a deal, just not one that costs you money.
  • Flag the order. Let the order through but alert you so you can review it before shipping. Useful if you want visibility without blocking customers.

This is the difference between hoping your discount campaign is profitable and knowing it is. Every order, checked. Every margin, validated. Before the order ships, not three weeks later in a spreadsheet.

How ProfitShield Does This

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 process. The validation code is written in Rust and compiled to WebAssembly, which means it executes in milliseconds at the edge. Your customers experience zero latency. The checkout feels exactly the same. It is just smarter about which orders it allows.

Here is what it does:

  • Real-time cost sync. ProfitShield pulls your COGS from product metafields or manual entry, calculates payment processing fees based on the actual order total, and factors in your configured shipping and packaging costs. Every order gets a true profitability calculation, not an estimate.
  • Margin rules. You define what "unprofitable" means for your business. Set a minimum net margin percentage, a minimum absolute profit per order, or rules for specific scenarios like "don't allow discount stacking on items already on sale." ProfitShield enforces these at checkout.
  • Dashboard and insights. Beyond the real-time blocking, ProfitShield gives you a dashboard showing your margin trends, your most and least profitable products, and which discount campaigns are actually making money versus which ones are bleeding margin. AI-powered insights highlight patterns you might miss.

The key architectural decision is that this runs inside Shopify's checkout infrastructure via Shopify Functions, not as an external webhook. External approaches introduce latency and reliability risks — if your server is slow, orders slip through unchecked or the checkout breaks. Shopify Functions run on Shopify's own servers, so they are as fast and reliable as Shopify itself.

What to Do Next

Whether or not you use ProfitShield, you should do one thing this week: audit your last discount campaign.

Pull your orders from the promotion period. For each order, calculate:

True Profit = Revenue Collected - COGS - Payment Processing (2.9% + $0.30) - Shipping Cost - Packaging Cost

Sort the results from lowest to highest. I would be surprised if you don't find at least a handful of orders that lost money. On a sitewide discount, the number could be much higher.

Once you know the scale of the problem, you can take practical steps:

  • Exclude low-margin products from sitewide discounts. Not every product can carry a 30% discount. Identify the ones that can't and exclude them.
  • Disable discount stacking. Configure your discount codes so they cannot be combined with automatic discounts or other codes. Shopify supports this natively.
  • Raise your free shipping threshold during sales. If your normal threshold is $50, consider raising it to $65 or $75 during promotions to offset the lower per-item revenue.
  • Set minimum order values on discount codes. A 20% off code with no minimum allows customers to use it on your cheapest, thinnest-margin products.
  • Calculate your break-even discount. For each product, work out the maximum discount percentage that still covers all costs. This is your ceiling. Never go above it.

If you want to automate this — to have every order checked at checkout, every margin validated in real time, every unprofitable order caught before it ships — that is what ProfitShield is built for. There is a 14-day free trial on all plans. Even running the trial for two weeks will show you exactly what your discounted orders are costing you.

Try ProfitShield free for 14 days or get in touch if you want to talk through your discount economics. Margins are one of the few topics where real numbers matter more than opinions.

Related Reading

  • The Hidden Costs Eating Your Shopify Profit Margins — A comprehensive breakdown of every cost that reduces your real per-order profitability on Shopify.
  • Are You Losing Money on Every 10th Order? — How to identify the specific orders in your shop that are costing you money rather than making it.
  • Why We Built ProfitShield — The story behind ProfitShield, from 22 years of retail experience to a Shopify app built on Rust and Shopify Functions.
</> JMS Dev Lab

Custom software for businesses that are too unique for off-the-shelf tools and too small for enterprise pricing.

Services
Custom Development JewelryStudioManager StaffHub Jewel Value SmartCash Pitch Side RepairDesk GrowthMap QualCanvas
Company
About Blog Contact
Legal
Privacy Policy Terms of Service Pay Invoice
© 2026 JMS Dev Lab. All rights reserved.