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

Get Started

Getting Started

Install xDiscount, create your first automatic discount, publish it and add the offer card to your theme, with a Setup guide that checks each step.

Introduction

Welcome to xDiscount

xDiscount is a Shopify app that runs automatic discounts on your store. Shoppers never type a code. The discount is applied for them at checkout, and it can also be shown on your product pages before they get there.

What you can do with xDiscount:

  • Discount the products you choose: pick whole products, or drill into specific variants, straight from Shopify’s own product picker
  • Use four discount types: Percentage off, Fixed amount off, Buy X get Y and Free shipping. See the Discount Types guide for the details of each
  • Attach conditions: Item quantity, Cart value and Inventory, each with a minimum, a maximum, or both, and each usable once per discount
  • Schedule them: a start date, an end date, or neither, following your store’s timezone. Dates live in the discount’s own Discount period section, not in a condition
  • Show the offer on product pages: the xDiscount offer card displays the live offer, reading the exact same configuration checkout reads
  • Track what it did: a Performance strip on Home, an analytics screen with a metric chart and a day-by-day table, and an order field Shopify’s own reports can group by
  • Let an AI assistant help: connect your own assistant so it can draft discounts for you, on every plan

Who is xDiscount for?

Any Shopify merchant who wants promotions that apply themselves. There is nothing to code and nothing for shoppers to remember. If you sell one product or ten thousand, the setup is the same: choose products, choose an amount, publish.

How xDiscount works with your store

Every discount you create is written into your store as configuration that two things read: the discount logic that runs at checkout, and the offer card on your product page. Because both read the same thing, what a shopper is shown and what a shopper is charged cannot drift apart.

xDiscount discounts individual products and shipping. It does not create order-level discounts, and only one xDiscount product discount applies per item, the one with the lowest priority number wins.

Installing xDiscount

Step 1: Install the app

Install xDiscount from the Shopify App Store and approve the permissions. Once it is installed, open it from the Apps section of your Shopify admin. The app opens on Home, headed xDiscount.

Installation happens by itself and takes a moment. Behind the scenes xDiscount:

  1. Prepares the place your discount configuration is stored on your products
  2. Registers an automatic discount in your Shopify admin. You will see it under Discounts in Shopify, titled xDiscount. This is the entry point Shopify uses to run your offers, so leave it in place
  3. Installs the analytics pixel that counts product views, add-to-carts and completed checkouts
  4. Adds an order field Shopify’s own analytics can group by, so xDiscount orders can be sliced out in your native sales reports

Leave the xDiscount entry alone

Do not delete the xDiscount entry in your Shopify Discounts list. It is not a discount you configure there, it is the hook that lets every discount you build in the app run at checkout.

Only the first two are critical: they are what makes discounts apply at checkout. The pixel and the order field affect reporting only, so a problem with either never stops a discount working.

If a critical part of that setup fails, Home shows a red banner headed Your store isn’t fully set up with a Retry setup button. Click it: the setup runs again from inside the app and the banner clears once every step succeeds. If it keeps failing, reinstall the app, and if it comes back after that, send us the step names shown in the banner.

Step 2: Find the Setup guide

Near the top of Home, under any banners, sits a card headed Setup guide, with the line “Use this guide to get xDiscount up and running.” It lists three steps and shows how far along you are: 1 / 3 completed with a progress bar, or a tick and the word Done once everything is finished.

Each step is a row with a circle on the left, a title, and, where the circle alone does not say it, a badge:

BadgeWhat it means
(no badge, empty circle)To do. Click the circle to mark it done yourself
DoneWe checked your store, and it is done. The tick is locked
Marked doneYou ticked it yourself, on a step we could not check for you
Couldn’t checkWe could not read your theme just now, so we are not guessing either way
Create a discount firstThe step cannot happen yet, an earlier step has to come first
Not on your planOnly ever shown if your subscription is on a plan the app does not recognise. It is not counted against you, so the guide can still reach Done without it

Steps we can verify, we tick for you. Whether a discount exists, whether one is active, and whether the offer card is on your live theme are all read fresh every time you open the page. A step can reopen if you undo something, and a tick we set cannot be removed. Hover the circle and it says “Checked from your store, so it can’t be unmarked.” The circle is only clickable on steps we could not decide for ourselves: click it to Mark as done, and click again to Mark as not done. Your marks are remembered for your store.

One step is open at a time. The first step you can still act on opens by itself and shows what to do: a short description, a numbered how-to with the exact buttons in bold, and a button that takes you there (Create discount, Open discounts or Open settings). Click a step’s title to open it and the open one closes, and click the open title again to fold it. Completing the open step moves the guide on to the next one.

Hiding the guide. The chevron in the card’s top-right corner folds the step list away and back again. To remove the card, click the button of three dots beside it and choose Dismiss. Once every step is done, a Dismiss guide button also appears at the foot of the card. A dismissed guide is not gone: a Show setup guide button appears in the page header on Home, and one click brings the card back. Dismissal is remembered for your store, whether the list is folded is not.

The Setup Guide, Step by Step

Step 1: Create your first discount

Choose the products it applies to and how much comes off. Nothing goes live until you publish it.

1

Start a discount

On Home, click Create discount in the top right, or the Create discount button on the step itself.

Name it

Under Title, enter a Name. Only you see it, it is how you will find the discount later.

Leave Status on Draft

A draft is invisible to shoppers, so you can build it in peace.

Choose your products

Under Included products, click Browse, or Choose products in the empty state. Shopify’s own product picker opens. Select products, or expand a product and tick individual variants to narrow it. Choosing a whole product keeps covering variants you add to it later.

Pick a type and fill in its value

Under Discount configuration, pick a Discount type. Percentage off gives you Percentage off, a number from 0 to 100. Fixed amount off gives you Amount off, in your store’s currency. Buy X get Y gives you Percentage off the gift, Number of gift items and a set of Gift products, chosen with Choose gift products, and without a gift chosen shoppers cannot claim the offer. Free shipping has nothing to enter.

Set the optional extras

Still under Discount configuration, tick Skip products that are out of stock if you want it, and set Priority. It defaults to 10, and lower numbers win.

Add a period and conditions if you need them

Set a Start date and End date under Discount period, and add rules under Conditions with Add condition.

Save

Click Save. You will see the message Discount created.

New discounts start as Percentage off, Draft, priority 10, with no products, no dates and no conditions.

If something is missing, Save stops and shows a red banner headed This discount can’t be saved yet, with the failing fields marked in place and the toast “Fix the highlighted fields before saving.” Fix them and save again. Nothing is written until it is valid.

Step 2: Publish it

A draft discount is invisible to shoppers. Publishing is what makes it apply.

Until you have a discount, this step shows Create a discount first and its circle is locked. Once you do:

1

Open your discounts

Click Open discounts on the step, or Discounts in the sidebar.

Open the discount you just made

Click its name in the Discount column.

Make it live

Click Activate discount in the page header and confirm, or set Status to Active and click Save. You will see Discount saved.

Once active, it applies automatically at checkout. Shoppers never enter a code. The step’s own text then changes to “It applies automatically at checkout, shoppers never enter a code.”

Active discounts are capped by plan

Every plan caps how many discounts can be Active at once: 3 on Free, 25 on Starter, unlimited on Growth and Scale. Drafts and archived discounts never count. If you are at the cap, activating is refused with a message naming your plan, its limit and your current count, and suggesting you move one to draft, archive it, or upgrade.

Check the Sync state on the Discounts list afterwards. Synced means Shopify has it. Failed or Too large means it did not reach your store and will not apply at checkout. Home raises those as a red banner headed Some discounts aren’t reaching your store, with a Review them button.

Step 3: Show the offer on your product pages

This is the theme step, and it is the one people skip. Do not skip it.

1

Open Settings

Click Settings in the sidebar, or Open settings on the step.

Find the Storefront offer card section

It is the first section when All is selected, and it has a tab of its own. The card shows a badge, On, Off or Couldn’t check, next to the name of your live theme.

Click Add to theme

Your Shopify theme editor opens in a new tab with the xDiscount offer block already placed on your product template, so there is nothing to find in the block picker. On an older theme that does not take the link, click Add block and choose xDiscount offer yourself.

Put the block where you want it

Drag it into place. Just under your theme’s Add to cart button is a good spot.

Save in the theme editor

Click Save there, then go back to the xDiscount tab.

Let the badge catch up

The badge flips to On on its own within a few seconds. Shopify sends no notification when a block is added or removed, so xDiscount looks for itself: once after two seconds, then every five seconds, up to twenty times, and it stops as soon as the badge changes. That only runs while the xDiscount tab is still open on Settings. If you took longer, or navigated away, click Check again.

Once the block is in place, the Add to theme button becomes Open theme editor, which opens the same template without adding a second copy of the block.

The block’s own settings live in the theme editor, grouped under six headers: Text, Stock line, Conditions, Colours, Size and spacing and Display. They change the wording, the colours and the size of the card, and none of them can change an amount, a condition or a date. The Storefront Offer Card guide covers each one.

What happens if you skip this step

Card addedCard not added
Percentage, Fixed amount, Free shippingShoppers see the offer on the product page and get it at checkoutThe discount still applies at checkout, shoppers just do not see it coming
Buy X get YShoppers can pick their gift and claim the offerThe offer can never be claimed. A checkout discount cannot put an item in a cart on its own, the card is what adds the gift
AnalyticsProduct views and add-to-cart activity get recordedYour storefront counts have nothing to record

The card is on every plan

The offer card is included on every plan, Free included, so this step is always yours to complete. Your discounts apply automatically at checkout whether or not the card is on your theme, the card only changes what shoppers see beforehand.

The Performance Strip

Below the Setup guide, Home has a section headed Performance: a date range button on the left, a View analytics button on the right, and four tiles.

Choosing a range. The button is labelled with the current range, Last 7 days when you first open the app. Click it to pick Today, Last 7 days, Last 30 days or Last 90 days, or type a From and To date in YYYY-MM-DD under the divider and click Apply. Cancel throws away typed dates you have not applied. The range you choose lives in the page address, so a reload keeps it, and the Analytics page reads the same range when you go there.

The four tiles, in this order:

TileWhat it countsHow exact
Discounted ordersOrders where xDiscount actually reduced the priceExact, from Shopify
Revenue from discounted ordersThe checkout total of those orders, as the storefront pixel saw themApproximate
Offer viewsProduct page viewsApproximate
Add-to-cartsItems added to a cartApproximate

A line under the tiles says the same thing in a sentence: discounted orders come from Shopify and are exact, while views, add-to-carts and revenue come from the storefront pixel and are approximate. Offer views here is the same number the Analytics page calls Product views, because the pixel counts every product page, whether or not the card rendered on it.

When there is nothing to show, it says so. A range in which nothing at all was recorded does not print a row of zeros. Each tile explains itself, with No discounted orders yet, No revenue recorded yet, No offer views yet and No add-to-carts yet, and a line underneath reads “No activity between … yet. Numbers appear once shoppers see your discounts, the offer card has to be on your theme for views to be recorded.” If a range has activity, a genuine zero is shown as a zero.

While a new range loads, the tiles stay where they are and dim slightly. If the numbers could not be read at all, a warning banner says so, with “We couldn’t load these numbers just now. Your discounts are unaffected, this only reads what has already been recorded.” and a Try again button.

xDiscount has four screens, all reached from the sidebar inside your Shopify admin.

Home is the “is it working, and what’s next” screen. A plan banner when there is something to know, a red banner if any discount is not reaching your store, the Setup guide card, the Performance strip, a Your discounts section with Active and Total counts once you have at least one, and a This month progress bar of discounted orders used.

Discounts is the full list, with a row of type tabs (All, Percentage, Fixed amount, Buy X get Y, Free shipping, each showing how many you have) and five columns: Products, Discount, Status, Type and Creation method. The search and filter button at the right of the tabs opens a search field with Status and Sync filters, and the sort button orders by Priority (the default), Name, Created, Updated or Last synced. See Managing Discounts.

Analytics has the same date range button as Home, then four plain cards (Revenue, Discounted orders, Average order value and Conversion rate), a chart of whichever metric you pick from the Chart metric dropdown, and a By day table, newest day first. Two chips sit beside the date button: All metrics, which narrows the chart and the table to the storefront figures or the Shopify ones, and a discount type filter that starts on All and can show one type at a time. There is no per-discount breakdown, and history reaches back 250 days at most. A range with nothing recorded draws no tiles, chart or table, and shows a single empty state instead. To slice your own Shopify reports by discount, see Analytics.

Settings has four tabs across the top: All (the default, showing every section stacked with its heading beside it), Storefront offer card, Plans and billing and Connect AI. Pick one tab and its card fills the width, and the tab is the title.

Glossary

TermWhat it means
Automatic discountA discount applied at checkout with no code for the shopper to enter. Every xDiscount discount is one
DraftSaved, but invisible to shoppers. Drafts never count against your plan’s active limit
ActiveLive, and applying at checkout right now
ArchivedTaken out of use but kept. Set it from the Status field on the discount, or with Archive discount in the page header
PriorityA number you set on each discount. When several match the same item, the lowest number wins, and only that one applies
ConditionA check made before the discount applies: Item quantity, Cart value or Inventory. Each type can be used once per discount, rows are read top to bottom with no grouping, each row after the first joins the result so far with and or or, and any row can be flipped with Negate this condition
Discount periodThe Start date and End date on the discount form. This is where scheduling lives, and it is checked before the conditions are
Buy X get YBuying a qualifying product earns a discount on a gift product the shopper picks from the offer card
Storefront offer cardThe xDiscount offer block you add to your product template. Shows the live offer to shoppers before checkout, on every plan
SyncWhether the discount has reached Shopify. Synced is good, Failed and Too large mean it will not apply at checkout
Discounted orderAn order where xDiscount actually reduced the price. This is the only thing that counts toward your plan’s monthly allowance, orders we did not touch never count
Checkouts seenCheckouts counted by the storefront pixel. Approximate, because ad blockers and shoppers who decline analytics are not counted
Setup guideThe card on Home that lists the three steps to get running. Steps we can verify are ticked for you, the rest you mark yourself
Connect AIThe Settings section where you generate a key so your own AI assistant can work with your discounts. Included on every plan, Free included