xDiscount is on the Shopify App Store. Founding merchants lock in lifetime founder pricing.
Docs

Discounts

Discount Types

How xDiscount's four discount types work, Percentage off, Fixed amount off, Buy X get Y and Free shipping, and how to set each one up.

Choosing a Type

xDiscount has exactly four discount types. You pick one per discount, in the Discount type dropdown on the discount form, and the choice decides which value fields appear underneath it.

Discount typeWhat it takes offBest forExample
Percentage offA percentage of each matching lineSite-wide sales, seasonal promotions, clearing a collection“20% off every mug”
Fixed amount offA set amount off each item on the lineRound-number offers, high-ticket items“$10 off every winter jacket”
Buy X get YA percentage off a gift the shopper addsGift-with-purchase, free-sample offers“Buy a coffee maker, get a filter pack free”
Free shipping100% off the cart’s shippingRemoving the last objection at checkout, shipping promos“Free shipping on all orders containing a bike”

All four apply automatically at checkout, shoppers never enter a code. At checkout the discount is labelled simply xDiscount, on every type, and the amount is printed by Shopify next to it.

xDiscount applies to one-time purchases only. Subscription orders are not discounted, and no type discounts the order total. Discounts land on line items and on shipping.

What Every Discount Has in Common

Whichever type you choose, the form is the same shape. Go to Discounts and click Create discount.

  1. Title: a Name, which only you see. It is how you find the discount later.
  2. Included products: click Browse, or Choose products in the empty state, to open Shopify’s product picker. This is the set the discount attaches to. Pick a product and leave its variants alone and the discount covers every variant, now and in the future. Pick specific variants and the form tells you so, with “1 product is limited to specific variants.”
  3. Discount configuration: the Discount type dropdown above, its value field, Skip products that are out of stock, and Priority, which defaults to 10.
  4. Discount period: an optional Start date and End date. Both are inclusive, both work on their own, and a start equal to the end is a legal one-day sale. Dates follow your store’s timezone, not yours and not the shopper’s.
  5. Conditions: optional Item quantity, Cart value and Inventory rows. Each type can be used once per discount, so three rows is the maximum.
  6. Status, in the right-hand column: Draft, Active or Archived. New discounts start as Draft.
  7. Click Save.

Save as Draft while you build it. A draft is invisible to shoppers and never applies at checkout, so you can leave it half-finished. Only Active discounts count against your plan’s active-discount limit, which is 3 on Free, 25 on Starter and unlimited on Growth and Scale.

Scheduling is not a condition. There is exactly one place to put a discount on a calendar, and that is Discount period. The Condition dropdown offers Item quantity, Cart value and Inventory, and nothing else. A discount you saved before this changed may still carry a read-only Date range (set in Schedule) row, kept so older discounts keep running as they were. Nothing can be switched to that type and a new row can never be one, so to retire it, copy its dates into Discount period, delete the row and save. See Conditions and Rules for the full picture.

Percentage Off

Reach for it when you want the discount to scale with the price of what the shopper bought.

Field: Percentage off, entered as a number with a % suffix. The allowed range is 0 to 100 inclusive. Save anything outside it and you get “Percentage must be between 0 and 100.”

How to set one up:

1

Create the discount

Go to Discounts and click Create discount.

Name it

For example, “Autumn 20%”.

Choose your products

Click Browse under Included products and select your autumn collection’s products.

Set the type and the value

Set Discount type to Percentage off, then set Percentage off to 20.

Publish it

Set Status to Active and click Save.

Worked example. A $50 mug and an $80 kettle are both targeted at 20% off. A shopper buys 2 mugs and 1 kettle.

LinePriceQtyDiscountShopper pays
Mug$50.00220%$80.00
Kettle$80.00120%$64.00

At checkout each line shows an xDiscount line. The percentage is the same number everywhere: the admin, the storefront offer card and checkout all hold it to 0 to 100, so what a shopper is shown and what they are charged cannot drift apart.

Fixed Amount Off

Reach for it when you want a headline number. “$10 off” reads stronger than “13.4% off”.

Field: Amount off, a money field in your store’s currency, entered in whole currency units, so dollars rather than cents.

The one thing to know: the amount comes off each item, not each line. A $10-off discount on a line of 3 takes off $30, not $10.

How to set one up:

1

Create the discount

Go to Discounts and click Create discount.

Name it

For example, “$10 off jackets”.

Choose your products

Click Browse under Included products and select your jackets.

Set the type and the value

Set Discount type to Fixed amount off, then set Amount off to 10.

Publish it

Set Status to Active and click Save.

Worked example. $10 off a $120 jacket, and the shopper buys 2:

LinePriceQtyDiscountShopper pays
Jacket$120.002$10 off each item$220.00

Selling in more than one currency? You enter the amount in your store’s currency, and xDiscount converts it to the shopper’s currency at checkout using Shopify’s own exchange rate, rounded to that currency’s decimal places, so yen and won come out as whole numbers. The storefront offer card has no exchange rate to work with, so whenever the shopper’s cart is in a different currency from your store’s, it shows your figure with your currency code appended, for example “10 USD off”, rather than dressing your number up in the shopper’s symbol. When the cart is in your own currency the card formats it normally.

No rate means no discount

If Shopify does not hand the checkout a usable exchange rate, the fixed-amount discount simply does not apply for that order, rather than applying the wrong number. Percentage discounts are unaffected by this, because a percentage needs no conversion.

Buy X Get Y

This is the type with the most moving parts, so read this section before you build one.

What it actually is: a percentage off a gift the shopper has added to the cart. A Shopify discount function cannot put a product into a cart by itself, so xDiscount does not “add a free item”. The storefront offer card gives the shopper a button that adds the gift, and the discount then takes the configured percentage off it.

Three things must all be true, or nothing happens:

RequirementWhyWhere you set it
A trigger product is in the cartThe trigger line is the proof of purchase. Only products you selected under Included products can trigger the offerIncluded products → Browse
At least one gift product is configuredWithout one there is nothing for the shopper to claimChoose gift products
The storefront offer card is on your product templateIt is the only thing that can add the gift to the cartSettings → Storefront offer card → Add to theme

The form says so itself: “Buy X get Y needs the storefront offer card installed on your theme. A discount cannot add an item to the cart on its own, so the card is what puts the gift there.” The card is included on every plan, Free included, so this is a setup step rather than an upgrade.

The fields

  • Percentage off the gift, from 0 to 100. Enter 100 for a genuinely free gift, and 50 makes it half price.
  • Number of gift items, minimum 1. This is the cap on discounted gift units across the whole cart, and it is also the quantity the gift button adds in a single click.
  • Gift products, chosen with Choose gift products. Until you do, the form warns: “No gift chosen yet, shoppers cannot claim this offer until you pick one.” Once chosen it reads “2 gift products, the shopper picks from these on the product page.”
  • Which variants a gift offers is chosen in the same picker as the discount’s products. Tick a product whole and shoppers choose any of its variants in the gift window on the product page; open the product and tick specific variants to limit the choice to those. The form says what each gift offers — All 4 variants, including any added later or 2 of 4 variants — and checkout only ever discounts a gift variant you allowed, whatever a shopper’s browser claims. Products another active or draft discount covers or gives away are not offered, one discount per product in both directions, but a discount’s own products are: buy two of this, get one of this is allowed and common.

How to set one up:

1

Create the discount

Go to Discounts, click Create discount, and name it “Free filters with a coffee maker”.

Choose the trigger product

Click Browse under Included products and select the Coffee Maker. This is the X.

Set the type

Set Discount type to Buy X get Y.

Set the gift value

Set Percentage off the gift to 100 and Number of gift items to 1.

Choose the gift

Click Choose gift products and select the Filter Pack. This is the Y.

Publish it

Set Status to Active and click Save.

Make sure the card is on your theme

If you have not already, go to Settings, find Storefront offer card and click Add to theme.

Worked example, end to end. The shopper opens the Coffee Maker page. The offer card shows a tile with the discount’s name and Free gift on the right, and under it a Choose your free gift button. They click it, a window lists the Filter Pack with an Add button, they click Add, and one Filter Pack lands in the cart marked as a gift. At checkout:

LinePriceQtyDiscountShopper pays
Coffee Maker$180.001none$180.00
Filter Pack (gift)$14.001100% off 1 unit$0.00

Caps, and what the shopper cannot do

  • Number of gift items is counted across the entire cart, not per line. Set it to 1 and a shopper who raises the gift line to 5 gets one unit discounted and pays for the other four.
  • If the number is missing or unusable, the cap is treated as 1, never as unlimited.
  • The gift is only discounted if it is one of the products you listed under Gift products for that discount. Any other line marked as a gift is ignored.
  • A line marked as a gift never counts as the trigger, so a shopper cannot claim a gift without buying the trigger product.

The gift products themselves need no setup. They do not have to be selected under Included products, and they do not get an offer card of their own. The gift picker only appears on the pages of the trigger products.

Two offers, one gift

If two Buy X get Y discounts are triggered by the same cart and both list the same gift, the one with the lower Priority number decides the percentage and the cap for it. A gift only ever counts against a discount that lists it, so two offers with different gift lists do not collide.

Common ways it goes wrong

SymptomCauseFix
No gift picker on the product pageThe offer card is not on your themeSettings → Storefront offer card → Add to theme
The Storefront offer card section shows Not on your planThe card is on every plan, so this only happens when your subscription is on a plan the app does not recogniseClick Refresh plan under Plans and billing, and tell us if the badge stays
Save is refused with “Choose at least one gift product…”Status is Active with no gift chosenAdd a gift, or set the status back to Draft
“One of your gifts has no variant. Remove it and pick it again.”The stored gift is missing the variant the cart needsClick Clear beside the gift products button, then pick the gift again in the picker
Gift added, but charged in fullThe trigger product is not in the cart, or the discount is outside its Discount period, or a condition is not metCheck Included products, Discount period and Conditions on the discount

Free Shipping

Reach for it when shipping cost is what is stopping the sale.

Fields: none. Choosing Free shipping replaces the value field with a single line: “Shipping is free when this discount applies.”

How to set one up:

1

Create the discount

Go to Discounts, click Create discount, and name it “Free shipping on bikes”.

Choose your products

Click Browse under Included products and select the products that should unlock it.

Set the type

Set Discount type to Free shipping.

Add a condition if you want one

Open Conditions, click Add condition, choose Cart value and set Minimum cart value to 75.

Publish it

Set Status to Active and click Save.

How it behaves at checkout. If any line in the cart carries an eligible free-shipping discount, shipping goes to 100% off, one discount per delivery group the cart has, so a split shipment is free on every part of it. It is a shipping discount rather than a product discount, so it can sit alongside a percentage or fixed-amount discount on the same order.

Worked example. A $75 minimum-cart-value free-shipping discount on bikes: a shopper with a $90 bike sees shipping drop to $0.00, and a shopper with a $60 bike pays the normal rate.

Carts with no delivery at all, meaning digital-only orders and local pickup, have no shipping to discount, so a free-shipping discount does nothing there. That is expected, not a failure.

When Several Discounts Match

  • Only one product discount applies per item. Among the discounts that match a line, the one with the lowest Priority number wins and the rest are ignored for that line. Priority defaults to 10, and a discount saved with no priority is treated as 999.
  • Free shipping is judged separately, so a line can be discounted and the order can still ship free, from two different discounts.
  • Order matters more than you would expect. Because only the single lowest-priority discount is considered for a line, a Free shipping or Buy X get Y discount with a lower priority number than a Percentage off discount on the same product will suppress that percentage. Give your free-shipping and gift discounts a higher priority number than your price discounts on the same products.
Discounts on the same productPriorityResult
Autumn 20% (Percentage off)10Applies, 20% off the line
Free shipping on bikes (Free shipping)20Also applies, shipping goes free
Autumn 20% (Percentage off)20Suppressed on that line
Free shipping on bikes (Free shipping)10Applies, and blocks the 20%

What Happens When Something Is Off

xDiscount is deliberately cautious at checkout: anything it cannot judge with confidence results in no discount, never a guessed one. A date it cannot read, a value it cannot parse, an exchange rate it cannot trust, each of these means the discount quietly does not apply rather than applying the wrong amount. If a discount is not showing up at checkout, that caution is usually the reason, and the Sync state on the Discounts page is the first place to look. See Managing Discounts for what each sync state means.