MarketingCouponsCreate a coupon

Create a coupon

Step by step, create a coupon (promo code or voucher code), open the Create Coupon form, set the discount, limits, validity, and stacking, then publish and save.

This article walks through creating a coupon from the dashboard. New to coupons? Start with the Coupons overview first.

Two ways to create a coupon

Open Marketing → Coupons in the sidebar. The Add Coupon button (top right) is a split button: clicking it opens the full form, and the ▾ chevron beside it offers two paths:

MethodBest for
Add via form (the default)A complete coupon with targeting, limits, and validity. The recommended path, walked through below.
Add empty rowA quick code with just the essentials. It adds an editable row at the top of the table; fill a code and value and it saves.

This guide walks the full form path; for the quick path, jump to Quick-create with an inline row.

1. Open the coupons page

In the sidebar, find Marketing → Coupons. The list shows every coupon in your store with its discount, status, usage count, and validity window.

The Coupons list with the Filter and Columns buttons, the Add Coupon button with its split arrow, and rows showing each coupon's Code, Type (Percentage or Fixed Amount), Discount, Status (Active, Disabled or Scheduled), Used count with a progress bar against its limit, Starts and Expires dates

Each row shows:

  • Code is what customers type at checkout (always stored uppercase).
  • Type is Percentage or Fixed Amount.
  • Discount is the value (25 = 25%, 50 = $50 off).
  • Status is Active, Scheduled, Disabled (paused), or Expired. Active and Scheduled are both redeemable; what actually gates a coupon is its Start Date and End Date, so use Scheduled purely to mark an upcoming promo in your own list. The badge shows the status you saved, not what the dates say. Nothing changes a coupon's status as time passes: a coupon past its End Date still reads Active in the list (shoppers are refused with "Coupon has expired"), and one whose Start Date has passed still reads Scheduled while it works. The status never turns to Expired on its own, so read the Expires column before you trust the badge.
  • Used is the live redemption count with a mini progress bar, e.g. 47 / 500; 89 / ∞ means no cap. See Track redemptions.
  • Starts / Expires is the validity window. "No date" = always on.

2. Open the Create Coupon form

Click Add Coupon. A two-column form opens, headed "Set up a new discount code for your store", organized into five sections (Discount Setup, Usage Limits, Validity Period, Discount Stacking, Product Targeting) plus a Publish-to-platforms footer.

The Create Coupon form at its defaults, with Discount Setup (Coupon Code, Status Active, Title optional, Discount Type "Percentage (%)", value 10%, Min Order, Max Discount), Usage Limits (Total Uses and Per Customer both Unlimited), Validity Period (Start/End Date pickers), Discount Stacking with "Can combine with other discounts" ON, a Product Targeting section (Include/Exclude Products), and a Publish to Platforms section. Footer reads "Press Ctrl + Enter to save."

Sensible defaults mean you only fill in what's specific to your campaign: Status = Active, Discount Type = Percentage at 10%, usage limits Unlimited, validity no dates, and Can combine with other discounts = on.

3. Fill in the coupon code, discount and limits

Here's the same form configured for a 20%-off campaign with a $100 minimum order:

The same Create Coupon form filled in, with Code "DEMO20", Title "Summer sale, 20% off", Discount Type "Percentage (%)", value 20%, Min Order 100, Status Active, usage limits left Unlimited, no validity dates, and "Can combine with other discounts" ON

Discount Setup

  • Coupon Code (required) is the string customers type. It's uppercased automatically and shown in monospace; keep it short and memorable (DEMO20, not demo 20). A code cannot contain spaces: it is refused with "A coupon code cannot contain spaces" rather than having the space removed, so use a dash or an underscore (SUMMER-25). Spaces before or after the code are trimmed off, and shoppers can type the code in any capitals.
  • Status is Active (live, subject to any dates you set), Scheduled (same, but flags it as an upcoming promo), or Disabled (paused without deleting). Set a Start Date if you want it to hold until a given moment; before that date shoppers are told the coupon is not yet active.
  • Title (optional) is an internal label for your team (e.g. "Summer Sale 20% Off"). It doesn't change the discount or the code.
  • Discount Type is Percentage (%) or Fixed Amount (in your store currency).
  • Percentage / Amount (required): for Percentage, 20 means 20% (it cannot be above 100); for Fixed Amount, 50 means 50 off the cart. The value must be more than 0: a coupon that takes nothing off is refused, and so is a percentage over 100. Amounts take up to two decimals (12.50, not 12.505).
  • Min Order is the minimum cart subtotal before the coupon applies. Leave blank for no minimum. It takes up to two decimals.
  • Max Discount caps the total discount. A 30% coupon on a $1,000 cart gives $300 off unless you cap it: set 100 and it stops at $100.

Usage Limits

  • Total Uses is total redemptions across all customers before the coupon stops working. Blank = Unlimited. A limit of 0 is not accepted: enter a whole number of 1 or more, or leave the field empty for no limit.
  • Per Customer is how many times one customer can redeem it. 1 means one use per person. Blank = unlimited, and 0 is not accepted here either. It cannot be higher than Total Uses: with 100 total uses, one customer cannot be allowed 200, because the total would run out first, so the form refuses it with "The per-customer limit cannot be higher than the total uses". It does not mean "first order only": a returning customer can still use the code once. A signed-in shopper is counted by account, and a guest is counted by the email typed at checkout, so a guest is only refused once they reach the checkout step, not when they apply the code in the cart. A cancelled or fully refunded order gives its use back and no longer counts. A coupon has no first-order setting, see First-order discount.

Validity Period

  • Start Date / End Date set the window the coupon is valid in. Leave empty for no date restrictions. The dates are whole days on your store clock, and the End Date itself is included. The store clock is the time zone under Settings > General (a store still on the default counts in UTC, so set it first). A coupon with Start Date 27 Nov works from 00:00:00 on 27 Nov, and one with End Date 30 Nov works until 23:59:59 on 30 Nov, so set the End Date to the real last day of the promotion. The form shows the exact cutoff under the End Date, for example "Ends 30 Nov 2026 at 23:59:59 (Asia/Jerusalem)". The same rule applies when you change a date in the Coupons grid or with Bulk Edit. A coupon you saved before this change keeps the end it already had (an End Date of 30 Nov used to stop at 00:00 UTC on 30 Nov, so the day itself was lost): pick its End Date again to move it to the end of that day. (A discount rule's dates carry a time of day as well, on the same store clock.) Before the Start Date the shopper sees "Coupon is not yet active"; after the End Date, "Coupon has expired." The End Date has to be the same day as the Start Date or later (a one-day coupon is fine), a percentage cannot be above 100, and amounts take at most two decimals: the form (and the API, and the AI assistant) refuse anything else and say which field to fix.

Discount Stacking

  • Can combine with other discounts (on by default): when off, no automatic discount rule will apply on top of this coupon (the coupon is the only discount on the order). When on, a rule stacks only if the rule is also set to combine with coupons, so both sides must agree (see Stacking). Either way, only one coupon code applies per order.

Coupons and shipping

A coupon takes money off the products, not off delivery (a coupon cannot give free shipping; that is a Shipping Discount rule). But shipping is priced from the basket after discounts, so a coupon can change the delivery price. If your free shipping starts at 100 and a coupon takes a 110 basket down to 95, the shopper now pays for delivery. This is worked out the same way whether the coupon is typed in the cart or at checkout, and removing the coupon puts the free shipping back. See Shipping zones and rates.

Product Targeting

By default a coupon applies to the whole cart. To scope the discount to specific products or categories (or exclude items), or, on multi-region stores, to limit the coupon to specific regions, use the Product Targeting section, covered in full in Target products & regions.

Publish to Platforms: choose the sales channels where the code works

At the bottom of the form, Publish to Platforms lists your sales channels (the storefronts connected to your store), each with its name, its website address and a switch. Turn on every channel where shoppers should be able to use this code. The switches take effect when you save the coupon, and you can change them later from the coupon's Sales channels column in the table.

A coupon that is not published to a sales channel is refused on that channel's storefront. The shopper sees "Coupon is not available for this store", even though the code is perfectly valid. With every switch off, the code is not usable on any sales channel storefront. If you have no sales channel yet, the section reads "No platforms connected" and there is nothing to switch on.

  • Only channels that are enabled and that your team role may manage appear in the list. A team member limited to certain channels sees only those, and a coupon they create is published to their channels automatically.
  • Loyalty reward codes are the exception. Coupons the loyalty program creates for one specific customer (reward redemptions, referral welcomes, birthday gifts) work on every channel without being published.

This list does not send the coupon to any outside platform. Despite the name, publishing here only decides which of your own sales channels accept the code. Brainerce does not push coupons to Google, Meta, TikTok, Shopify or WooCommerce: no app you can install today carries coupons to another platform. Shopify and WooCommerce exist only as one-time, read-only import sources inside the Migration Tool. See Import from another platform.

4. Save the coupon and it goes live straight away

Click Create Coupon (or press Cmd/Ctrl + Enter; Esc cancels). The modal closes and your new coupon appears at the top of the list, Active, with 0 uses. On a sales channel storefront it only works once it is published to that channel (see Publish to Platforms above), and the same goes for a coupon made with a quick inline row, which starts with no channel switched on.

The Coupons list where every saved coupon is a row, with its code, type, discount value, status and use count, so a newly saved coupon appears among them

Share the code by email, social, an influencer agreement, a QR code, or a sitewide banner. The moment a customer enters it at checkout the discount applies and the Used counter on the row ticks up.

Quick-create with an inline row

Need just a code and a value? Use Add Coupon ▾ → Add empty row. A blank row appears at the top of the table. Type the Code, set the Value, Type, and Status right in the row, and it saves automatically once the code is filled. Add targeting, limits, or a validity window later by opening the row's ⋯ → Edit in Form (see Manage & edit coupons).

Field reference

FieldSectionNotes
Coupon CodeDiscount SetupRequired. Uppercased automatically. Spaces are refused (use a dash); spaces at the ends are trimmed.
StatusDiscount SetupActive / Scheduled / Disabled.
Title (optional)Discount SetupInternal label only; doesn't affect the discount.
Discount TypeDiscount SetupPercentage or Fixed Amount.
Percentage / AmountDiscount SetupRequired. More than 0; a percentage at most 100; up to 2 decimals.
Min OrderDiscount SetupMinimum cart subtotal to qualify. Blank = none. Up to 2 decimals.
Max DiscountDiscount SetupCaps the discount value. Blank = none.
Total UsesUsage LimitsBlank = unlimited. 1 or more; 0 is not accepted.
Per CustomerUsage LimitsPer-customer cap. Blank = unlimited. 1 or more, and not higher than Total Uses.
Start Date / End DateValidity PeriodBlank = always on.
Can combine with other discountsDiscount StackingOff = no automatic rule stacks on this coupon.
Include / Exclude ProductsProduct TargetingScope the discount to / away from products. Search needs 2+ characters.
Include / Exclude CategoriesProduct TargetingSame, at the category level.
Region RestrictionProduct TargetingMulti-region stores only.
Publish to PlatformsFooterWhich of your sales channels accept the code. Off on a channel means refused there. No outside platform.

What's next?