# Discounts

URL: https://docs.sparklayer.io/help/pricing/discounts

Set up B2B discounts in SparkLayer on the Growth plan: money off orders, volume tiers, coupon codes, customer group limits, scheduling and other requirements.

> **Quick summary**
>
> - SparkLayer discounts add promotions on top of your [price lists](https://docs.sparklayer.io/help/pricing/managing-pricing.md): an amount off an order, volume tiers (more off as the quantity goes up), free products and coupon codes. Manage them at **Pricing > Discounts** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/discounts)), or **SparkLayer Wholesale > Pricing > Discounts** in the Shopify app.
> - A discount applies **automatically** when the cart meets its requirements, or when the customer enters a **coupon code**. Limit it by customer group, dates, order sub-total, number of items, uses per customer, excluded customers and currency.
> - Discounts need the **Growth** plan or above, including the Growth trial. On Basic and Starter you can open the screens and fill in a discount, but saving it asks you to start Growth. See [Plan availability](#plan-availability).
> - Use SparkLayer discounts instead of your platform's own: Shopify discounts, BigCommerce promotions and Wix discounts can't be used alongside SparkLayer. See [Compare platforms](https://docs.sparklayer.io/help/platforms/compare.md).

Discounts sit on top of price lists, so you can run a promotion without changing anyone's prices. To try them as a customer, sign in to our [B2B demo store](https://demo.sparklayer.io/pages/b2b-login-register), add some products to your cart and use the coupon code `SAVE10`. New to SparkLayer? [Speak to our team](https://www.sparklayer.io/?demo#contact).

## How discounts work

Every discount has three parts:

- **A type and reward:** what the customer gets, such as 20% off the order or 5% off 24 or more units.
- **Requirements:** who qualifies and when, such as a customer group, a date range, a minimum spend or a coupon code.
- **How it's applied:** automatically, or when the customer enters a coupon code.

How a discount is applied to an order:

1. **Customer builds a cart**: Signed in, with their B2B prices
2. **Requirements checked**: Group, dates, coupon, order limits
3. **Reward applied**: To the net sub-total, before tax and shipping
4. **Order placed**: With the discount details saved on the order

| How it's applied | What happens |
| --- | --- |
| **Automatic** | SparkLayer applies the discount when the order meets the requirements you've set, for example spend over $1,000 and get $100 off. |
| **Coupon code** | SparkLayer applies the discount when the customer enters a coupon code in the [My Cart Interface](https://docs.sparklayer.io/help/storefront/interfaces/my-cart.md). See [Cart and checkout](https://docs.sparklayer.io/help/ordering/cart-and-checkout.md) for what you can customise. |

### What a discount is calculated on

An amount off an order comes off the order's **sub-total**, which is net of tax and excludes shipping. For example, if the sub-total is $200.00 and the discount is $100 off, the cart shows "Discounts applied -$100". Tax is calculated in the final step of checkout.

Discounts apply whichever payment method the customer chooses.

### How many discounts apply to an order

By default, only one discount applies to an order. To let a discount be used alongside others, turn on its **Compatible discounts** requirement (see [Allow discounts to be combined](#allow-discounts-to-be-combined)).

## Discount types

Each discount has one type, which decides the reward the customer gets.

| Type | What it gives |
| --- | --- |
| **Give an amount off an order** | A percentage or fixed amount off the order's sub-total. This is the default. |
| **Give a free product** | Adds a product to the order at no cost. |
| **Give a percentage off products** | A percentage off specific products. |
| **Give a shipping reward** | Money off shipping, or a fixed shipping charge. Only available if you use SparkLayer [shipping rules](https://docs.sparklayer.io/help/ordering/shipping-rules.md). |
| **Advanced requirements and rewards** | For example volume tiers: more off as the quantity goes up. |
| **Advanced free products** | One or more free products when the cart meets requirements you set, such as "buy one get one free". |

## Create a discount

1. Go to **Pricing > Discounts** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/discounts)), or **SparkLayer Wholesale > Pricing > Discounts** in the Shopify app and click **Create discount**, or click a ready-made discount to start from it.
2. Under **Summary**, leave **Enable this discount** on.
3. Enter a **Discount internal name** (for you), a **Discount handle (or ID)** (a short unique ID, such as `vip-20-off`) and a **Discount public name** (what customers see). See [Summary settings](#summary-settings).
4. Under **Type**, choose a discount type. The **Reward** card changes to match.
5. Set up the reward. See the section for your type below.
6. Under **Requirements**, tick any requirements you need, such as **Coupon codes** or **Customer groups**. See [Limit who can use a discount and when](#limit-who-can-use-a-discount-and-when).
7. Click **Save** in the save bar.

To change a discount later, click its name at **Pricing > Discounts** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/discounts)), or **SparkLayer Wholesale > Pricing > Discounts** in the Shopify app, make your changes and click **Save**.

### Summary settings

| Setting | What it does |
| --- | --- |
| **Enable this discount** | Turns the discount on or off. A discount is only active when it's enabled and today falls within its schedule. |
| **Discount internal name** | A name for your own use. Only visible to you. |
| **Discount handle (or ID)** | Identifies the discount when an order is placed. It appears in the order's discount data (`discountSlugs`). |
| **Discount public name** | Shown to buyers when the discount applies to their order, for example "20% off your first B2B order". |

To show customers a longer description under the public name, your developer can add one: see [Show customers a description](#show-customers-a-description).

## Give an amount off an order

1. Create a discount and choose **Give an amount off an order** under **Type**.
2. Under **Reward**, choose **Percentage discount (e.g. 10% off)** or **Fixed amount discount (e.g. US$100 off)**.
3. Enter the **Percentage off** (between 1 and 100) or the **Amount off**.

The reward is applied to the order's sub-total, excluding tax and shipping ("net"). For a fixed amount, check the [currency requirement](#set-the-discount-currency).

## Set up volume tiers

Volume tiers give more off as the quantity goes up, for example 5% off 24 or more units and 10% off 96 or more.

1. Create a discount and choose **Advanced requirements and rewards** under **Type**.
2. Under **Reward**, set the first tier's **Minimum units** and **Discount** percentage. It starts at 24+ units and 5%.
3. Click **Add tier** for each further tier, and use the bin icon to remove one.

On the **Discounts** screen, these show with the type **Volume tiers**. To combine them with quantity pricing and pack sizes, follow [Run volume pricing and promotions for trade customers](https://docs.sparklayer.io/help/guides/volume-discounts.md).

## Give a free product, products off or a shipping reward

Set up these types the same way: choose the type under **Type**, then set up the reward.

| Type | What you set |
| --- | --- |
| **Give a free product** | The SKU of the product to add to the cart at no cost. It must be a valid SKU, and a different product from those already in the order. |
| **Give a percentage off products** | The SKUs to discount, and the percentage off each. |
| **Give a shipping reward** | The shipping method, and a percentage off, a fixed amount off, or a fixed charge. The amount is net of tax. |
| **Advanced free products** | The requirements the cart must meet, the free products and quantities, and whether they're added once, every time the requirements are met, or up to a limit. |

## Restrict a discount to certain products

Use a rule for a collection discount, or a discount on a product range or category. Under **Rules**, click **New rule** to add the products, collections or tags the cart must include before the discount applies.

For a tag-based discount, give every product in the range the same tag in your store, such as `dog-toy`, and choose that tag in the rule. This works for a range that isn't a collection.

## Limit who can use a discount and when

Requirements decide who gets a discount and when. A discount only applies when every requirement you've turned on is met.

The **Requirements** card lists 9 requirements, with a count of how many are on. Tick a requirement to turn it on, then set it up underneath.

| Requirement | Description on screen | Settings |
| --- | --- | --- |
| **Coupon codes** | Require a coupon code to use this discount | **Add a coupon code**, then **Add coupon** |
| **Customer groups** | Limit discount to specific customer groups | The **Customer groups** to include |
| **Scheduling** | Limit the discount to a specific date range | **Start date** and **Expiry date (optional)** |
| **Order sub-total limits** | Require a minimum or maximum order sub-total | **Minimum order sub-total** and **Maximum order sub-total** |
| **Order item limits** | Require a minimum or maximum number of items | **How to count the order**, **Require at least** and **Up to** |
| **Usage limits** | Limit number of uses per customer | **Maximum uses per customer** |
| **Exclude customers** | Exclude specific customers from this discount | The **Excluded customers** |
| **Compatible discounts** | Let this discount be used alongside others | The discounts it **Can be used with** |
| **Currency** | The buyer must be ordering in a specific currency | The **Currency** |

### Require a coupon code

A coupon code makes a discount manual: it isn't applied until the customer enters the code.

1. Tick **Coupon codes**.
2. Enter the code under **Add a coupon code** and click **Add coupon**. Add more codes the same way. Click **×** on a code to remove it.

With a coupon, the customer clicks **Discounts & codes** in the cart or the **Order Summary**, enters the code and clicks **Apply** (see [My Cart](https://docs.sparklayer.io/help/storefront/interfaces/my-cart.md#discounts-and-promotions)). When the order reaches your store, the coupon codes used are in the order's additional notes (see [See discount details on an order](#see-discount-details-on-an-order)).

- Coupon codes are saved in capitals. For example, `Code-Abc` is saved as `CODE-ABC`.
- You can save several coupon codes against one discount, for example `CODE-ABC` and `CODE-123`, to promote the same discount in different places.
- The [My Cart Interface](https://docs.sparklayer.io/help/storefront/interfaces/my-cart.md) accepts up to 3 coupon codes per order. If a customer has 3 coupons applied and adds a 4th, the 4th isn't applied.

### Limit a discount to customer groups

By default, a discount applies to all customers. To restrict it to some [customer groups](https://docs.sparklayer.io/help/customers/customer-groups.md):

1. Tick **Customer groups**.
2. Tick one or more groups. Only these groups get the discount.

To apply the discount to everyone again, untick **Customer groups**.

### Schedule a discount

1. Tick **Scheduling**.
2. Choose a **Start date** and, if the discount should end, an **Expiry date (optional)**, each with a time.

- The dates use the time zone shown under them, for example Europe/London. For customers in another time zone, adjust the dates and times to match.
- A time of `00:00` means the start of the selected date, and `23:59` the end.

### Set minimum or maximum order requirements

**Order sub-total limits** set the spend needed to qualify, for example spend over $400 and get 5% off.

1. Tick **Order sub-total limits**.
2. Enter a **Minimum order sub-total**, a **Maximum order sub-total**, or both.

The discount applies when the order's sub-total (net of tax and shipping) is between these amounts. A maximum of 100 covers orders up to 99.99.

**Order item limits** set how many items the order must contain.

1. Tick **Order item limits**.
2. Under **How to count the order**, choose an option (see below).
3. Enter **Require at least**, **Up to**, or both.

| Option | What it counts | Example: 1 Red Shoe, 5 Blue Shoes, 4 Green Shoes |
| --- | --- | --- |
| **Quantity across all line items** | The total quantity of items across all products. | 10 |
| **Number of line items** | The number of different items (lines) in the order. | 3 |

### Limit uses per customer

1. Tick **Usage limits**.
2. Enter the **Maximum uses per customer**, for example `1` for a one-time discount.

Once a customer has used the discount this many times, it stops applying to their orders.

### Exclude customers

1. Tick **Exclude customers**.
2. Under **Excluded customers**, tick the customers who should never get this discount. Each is listed by name and company.

### Set the discount currency

If you have price lists in several currencies, you can limit a discount to one of them.

1. Tick **Currency**.
2. Choose the **Currency**, for example **GBP**.

The customer must be ordering in this currency for the discount to apply.

### Allow discounts to be combined

1. Tick **Compatible discounts**.
2. Under **Can be used with**, tick the discounts that can be used alongside this one in the same order. If you don't tick any, it can be combined with any discount.

Once your discounts are live, you manage them from the **Discounts** screen.

## The Discounts screen

**Pricing > Discounts** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/discounts)), or **SparkLayer Wholesale > Pricing > Discounts** in the Shopify app lists your discounts, with **Create discount** at the top.

| Column | What it shows |
| --- | --- |
| **Discount** | The discount's name, with a short description underneath, such as "Code TRADE10: 10% off" or "24+ units: 5% off, 96+ units: 10% off". Click it to edit the discount. |
| **Type** | **Order discount**, **Volume tiers** or **Coupon code**. |
| **Customer groups** | The groups the discount is limited to, or **All**. |
| **Status** | **Active** or **Paused**. |
| **Uses** | How many times the discount has been used. |

With no discounts yet, the screen offers two ready-made discounts you can edit before saving: **20% off with coupon code 20-OFF** and **$100 off orders over $1,000**.

## Pause or delete a discount

To stop a discount for now, pause it; to remove it for good, delete it. Open the discount from **Pricing > Discounts** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/discounts)), or **SparkLayer Wholesale > Pricing > Discounts** in the Shopify app and use **More actions** at the top of the page:

| Action | What happens |
| --- | --- |
| **Pause discount** | Stops the discount applying. Its status changes to **Paused**. Click **Turn on discount** to start it again. |
| **Delete discount** | Buyers stop getting it straight away. Orders that already used it keep their discount. This can't be undone. Confirm with **Delete discount**. |

## See discount details on an order

When a customer uses a discount, SparkLayer saves details of it on the order:

- The coupon codes applied.
- The handles (IDs) of the discounts applied.
- The order's value before the discount.
- The amount taken off by the discount.

All amounts are in the currency the customer ordered in.

**Shopify:**

The details are in the **Additional details** section of the Shopify order. You'll see:

- **B2B Discount Coupon Codes**: a comma-separated list of the coupon codes used, kept separate so you can see it at a glance.
- `sparkDiscountData`: the rest of the discount data, including the SKUs ordered, net pricing and the internal ID of the discount.

**Discount data for your developer**

In the Shopify API, the details are in `note_attributes`, and the discount data is a JSON string. For example:

```json
{"subTotalPreDiscount":{"net":"10.00"},"subTotalDiscount":{"net":"5.00"},"lineItemDiscounts":[{"preDiscount":{"net":"10.00"},"discount":{"net":"5.00"},"sku":"t-shirt","itemKey":"73199196ee530866c9a5db11f50c1442"}],"discountSlugs":["50-off"]}
```

To read this data with code, use the Shopify API (see the [Shopify Order API reference](https://shopify.dev/docs/api/admin-rest/latest/resources/order)).

**BigCommerce:**

The details are in the **Staff Notes** of the BigCommerce order. SparkLayer adds two lines to the notes of each order with a discount:

- **B2B Discount Coupon Codes**: a comma-separated list of the coupon codes used, kept separate so you can see it at a glance.
- **B2B Discount Data**: the rest of the discount data, as a JSON string.

To see them, go to **Orders** in your BigCommerce admin, click the three dots under **Action** next to the order, then click **View notes**.

To read this data with code, use the BigCommerce API (see the [BigCommerce Orders API reference](https://developer.bigcommerce.com/docs/rest-management/orders)).

**Other platforms:**

See the [SparkLayer developer docs](https://docs.sparklayer.io/developers.md) for how discount data is stored.

## Report on discount usage

SparkLayer doesn't have built-in reporting on discount usage.

**Shopify only:**

On Shopify, use [Shopify Flow](https://apps.shopify.com/flow), Shopify's automation tool, to tag orders that use a discount and then report on those tags. Download our [example Shopify flow](https://cdn.shopify.com/s/files/1/0612/7602/9065/files/Tag_B2B_order_with_discount_if_used.flow?v=1723118334) and edit it to match your discounts. It works like this:

1. **An order is created** by the customer (for example a draft order). The flow starts on **Draft order created**.
2. **The flow checks for a discount** by looking at the **B2B Discount Data** field on the order (shown under **Additional details** in Shopify). It checks that a custom attribute key equals "B2B Discount Data" **and** its value includes a specific discount ID from `discountSlugs`, for example `free-product-test`.
3. **The flow tags the order**, for example with `b2b-free-product-test`, using **Add draft order tags**.
4. **You report on the tag**: filter the [Orders section](https://admin.shopify.com/store/orders?tag=b2b-discount-id) by the tag, or use the [Analytics section](https://admin.shopify.com/store/dashboards) in Shopify.

To find a discount's ID, edit the discount in SparkLayer and look at **Discount handle (or ID)**.

## Limitations

| Item | Limitation |
| --- | --- |
| **Combining discounts** | By default, a customer can only apply one discount to an order. Use [Compatible discounts](#allow-discounts-to-be-combined) to let discounts be used together. |
| **Payment-specific discounts** | You can't base a discount on the payment method, for example $10 off if the customer pays by card. |
| **Discounts from a URL** | You can't apply a discount from a link, for example $100 off for visiting `mystore.com/?discount=ABC`. |
| **Platform discounts** | Your platform's own discounts can't be used alongside SparkLayer (see [Compare platforms](https://docs.sparklayer.io/help/platforms/compare.md)). |

## Plan availability

Discounts are part of the **Growth** plan and above, including the 14-day Growth trial. Every discount type and requirement is included. See [Plans and features](https://docs.sparklayer.io/help/plans-and-features.md) and [SparkLayer pricing](https://www.sparklayer.io/pricing/).

On Basic and Starter:

- The **Discounts** screen shows **B2B discounts are part of Growth**. Click **Try Growth free** to start a trial.
- You can still open **Create discount** and fill it in. When you save, **Advanced discounts** opens: click **Try Growth free for 14 days** to start a trial and keep your discount, or **Book a 15-min demo**.

See [Your plan and usage](https://docs.sparklayer.io/help/dashboard/plan-and-features.md) for how trials work.

## For developers

These changes are made in your SparkLayer Core Script, so they're usually done by your developer or agency. You don't need them to set up or run discounts.

### Show customers a description

A discount description can be shown to customers when a discount is applied to their order, under its public name. For example: "For this month only, all customers will get 20% off their first order!" Add a language string of `discount.[handle].description` to your [Core Script](https://docs.sparklayer.io/help/storefront/storefront-options.md#add-a-core-script-setting), replacing `[handle]` with the discount's **Discount handle (or ID)**. See [Languages and international](https://docs.sparklayer.io/help/storefront/languages-and-international.md) for how language strings work.

```javascript title="Core Script"
/* [handle] should be replaced with the discount's handle,
shown in the discount's Summary card. */
translations: {
  en: {
    "discount.[handle].description": "Include a description here",
  }
},
```

### Change the cart text

To change the discount text customers see in the [My Cart Interface](https://docs.sparklayer.io/help/storefront/interfaces/my-cart.md), such as the coupon field's placeholder or the success message, add these language strings to your [Core Script](https://docs.sparklayer.io/help/storefront/storefront-options.md#add-a-core-script-setting) and edit the values. See [Languages and international](https://docs.sparklayer.io/help/storefront/languages-and-international.md).

```javascript title="Core Script"
translations: {
  en: {
     "cart.checkout.coupons.apply": "Apply",
     "cart.checkout.coupons.input-placeholder": "Enter discount code here and click 'Apply'",
     "cart.checkout.coupons.not-found": "Discount code ''{couponCode}'' not found",
     "cart.checkout.coupons.already-applied": "Discount code ''{couponCode}'' already applied",
     "cart.checkout.coupons.successful-apply": "You've successfully added discount code ''{couponCode}''!",
     "cart.checkout.coupons.max-reached": "You can only add a maximum of 3 discount codes",
     "cart.checkout.discount.cta": "Enter a discount here or view discounts",
     "cart.checkout.discount.success-message": "Discounts have successfully been applied to your order",
     "cart.checkout.discount.totals-row-text": "Discounts Applied",
     "cart.checkout.discount.no-of-discounts-applied": "{numberOf} {numberOf, plural, =1 {discount applied} other {discounts applied}}"
  }
},  
```

## Troubleshooting and FAQs

**I don't see the discount coupon box on the checkout**

The coupon field ("Enter discount code here and click 'Apply'") only shows to customers when there's an active, enabled discount that uses a coupon code. Check your discounts at **Pricing > Discounts** in the SparkLayer Dashboard ([open](https://app.sparklayer.io/discounts)), or **SparkLayer Wholesale > Pricing > Discounts** in the Shopify app: the discount's **Status** should be **Active**, with **Enable this discount** on and a coupon code added.

**How do I see discount details on an order in my store?**

When a customer uses a discount, details are saved on the order in your store (for example Shopify or BigCommerce). See [See discount details on an order](#see-discount-details-on-an-order).

**Why wasn't a discount applied to an order?**

Check that:

- The discount is **Active**, not **Paused**, and **Enable this discount** is on.
- Today falls within its **Scheduling** dates, if it has them.
- The customer meets **every requirement** you've turned on: customer group, sub-total, items, usage and currency.
- The customer isn't in the **Excluded customers** list.
- The customer hasn't already applied another discount that it isn't **compatible** with.

**Will my B2B customers get my Shopify discount codes?**

No. Shopify discount codes and automatic discounts don't apply to orders placed through SparkLayer. Create the discounts you want B2B customers to get here, in SparkLayer. To keep a SparkLayer discount from particular customers, use the [Exclude customers](#exclude-customers) requirement. It's only available on SparkLayer discounts.

**Why isn't my free shipping discount applying?**

Check that:

- The discount **names the shipping method** the customer chose. A shipping reward only applies to the methods it names. If you have a method for each region, select each one, or create one discount per region.
- The customer is in one of the discount's **customer groups**, if you've limited it.
- The order meets the **minimum order sub-total**. The threshold is in the currency of the customer's price list: a minimum of 500 means £500 for a customer whose price list is in GBP.

To test it, [place a test order](https://docs.sparklayer.io/help/get-started/launching.md#place-a-test-order) as the customer.

**Why can't I save a discount?**

- On Basic or Starter, saving opens **Advanced discounts**, because discounts need the Growth plan. See [Plan availability](#plan-availability).
- A message under a field tells you what's missing, such as "Give the discount an internal name", "Add a coupon code, or untick Coupon codes" or "Pick at least one customer group, or untick Customer groups".

**Can I discount a whole collection or product range?**

Yes. Add a rule under **Rules** with the collection, or with a tag that every product in the range shares. See [Restrict a discount to certain products](#restrict-a-discount-to-certain-products). For more off as the quantity goes up, use [volume tiers](#set-up-volume-tiers).

**How should I inform my customers about discounts?**

| Method | Details |
| --- | --- |
| **Email** | Send B2B customers emails about the discount codes, their benefits and how to use them. |
| **Website banner** | Show a banner on your homepage or relevant pages announcing the discount codes. |
| **Order confirmation** | Add a note to order confirmation emails or invoices reminding customers of codes for future orders. |
| **Sales reps** | Make sure your sales team tells B2B customers about discount codes when they talk to them. |
| **Printed materials** | Include discount codes in printed B2B marketing materials. |
