Manage your sets
Everything you can do with a set after it's created: track generation, export codes, add more, change settings and dates, and clean up.
The Discount codes list
Open Discount Codes in the app menu. At the top are two buttons, Create new discount set and Add codes to an existing discount, and two counters: codes created this month and codes remaining. Sets are listed newest first.
| Column | What it shows |
|---|---|
| Set Title | The title, and underneath it ID: 1234. The ID is what you use in Shopify Flow and when contacting support. Sets bound to a discount made in Shopify carry a From Shopify badge. The set's tags appear below the ID. |
| Count | Codes requested for the set, including every batch added later. |
| Value | e.g. 20%, 10USD, Free Shipping, Buy X Get Y or 15% + Free Shipping. |
| Created At | When the set was saved. |
| Status | In queue Running Completed Failed, plus N rejected when some specific codes were refused. What each status means: Saving and generation. |
| Actions | See Actions on a set. |
Once you have tags, filters for Campaign, Channel and Department appear above the list. Choose No campaign (and so on) to find sets that haven't been tagged yet.
Discounts created by Flow's Create a personal discount action aren't in this list. They have their own Flow Discounts page.
Sets in progress
While a set or a batch of added codes is being generated, it appears in the In-progress discount sets card above the list, with X / Y created, a percentage, a progress bar and an estimate: About 4 min left while it runs, or 1 of your sets ahead · starts in about 2 min · done in about 3 min while it waits behind your earlier sets. The estimate is based on the speed actually measured and gets more accurate as the set runs. The page refreshes itself every few seconds until it's done, then the set moves into the table.
When you add codes to an existing set, the whole set moves to this card until the new batch is finished, and returns to the table afterwards.
Actions on a set
Each row has three controls: Stats, Export and the ⋯ (More actions) menu.
| Control | What it does |
|---|---|
| Stats | Redemptions, revenue, usage per code, orders and exports. Available on Pro and Unlimited. See Stats. |
| Export ▾ | Export as CSV, Export as XLSX, Export with discount links and Print QR vouchers (PDF). See Export codes. |
| ⋯ More actions | Show details (the details panel), Add new codes (Add codes), Reserved codes (only when Shopify Flow reserved codes; Reserved codes), Edit settings (not on From Shopify sets; Edit a set), Edit tags (Tag sets), Duplicate (not on From Shopify sets; Duplicate a set), History (Set history), Open in Shopify and Delete. |
Set details
Click Show details on a set to open a panel with:
- Summary and Code Configuration: the set's discount and code settings.
- Example Discount Code: a sample in the set's format. Generate another code shows a new sample; it isn't created in Shopify.
- More actions: Open in Shopify (the discount in your Shopify admin, in a new tab), Edit settings and Delete.
- Rejected codes: only when some specific codes were refused. See Rejected codes.
- Code Adding History: one row per batch (the original set and each Add new codes batch) with its date, Code Count, Generated, status and its own Export button.
Use Open in Shopify, for example to set Sales channel access. Changes you make to the discount in Shopify are picked up the next time you open Edit settings in the app.
Export codes
Click Export ▾ on a set and choose Export as CSV or Export as XLSX. The file downloads straight away.
- Contents: one column, Discount Codes, with every code in the set: the original batch and all codes added later. Used and expired codes are included; rejected codes are not.
- One batch only: use the Export button of that batch in Code Adding History. Handy when you add 1,000 codes for a new partner and want to send only those.
- File name:
discount_codes_YYYY-MM-DD_HHMMSS.csvor.xlsx. CSV files are UTF-8, so they open correctly in Excel. - Export is available once the set has finished generating.
- With usage data: on Pro and Unlimited, the set's Stats page exports each code with its status, times used, expiry and dates.
Export with discount links
Adds a Discount Link column next to each code. When a customer opens the link, the code is applied to their cart automatically and they land on the page you choose. Handy for influencers, emails and SMS.
- Landing page: a path such as
/collections/sale, or paste an address from your store. Default: the home page. - UTM source, UTM medium, UTM campaign (optional): show up in Shopify Analytics under sessions by UTM. The campaign is filled in from the set title.
- Links use your store's primary domain, for example
https://yourstore.com/discount/CODE?redirect=…. The code is saved in the browser that opens the link.
For a Free gift set, Link type offers a Cart link (the default): opening it adds the gift to the cart, applies the code and shows the cart page, for example https://yourstore.com/cart/12345:1?discount=CODE&storefront=true. The gift must be in stock and available on your online store. Cart links don't open while the store is password protected, and codes that contain a comma are left out, because Shopify can't apply them from a link.
Print QR vouchers (PDF)
Creates a printable PDF with one QR code per discount code, for packaging inserts, flyers, events or in-store cards. Scanning a QR opens your store with the code already applied. A live preview in the window shows exactly how a card will print.
- Layouts: Cards (8 per page, with headline, code, message and validity line, and dashed cut lines) or Labels (24 small QR codes per page, for stickers). Paper: A4 or US Letter.
- Text: the headline is suggested from the set's value (e.g. 10% OFF) and the validity line from its end date; change both as you like. Any language works, including accented letters.
- Links: the same landing page and UTM options as link export. UTM source/medium default to
qr/print. - Big sets: every code in the set is included. Sets over 2,000 codes are split into PDFs of 2,000 codes and downloaded as one ZIP file.
Export for another app
Downloads the codes in the file format another app expects, so you can upload them as a code pool there. Choose Export ▾ → Export for another app.
| Target | File | Where to upload it |
|---|---|---|
| Klaviyo | CSV with one column, Coupon Code | In Klaviyo, go to Coupons, create an uploaded coupon, then choose Add codes. |
| Smile.io | CSV with one column, Code | An imported reward in Smile.io. Codes with symbols such as %, $ or * are left out, because Smile.io doesn't accept them; the message after the export says how many. |
| Wisepops | CSV with one column, Coupon | In Wisepops, go to Integrations, then Uploaded Discount Codes, create a list and upload the file. Codes longer than 50 characters are left out, because Wisepops doesn't accept them; the message after the export says how many. |
| Plain list | Text file, one code per line, no header | Any app that takes a list of codes. |
Only codes that are still available is on by default. It leaves out codes that were already used, expired, or handed out by Shopify Flow, so the same code isn't given out by two apps. Turn it off to export every code.
On Pro and Unlimited you can skip the file for Klaviyo: Send to Klaviyo sends the codes directly and keeps the coupon filled.
Make sure the other app has enough codes for everyone who will get one. When a pool runs out, apps like Klaviyo skip the message instead of sending it without a code.
Add codes to a set
Click + (Add new codes) on a set. The Add Discount Codes page adds a new batch to the same Shopify discount.
- You choose: a title for the batch, random or specific codes, and the code format. The format starts with the set's current settings, so new codes look like the old ones.
- Inherited, can't change here: discount type, value, products, minimum, customers, combinations, usage limits and dates. The Summary shows them under Adding to ….
- Specific codes are pasted into the box; file upload is only on the create page.
- The batch counts toward your monthly allowance like a new set. Its progress shows in the In-progress card, and it appears in the set's Code Adding History.
- The set keeps its ID. Flow workflows using that ID see the new codes immediately.
To refill a set automatically, use the Flow action Generate more discount codes.
Edit a set
Click the pencil or Edit settings. Changes are saved to the Shopify discount straight away and apply to every code in the set, including batches added later. Orders already placed aren't affected.
| You can change | You can't change |
|---|---|
|
Title Value (and percentage / fixed amount on order + free shipping sets) Item limit and free shipping on app-discount sets Applies to: products and collections Buy X Get Y: discounted quantity, value and uses per order Free shipping: countries and maximum shipping amount, or the amount on fixed amount off shipping sets Fixed value: Only apply discount once per order Purchase type (one-time / subscription / both) and recurring payments, except on Buy X Get Y Minimum purchase requirements Eligibility: segments or markets Combinations Total uses and one use per customer Start and end dates |
Discount type Codes: count, format, specific code list Buy X Get Y: which products customers buy and get Removing both the item limit and free shipping from an app-discount set Switching between free shipping and a fixed amount off shipping |
- Total uses applies per code. Uses that already happened count toward the new limit.
- Dates are in your store's timezone. Moving the end date into the future makes expired codes work again.
- Press Save in the bar at the top; Discard undoes your changes. You'll see Discount set updated.
- If the page shows Couldn't reach Shopify, it's showing the last saved values. Reload before saving if you changed the discount in Shopify meanwhile.
Their settings belong to the discount you created in Shopify. Change them in Shopify under Discounts. See Existing Shopify discounts.
Save errors
| Message | What to do |
|---|---|
| Shopify rejected the change. Please review the values and try again. | A value Shopify doesn't accept, e.g. an end date before the start. |
| We couldn't reach Shopify. Please try again in a few minutes. | Temporary. Try again later. |
| Your Shopify connection has expired. Please reopen the app from your Shopify admin. | Open DiscountFix again from Apps in Shopify. |
| The per-order item limit can be changed but not removed on this set. | Create a new set without a limit. |
| This discount set no longer exists. Please refresh the page. | The set was deleted, or the discount was deleted in Shopify. |
Duplicate a set
⋯ More actions → Duplicate opens the create form with the set's settings already filled in: discount type and value, products and collections, minimum, customer eligibility, limits, combinations, code format, the number of codes and the tags. Review it and click Save. You get a new set with a new Shopify discount and new codes.
- The title gets (copy) at the end. Change it if you like.
- The start date is set to now. The end date is kept if it's still in the future; otherwise the copy has no end date.
- A set of specific codes is copied as random codes, because the same codes already exist in Shopify.
- The new codes count toward your monthly allowance, like any new set.
From Shopify sets can't be duplicated; their settings belong to the discount in Shopify.
Set history
⋯ More actions → History lists what happened to a set, newest first: when it was created (or copied from another set), codes added, settings changed (which fields), end date extended, tags changed, unused codes cleaned up and the set deleted. Changes made by Shopify Flow or Sidekick are marked as such.
History is recorded from October 1, 2026. Changes made directly in the Shopify admin aren't recorded.
Look up a code
The Look up a discount code box on the Discount codes page finds the discount any code belongs to, including codes not created with DiscountFix. Type the code (upper or lower case) and press Search.
The result shows the discount's title, status (Active, Scheduled, Expired), type, whether it was created with DiscountFix, the number of codes, times used for the whole discount, and its dates. Buttons: Add more codes and View stats for DiscountFix sets, and Open in Shopify admin.
Below the result, a checklist explains why the code may not work. If something blocks it right now, the box turns red and is titled Why this code doesn't work right now:
- Blocking: the discount hasn't started yet, it has ended, this code has no uses left, or a Shopify rollout turns it off for all buyers.
- Rollouts: a rollout turns the discount on or off for part of your visitors (shown once you allow rollout access).
- Restrictions: only certain customer segments or markets, or subscription purchases only.
- Conditions: once per customer, minimum purchase, selected products only, free shipping countries or rate limit, and whether it combines with other discounts.
The checklist shows the discount's own rules. A customer's cart can still block a code, for example when another discount in the cart doesn't combine with it. Useful when a customer writes in with a code and you need to know which campaign it's from and why it didn't apply.
Delete a set
Open the ⋯ menu on the set (or the set's details) and click Delete, then confirm. The set and all its added batches disappear from DiscountFix.
The discount and all its codes stay live in Shopify and can still be used. Deleting only removes the set from the app. After that, the app stops tracking its redemptions and you can't export it or see its stats. There's no undo.
To stop the codes working, delete or deactivate the discount in Shopify under Discounts (use Open in Shopify first), or set an end date in the past with Edit settings before deleting.
Deleting a set doesn't return its codes to your monthly allowance.
To remove codes from Shopify instead, see Clean up unused codes.
Clean up unused codes
Shopify allows 20,000,000 discount codes per store. Every code counts, whether it's active, scheduled or expired, and whichever app created it. Once a store reaches the limit, no new codes can be added. Open Clean up from the app menu to see how close your store is and to free up room.
| Card | What it does |
|---|---|
| Discount codes in your store | Your store's total code count from Shopify, against the 20 million limit. It includes codes from other apps. |
| Ended sets with unused codes | Sets whose end date has passed and that still have codes nobody used. Select one or more sets and click Delete unused codes. The Unused column is an estimate. The exact number deleted appears in the history when the cleanup finishes. |
| Expired Flow personal discounts | Discounts that Flow's Create a personal discount action made for one customer, that expired without being used. Delete them removes those discounts from Shopify and from the Flow Discounts page. |
| Cleanup history | Each cleanup with how many codes were deleted and how many were kept. |
What is and isn't deleted:
- Only codes that were never used are deleted. Used codes stay, so your stats, redemptions and exports keep them.
- The discount itself stays in Shopify.
- DiscountFix only deletes codes it created. Codes you added to a discount yourself in Shopify are always kept.
- If you extended the discount's end date in Shopify, the cleanup stops and deletes nothing.
A customer who types a deleted code sees that the code is invalid, not that it has expired.
Cleanups run in the background. You can leave the page; the history shows progress when you come back.
Code safety Pro & Unlimited
Open Code safety from the app menu. It has two parts.
Possible leaks
When a code you gave to one customer is used by a different customer, DiscountFix flags it. That usually means the code was shared or posted on a coupon site. It works for codes handed out to a customer with Shopify Flow: Reserve a unique discount code and Create a personal discount. Orders are checked every hour.
- Each alert shows the code, the set, the customer it was given to, the customer who used it and the order, with links to them in Shopify.
- Disable code removes that one code from the Shopify discount, so it stops working at checkout. The discount and its other codes keep working, and orders already placed aren't affected. There's no undo.
- Dismiss closes the alert without changing anything, for example when a family member used the code.
- Guest checkouts have no customer to compare, so they can't be flagged.
- To react automatically (tag the order, email your team), use the Flow trigger Discount code possibly leaked.
Discount health check
Checks every active discount code in your store, including ones from other apps and ones you made in Shopify, for settings that make it easy to abuse:
| Finding | Risk |
|---|---|
| No usage limit on a discount with only a few codes: anyone who finds the code can use it again and again | Medium (High at 30% off or more) |
| One code used 50 or more times: it's probably posted publicly | High |
| Each code in a large set can be used without limit, so one leaked code keeps working | Medium |
| 50% off or more (not Buy X get Y) | Medium (High at 80% or more) |
| In a Shopify rollout: a rollout turns the discount on or off for some or all buyers, so a code can work for one customer and not for another (needs rollout access, see below) | Medium |
| No end date, no minimum purchase on a large discount, or combines with every other kind of discount | Shown as notes |
Nothing is changed automatically. Use Open in Shopify or, for DiscountFix sets, Edit in DiscountFix to fix a setting. The check covers your 300 newest active discounts.
Discounts in Shopify rollouts
Shopify's Rollouts let you schedule a discount or test it on a share of your visitors. While a rollout is running, the discount's own dates no longer tell you who gets it. To see which discounts are in a rollout, click Allow access in the banner above the health check and approve read-only access to rollouts. The health check and Look up a code then show the rollout's name, its share of visitors and its dates. A split only applies in the Online Store.
Flow pages
| Page | How to get there | What it shows |
|---|---|---|
| Reserved codes | ⋯ More actions → Reserved codes on a set | Every code Flow's Reserve a unique discount code action handed out: the code, customer (linked to Shopify), when it was reserved, its status and when it expires. Search by code or customer ID; 20 per page. |
| Flow Discounts | App menu | Every discount created by Flow's Create a personal discount action: code, customer, value, created date, status and expiry. Search by code, title or customer ID; 20 per page. |
Reserved code statuses:
| Status | Meaning |
|---|---|
| Used (×N) | The customer used the code, N times if more than once. |
| Not used yet | The code was given out and still works. |
| Expired | The workflow gave the code a Valid for (days) deadline, the customer didn't use it in time, and the code was removed from Shopify. It no longer works at checkout. See codes that expire N days after they are sent. |
The Expires column shows the earlier of the set's end date and the code's own Valid for (days) deadline.
Both pages are read-only. To put a reserved code back in the pool, use the Flow action Release a reserved discount code.