Apply a promotion to a product
Outcome: an active promotion EARLY-HLB-10 that takes 10% off the
"Halong Bay Day Cruise" activity for orders placed in the next 30 days,
capped at 200 total redemptions.
Time: ~5 minutes. Permission: Manager role on the tenant.
Before you start
You need:
- The product you want to discount already exists and is published. If not, follow Create a product with attributes & variations first.
- You know the product's Code (e.g.
HLB-DAY-01) — promotions reference products by code.
Step 1 — Open the Promotions list
Sign in to the Dashboard.
In the left sidebar, expand Travel (or Apps, depending on your sidebar layout) and click Promotions.
The list at
/apps/promotionsshows existing promotions with Code, Name, Module, Trigger, Validity, Usage, Priority, and Status columns.
Step 2 — Create a new promotion
- Click New promotion in the top-right of the list card.
- The editor opens at
/apps/promotions/edit/0with empty fields.
Step 3 — Fill the General section
| Field | Value | Notes |
|---|---|---|
| Code | EARLY-HLB-10 |
Internal identifier; uppercase + hyphens; immutable after save. |
| Name | Early-bird Halong 10% off |
Operator-facing label shown in lists and reports. |
| Description | 10% off Halong Bay Day Cruise for the first 30 days. |
Optional context for other operators. |
| Currency | USD (or your tenant default) |
Determines how monetary thresholds are interpreted. |
| Enabled modules | Travel |
Comma-separated. Use Travel,Ecommerce to apply across both. |
| Valid from | Today's date, time 00:00. |
|
| Valid to | Today + 30 days, time 23:59. |
|
| Priority | 100 |
Higher number wins when multiple promotions could apply to the same item. Default 100 is fine. |
| Sort order | 10 |
Display order in operator lists. Doesn't affect runtime. |
Step 4 — Set the trigger
In the Trigger card:
Trigger dropdown → select
Automatic.Automatic— applies whenever scope + audience match. Best for time-limited campaigns like this one.PromoCode— requires the customer to enter a code at checkout. Use this for influencer codes or email-only offers.
Leave Promo code empty (only required when trigger =
PromoCode).Minimum order amount — leave blank.
Minimum participants (Travel) — leave blank.
Early-bird days ahead — leave blank.
Usage limit (total) —
200.Per-customer limit —
1(one redemption per signed-in customer).
Step 5 — Define the audience (who qualifies)
In the Audience card:
- Click + Add audience row.
- Type →
Everyone. (For a logged-in-only promo, pickRegisteredCustomers; for a tier-gated promo, pickLoyaltyTierand choose the tier.) - Leave Match value empty when Type is
Everyone.
Note
If you add multiple audience rows, they OR together — a customer matching any row qualifies.
Step 6 — Define the scope (what the discount applies to)
In the Scope card:
Click + Add scope row.
Type →
Product.Match value →
HLB-DAY-01(the product code from your earlier guide).Leave Quantity blank — it applies to any quantity.
Tip
To discount a whole Category instead of one product, use Type
Category with the category slug. To discount all products in a
module, use Type Module with value Travel.
Step 7 — Define the reward (what the customer gets)
In the Reward card:
Click + Add reward.
Type →
PercentOff.Value →
10(interpreted as 10%).Apply to →
Scope(apply to scoped items only — not to the whole order).Leave Max discount blank to allow uncapped percent-off, or set a ceiling (e.g.
50USD) to cap savings per order.
Important
Volume tiers (in the Volume Tiers card below Reward) are an advanced feature for "buy N save X%" pricing. Skip that card for a simple percent- off promotion.
Step 8 — Save and verify
Click Save in the top-right action bar.
On success, you're redirected to the promotion list with a green toast: "Promotion saved." The new row shows Status =
Activeif today is within the validity window.Open the storefront in a new tab and navigate to the Halong Bay product. Expected: a strikethrough on the original price and the discounted price shown next to it, with a "10% off" badge.
Add the product to cart and proceed to checkout. The cart and order summary should both reflect the 10% discount line item.
How to disable or end a promotion early
- Pause without deleting — open the promotion, set Active toggle off, save. Storefront stops applying it within 60 seconds (cache TTL).
- End early permanently — change Valid to to a past timestamp. The promotion remains in the list for audit but no longer applies.
- Delete — from the list, use the row's delete action. Only available if the promotion has zero redemptions.
Common issues
| Symptom | Cause | Fix |
|---|---|---|
| Promotion not applying on storefront | Outside the validity window. | Confirm Valid from ≤ now ≤ Valid to in tenant timezone. |
| Discount applied twice | Two automatic promotions match the same scope. | Adjust Priority — only the highest-priority matching promotion applies. |
| Customer gets "Promo code invalid" | Trigger is PromoCode but Promo code field was left empty. |
Reopen, set the code, save. |
| Usage stuck at zero on dashboard | Counter updates after order is paid, not on add-to-cart. | Wait for an order to complete payment. |
What's next
- (Coming soon) Stack two promotions with explicit priority — see the Volume Tier guide.
- (Coming soon) Schedule a promotion for a future window via Valid from.