Bulk codes
A bulk code set is one discount with up to 100,000 unique codes attached — for email campaigns, influencers, partners, or print. Every code is single-use and once per customer, automatically — there are no usage limit settings on a set because the right answer is enforced for you.
Create one from Discounts → Bulk codes → Create bulk set.
Creating a set
Section titled “Creating a set”Give the set a Set name (e.g. Christmas email — it’s also the discount’s title, renameable any time), then configure the offer exactly like a regular discount — offers, cart groups, caps, SafeGuards, dates all work the same. The generation card asks:
| Field | Notes | Default |
|---|---|---|
| Codes to generate | 1 to 100,000 for the first batch. More can always be generated later. | 10,000 |
| Code length | Length of the random part. PromoLock enforces a minimum based on your count (see below); max 24. | 8 |
| Example code | A live preview of what your codes will look like. | — |
Show extra options reveals:
| Field | Notes |
|---|---|
| Characters | Letters & numbers (default), Letters, or Numbers. Confusable characters — O, I, 0, 1 — are never used, because codes get read aloud and printed. |
| Prefix / Suffix | Optional fixed parts, e.g. SUMMER- + random + -24. They don’t count toward the length. |
Characters, prefix, and suffix are locked once the set is created — every batch matches the format your customers already saw. Length can be raised on later batches.
Why there’s a minimum length
Section titled “Why there’s a minimum length”The minimum isn’t about running out of combinations — it’s about guessing. PromoLock sizes the random space so that even someone who learns your exact format from one leaked code hits a valid code on at most 0.01% of tries. And the only place to try is your checkout, which limits how fast anyone can guess. The field simply won’t let you pick an unsafe length.
Generation, batches, and waiting in line
Section titled “Generation, batches, and waiting in line”Generation runs in the background — a banner shows live progress (“3,500 of 10,000 codes created”) and you can leave the page. One detail worth knowing: Shopify processes one code-creation job per store at a time. If another set (or another app) is generating, your set shows “Waiting in queue” and starts by itself the moment the line frees up. Big sets take a while — 100,000 codes is roughly an hour.
Each generation run is a batch, and batches keep their identity forever:
- The Codes section lists every batch with its code count and creation date.
- Generate new batch adds more codes to the set — same locked format, adjustable length, and a hint showing how many more codes fit.
- Select batches with the checkboxes and Download codes to get a CSV of exactly those codes. One batch per partner or campaign means each export is exactly one campaign’s codes — no spreadsheet surgery.
If Shopify rejects some codes mid-run, PromoLock retries automatically; a set that still comes up short is marked honestly (“Generation stopped short”) with a Retry button that generates the remainder.
Fraud protection for sets
Section titled “Fraud protection for sets”On Shopify Plus stores, the SafeGuards panel of a bulk set includes a Fraud protection checkbox — on by default. It enforces one code per person across the entire set: someone who already redeemed one code from the set can’t redeem another, even from a fresh account or alias email. Details in Fraud Guard.
Building a deliberately shareable set? Untick it for that set and PromoLock stays out of the way.
Deleting a set
Section titled “Deleting a set”Deleting a bulk set deletes the discount behind it, and all its codes stop working at checkout immediately — any campaign still relying on them breaks. The confirmation shows the live code count before you commit. There is no undo.
