Should each channel get a shared, unique or single-use discount code?

Unique codes for email, SMS and service, one named code plus a link for creators, an end date on every sale code. How each type leaks, and what it costs.

Author:Benson
DiscountingUpdated 12 October 202615 min read
Jump to a section

In short

Give each person their own unique, single-use code wherever you know who receives it: email and SMS flows, customer service and apology codes, and one-off wholesale offers. Give each creator and affiliate one named code, paired with a link that carries the attribution. Run public sales on a shared code or an automatic discount with an end date. On Shopify, no code can be limited to one sales channel.

A shopper emails support: their discount code didn't work. They'd tried the welcome code from a friend's email, a unique one-use code the friend had already used. Your support lead goes to send a replacement and sees the order went through anyway, on SUMMER20, from a sale that ended in June.

She searches the orders. SUMMER20 has turned up every week since. It never had an end date, and it's listed on a coupon site, where anyone hunting for a code before they pay will find it.

Nobody decided to give it away. The welcome code did its job; the shared sale code had nothing set to stop it. Every code your store issues is shared, unique or single-use, and each kind fails in its own way.

This guide goes channel by channel: which code type fits, how each leaks, what each costs to run, and the Shopify settings that do the work. How deep to discount, and who should get a discount at all, is in the discount strategy guide.

What's the difference between shared, unique and single-use discount codes?#

A shared code is one string everyone types, like SUMMER20. A unique code is one of a set: a different string for each recipient, all attached to the same discount. Single-use is a limit you set on either kind: once in total, or once per customer.

On Shopify all three are a code discount with different settings. Under Maximum discount uses, "Limit number of times this discount can be used in total" caps redemptions across everyone, and "Limit to one use per customer" tracks each buyer by email address or phone number. Under Active dates, a code with no end date never expires.

Unique codes need a generator. The help centre's steps create one random code at a time; sets come from the Admin API's discountRedeemCodeBulkAdd, which adds up to 250 codes per call to one discount, or from an app or email platform that calls it for you. A store can create 20,000,000 unique codes in total, cumulatively, and apps can't raise that. Most are never used: across 182 million single-use codes that 1,348 brands made in 2025 with Seguno's own code app, which Seguno sells, shoppers redeemed 1.01% of those generated for lifecycle messages such as welcome, abandonment and winback [Seguno, Jun 2026] (opens the source).

And whatever the type, you can't restrict a code to one sales channel. "Allow discount to be featured on selected channels" lets a channel promote a code; it still works everywhere.

How does each kind of code leak?#

Shared codes leak by being shared: a shopper posts one, a coupon site lists it, and coupon extensions try it at checkout for everyone who has them. Unique codes leak less, but welcome codes get farmed and traded, and a unique code does nothing about the other codes a shopper finds.

Search for "promo code abuse" and you'll mostly read about fake accounts and code guessing. A quieter case gets less attention.

Private codes travel the same way. Anyday's founder told Modern Retail in May 2024 that codes still got picked up by Honey's extension after the brand limited their use in Shopify, and that a 15% code printed in a booklet packed with a partner's microwave had leaked, a code "we can't take back or change" [Modern Retail, May 2024] (opens the source).

Extensions don't only find codes on coupon sites. A December 2025 investigation reported by PPC Land alleges that Honey sent codes to its servers as shoppers typed them, before asking to share them, that staff, newsletter, VIP and influencer codes ended up available to its users, and that Honey's advice to one brand was a single-use code for every employee [PPC Land, Dec 2025] (opens the source).

Single-use codes leak through identity. "Limit to one use per customer" is as strong as the email address or phone number behind it. SimplyCodes, a coupon site and extension, tells shoppers a new email address gets them a second single-use code, says it has set up a system where people can get paid to share their single-use codes, and notes that welcome codes wind up on coupon sites "like, say, this one" [SimplyCodes, Sep 2021] (opens the source).

At peak, about a third of orders carry a code.

35%

of orders included a discount code over Cyber Five 2024, up two percentage points on 2023, across Signifyd's merchant network, in a release on US holiday sales. Signifyd sells risk and policy-abuse protection to merchants.

Signifyd, Dec 2024(opens the source)

Which code should each channel get?#

Where you know who gets the code (email, SMS, customer service, wholesale), give each person a unique, single-use code. Where it has to be said out loud or printed (creators, podcasts, partner packaging), give one named code per partner, paired with a link. Where the offer is public anyway (a sitewide sale, paid social), use a shared code or an automatic discount with an end date.

ChannelCode typeHow it leaksThe catch
Email and SMS flowsUnique, one useFallback codes, second emailsUses up codes from a fixed cap
Email campaignsUnique, or shared with an end dateForwarded and postedCodes must exist before the send
Creators and podcastsOne named code, plus a linkRead out, then listedCan't change once recorded
AffiliatesLink first, code if neededCoupon sites list itCommission on uses they didn't drive
Customer serviceUnique, one use, short expiryRarely, if uniqueSomeone issues each one
Paid socialShareable link, end dateScreenshots and commentsThe code still works typed in
Sale codesShared or automatic, end dateCoupon sites and extensionsRuns on if you forget the date
B2B and wholesaleCatalogue prices, or unique codesCodes work on every channelCodes stack on B2B prices

Email and SMS#

Klaviyo generates codes for flow emails automatically, needs them generated before a campaign goes out, and keeps each code valid for 24 hours past the expiry you set. With a one-year or fixed expiry, its sign-up forms start with 600 unique codes and top up below 400; if they run out, the form shows your fallback coupon, a shared code. Shopify Messaging, formerly Shopify Email, uses a discount already created in the admin; its help pages don't describe per-recipient codes.

The first-order discount guide covers who welcome codes actually reach.

Creators, podcasts and affiliates#

A creator reads one code to an audience, so one named code per creator is all that works on air. Shopify Collabs gives each creator a Creator code, and its affiliate links apply that code automatically through the /discount route: the link carries the attribution, the code serves people who heard it. Creator codes also stack if you let them.

The discount combinations guide covers those settings. For affiliates, let the link do the work: the code is the part coupon sites list, and a leaked affiliate code costs you the discount and the commission. The creator codes and affiliate links guide covers how to pay on each.

Customer service and apology codes#

Unique, one use, short expiry: in the admin, "Generate code", both usage limits ticked, an end date a few weeks out. A shared apology code, SORRY15 for every late parcel, is exactly the kind extensions pick up.

Sale codes and paid social#

The sale is public, so the code may as well be. What matters is the end date, or no code at all: an automatic discount has nothing to type. For ads, a shareable /discount/CODE link applies the code on arrival and can carry a campaign's UTMs since 13 March 2026, though the code inside it still works typed in. In the UK, falsely claiming an offer is time-limited to rush a decision is banned outright, now under paragraph 7 of Schedule 20 to the DMCC Act, in force since 6 April 2025 [UK Parliament (legislation.gov.uk), Apr 2025] (opens the source), so a code advertised as ending on Sunday should stop working on Sunday.

B2B and wholesale#

Since 23 June 2026, B2B discounts are on by default for new B2B stores and eligible existing ones: a discount for all customers reaches B2B buyers too, on top of their catalogue prices, unless you assign markets. Any code can be assigned to specific markets since 7 May 2026, on Basic and above with the new Markets. Standing wholesale terms belong in catalogue prices, which have no code to leak; keep codes for one-off offers, assigned to the right market.

What does a leaked shared code cost, against running unique codes?#

For a code that's actually leaking, far more than unique codes cost to run.

Aren't leaked codes just a cost of doing business?#

Sometimes. P.F. Candle Co.'s founder told Modern Retail that most code redemptions are part of the cost of doing business, and that abuse of a code is the worry. The brand pays Honey commission as an affiliate partner, which gives it a rep who can get leaks taken down faster, while a code on RetailMeNot is "really hard to get it scrubbed" [Modern Retail, May 2024] (opens the source). That holds for a public code at a shallow discount, less well for a commissioned creator code or a deep staff code.

The second objection is friction, and it's fair. A creator can't read a unique code out, and in email: Seguno, which sells unique-code tools, found across 65,055 newsletters sent by Shopify brands on its own email app between May 2024 and May 2025 that generic codes converted slightly better, while unique-code orders had higher order values [Seguno, Aug 2025] (opens the source).

The third is the one finance will raise: a unique code tells you who redeemed, not what the offer earned.

90%

of the extra spending that emailed discount offers caused during the offer window came without the offer being redeemed, across 70 randomised experiments at a large online ticket resale platform (Management Science, 2017).

Management Science (Sahni, Zou and Chintagunta), Aug 2017(opens the source)

Seguno's 2026 benchmark, built on 182 million single-use codes, says an estimate of incremental lift would need a control group [Seguno, Jun 2026] (opens the source). Code type decides where a discount can travel; a holdout tells you whether it paid. The holdout guide shows how, and since 2 October 2026 Shopify's Rollouts can test a discount on a share of online store traffic.

What can you do yourself this month?#

  1. Give every code an end date when you create it. It would have stopped SUMMER20. The catch: an end date limits how long a leak runs, not who uses it before then, and reactivating an expired discount in Shopify clears its end date.

  2. Cap uses where the audience has a size. Set a total cap a little above what that audience could use, and tick one per customer. The catch: a total cap cuts off your real audience once strangers have used it up, and deleting a one-per-customer discount and recreating it lets everyone who used it use it once more.

  3. Move email, SMS and service codes to unique codes. Turn it on in your email platform's flows, or have your developer use Shopify's documented call:

    mutation discountRedeemCodeBulkAdd($discountId: ID!, $codes: [DiscountRedeemCodeInput!]!) {
      discountRedeemCodeBulkAdd(discountId: $discountId, codes: $codes) {
        bulkCreation { id }
        userErrors { code field message }
      }
    }
    

    It runs asynchronously; poll discountRedeemCodeBulkCreation for the counts. The catch: Shopify's API reference doesn't say, but Shopify staff on its developer forum say usage limits on a multi-code discount, one per customer included, count per code rather than across the set, so a shopper holding two codes from one set can use both; test on a development store first, and old codes count toward the cap until you delete them.

  4. Give creators one code each, plus a link. Name it for the creator, set its combinations on purpose, and give them a link that applies it. The catch: the code is public the moment it's read out, and changing it means new content; Anyday's founder gave the example of a podcast host re-recording an ad [Modern Retail, May 2024] (opens the source).

  5. Rename a code that has spread. Renaming keeps the code's usage history, and the old string stops working. The catch: genuine customers holding the old code find it broken, and printed or recorded codes can't follow the change.

  6. Check where your codes are listed. Search coupon sites for your domain, export a month of orders, and sort by code. Anyday spots leaks when revenue on one code spikes [Modern Retail, May 2024] (opens the source). The catch: many extensions show their codes only inside the extension, at checkout, so a search finds the coupon sites, not everything extensions hold.

How Benson handles code types#

Code type decides who can hold a code. Benson works on which codes work in sessions with a coupon extension running, where they turn up uninvited.

How codes leak, how to find the ones that have, and how to contain them.

See which codes are out. The free code check shows which of your codes coupon extensions and voucher sites hold, masked so you'll recognise yours and a shopper can't use them. In your store, observe mode, free on every plan, records which extensions appear without changing anything, and the Checkout rules page lists the top codes in extension sessions.

Sort your codes. Put your public sale and loyalty codes on the allowlist, plus the codes of every creator and partner you pay, so their audiences keep the discount. Leave staff, apology and wholesale codes off. Decide welcome codes one by one: when extensions account for most of a code's use, Benson suggests taking it off.

Switch on the strict code policy. On Stop and above, only codes on your allowlist work in coupon-extension sessions; anything else gets a friendly message instead of a discount. On Shopify, no app can change what an extension shows inside checkout, so the policy works on the codes themselves, as the storefront and checkout guide explains. Because it acts only in those sessions, a follower without an extension who types a creator's code still gets the discount.

Sample store
An extension tries a code that isn't on the allowlist, and the shopper sees a friendly message. Sample data.

Watch a code after you change it. Code watch follows each code that spreads through extension sessions and shows whether it's contained, replaced, or its replacement is spreading too.

Cap code guessing by agents. Agent policy, on Stop and above, limits how many codes AI agents and automated browsers can try per visit. A shopper with one code is left alone. The offer feed agents can read lists public offers only; private codes never appear.

Put your public code first. On Own, the discount widget shows verified codes for your store, applied in one tap, so sale shoppers see your code before they go looking for someone else's. Every control can run against a holdout, so what it earns is measured on your own shoppers.

The leaked-codes playbook takes you through it in order. Or see Benson on your store and find out which of your codes are already out.

Questions merchants ask

How many unique discount codes can a Shopify store have?
20,000,000 in total, counted cumulatively, and apps can't raise the cap. Delete old codes to make room. Through the Admin API, discountRedeemCodeBulkAdd adds up to 250 codes to one discount per call.
Can I restrict a discount code to one sales channel on Shopify?
No. The sales channel setting lets a channel feature a code, but the code still works on every channel. You can assign a discount to specific markets, or limit it to specific customers or customer segments.
Should influencers get unique discount codes?
Usually not. A creator needs one code their audience can remember and type, so give each creator a named code and a link that applies it, set an end date or a usage cap, and check where the code turns up.
Does one use per customer stop people reusing a welcome code?
It stops the same email address or phone number using it twice. A shopper with a second email address looks like a new customer, and coupon sites tell their readers so.
What should I do when a discount code leaks?
Decide first who still needs it. Renaming it keeps its usage history and stops the old string working, which also breaks it for genuine customers. If it's printed or recorded, keep it, cap it and limit which codes work in coupon-extension sessions.
Are unique codes worth it for a small store?
For email, SMS and customer service codes, usually: most email platforms generate them for you, and the cost is a little friction. Check first whether your shared codes are leaking at all. If they aren't, a shared code with an end date may be enough.

Sources#

Find out what's leaking. 14 days of Own, no card.