Blog
Playbook

Coupon code leaks: how to protect partner codes

How partner codes leak to coupon sites and extensions, the signals that show a leak, and the Stripe limits and attribution rules that contain it.

Oct 22, 2026 · 14 min read · RelayWonder
SARAH10attributes the sale with no click and no cookievideo → memory → Google → checkout

A coupon code leak happens when a partner's personal code ends up on a coupon aggregator site or inside a browser extension, so buyers who never saw the partner's content redeem it at checkout and the partner is credited for the sale. On a $49 a month plan with a 20% off first-three-months code and a 20% recurring commission for 12 months, each leaked redemption by a buyer who would have paid full price anyway costs you about $112 at 5% monthly churn: roughly $28 in discount and $84 in commission. You cannot stop codes from being copied, but you can make leaks visible and cheap. Personal codes, redemption caps, expiry dates, first-time-only restrictions and a written rule for when a code beats a click limit the damage to a number you choose in advance.

What is a coupon code leak?

A partner code is meant to travel with the partner's content: a podcast host reads it out, a YouTuber puts it in the description, a newsletter prints it under a review. A leak is when the code travels without the content. The buyer meets the code somewhere the partner never published it, uses it, and the sale is attributed to a partner who did nothing to cause it.

Leaks are not usually fraud by the partner. Most of the time the code was shared exactly as intended and then picked up by someone else. That matters for how you respond: the first conversation with a partner whose code leaked should be about fixing the code, not about accusing them.

The four common paths

  • Coupon aggregator sites. They collect codes from public pages, from user submissions and from their own test purchases, then rank for searches like "yourbrand coupon code". A buyer who was already on your pricing page searches, finds the code and comes back.
  • Browser coupon extensions. At checkout they detect a discount field and try codes from their database, often without the buyer doing anything more than clicking a button. A code that works once tends to stay in the database.
  • Deal communities and forums. Someone posts "this code still works" in a thread about your product category. The post can keep sending redemptions for months.
  • Customers sharing with colleagues. A buyer forwards the code to a teammate. This is the mildest form and is often genuinely incremental, because the teammate may not have bought without it.

Browser extensions have come under platform rules. Google's Chrome Web Store updated its affiliate ads policy in March 2025 with enforcement from June 10, 2025: an extension may only add an affiliate link, code or cookie after a user action, must disclose the affiliate program, and must tie the link to a direct benefit at that moment; an extension that finds coupon codes must not insert an affiliate link if no coupon or discount is found [3]. That policy is about the extension's own affiliate links. It does nothing to stop an extension from applying your partner's code, which is the leak this post is about.

SARAH10attributes the sale with no click and no cookievideo → memory → Google → checkout
A partner code printed under a review is copied to an aggregator page and an extension database, and redemptions arrive from buyers who never saw the review.

How a leaked coupon code steals attribution

Coupon codes are valuable to partner programs precisely because they attribute without a click. A listener who hears a code on a podcast and types it a week later is credited to the host even though no link was ever clicked. The same property is what makes leaks expensive: a code attributes no matter where the buyer found it, so a leaked code quietly turns organic and paid-search buyers into partner-credited sales.

It can also take a sale away from a different partner. Suppose a buyer reads a blogger's comparison, clicks the blogger's link, gets a referral cookie, then at checkout an extension applies a podcaster's leaked code. If your rule is that a code beats a cookie, the podcaster gets the commission and the blogger, who did the work, gets nothing. Partners notice this pattern quickly when they compare clicks with credited sales, and it is one of the fastest ways to lose a content partner's trust.

What one leaked redemption costs

Take an illustrative program: a $49 a month plan, a partner code worth 20% off the first three months (a Stripe coupon with a repeating duration of three months [1]), and a commission of 20% of each paid invoice for 12 months, calculated on the amount actually paid. Consider a buyer who would have subscribed at full price without the code.

Without churn the arithmetic is direct. The discount is 3 × ($49 × 20%) = 3 × $9.80 = $29.40. Commission on the three discounted invoices is 3 × ($39.20 × 20%) = 3 × $7.84 = $23.52, and on the nine full-price invoices 9 × $9.80 = $88.20. Total cost of the leak: $29.40 + $23.52 + $88.20 = $141.12. With 5% monthly churn the customer is expected to pay 1 + 0.95 + 0.95² = 2.85 of the discounted invoices and about 6.34 of the full-price ones, so the cost falls to 2.85 × $9.80 + 2.85 × $7.84 + 6.34 × $9.80 ≈ $27.95 + $22.36 + $62.13 = $112.45.

Illustrative example: cost per non-incremental redemption is $141.12 without churn and $112.45 at 5% monthly churn ($49 plan, 20% off for 3 months, 20% commission for 12 months on amount paid). Real leaks include some incremental buyers, so treat these as upper bounds.
Leaked redemptions per monthCost at 0% churnCost at 5% churnExposure if the code was capped at 50
10$1,411$1,125$1,125 (cap not reached)
40$5,645$4,498$4,498 (cap not reached)
100$14,112$11,245$5,623 (stops at 50)

The last column is the point of this post. A leak you cannot detect is unbounded. A leak on a capped code is a known maximum, and you pick that maximum when you create the code, not after you find out.

How to detect a coupon code leak

You rarely see the leak itself. You see its shadow in your attribution data. Every signal below compares a partner to their own history, because partners differ: a podcaster's sales are mostly code-only by nature, while a comparison blogger's are mostly link clicks.

Detection signals for a leaked partner code. Thresholds such as 3× are illustrative starting points; calibrate them to each partner's own history.
SignalWhat normal looks likeWhat a leak looks likeFirst check
Code-only share: credited customers with no click from that partner in the referral windowStable for that partner, whatever the levelJumps sharply, for example from 20% to 70% within a monthSearch "yourbrand coupon" and "yourbrand promo code" and look for the code
Weekly redemptions versus the partner's trailing 8-week averageRises after new content, then decaysMore than 3× the average with no new content publishedAsk the partner what they published that week
Code redeemed by buyers who clicked another partner's linkRareRecurring, especially from buyers who clicked comparison or review contentCheck which partners lost credit to this code
Redemptions far beyond the partner's audience sizeWithin what their channel plausibly reachesA small creator's code redeemed more often than their views would suggestCompare redemptions to recent views or opens
Timing of redemptionsClusters after episodes, videos or sendsA flat, steady stream every day regardless of publishingOverlay publishing dates on redemption dates

The flat, steady stream deserves emphasis. Real partner content produces spikes that decay: an episode drops, codes arrive for a week or two, then taper. Aggregator and extension traffic does not care about publishing dates. A code that receives three or four redemptions every day, every day, for a creator who posts twice a month is almost always being found somewhere else.

Stripe reports how often each promotion code has been used through the code's redemption count (times_redeemed in the API), so you can watch the raw number without any extra tooling [2]. Attribution data adds the context that tells you whether those redemptions came with clicks.

EPCcommission ÷ clicksConversioncustomers ÷ clicksPayout ratiocommission ÷ revenueActive rateactive ÷ approved
A partner dashboard card shows code-only share rising from one in five credited customers to more than two in three within a month, the clearest single sign of a leak.

Which Stripe promotion code settings protect partner codes?

Stripe separates the discount (a coupon) from the customer-facing string (a promotion code). Many promotion codes can point at one coupon, and promotion codes carry their own controls: a specific customer, first-time orders only, a minimum order value, an expiration date and a redemption limit [1]. Each of these narrows who can use a leaked code.

Stripe promotion code and coupon controls as documented by Stripe [1][2], checked October 2026.
SettingWhat it doesHow it limits a leakTrade-off
max_redemptions on the promotion codeCaps total redemptions; cannot exceed the coupon's own cap [2]Puts a ceiling on cost; the code goes permanently inactive at the capA popular honest partner hits the cap; plan a replacement code
expires_at on the promotion codeCode stops working at a timestamp; cannot be later than the coupon's redeem_by [1]Old codes stop circulating on aggregator pagesEvergreen content (old videos) loses its code; refresh descriptions
restrictions.first_time_transactionOnly customers with no prior transaction history can redeem [1]Existing customers and returning trial users cannot use a leaked code on renewal or upgradeNone for most programs; partner commissions are for new customers anyway
restrictions.minimum_amountRequires a minimum amount; checked on the initial payment only [1]Keeps a code off your cheapest plan if leaks concentrate thereAdds friction for genuine small buyers
customer on the promotion codeOnly one named customer can redeem [1]Useful for sales-issued codes; not for public partner codesNot usable for an audience code
active = falseArchives a code without deleting the coupon [1]Lets you retire a leaked code at once and issue a new oneOld printed codes stop working; tell the partner first
Coupon duration: once, repeating, foreverHow many invoices the discount applies to [1]A shorter discount makes each leaked redemption cheaperA weaker offer for the partner's real audience

Two details from Stripe's documentation matter in practice. First, a promotion code that reaches its max_redemptions or its expires_at becomes permanently inactive and cannot be reactivated, so a cap is a decision you have to plan a successor for [1]. Second, an active code string must be unique, but you can archive a code and then create a new promotion code with the same string [1]. That is how you reset a leaked code without changing the word the partner's audience remembers: archive SAM20, create a fresh SAM20 with a new cap and a new expiry.

Also check that your checkout actually accepts codes the way you think. In Stripe Checkout the code field only appears when the session allows promotion codes (allow_promotion_codes) [4]. If you pass a discount directly to the session instead, the buyer never types a code and there is nothing to leak, which is the right setup for sales-negotiated discounts.

Personal, single-use and capped codes compared

The strongest protection is choosing the right kind of code for each use. There are three shapes, and most programs need all three.

  • Personal audience codes, one per partner (SAM20). Needed for podcasts, video and print, where the audience has to remember a word. Always cap them and give them an expiry, then renew on a schedule.
  • Single-use codes (max_redemptions = 1) with a random string. Right for one-to-one situations: a partner who introduces a specific buyer, a webinar attendee list, a giveaway winner. A leaked single-use code is worth exactly one redemption.
  • Campaign codes for one piece of content (SAM-OCT-REVIEW). Tie a code to one video or one newsletter issue with a short expiry. If it leaks, you know which piece it came from and the window is small.

A reasonable starting point for an audience code is a cap that covers about three times the partner's best month and an expiry of six months, renewed with the same string. A partner whose best month was 15 redemptions gets a cap of 45; if they hit it in two weeks, you have learned something about either their audience or a leak, and both are worth a conversation.

Should a coupon code beat the last click?

Every program that uses both links and codes needs a written rule for the case where they disagree. There are three workable rules, and the leak risk is what separates them.

Three precedence rules applied to four checkout situations. Which partner is credited under each rule; illustrative policy comparison.
Situation at checkoutLink first (cookie beats code)Code first (code beats cookie)Code first, flagged codes demoted
Cookie from partner A, code from partner AAAA
Cookie from partner A, code from partner BABB, unless B's code is flagged as leaked, then A
No cookie, code from partner BBBB, or held for review if the code is flagged
Cookie from partner A, no codeAAA

Code first is the usual default because typing a code is an active choice, and our own coupon guide recommends it. It is also the rule most exposed to leaks, because an extension can make that choice for the buyer. Link first protects content partners but undervalues podcasts and video, where codes are the only way to attribute. The third rule keeps code first as the default and gives you a lever: when a code shows leak signals, you flag it, and from then on a cookie from another partner wins against it.

Whatever you choose, publish it in the program terms before you need it. A rule that appears after a dispute looks like a ruling against one partner. A rule that was on the page from day one is just the rule.

public information only · dated
Side by side: the same checkout with a blogger's cookie and a podcaster's leaked code, credited differently under link-first and code-first rules.

What should partner terms say about coupon sites?

Terms do not stop third parties, but they make the partner's obligations clear and give you grounds to act when the partner is the source. Keep the clauses short and specific.

  1. Partners may not submit their codes to coupon, deal or cashback sites, or to browser extensions, and may not ask their audience to do so.
  2. Partners may not bid on search ads for your brand name combined with words like coupon, promo or discount.
  3. Codes are capped and expire; the brand renews them on a stated schedule and may archive a code that shows leak signals, with notice to the partner.
  4. When a code is flagged as leaked, a referral cookie from another partner takes precedence over it, and redemptions of a flagged code with no click from its partner may be held for review.
  5. Commissions are payable after a hold period; redemptions found to come from a breach of these terms during the hold are reversed.

The hold is what makes clause 5 practical. RelayWonder defaults to a 30-day hold before a commission becomes payable. A leak spotted within that window is resolved by reversing rows before any money moves, which is far easier than asking a partner to repay.

What to do when you find a leaked code

A short, fixed procedure keeps the response proportionate and keeps the partner on side.

  1. Confirm. Find the code on an aggregator page or reproduce it in an extension, and check at least two of the signals in the detection table.
  2. Tell the partner before you change anything. Explain what you found, that you are not assuming they posted it, and what will happen next.
  3. Archive the leaked promotion code (active = false) and create a replacement. Keep the same string if the partner's audience knows it, with a fresh cap and expiry; otherwise issue a new string and help the partner update descriptions.
  4. Decide what happens to commissions in the hold. A fair default: redemptions with a click or a clear link to the partner's content stay; code-only redemptions during the leak window that match the leak pattern are reversed.
  5. Ask the aggregator to remove the code. Some will, many will not; the archived code no longer works either way.
  6. Watch the replacement code for four weeks, using the same signals, before closing the case.

Record each step. An append-only ledger helps here: reversals appear as negative rows next to the original commissions, so the partner can see exactly which redemptions were removed and why, and so can you six months later.

self-referralclick burstsame UA, 0 conv.three nightly checks · flag · hold payout
A leaked code is archived, a capped replacement with the same word takes its place, and held commissions from the leak window are reviewed before payout.

How RelayWonder handles partner coupon codes

In RelayWonder, each partner can have a personal code created as a Stripe promotion code, and a redemption attributes the invoice to that partner without a click. Commission is calculated per Stripe invoice, refunds and disputes create negative rows in an append-only ledger, and the default 30-day hold gives you time to review a code before its commissions become payable. The caps, expiry and first-time restriction described above are Stripe settings on the promotion code itself, so they apply at checkout no matter where the buyer found the code.

Coupon code protection checklist for this week

  • List every active partner promotion code and note which ones have no max_redemptions and no expires_at. Those are your unbounded exposures.
  • Add a cap of about three times each partner's best month and a six-month expiry to every audience code.
  • Turn on first-time-only for every partner code.
  • Search your brand name with "coupon", "promo code" and "discount code" and note which partner codes appear.
  • For each partner, compare this month's code-only share with their last three months.
  • Write the precedence rule into your partner terms, including what happens when a code is flagged.

FAQ

What is a coupon code leak in a partner program?

It is when a partner's personal discount code is redeemed by buyers who found it somewhere the partner never published it, usually a coupon aggregator or a browser extension. The partner is credited for those sales even though their content did not cause them. In an illustrative $49 plan with a 20% off code and 20% commission for 12 months, each such redemption costs about $112 at 5% monthly churn.

How can I tell whether a partner code has leaked?

Compare the partner's code-only share, the share of credited customers with no click from that partner, with their own history. A jump from around 20% to 70% within a month, or a flat daily stream of redemptions that ignores the partner's publishing dates, are the strongest signs. Then search your brand name with "coupon" to find where the code appears.

Which Stripe settings limit the damage from a leaked code?

Stripe promotion codes support max_redemptions, expires_at, a first-time-transaction restriction, a minimum amount and restriction to a single customer. A code that reaches its cap or expiry becomes permanently inactive. You can archive a code and create a new one with the same string to reset it.

Should a coupon code override a referral link click?

Many programs let the code win because typing it is an active choice by the buyer. That rule is the most exposed to leaks, since an extension can apply a code for the buyer. A middle path keeps code-first as the default but lets a cookie from another partner win once a code has been flagged as leaked.

Are browser coupon extensions allowed to apply affiliate codes?

Chrome Web Store policy, enforced from June 10, 2025, requires extensions to disclose affiliate programs, act only after a user action and tie any affiliate link, code or cookie to a direct benefit. An extension that finds no coupon must not insert an affiliate link. The policy does not prevent an extension from applying a partner's public discount code.

What should I do with commissions earned through a leaked code?

Tell the partner first, then review commissions that are still in the hold period. A fair default keeps redemptions with a click or a clear link to the partner's content and reverses code-only redemptions that match the leak pattern. A 30-day hold means most of this happens before any money is paid.

Sources

  1. Stripe documentation: Coupons and promotion codes · Coupon duration, redemption limits, promotion code restrictions (customer, first-time, minimum amount, expiry), deactivation and reusing a code string. Checked October 2026.
  2. Stripe API reference: Create a promotion code · Parameters max_redemptions, expires_at, customer, restrictions and the times_redeemed field. Checked October 2026.
  3. Chrome for Developers: Strengthening our policies on affiliate programs in Chrome Extensions · March 2025 affiliate ads policy update, enforcement from June 10, 2025, and the coupon extension example. Checked October 2026.
  4. Stripe API reference: Create a Checkout Session · allow_promotion_codes and discounts parameters. Checked October 2026.
Topicscoupon code leakspartner coupon code protectioncoupon aggregator sitesbrowser coupon extensionsStripe promotion code limitscoupon vs last-click attributionaffiliate code fraud