Skip to main content
Verslay
Discount Codes That Quietly Cost Your Margin
EcommerceShopifyPricingMargin

Discount Codes That Quietly Cost Your Margin

V
Verslay·October 13, 2026·5 min read

Discount Codes That Quietly Cost Your Margin

A discount code made for one campaign can keep working after the campaign ends. An order with a code looks like any other order in your export, so the cost is easy to miss. This post shows where the margin goes, how to find the codes doing the most damage, and what to check before you retire one. The Discount Leakage Desk use case sets up this check on your own orders.

Where the margin goes

A discount lowers what the order brings in, but the cost of the goods you ship stays the same, so gross margin on that order falls by the full discount amount. This is arithmetic, not a measured figure from any store.

The cost is largest when the buyer would have paid full price anyway. A code that brings in a new buyer may pay for itself. A code that a loyal customer uses on a reorder mostly gives away margin. Ask who uses each code, not how often it is used. This is reasoning from the arithmetic above, not a measured figure.

Three kinds of codes that leak

Three patterns are worth checking first.

  1. Evergreen codes. A generic name with no end date is easy to pass on in forwarded emails and shared links. This is an inference from how codes get shared, not a measured figure.
  2. Wide codes. Shopify's create-discount-codes page says a discount code has a limit on how many specific customers, products, and variants it can apply to (https://help.shopify.com/en/manual/discounts/discount-codes/create-discount-codes). Check the scope of each code. A code that reaches best-selling items can discount products that would have sold at full price anyway. This is an inference.
  3. Reset codes. Shopify's create-discount-codes page says a one-per-customer discount that is deleted and added again lets past customers use the new one once more (https://help.shopify.com/en/manual/discounts/discount-codes/create-discount-codes).

How to find the codes costing you most

You do not need a new tool to start. Your order export has the data.

  1. Export orders for a window that matches your buying cycle, with each order's discount code and discount amount.
  2. Group the orders by code. For each code, add up the uses and the total discount amount.
  3. For each code, work out what share of its orders came from returning customers. A high share means the code is discounting people who already buy from you.
  4. Flag generic names and codes with no end date.
  5. Rank the codes by total discount amount, and start with the top of the list.

The Discount Leakage Desk use case sets up this export and ranking on your own orders.

Run the same check on the same window length each time. A code can rank high in one window and drop off once its campaign ends. Comparing equal windows shows which codes keep costing you.

Code types side by side

Code typeUsual leakCheck first
Evergreen public codeRepeat buyers use it at first-time pricesShare of uses from returning customers
Campaign code with no end dateKeeps working after the campaign is overWhether an end time was set
Wide codeDiscounts items that would have sold at full priceWhich products, collections, and variants it covers
One-per-customer codePast buyers can use it again if it is deleted and re-addedUsage history before you delete anything

Checks before you retire a code

Retiring a code is a sales decision. Before you delete one, check three things.

  1. Where it is still shared. Search coupon sites, old emails, and partner posts.
  2. Whether a replacement is ready. Shoppers who still try the old code should land on a clear offer.
  3. Whether the code has a one-per-customer limit. Shopify's create-discount-codes page says that deleting and re-adding such a discount lets past customers use the new one once more (https://help.shopify.com/en/manual/discounts/discount-codes/create-discount-codes). Check the usage history before you delete anything.

What to replace a leaking code with

Swap an evergreen code for a time-limited code sent to a named group, such as lapsed buyers or a launch list. Set an end time so the code stops on a known date. Set a usage limit so one person cannot use it again. Keep a new-buyer code when the new buyers it brings are worth the discount. The steps above show which group is paying.

Test the new code on one group before you change the public one. Watch two numbers for each code: discount amount and returning-customer share. If the share falls and the discount amount stays down, the change worked.

Discount codes are one part of what you charge. For the other side of pricing, read our guide on competitor price monitoring for online stores. If order exports are slow to pull, read the AI agent for order management post.

To run this check on your own orders, the Discount Leakage Desk use case shows how the export and ranking are set up.

Sources

Frequently asked questions

Does retiring a code lose sales?

Some shoppers may still try it. A short message where the code fails gives a stalled cart a next step.

Is every discount a margin loss?

No. A code that brings in a new buyer can be worth its cost. The test is who uses it.

How far back should I look?

Pick a window that matches your buying cycle, and use the same window each time you check.

Should I tell shoppers when a public code ends?

A short notice on the page where the code fails is enough, with a link to a current offer.

Ready to put agents to work?

132 AI agents. 82 pre-built use-cases. 1,500+ integrations. One dashboard — no code, no setup. Start free — no credit card required.