Most advice here is about being catchy. The codes that earn their keep are the ones that encode where they came from — because that turns a discount report into an attribution report for free.
Each one answers a question you would otherwise need analytics for.
POPUP15, EMAIL15, INSTA15
The same offer with a different code per channel turns your discount report into an attribution report. Costs nothing and answers 'which channel actually drove that' without any analytics work.
BFCM26, SPRING26
Dated codes stop last year's campaign being redeemed forever after someone posts it on a deal forum. The year is also what makes the report readable in eighteen months.
SAVE15, TAKE20, SHIP0
The code states the offer, so a shopper who copied it from a popup three days ago knows what it is worth without going back. Fewer support emails, fewer abandoned checkouts.
HELLO10, FIRST10
Marks the code as an entry offer, which makes it easy to exclude from repeat-customer reporting and easy to justify internally as acquisition rather than margin loss.
SARAH20, PODCAST20
For affiliates and collaborations, where the code is both the offer and the tracking. The partner remembers their own name, which is more than can be said for a random string.
OVER50, SPEND100
When the discount has a minimum, putting it in the code stops the most common support question about discount codes and the checkout abandonment that follows it.
SUMMER, HOLIDAY, RESTOCK
Short, memorable, easy to say out loud on a podcast or in a video. Pair with a date-based expiry rather than relying on the name to imply one.
Each one has a specific failure mode.
SAVE1, SAVE2, SAVE3 invites guessing. Someone will try SAVE50, and if it exists you have just given away an offer you meant for a specific list.
Codes get shared by voice more than anyone expects — in videos, on calls, across a shop counter. Mixed case, zeroes against Os, and ones against Ls all cost you redemptions.
VIPONLY on a code that is not restricted teaches your best customers that the label means nothing. If it is not gated, do not say it is.
You create the code in Shopify or whichever platform runs your store, including its expiry and any minimum. BetterPopup attaches it to a campaign and hands it over at the moment someone opts in — a reward here is one shared code per campaign, or a custom message with no code, with no unique-per-subscriber generation. If your scheme depends on one-time codes, check the comparison before choosing us.
Naming, expiry and attribution.
Ones that encode something useful — the channel, the campaign, the year, the value or the threshold. A code is a label you will be reading in a report months from now, so a name like POPUP15 or BFCM26 is doing work that a random string is not. Short, upper case, unambiguous when spoken aloud.
Yes, even when the offer is identical. Different codes for the same 15% across your popup, your email footer and your Instagram bio turn one discount into three attribution signals at zero cost, and let you retire one channel's code without touching the others.
Almost always. Codes outlive campaigns — they get posted to deal aggregators and honoured for years. A date in the name helps you notice, but an actual expiry in your store platform is what stops it. That is set in Shopify or your ecommerce platform, not in the popup.
No, and this is worth being clear about. You create the code in your ecommerce platform, then attach it to a campaign — a reward here is one shared code per campaign, or a custom message with no code. There is no unique-per-subscriber generation, so a scheme that depends on one-time codes needs a different tool.
The limit is not technical, it is reporting. Once you cannot look at the list and say what each code was for, the naming scheme has failed — which is the argument for encoding the channel and the date rather than inventing something clever each time.