Promotions are discounts or special offerings that are applied based on what products the customer has in their baskets. If the right conditions are met, one or more effects will be applied. It is important to note that promotions should not be confused with campaigns, which are temporary price reductions for a set of products using price lists.
- Requirement – Defines when the promotion should run (e.g., basket over 500 kr, has items from “Rings”, has flag “Promo").
- Effect – Defines what happens when requirements are met (e.g., 20% off, add a free item, free shipping).
- Stackable – Some promotions can apply multiple times if the requirement is fulfilled more than once (e.g., “Buy 2, get 1” can apply twice if you buy 4).
- Discountable items – Effects ignore freight/invoice fee lines unless explicitly told otherwise.
A promotion in Norce goes through a clear life cycle that helps you control when it’s visible and active for customers.
Think of it like a publishing flow — you can prepare, activate, and later review finished campaigns.
- Draft – Not live. Can be edited safely.
- Active – Evaluated for all baskets; will apply when requirements are met.
- Inactive – Ended or usage limit reached (see Usage limits below).
- Coming / Ended filters in Admin
- Coming = has a future start date.
- Ended = has passed its end date.
Tip: Use the Admin list filters to quickly find what’s live now vs scheduled for later.
Some requirements calculate a Stackable count (how many times they’re fulfilled).
Effects that support stacking will multiply their impact by the lowest stackable count from the matched requirements.
Example:
- Requirement: “Buy 2 from Rings” → you buy 4 → stackable = 2.
- Effect: “Add 1 free Rings item” → you get 2 free items.
Note: Percentage-based effects don’t stack by value (20% × 2 ≠ 40%).
They apply once to the matching scope.
- Allowed usage count – Max total uses across all customers.
- Unique user usage count – Max uses per email address.
When a limit is reached, the promotion automatically becomes Inactive and stops applying.
Trigger a promotion when the basket total is above/between/below a threshold.
You can choose whether the total is calculated including VAT.
Common uses:
- Free shipping above 500 kr.
- 10% off between 1 000–1 999 kr.
Quick setup:
- Choose comparison and enter values
- Above

- Between

- Below

- Above
- Toggle Include VAT when needed.
Note: Freight/Shipping lines are excluded from the sum.
If your store uses multiple currencies, Norce will do currency conversion automatically which can cause unwanted effects and is not recommended
Stackability:
- Above/Between can generate a stackable count (e.g., every 500 kr adds +1 stack).
- Below does not stack.
Match products in the basket by category, manufacturer/brand, flags/attributes, part number, and price list etc.
You can compare by quantity (how many units) or amount (order value of those items).
Please note that the price list requirement implies that this must be the active price list for this particular basket row and not only that the product exists on a specific price list.
Example of usage: A promotion should only be applied if the Standard PriceListId is active on the row
You can define one or more filter rows.
Rows can be combined using AND or OR.
You can also use NOT (with quantity-based filters) to exclude items.
Same filter row
- All conditions on that row must be true for the same single basket item.
- Implication: One product must meet every condition on the row.
- Example: Row says Manufacturer = Apple AND Category = iPod on the same row → a product must be both Apple and in iPod to count.

Different filter rows with AND
- All rows must be matched somewhere in the basket, but not necessarily by the same product.
- Implication: The basket can satisfy Row 1 with one item and Row 2 with another.
- Example: Row 1: Manufacturer = Apple; Row 2: Category = iPod → basket qualifies if it contains any Apple product and any iPod product (could be two different items).

** Different filter rows with OR**
- At least one row must match somewhere in the basket.
- Implication: Very inclusive; any item meeting any row qualifies the requirement.
- Example: Row 1: Manufacturer = Apple OR Row 2: Category = iPod → basket qualifies if it has either an Apple product or any iPod-category product.

Rule of thumb:
- Put conditions on the same row to force them to validate the same single product.
- Split conditions across separate rows to let different products jointly satisfy the requirement.
Quantity = one target for all rows (e.g., “Buy 4 from flag X”).
Filter quantity = set a required quantity on each row (e.g., “Buy 2 from Category A AND 3 from Category B”).

- Turns the requirement into per product counting: each matching SKU must individually meet the quantity.
- Implication: Great for “Buy X of the same item” rules.
- Stacking: computed per SKU and summed.

- Works like quantity filtering but uses order value of the matching items (can include VAT).
- Use when: “Spend 1 000 kr on Rings to unlock …”

Tip: To exclude products, use a quantity filter with NOT (amount-based filters don’t support NOT).
Trigger when the shopper enters a specific code (case-insensitive).
Supports multiple different codes separated by commas at checkout.
Use when: “Use SALE2025 for 20% off”

Upload or generate a list of one-time codes.
The promotion triggers when an unclaimed code from the list is used; the code is then marked claimed. 
Use when:
- Newsletter/personal codes
- Influencer codes
- Loyalty gifts
Stackability:
Each matching unclaimed code contributes 1 stack.
Generating unique codes
Create unique discount codes directly in Norce 
Exporting and importing unique codes
It's possible to import unique codes generated in other systems 
For importing unique codes use this template. Promotion Code Template
Trigger on a customer or company flag (e.g., Wholesale, VIP).
You can also trigger when the flag is not set.

Use when:
- Wholesale customers get 15% off category X.
- VIP companies get free shipping.
You’ll configure these on the Effects tab of a promotion.
- Percentage – Apply X% to valid items in the basket.

- Fixed amount – Subtract a fixed value proportionally split across valid items. Can include/exclude VAT.

- With requirement products – Limit the scope to items that matched the requirement.

Stackability:
Fixed amount can multiply by stackable count. Percentage does not multiply.
If a basket item is a managed structure item, discount will be set on child items as well.
- Percentage – Apply X% to items that match the effect’s product filter.

- Fixed amount – Subtract a fixed value across the matched items.

- Cost plus – Price set as cost + X%/amount for matched items.

- Discount requirement products – Reuse the requirement’s matched items (only those items get discounted; rows may split to reflect different prices).
- Apply X% to freight lines (common: 100% for free shipping).

Adds products directly to the basket as new lines, regardless of what’s already in the basket.
This behaviour ensures predictable and consistent results. 
How it works:
- Always adds a new basket line for the product being added.
- The new line gets its price and discount according to the promotion’s settings.
- No existing basket items are modified or split.
Common use cases:
- “Buy 3, get 1 free.”
- “Add a free gift when basket total exceeds 500 kr.”
Pricing options:
- Fixed price – Set an exact price (e.g., 0 kr for free gift, or 99 kr including VAT).
- Price minus – Reduce the selected price list price by a percentage or amount.
- Cost plus – Set price based on cost + X% or + X kr.
Requirement products:
You can choose to add products that match the requirement (e.g., “Add one of the qualifying products for free”). 
Stackability:
The quantity of added items multiplies with the Stackable count, meaning “Buy 2, get 1” applies twice if 4 are purchased.
Note: front-end support needed
- Presents optional items to the shopper once the requirement is met (e.g., “Choose your free gift”).
- Uses the same pricing options as Add product; can also use requirement products.
