A shopper picks the "3 for $72" tier on the product page. The cart shows $75.60. Checkout charges $84 and offers a discount code field as an apology. The shopper either leaves or writes to support, and either way you lose the trust that the offer was supposed to build.
This mismatch is the most common complaint in the one-star reviews of bundle and discount apps on the Shopify App Store. It is rarely a random bug. It comes from one of six causes, and you can find yours in about ten minutes.
How a price gets from the page to the order
On Shopify, three systems can touch a price:
- The theme shows a price on the product page and in the cart. Apps change what is shown with JavaScript or Liquid.
- The cart is a server-side object with line items; it does not know about the number the theme painted on the screen.
- Checkout computes the final price from the cart, Shopify's own discounts, discount codes, and any Shopify Functions installed by apps.
A bundle app that only does step 1 has to find some way to make step 3 agree. The ways it can do that are where the problems start.
The six causes
1. The app shows a price it cannot enforce
Older apps draw "3 for $72" in the theme and then try to apply it at checkout by generating a discount code, creating a draft order, or swapping in a hidden variant. Each of these can fail: the code is already used, the draft order times out, the hidden variant is out of stock. The page promised; checkout could not deliver.
How to tell: open the cart page, then checkout, with no other discounts. If checkout differs from the page on a plain single offer, the app's enforcement path is the problem.
Fix: use an app whose discount is a Shopify Function. Functions run inside checkout and compute the price from the cart itself, so the page, the cart and the checkout all read the same rule. They also apply in Shop Pay, accelerated checkouts and POS, where theme JavaScript never runs.
2. Two apps price the same item
A volume discount app and a bundle app both installed, or a bundle app plus a "sale" app, each applying its own markdown. Shopify will happily combine two automatic discounts from two apps on one line.
How to tell: checkout shows two discount lines on one product, or a total lower than any single offer explains.
Fix: one app for pricing. If you must run two during a migration, build the new one in an unpublished duplicate theme and switch in one step.
3. A sitewide sale stacks on a tier
"15% off everything" set as a Shopify automatic discount, plus "buy 2, save 10%" from the app. Depending on the combination settings, the shopper gets 25%, or 15%, or 10%, and the page shows yet another number.
How to tell: the mismatch only appears while a store-wide sale or a discount code is active.
Fix: decide the rule once. Either the app excludes items already on sale (compare-at price set), or the app's offer and Shopify's discounts are set not to combine. Good apps have a "skip items already on sale" switch and a per-offer "combines with order / shipping codes" setting.
4. Two offers in the same app overlap
Product A is in a "buy 2, save 10%" tier and also in a "Bundle & save 15%" set. Which rule prices it when the shopper buys two of A inside the bundle?
How to tell: the mismatch appears only for products that sit in more than one offer.
Fix: your app needs a priority order (the first matching offer wins) and a rule that two prices never stack on one item. If it does not have one, remove the product from one of the offers.
5. Currency and Markets rounding
The page shows a converted price from Shopify Markets (€66.47) while the offer was written as "3 for $72" and converted at checkout with a different rounding rule, or a fixed price per market was never set.
How to tell: the mismatch is a few cents or follows exchange rates, and only appears in non-base currencies.
Fix: set explicit fixed prices per market ("3 for €60") instead of relying on conversion. Shopify Markets supports this; the app must expose it.
6. Cached theme JavaScript after an offer change
You edited the tier from 10% to 12%; the Function updated instantly; the theme still serves yesterday's widget data from a cached metafield or asset.
How to tell: the mismatch started right after you edited an offer, and clears after a hard refresh.
Fix: apps that store the offer in a shop metafield read by the widget update within seconds; if yours needs a "re-sync" button, press it after every change and ask the vendor why.
Ten-minute diagnosis
- Pause every discount except one offer. Add the product in the tier quantity. Compare page → cart → checkout. If they match, cause 1 is cleared.
- Turn the store-wide sale back on. Repeat. A new mismatch means cause 3.
- Try a product that belongs to two offers. A mismatch here means cause 4.
- Switch the storefront to a second currency. Cents off means cause 5.
- Check Settings › Apps for a second pricing app. Cause 2.
- Edit the offer, test again without a refresh. Cause 6.
The one choice that prevents all six
Pick an app where the price is computed in exactly one place, a Shopify Function, and the storefront only displays what that Function will do. Then ask for two more things:
- A priority rule: the order of the offers decides which one prices an item, and two prices never land on the same line.
- A way to see the checkout result before you publish. MixMaxer has a "Test at checkout" step on the last page of the offer wizard: enter a sample cart (products, quantities, new or returning customer), and it runs the real discount Function and shows line by line what checkout will charge and which offer priced each item. If the number is wrong, you see it before a customer does.
That is not a feature for power users. It is the difference between a bundle app that earns you money and one that costs you refunds.
FAQ
Why does my Shopify discount show on the product page but not at checkout?
The app that draws the price on the page cannot enforce it at checkout, usually because it relies on a discount code, a draft order or a hidden variant that failed. Apps whose discounts run as Shopify Functions compute the price inside checkout itself.
Can two discounts apply to the same item on Shopify?
Yes, if two apps, or an app and a Shopify automatic discount, both target the item and are set to combine. Use one pricing app, exclude sale items from offers, and set the combination rules per offer.
Does a bundle discount work in Shop Pay and Shopify POS?
Only if it is a Shopify Function. Theme JavaScript never runs in Shop Pay or POS, so page-only discounts disappear there.
How do I test a Shopify discount before publishing?
Use a sample cart in an unpublished duplicate theme, or an app with a built-in checkout test. MixMaxer's "Test at checkout" step runs the real discount on a sample cart and shows the exact lines checkout will charge.
MixMaxer prices every offer with a Shopify Function, never stacks two prices on one item, and shows the checkout result before you publish. Install from the Shopify App Store · Overlapping offers · Test at checkout.