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:
- Prepares the place your discount configuration is stored on your products
- 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
- Installs the analytics pixel that counts product views, add-to-carts and completed checkouts
- 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:
| Badge | What it means |
|---|---|
| (no badge, empty circle) | To do. Click the circle to mark it done yourself |
| Done | We checked your store, and it is done. The tick is locked |
| Marked done | You ticked it yourself, on a step we could not check for you |
| Couldn’t check | We could not read your theme just now, so we are not guessing either way |
| Create a discount first | The step cannot happen yet, an earlier step has to come first |
| Not on your plan | Only 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.
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:
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.
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 added | Card not added | |
|---|---|---|
| Percentage, Fixed amount, Free shipping | Shoppers see the offer on the product page and get it at checkout | The discount still applies at checkout, shoppers just do not see it coming |
| Buy X get Y | Shoppers can pick their gift and claim the offer | The 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 |
| Analytics | Product views and add-to-cart activity get recorded | Your 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:
| Tile | What it counts | How exact |
|---|---|---|
| Discounted orders | Orders where xDiscount actually reduced the price | Exact, from Shopify |
| Revenue from discounted orders | The checkout total of those orders, as the storefront pixel saw them | Approximate |
| Offer views | Product page views | Approximate |
| Add-to-carts | Items added to a cart | Approximate |
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.
Navigating the App
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
| Term | What it means |
|---|---|
| Automatic discount | A discount applied at checkout with no code for the shopper to enter. Every xDiscount discount is one |
| Draft | Saved, but invisible to shoppers. Drafts never count against your plan’s active limit |
| Active | Live, and applying at checkout right now |
| Archived | Taken out of use but kept. Set it from the Status field on the discount, or with Archive discount in the page header |
| Priority | A number you set on each discount. When several match the same item, the lowest number wins, and only that one applies |
| Condition | A 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 period | The 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 Y | Buying a qualifying product earns a discount on a gift product the shopper picks from the offer card |
| Storefront offer card | The xDiscount offer block you add to your product template. Shows the live offer to shoppers before checkout, on every plan |
| Sync | Whether the discount has reached Shopify. Synced is good, Failed and Too large mean it will not apply at checkout |
| Discounted order | An 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 seen | Checkouts counted by the storefront pixel. Approximate, because ad blockers and shoppers who decline analytics are not counted |
| Setup guide | The 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 AI | The Settings section where you generate a key so your own AI assistant can work with your discounts. Included on every plan, Free included |