← Back to blog
Need setup details while you read? Visit the Help Center.
Affiliate discount codes end up on deal sites and cannibalize full-price sales. Here is what a coupon leak is, what it costs your store, and the setup that makes a leak traceable and reversible.
Published on September 16, 2026
by Fawaz

Coupon code leaks are one of the most annoying things that reduce margins.
It always goes like this:
Somebody is about to buy from you at full price.
They open a new tab, type your brand name and the word "coupon", and find a working 15% code that you issued to one creator about eight months ago.
This basically means you just paid for a sale you had already won.
And you will keep paying for it.
That code does not expire, it does not announce itself, and nothing in your admin flags it.
Your average order value drifts down, your discount spend drifts up, and neither has an obvious cause, because no single week looks unusual.
Most merchants find the pattern months late, while reviewing a quarter that should have been better than it was.
You are not going to stop codes from spreading.
A working code is valuable to strangers and the internet is very good at finding valuable things.
You cannot really control whether it leaks or not.
What you can control is whether a leak is anonymous and permanent, or attributable and reversible.
That is the whole discipline, and it is far cheaper to set up than to retrofit.
A coupon leak happens when a discount code you issued to a specific affiliate ends up somewhere public, where anyone can find and use it without ever encountering that affiliate.
The code still works exactly as designed. That is what makes it hard to notice. Nothing breaks, no error appears, and the orders keep arriving. The only thing that changed is who the code reaches.
Leaks take two forms, and they need different responses.
It is worth separating leakage from ordinary discounting.
A public sitewide sale is a discount you chose to give everyone.
A leaked affiliate code is a discount you chose to give one audience, now going to everyone, at a rate you set for a specific partnership rather than for your whole customer base.
Rarely dramatic, never a single number you can point at, and it arrives in five parts.
Be honest with yourself about the measurement.
You cannot prove which of those orders you would have captured at full price.
Nobody can.
What you can see is the pattern that makes it likely: code redemptions climbing while affiliate clicks stay flat.
If more people are using a code than are arriving through that affiliate's links, the code is being found rather than shared.
The third route is the one merchants underestimate, because it needs nobody to share anything. It only needs the code to succeed once.
None of these are wrong exactly.
They are all downstream of a decision made much earlier, which is whether a code identifies anybody.
A shared code is anonymous, so a leak is anonymous too. The problem changes shape entirely when each affiliate has their own.
Shopify lets you cap a discount code in a few ways, and it is worth being precise about what each one solves, because they are commonly confused.
1. Limit to one use per customer
Good hygiene, and it stops the same buyer redeeming repeatedly.
It does not contain a leak, because a leaked code is being used by thousands of different people, each using it once.
It also leans on customer identity, so someone determined to reuse it can do so with another email.
Affilitrak has this on the coupon configuration, so you can limit codes to one use per customer and they cannot keep stacking the same discount.
2. Set a time limit
This is the one that caps a harvested leak.
A code that expires in 7 days can only be used inside that window.
On Affilitrak, you can create coupon configurations with start and end dates and rotate them every week or so.
That way, the coupon code that gets indexed by browser extensions will not work a week from now.
This was only recently added to Affilitrak when I noticed a bunch of users requesting it, and they found it really helpful.

3. Set a total redemption cap
This is the highest-value limit of the three.
A code with a ceiling of 200 uses can only discount 200 orders, ever. After that it dies, whether it leaked or not.
It converts an unbounded liability into a known maximum.
Two more settings help more than most merchants expect.
A minimum order value removes the small opportunistic orders a harvested code attracts.
And excluding sale items stops a leaked code stacking on top of a promotion you are already running.
Set these on the coupon configuration in Affilitrak, or on the discount itself in Shopify if you created the code there. The Programs guide covers how the templates work.
One honest counterpoint: not every public code is a problem.
Some brands work with coupon and deal sites deliberately, as a recognised affiliate channel with its own rate.
If a code ends up on a deal site you have a relationship with, at a rate you agreed, that is not a leak. It is the channel working.
The problem is the uncontrolled version: a rate you set for one creator, applied to an audience you never chose, for as long as the code exists, with the commission going to someone who did not work for it.
Coupon leakage is rarely theft and almost always margin, quietly leaving through a door you opened yourself.
You are not going to stop codes from spreading. What you can control is whether a leak is anonymous and permanent, or attributable and reversible.
One code per affiliate so a leak has a name.
A total redemption cap so it has a ceiling.
The ability to retire a compromised code without touching anyone else.
And links instead of codes wherever the audience will click.
If you have not issued codes yet, decide this before you recruit. Per-affiliate codes and usage caps cost nothing to configure at the start and become a migration once forty people share one code. The same is true of almost every decision in your affiliate program setup, which is cheap early and expensive later.
You can install Affilitrak free and give every affiliate their own code, or no code at all.