shopify / discounts / discount-codes
Shopify Unique Discount Codes: Shared Code, One Use, or One Code per Customer
Choose a shared Shopify discount code, one use per customer, or one code per recipient, and plan for unfinished checkouts that hold usage.
If you run the store, choose the usage rule in Discounts before you email or publish a code: one shared string, one use per customer on that same string, or a distinct code per recipient. A tight total-use cap can be spent by an unfinished checkout before any paid order exists, so set the limit for that hold, and send a customer who already sees “already been used” to the failure checklist instead of rewriting the offer.
This is an admin decision. It is not a shopper list of unique codes, and it assumes you already chose a discount code rather than an automatic discount. Rules below follow Shopify Help on discount codes and the Discounts FAQ.
Decision rule: Use one shared discount code when many people should redeem the same string. Add Limit to one use per customer when that shared string should work once per email or phone. Set Limit number of times this discount can be used in total to 1 when the whole campaign may redeem only once. Issue a distinct code per recipient when a leaked or forwarded string must not unlock everyone else’s offer. An unfinished checkout holds a code against its usage limit until payment completes or fails; deactivating, reactivating, or renaming the code does not reset that history.

Choose the usage rule before you publish the string—shared code, one use per customer, or one code per recipient—so an unfinished checkout doesn’t burn the wrong limit.
Shared code, one use, or one code per customer
“One-time,” “one per customer,” and “unique codes” are different controls. Shopify’s Maximum discount uses section can combine a total-use cap and a one-use-per-customer limit. Neither control mints a new string per person.
| Job you need | Set this |
|---|---|
| Many people redeem the same public or partner code | One shared code; leave usage unlimited, or set a total cap if the campaign must stop after N redemptions |
| That same string works once per person | Limit to one use per customer (email or phone on desktop amount-off steps) |
| The campaign can be redeemed only once in total | Limit number of times this discount can be used in total = 1 |
| Each recipient gets a string that is useless to anyone else | Distinct codes, each with its own usage history; stay under the store cap of 20,000,000 unique codes |
| A fixed-amount product or collection code should hit one line, not every eligible unit | Only apply discount once per order — not a customer usage limit |
A named customer list is a fourth gate, not a unique-code plan. A code can apply to up to 100 specific customers, products, and variants. Past that, Help reports There is 1 error with this discount code: Item entitlements exceeded max number.
A shared code
A discount code is one string the customer enters at checkout. Help frames codes for email, partnerships, exclusivity, and urgency. Forgotten codes can contribute to abandonment because there is a string to mistype or lose. Use a shared code when the point of the campaign is that many people hold the same string: a site banner, a partner who should keep using one code, or an email segment that all receives WELCOME10.
Usage is unlimited until you opt into Maximum discount uses. Limit number of times this discount can be used in total counts redemptions across customers. Help’s own example is a cap of 200: the code can be used 200 times across the customer base, and the same customer can still use it more than once unless you also limit one per customer. Treat 200 as Shopify’s illustration, not a target.
A total cap of 1 is the strict “one redemption for the whole store” setting. It is not “one time per customer.” The first successful hold consumes it.
One use per customer is still one code
Limit to one use per customer keeps a single code and blocks a repeat from the same person. On the desktop amount-off steps, Shopify does that by tracking the customer’s email address or phone number. The code can still spread; the limit only stops a repeat from a tracked email or phone.
That limit belongs to that discount. If you delete it and create a duplicate with the same maximum-use restriction, customers who already used the old discount can use the new one once. Deleting is a real reset. Turning the code off and on, or renaming it, is not.
The same Help page’s Shopify mobile-app steps add a qualifier the desktop steps and the Discounts FAQ do not: one per customer “only applies to fixed value discounts.” If you are creating a percentage code, confirm the checkbox on a desktop discount and retest checkout. Do not treat the mobile sentence as proof that every percentage code ignores the limit, and do not ignore it if you only use the Shopify app.
Only apply discount once per order is a different checkbox. For a fixed-value code on specific products or collections, it limits the discount to one application in the order. Leave it unchecked and the fixed amount applies to every eligible product. It does not cap how many customers can use the code.
One code per customer
Choose distinct codes when the string itself must not be shareable: an influencer code you need to attribute, a partner who should not forward a public code, or a recipient whose redemption must not burn a pool everyone else uses. When you issue a replacement as a new discount code with the same conditions, Help says that new code has its own usage history. Help does not say whether several redeem codes added to one parent discount share that parent’s total-use counter or each keep a separate count.
Help’s create steps document Generate code (desktop) or a refresh icon (Shopify app) for one random code. They do not document a batch size, a prefix, or a “generate 5,000 codes” control. The Discounts FAQ “bulk actions” line is about deactivating many codes at once, not creating them.
What Help does cap is the store: 20,000,000 unique discount codes, cumulative. After that, delete codes before you create more. Third-party apps and custom solutions cannot bypass or raise that limit. A generator app does not buy a higher ceiling.
If you are attaching many redeem codes to one existing code discount through the Admin API, discountRedeemCodeBulkAdd accepts at most 250 codes per request. That is a developer batch size, not a button in the create flow, and it is not a StoreKitly feature. Discount type cannot be changed after the discount is created, so pick amount-off, free shipping, or Buy X Get Y on the parent discount before you add codes to it. Before you issue a large set, read the usage settings on that parent and test with a customer account you control: after the first code has actually been used, check whether a second string is still accepted. Do not assume the total cap is per string.
Avoid special characters in the code name. Help requires that so the name can be added correctly when it is placed in a checkout URL. This article does not cover how those links are built.
Unfinished checkouts hold the usage limit
When a customer submits the order, Shopify holds the code against its usage limit until payment completes or fails. A declined payment releases the hold, and the customer can use the code again. The hold remains when checkout never finishes. Help calls out the case where a payment provider does not report a failed payment correctly; if that keeps happening, the fault is in that integration, not in renaming the code.
Checkout then shows The _DISCOUNT_CODE_ discount code has already been used. No matching order can still mean the unfinished checkout is holding the code.
| Step | What to do |
|---|---|
| 1 | In Orders, search the customer and confirm whether a paid order already used the code |
| 2 | If no order exists, treat the attempt as an unfinished-checkout hold, not as a broken percentage |
| 3 | Do not deactivate and reactivate the code, and do not rename it, to clear usage history |
| 4 | If this customer should still get the offer, create a new code with the same conditions; the new code has its own usage history |
| 5 | If a total cap of 1 or a small cap is vanishing before paid orders, the hold is doing that; a distinct code per recipient keeps the next person’s string unused |
For the rest of a failed-code pass—dates, eligible items, combinations, a missing code field—use Shopify discount code not working. This section only covers the usage hold those checks assume.
A mistyped code is a different failure. CouponRescue is for failed typed-code attempts, not for choosing a usage limit.
What this article is not
Not automatic vs code. Whether the cart should save without a typed string is Shopify automatic discounts.
Not combination design. A usage limit does not decide whether product, order, and shipping classes stack. That matrix is Shopify discount combinations.
Not a discount-link guide. Putting the code in a URL is a separate decision. Do not use this page for link format.
Not a generator-app list. Apps cannot lift the 20,000,000 store cap. Naming a bulk-code app does not answer which limit you needed.
Before you issue the set
- Name the job. Shared string, one redemption total, once per email or phone, or one string per recipient.
- Set Maximum discount uses to match that job. A total cap without one-per-customer still allows repeat use by the same person.
- Do not confuse once per order with once per customer. The first limits how a fixed amount hits lines in one order.
- Expect unfinished checkouts to hold usage from submit until payment completes or fails.
- See the code apply, then stop before payment if you are only checking eligibility. Help starts the usage hold when the customer submits the order, not when they type the code. A pre-submit test does not show the hold.
- Match the failure. “Already been used” with no order → the hold checklist, then the not working guide if other rules might also be blocking the cart.
FAQ
Is a one-time Shopify discount the same as one per customer?
No. One use per customer is Limit to one use per customer on a shared code, tracked by email or phone in the desktop amount-off steps. One redemption for the entire campaign is a total-use limit of 1. One code per customer means a different string for each recipient.
How do I generate unique discount codes in bulk?
Help’s Generate code control creates one random code. It does not publish a batch generator. Deactivating many codes with bulk actions is not generation. The store can hold 20,000,000 unique codes, and apps cannot raise that. The Admin API can add up to 250 redeem codes per request to an existing code discount; test how usage limits apply before you issue the set.
Will turning a code off and on clear “already used”?
No. Deactivating and reactivating, or renaming, does not reset usage history. Check Orders first. If the customer should still receive the offer, issue a new code with the same conditions.
Does one per customer work on a percentage code?
Desktop amount-off steps and the Discounts FAQ describe the limit without saying it is fixed-amount only. The Shopify mobile-app steps on the amount-off page say it only applies to fixed value discounts. Confirm the control on the discount you are editing, then retest.