Discounts
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 (opens in a new tab), add some products to your cart and use the coupon code SAVE10. New to SparkLayer? Speak to our team (opens in a new tab).
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.
Customer builds a cart
Requirements checked
Reward applied
Order placed
| 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. See Cart and checkout 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. On Shopify, to give a discount for one payment method, add a payment method rule. Those discounts apply after all your other discounts, whatever their Can be used with setting.
How many discounts apply to an order
By default, only one discount applies to an order. If several qualify, the one highest in your priority order applies. To change the order, go to Pricing,Discounts (opens in your SparkLayer Dashboard in a new tab), click Manage priorities, move the discounts and click Save. The button shows once you have 2 or more discounts. To let a discount be used alongside others, turn on its Compatible discounts requirement (see 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. |
| Advanced requirements and rewards | One or more rewards when the cart matches filters you set on SKUs or product data. |
| 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
Pricing > Discounts
Walk through a working copy of Pricing > Discounts, step by step. Nothing you do here changes your store.
- Go to Pricing,Discounts (opens in your SparkLayer Dashboard in a new tab) and click Create discount, or click a ready-made discount to start from it.
- Under Summary, leave Enable this discount on.
- 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. - Under Type, choose a discount type. The Reward card changes to match.
- Set up the reward. See the section for your type below.
- Under Requirements, tick any requirements you need, such as Coupon codes or Customer groups. See Limit who can use a discount and when.
- Click Save in the save bar.
To change a discount later, click its name at Pricing,Discounts (opens in your SparkLayer Dashboard in a new tab), 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.
Give an amount off an order
- Create a discount and choose Give an amount off an order under Type.
- Under Reward, choose Percentage discount (e.g. 10% off) or Fixed amount discount (e.g. US$100 off).
- 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 up volume tiers
Volume tiers give more off as the quantity goes up, for example 5% off 24 to 95 units and 10% off 96 or more. A discount has one reward level and one threshold, so each tier is its own discount.
To count every item in the order (Starter plan and above):
- Create a discount and choose Give an amount off an order under Type.
- Under Reward, choose Percentage discount (e.g. 10% off) and enter the Percentage off, for example
5. - Under Requirements, tick Order item limits and choose Quantity across all line items.
- Enter
24in Require at least and96in Up to. Up to isn't included, so this covers 24 to 95 units. - Save the discount, then create one for the next tier:
10in Percentage off,96in Require at least and nothing in Up to.
The ranges meet, so only one tier applies to an order. The percentage comes off the whole order.
To count and discount only some products, set the threshold on the products instead:
- Up to 10 SKUs (Growth plan): Choose Give a percentage off products and add each SKU with its Percentage off. Under Rules, click New, add the SKUs and enter the Required quantity across all SKUs.
- A product range (Pro plan): Choose Advanced requirements and rewards. Under Advanced requirements, click Add, choose a field such as Shopify Tags with Equals, enter the tag and the Quantity. Under Advanced rewards, click Requirements and enter the Percentage off. The reward covers every unit that matches the filter.
Click Save on each rule, filter or reward before you save the discount. These thresholds have no upper limit, so an order of 96 units qualifies for the 24+ tier and the 96+ tier, and only one applies. Put the biggest tier first with Manage priorities: see How many discounts apply to an order.
A tier counts units across every product the discount covers, not per product. For tiers that count each product on its own, and that show on product pages, use quantity pricing in a price list. To combine discounts with quantity pricing and pack sizes, follow Run volume pricing and promotions for trade customers.
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. It also needs a price on the customer's price lists, or it shows as Unavailable. |
| Give a percentage off products | The SKUs to discount, and the percentage off each, up to 25 SKUs. You add them one at a time: there's no CSV import. For more products, use Advanced requirements and rewards (Pro plan) or a price list. |
| 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 requirements and rewards | Under Advanced requirements, the filters the cart must match, on SKU or a product field, each with a Quantity. Under Advanced rewards, add Subtotal, Shipping, Requirements (the products that match the filters) or Cart lines rewards. With 2 or more rewards, choose whether to apply them all, or only the lowest or highest value. |
| 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 to require certain SKUs in the order (Growth plan and above). Under Rules, click New, add up to 10 SKUs, enter the Required quantity across all SKUs and click Save. A discount can have up to 10 rules, and the order must meet all of them. A rule decides whether the discount applies, not which products it takes money off: to discount only those products, use Give a percentage off products.
For a product range or category, use Advanced requirements and rewards (Pro plan). Give every product in the range the same tag in your store, such as dog-toy, and filter on Shopify Tags, or filter on Shopify Vendor. Wix has Wix Tags and Wix Vendor, and BigCommerce has fields such as BigCommerce Brand ID and BigCommerce Category IDs. On Magento and WooCommerce, filter on SKU. Discounts can't match collections, so tag the products instead.
A tag filter has no limit on how many products it covers. For a fixed lower price on many products, a price list is usually simpler: it has no SKU limit, takes a CSV upload, and shows the price on product pages.
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 8 requirements, plus Currency when the discount needs it. 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 order quantities should be determined, 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 customer must be placing an order in the selected currency. | The Currency. Shown only for a fixed amount or sub-total limits, and always on. See Set the discount currency |
Require a coupon code
A coupon code makes a discount manual: it isn't applied until the customer enters the code.
- Tick Coupon codes.
- 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). When the order reaches your store, the coupon codes used are in the order's additional notes (see See discount details on an order).
- Coupon codes are saved in capitals. For example,
Code-Abcis saved asCODE-ABC. - You can save several coupon codes against one discount, for example
CODE-ABCandCODE-123, to promote the same discount in different places. - The My Cart Interface 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:
- Tick Customer groups.
- Tick one or more groups. Only these groups get the discount.
To apply the discount to everyone again, untick Customer groups.
Schedule a discount
- Tick Scheduling.
- 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:00means the start of the selected date, and23:59the 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.
- Tick Order sub-total limits.
- 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.
The amounts aren't converted between currencies. A discount with sub-total limits belongs to one currency, and only applies to customers ordering in it. If you sell in more than one currency, create one discount for each.
To give more off bigger orders without the discounts overlapping, make the ranges meet. For example, 1.5% off with a minimum of 5,000 and a maximum of 10,000, then 3.5% off with a minimum of 10,000. There's no setting to apply only the highest discount.
Order item limits set how many items the order must contain.
- Tick Order item limits.
- Under How order quantities should be determined, choose an option (see below).
- 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
- Tick Usage limits.
- Enter the Maximum uses per customer, for example
1for a one-time discount.
Once a customer has used the discount this many times, it stops applying to their orders.
Exclude customers
- Tick Exclude customers.
- Under Excluded customers, tick the customers who should never get this discount. Each is listed by name and company.
Set the discount currency
A discount with a fixed amount or sub-total limits belongs to one currency. Currency appears under Requirements automatically, is always on, and starts on your store's currency.
- Under Currency, choose the currency, for example GBP.
The discount only applies to customers ordering in this currency. If you sell in several currencies, create one discount for each.
A percentage discount with no sub-total limits has no Currency requirement, so it applies in every currency.
Allow discounts to be combined
- Tick Compatible discounts.
- 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 (opens in your SparkLayer Dashboard in a new tab) 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". Click it to edit the discount. |
| Type | The discount's type, such as Give an amount off an order. |
| 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 (opens in your SparkLayer Dashboard in a new tab) 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.
On the Shopify order, a SparkLayer discount shows as lower line item prices, not as a separate order-level discount.
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.
- B2B Discount Data: 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:
{"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 (opens in a new tab)).
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 (opens in a new tab)).
See the SparkLayer developer docs 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 (opens in a new tab), Shopify's automation tool, to tag orders that use a discount and then report on those tags. Download our example Shopify flow (opens in a new tab) and edit it to match your discounts. It works like this:
- An order is created by the customer (for example a draft order). The flow starts on Draft order created.
- 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 examplefree-product-test. - The flow tags the order, for example with
b2b-free-product-test, using Add draft order tags. - You report on the tag: filter the Orders section (opens in a new tab) by the tag, or use the Analytics section (opens in a new tab) 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 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). |
| Number of discounts | Up to 100 discounts in your account, and up to 25 applied to one cart. |
| SKUs in a discount | Up to 25 SKUs in a discount that lists SKUs, and up to 10 in a rule. Use Advanced requirements and rewards (Pro plan) with a tag filter for more. |
Plan availability
Discounts start on the Starter plan. See Plans and features and SparkLayer pricing (opens in a new tab).
| Plan | What it adds |
|---|---|
| Starter | Give an amount off an order, with Coupon codes, Customer groups, Scheduling, Order sub-total limits and Order item limits. |
| Growth | Give a free product, Give a percentage off products, Give a shipping reward, Rules, Usage limits, Exclude customers and Compatible discounts. |
| Pro | Advanced requirements and rewards and Advanced free products, including filters on product tags and vendors. |
If your plan doesn't include something:
- On Basic, the Discounts screen shows Reward bigger orders with a button to start Starter, and there's no Create discount.
- On Starter and Growth, a type that needs a higher plan is greyed out with Upgrade to Growth or Upgrade to Pro.
- On Starter, Rules, Usage limits, Exclude customers and Compatible discounts show the plans that include them, with an upgrade button.
See Your plan and usage 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, replacing [handle] with the discount's Discount handle (or ID). See Languages and international for how language strings work.
/* [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",
}
},<!-- SparkLayer Core Script: in your theme, just before </head>.
Already have window.sparkOptions? Add just the setting to it. -->
<script>
window.sparkOptions = {
/* [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",
}
},
};
</script>Change the cart text
To change the discount text customers see in the My Cart Interface, such as the coupon field's placeholder or the success message, add these language strings to your Core Script and edit the values. See Languages and international.
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}}"
}
}, <!-- SparkLayer Core Script: in your theme, just before </head>.
Already have window.sparkOptions? Add just the setting to it. -->
<script>
window.sparkOptions = {
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}}"
}
},
};
</script>Troubleshooting and FAQs
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 (opens in your SparkLayer Dashboard in a new tab): the discount's Status should be Active, with Enable this discount on and a coupon code added.
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.
No. On Shopify, SparkLayer discounts, including an amount off the order, are applied to the line items, so the order shows lower line prices. If your ERP or accounting system needs full-price lines and one order discount, it can rebuild them from the order's B2B Discount Data: lineItemDiscounts has each line's price before the discount and the amount taken off, and subTotalPreDiscount and subTotalDiscount have the order's totals. See See discount details on 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.
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 requirement. It's only available on SparkLayer discounts.
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 customer is ordering in the discount's Currency. A discount with a fixed amount or sub-total limits only applies in its own currency, so create one for each currency you sell in.
To test it, place a test order as the customer.
- A type or requirement you can't choose needs a higher plan. See Plan availability.
- If you see "Please save or cancel any open requirements or rewards before saving the discount.", click Save on the open rule, filter or reward first.
- 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".
Not by collection, because discounts can't match collections. For a product range, give the products a shared tag and filter on it with Advanced requirements and rewards (Pro plan), or list up to 10 SKUs in a rule (Growth plan). See Restrict a discount to certain products. For more off as the quantity goes up, see Set up volume tiers.
No. A discount always applies on top of the price the customer's price lists give them, including quantity price breaks and automatic percentage lists. Compatible discounts only controls which discounts combine with each other, not with price lists. For example, a 10% discount on a product that costs 95 on a customer's "5% off" list takes it to 85.50.
To give everyone the same sale price, put the products in a price list at the sale price and place it first in each customer group's price lists. See Which price list wins.
No. A free product discount adds the SKUs you set in its reward, so customers can't pick a variant, and rewards can only be SKUs, not tags or collections. To offer a choice, create a free product discount for each variant with its own coupon code, and the customer enters the code for the one they want.
No. Ask Sparkie works with price lists and customer groups. Set up discounts on the Create discount screen.
| Method | Details |
|---|---|
| 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. |
Last updated