# Promotions

Build an automatic discount, choose what triggers it and what the customer gets, and see how it reads on the register

Source: https://getolet.com/resources/help/catalog/promotions/
Updated: 2026-10-15

A promotion is a discount the register applies on its own once a cart matches the rules you set. Buy two get one free, 10% off a brand, and a spend threshold are all the same object with different settings.

This feature depends on your plan. Check Settings > Billing to see what your plan includes.

Go to **Catalog > Promotions**. Each row summarizes the promotion's trigger and its reward, so you can read the whole campaign list without opening anything.

![The promotions list showing name, status, trigger, and reward on each row](./images/promotions-list.png)

## Before you start

A promotion aims at a **product set**, not at products one by one, so build the set first. See [Product tags and product sets](/resources/help/catalog/product-tags-and-product-sets/). You can also select **New set** from inside the promotion editor and build one without leaving the page.

## Build a promotion

Select **Add promotion**. The editor is four sections plus limits, and you save the whole page at once.

### Identity

**Name** is what your staff sees on the receipt and in the cart, so name it the way you would say it out loud. **Description** is an optional note for you. **Status** works like a price book: only **Active** promotions apply, and **Draft** is where you build one safely.

### Availability

**Schedule** is one of three things.

- **Always on** runs until you change the status.
- **Date window** runs between a **Start date** and an optional **End date**. Both dates are included in full.
- **Recurring schedule** runs on the days you tick under **Active days**, between a **Start time** and an **End time**, optionally inside a date window as well. The times cannot be identical, because that window never opens.

**Outlets** and **Customer groups** work exactly as they do on a price book: empty means all of them.

**Requires a code** decides whether this is an automatic promotion or a voucher campaign. Leave it off and the promotion applies to every qualifying sale. Turn it on and nothing happens until a cashier enters a code. See [Voucher codes](/resources/help/catalog/voucher-codes/).

### Trigger

**Trigger** is what the customer has to do to qualify.

- **Buying specific items** aims at a **Trigger product set**. Then pick a **Trigger mode**. **Qualifies once past a quantity** uses a **Minimum quantity to qualify**, with an optional **Maximum quantity to qualify** above which the promotion switches off completely. **Repeats every N units** uses an **Exact quantity per block**, which is how buy-two-get-one works, and setting it to 1 discounts every matching unit.
- **Spending a minimum amount** uses a **Minimum spend ($)** and ignores which products are in the cart.

A maximum quantity below the minimum can never be satisfied, and OLET refuses to save it.

### Reward

**Reward applies to** picks what gets cheaper: **The triggering items**, **A different product set**, or **The entire sale**. A spend trigger has no triggering items, so it offers only the last two.

**Reward kind** is **Percent off**, **Amount off**, **Fixed unit price**, or **Group price**. Percent off is capped at 100, which is how you write "free".

**Units rewarded per application** says how many units one application covers, and it is required for anything but a whole-sale reward. Three toggles finish the section.

- **Partial reward** decides whether a cart that half qualifies gets a prorated reward or nothing.
- **Stacks with price books** decides whether the promotion also discounts lines already priced by a price book. Turn it off and those lines are left alone. See [Price books](/resources/help/catalog/price-books/).
- **Prompt at register** asks the cashier to offer the promotion instead of applying it silently.

### Limits

**Total redemption limit** and **Per-customer limit** are both optional. A total limit counts redemptions that have already happened, so setting one at or below the count already on the promotion stops it immediately. The editor tells you that count before you save.

## The order discounts come off in

A promotion is applied first, then an order-level manual discount is taken off what is left. Take a $100 order with a promotion worth 10% and a manual order discount of 10%. The promotion brings the order to $90, and the manual discount takes 10% off that $90, so the customer pays $81, not $80.

## What the customer sees

On the register the line shows its original price struck through with the promotion's name under it, and the receipt prints the same. Nothing about promotions depends on a cashier's discount permissions, so a cashier who cannot enter a discount by hand still sees a promotion apply. See [Promotions and voucher codes on the register](/resources/help/selling/promotions-and-voucher-codes-on-the-register/).

## If it goes wrong

- **A weighed item got no promotion.** Promotions are written in whole units, so a line with a fractional quantity, such as 1.5 kg, is left out of every promotion and sells at its normal price.
- **Nothing applies.** Check the status is **Active**, then the schedule, then the outlet and customer group scope. If **Requires a code** is on, the promotion is waiting for a code.
- **The row is tagged set deleted.** The product set this promotion aims at is gone, so it matches nothing. Point it at a set that still exists.
- **It stopped applying part way through the day.** A recurring schedule only runs between its start and end times, on the ticked days.
- **Gift cards are never discounted.** A gift card line is excluded from every promotion, because a card sold cheap and spent at face value is money given away.

## Where to go next

- [Voucher codes](/resources/help/catalog/voucher-codes/)
- [Price books](/resources/help/catalog/price-books/)
- [Discounts and price overrides](/resources/help/selling/discounts-and-price-overrides/)
