[{"data":1,"prerenderedAt":574},["ShallowReactive",2],{"navigation_docs":3,"-bundles-checkout-how-the-discount-is-applied":256,"-bundles-checkout-how-the-discount-is-applied-surround":569},[4,102],{"title":5,"path":6,"stem":7,"children":8},"TreStack Timer","\u002Ftimer","1.timer",[9,12,30,51,68,89],{"title":10,"path":6,"stem":11},"TreStack Timer docs","1.timer\u002Findex",{"title":13,"path":14,"stem":15,"children":16,"page":29},"Getting started","\u002Ftimer\u002Fstart","1.timer\u002F1.start",[17,21,25],{"title":18,"path":19,"stem":20},"Installing TreStack Timer","\u002Ftimer\u002Fstart\u002Finstalling-a-trestack-app","1.timer\u002F1.start\u002F1.installing-a-trestack-app",{"title":22,"path":23,"stem":24},"Turning on the app embed and placing the app block","\u002Ftimer\u002Fstart\u002Fplacing-your-first-app-block","1.timer\u002F1.start\u002F2.placing-your-first-app-block",{"title":26,"path":27,"stem":28},"Development stores and theme previews","\u002Ftimer\u002Fstart\u002Fdevelopment-stores-and-theme-previews","1.timer\u002F1.start\u002F3.development-stores-and-theme-previews",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"Timer types","\u002Ftimer\u002Ftimer-types","1.timer\u002F2.timer-types",[35,39,43,47],{"title":36,"path":37,"stem":38},"TreStack Timer, setup and settings","\u002Ftimer\u002Ftimer-types\u002Ftrestack-timer","1.timer\u002F2.timer-types\u002F1.trestack-timer",{"title":40,"path":41,"stem":42},"Placement, countries, and translations","\u002Ftimer\u002Ftimer-types\u002Fplacement-and-targeting","1.timer\u002F2.timer-types\u002F2.placement-and-targeting",{"title":44,"path":45,"stem":46},"Cart page and cart drawer timers","\u002Ftimer\u002Ftimer-types\u002Fcart-timers","1.timer\u002F2.timer-types\u002F3.cart-timers",{"title":48,"path":49,"stem":50},"Email timers","\u002Ftimer\u002Ftimer-types\u002Femail-timers","1.timer\u002F2.timer-types\u002F4.email-timers",{"title":52,"path":53,"stem":54,"children":55,"page":29},"Performance and themes","\u002Ftimer\u002Freference","1.timer\u002F3.reference",[56,60,64],{"title":57,"path":58,"stem":59},"Performance notes","\u002Ftimer\u002Freference\u002Fperformance-notes","1.timer\u002F3.reference\u002F1.performance-notes",{"title":61,"path":62,"stem":63},"Theme compatibility","\u002Ftimer\u002Freference\u002Ftheme-compatibility","1.timer\u002F3.reference\u002F2.theme-compatibility",{"title":65,"path":66,"stem":67},"Running several timers at once","\u002Ftimer\u002Freference\u002Frunning-several-timers","1.timer\u002F3.reference\u002F3.running-several-timers",{"title":69,"path":70,"stem":71,"children":72,"page":29},"Billing, privacy, and data","\u002Ftimer\u002Faccount","1.timer\u002F4.account",[73,77,81,85],{"title":74,"path":75,"stem":76},"Billing, trials, and plan changes","\u002Ftimer\u002Faccount\u002Fbilling","1.timer\u002F4.account\u002F1.billing",{"title":78,"path":79,"stem":80},"Privacy and data, what the app stores","\u002Ftimer\u002Faccount\u002Fprivacy-and-data","1.timer\u002F4.account\u002F2.privacy-and-data",{"title":82,"path":83,"stem":84},"Data processing and subprocessors","\u002Ftimer\u002Faccount\u002Fdata-processing-and-subprocessors","1.timer\u002F4.account\u002F3.data-processing-and-subprocessors",{"title":86,"path":87,"stem":88},"Uninstalling TreStack Timer","\u002Ftimer\u002Faccount\u002Funinstalling-trestack-timer","1.timer\u002F4.account\u002F4.uninstalling-trestack-timer",{"title":90,"path":91,"stem":92,"children":93,"page":29},"When something is wrong","\u002Ftimer\u002Ftroubleshooting","1.timer\u002F5.troubleshooting",[94,98],{"title":95,"path":96,"stem":97},"When the timer does not appear","\u002Ftimer\u002Ftroubleshooting\u002Ftroubleshooting-app-blocks","1.timer\u002F5.troubleshooting\u002F1.troubleshooting-app-blocks",{"title":99,"path":100,"stem":101},"When the timer shows in the wrong place or looks wrong","\u002Ftimer\u002Ftroubleshooting\u002Ftroubleshooting-storefront-display","1.timer\u002F5.troubleshooting\u002F2.troubleshooting-storefront-display",{"title":103,"path":104,"stem":105,"children":106},"TreStack Bundles","\u002Fbundles","2.bundles",[107,110,131,160,185,198,219,244],{"title":108,"path":104,"stem":109},"TreStack Bundles docs","2.bundles\u002Findex",{"title":111,"path":112,"stem":113,"children":114,"page":29},"Getting a deal live","\u002Fbundles\u002Fstart","2.bundles\u002F1.start",[115,119,123,127],{"title":116,"path":117,"stem":118},"Getting started with TreStack Bundles","\u002Fbundles\u002Fstart\u002Fgetting-started","2.bundles\u002F1.start\u002F1.getting-started",{"title":120,"path":121,"stem":122},"Deal types and deal bars","\u002Fbundles\u002Fstart\u002Fdeal-types","2.bundles\u002F1.start\u002F2.deal-types",{"title":124,"path":125,"stem":126},"Creating, publishing and managing deals","\u002Fbundles\u002Fstart\u002Fcreating-and-publishing-deals","2.bundles\u002F1.start\u002F3.creating-and-publishing-deals",{"title":128,"path":129,"stem":130},"Development stores and testing safely","\u002Fbundles\u002Fstart\u002Fdevelopment-stores-and-testing","2.bundles\u002F1.start\u002F4.development-stores-and-testing",{"title":132,"path":133,"stem":134,"children":135,"page":29},"Building offers","\u002Fbundles\u002Fdeals","2.bundles\u002F2.deals",[136,140,144,148,152,156],{"title":137,"path":138,"stem":139},"Quantity breaks and Buy X, get Y","\u002Fbundles\u002Fdeals\u002Fquantity-breaks-and-buy-x-get-y","2.bundles\u002F2.deals\u002F1.quantity-breaks-and-buy-x-get-y",{"title":141,"path":142,"stem":143},"Bundles and mix and match","\u002Fbundles\u002Fdeals\u002Fbundles-and-mix-and-match","2.bundles\u002F2.deals\u002F2.bundles-and-mix-and-match",{"title":145,"path":146,"stem":147},"Free gifts and progressive gifts","\u002Fbundles\u002Fdeals\u002Fgifts-and-progressive-gifts","2.bundles\u002F2.deals\u002F3.gifts-and-progressive-gifts",{"title":149,"path":150,"stem":151},"Upsells, add-ons and personalisation","\u002Fbundles\u002Fdeals\u002Fupsells-add-ons-and-personalisation","2.bundles\u002F2.deals\u002F4.upsells-add-ons-and-personalisation",{"title":153,"path":154,"stem":155},"Subscriptions in a deal","\u002Fbundles\u002Fdeals\u002Fsubscriptions","2.bundles\u002F2.deals\u002F5.subscriptions",{"title":157,"path":158,"stem":159},"Products, dates and visibility","\u002Fbundles\u002Fdeals\u002Fproducts-dates-and-visibility","2.bundles\u002F2.deals\u002F6.products-dates-and-visibility",{"title":161,"path":162,"stem":163,"children":164,"page":29},"How a deal looks, and where","\u002Fbundles\u002Fdesign","2.bundles\u002F3.design",[165,169,173,177,181],{"title":166,"path":167,"stem":168},"Designing a deal","\u002Fbundles\u002Fdesign\u002Fdesign","2.bundles\u002F3.design\u002F1.design",{"title":170,"path":171,"stem":172},"Badges, timers and scratch-off","\u002Fbundles\u002Fdesign\u002Fbadges-timers-and-scratch-off","2.bundles\u002F3.design\u002F2.badges-timers-and-scratch-off",{"title":174,"path":175,"stem":176},"Variants, swatches and images","\u002Fbundles\u002Fdesign\u002Fvariants-swatches-and-images","2.bundles\u002F3.design\u002F3.variants-swatches-and-images",{"title":178,"path":179,"stem":180},"Prices, the sticky bar and the savings summary","\u002Fbundles\u002Fdesign\u002Fprices-sticky-bar-and-savings","2.bundles\u002F3.design\u002F4.prices-sticky-bar-and-savings",{"title":182,"path":183,"stem":184},"Translations, currencies and markets","\u002Fbundles\u002Fdesign\u002Ftranslations-and-markets","2.bundles\u002F3.design\u002F5.translations-and-markets",{"title":186,"path":187,"stem":188,"children":189,"page":29},"Prices at checkout","\u002Fbundles\u002Fcheckout","2.bundles\u002F4.checkout",[190,194],{"title":191,"path":192,"stem":193},"How the discount is applied at checkout","\u002Fbundles\u002Fcheckout\u002Fhow-the-discount-is-applied","2.bundles\u002F4.checkout\u002F1.how-the-discount-is-applied",{"title":195,"path":196,"stem":197},"Combining discounts, and store limits","\u002Fbundles\u002Fcheckout\u002Fcombinations-and-limits","2.bundles\u002F4.checkout\u002F2.combinations-and-limits",{"title":199,"path":200,"stem":201,"children":202,"page":29},"Tests and numbers","\u002Fbundles\u002Fmeasure","2.bundles\u002F5.measure",[203,207,211,215],{"title":204,"path":205,"stem":206},"Deal analytics","\u002Fbundles\u002Fmeasure\u002Fanalytics","2.bundles\u002F5.measure\u002F1.analytics",{"title":208,"path":209,"stem":210},"Added revenue","\u002Fbundles\u002Fmeasure\u002Fadded-revenue","2.bundles\u002F5.measure\u002F2.added-revenue",{"title":212,"path":213,"stem":214},"A\u002FB testing a deal","\u002Fbundles\u002Fmeasure\u002Fab-tests","2.bundles\u002F5.measure\u002F3.ab-tests",{"title":216,"path":217,"stem":218},"Smart A\u002FB tests","\u002Fbundles\u002Fmeasure\u002Fsmart-ab-tests","2.bundles\u002F5.measure\u002F4.smart-ab-tests",{"title":220,"path":221,"stem":222,"children":223,"page":29},"Billing, privacy, and when something is wrong","\u002Fbundles\u002Faccount","2.bundles\u002F6.account",[224,228,232,236,240],{"title":225,"path":226,"stem":227},"TreStack Bundles plans and billing","\u002Fbundles\u002Faccount\u002Fplans-and-billing","2.bundles\u002F6.account\u002F1.plans-and-billing",{"title":229,"path":230,"stem":231},"Going over your plan","\u002Fbundles\u002Faccount\u002Fgoing-over-your-plan","2.bundles\u002F6.account\u002F2.going-over-your-plan",{"title":233,"path":234,"stem":235},"Pausing, cancelling and uninstalling","\u002Fbundles\u002Faccount\u002Fpausing-cancelling-and-uninstalling","2.bundles\u002F6.account\u002F3.pausing-cancelling-and-uninstalling",{"title":237,"path":238,"stem":239},"Privacy, data and sub-processors","\u002Fbundles\u002Faccount\u002Fprivacy-and-data","2.bundles\u002F6.account\u002F4.privacy-and-data",{"title":241,"path":242,"stem":243},"When a deal does not show or prices look wrong","\u002Fbundles\u002Faccount\u002Ftroubleshooting","2.bundles\u002F6.account\u002F5.troubleshooting",{"title":245,"path":246,"stem":247,"children":248,"page":29},"Reference","\u002Fbundles\u002Freference","2.bundles\u002F7.reference",[249,252],{"title":57,"path":250,"stem":251},"\u002Fbundles\u002Freference\u002Fperformance-notes","2.bundles\u002F7.reference\u002F1.performance-notes",{"title":253,"path":254,"stem":255},"Theme compatibility and placement","\u002Fbundles\u002Freference\u002Ftheme-compatibility","2.bundles\u002F7.reference\u002F2.theme-compatibility",{"id":257,"title":191,"body":258,"description":562,"extension":563,"links":564,"meta":565,"navigation":566,"path":192,"seo":567,"stem":193,"__hash__":568},"docs\u002F2.bundles\u002F4.checkout\u002F1.how-the-discount-is-applied.md",{"type":259,"value":260,"toc":544},"minimark",[261,276,306,311,314,317,320,325,341,348,352,355,413,417,420,423,426,429,433,467,471,517,521,524],[262,263,264,268,269,272,275],"p",{},[265,266,267],"strong",{},"Applies to:"," TreStack Bundles, every plan",[270,271],"br",{},[265,273,274],{},"Updated:"," 11 October 2026",[277,278,279,284],"callout",{},[262,280,281],{},[265,282,283],{},"At a glance",[285,286,287,294,300],"ul",{},[288,289,290,293],"li",{},[265,291,292],{},"Discount:"," One automatic discount per published deal",[288,295,296,299],{},[265,297,298],{},"Priced from:"," What is in the cart, not the bar clicked",[288,301,302,305],{},[265,303,304],{},"Buy it now:"," Hidden unless the offer is one plain line of the page's variant",[307,308,310],"h2",{"id":309},"one-automatic-discount-per-deal","One automatic discount per deal",[262,312,313],{},"When you publish a deal, the app creates one automatic app discount for it in Shopify. A Shopify Function runs that discount at checkout and works out the price from the cart. The app never creates discount codes, so shoppers have nothing to type.",[262,315,316],{},"You find the discount in Shopify admin under Discounts, titled TreStack Bundles - followed by the deal's Name (only visible for you). Its start and end follow the deal's Active dates. It discounts cart lines, and a free shipping gift discounts shipping; the app makes no order discounts. It applies to one-time purchases and to subscription purchases, on every renewal.",[262,318,319],{},"Change the deal in the app, not the discount in Shopify admin: the app writes the discount from the deal each time you Save or Publish. Unpublishing a deal, saving it as a draft, removing it, or a paused plan removes its discount. If you delete the discount in Shopify admin yourself, the deal goes back to draft and Home shows A deal was unpublished. Publish the deal again to create a new discount.",[321,322,324],"h3",{"id":323},"the-label-shoppers-see","The label shoppers see",[262,326,327,328,332,333,336,337,340],{},"Each discounted line shows a label in the cart and at checkout. It is the deal's Discount name (shown in cart\u002Fcheckout) when you filled it in, otherwise the title of the bar that priced the line. The variables ",[329,330,331],"code",{},"{{quantity}}",", ",[329,334,335],{},"{{buy_quantity}}"," and ",[329,338,339],{},"{{get_quantity}}"," are filled in with the bar's numbers; any other variable is removed, because the checkout has no prices or titles to put there. A label longer than 255 characters is shortened.",[262,342,343,344,347],{},"The label shows in the shopper's language only when you translated the discount name or the bar title on the Translations page, and only in languages other than your store's primary language. Everywhere else the original text shows. See ",[345,346,182],"a",{"href":183},".",[307,349,351],{"id":350},"the-cart-decides-not-the-bar-clicked","The cart decides, not the bar clicked",[262,353,354],{},"The checkout prices what is in the cart when the shopper pays. What they clicked in the widget does not matter once the items are in the cart.",[285,356,357,363,369,375,381,387,393,399,405],{},[288,358,359,362],{},[265,360,361],{},"Quantity breaks and Buy X, get Y:"," every unit of a targeted product in the cart counts, and different variants of the same product add up. The bar with the largest quantity the cart reaches applies. A shopper who adds 3 and then changes the cart to 2 gets the 2-item price, and below the lowest bar there is no discount. A percentage or an amount off applies to every unit. A fixed price bar is scaled to the units in the cart: with 5 units and a 3-item bar at $30, the 5 units cost $50. On a Buy X, get Y bar, each whole buy-and-get set in the cart earns its \"get\" quantity at the \"get\" price, given to the cheapest units; the other units pay the \"buy\" price.",[288,364,365,368],{},[265,366,367],{},"Items added outside the widget:"," the theme's own Add to cart counts too, unless Apply discount only via bundle widget is on in Settings, Visibility. With it on, items added through POS, pages without the widget or other apps get no deal discount.",[288,370,371,374],{},[265,372,373],{},"Bundles and Mix & Match:"," the cart needs the full set. A missing item means no discount for that set, and units beyond the set pay full price.",[288,376,377,380],{},[265,378,379],{},"Volume discount with other products:"," only items added through the widget's product picker count across products, and the page's product must stay in the cart.",[288,382,383,386],{},[265,384,385],{},"Gifts and upsells:"," they are free or discounted only while the cart still reaches the bar that owns them. If the shopper drops below it, they stay in the cart at full price; nothing removes them.",[288,388,389,392],{},[265,390,391],{},"Rounding:"," a percentage price rounds each unit up to the cent. Price rounding from Settings, Pricing applies in the shopper's currency.",[288,394,395,398],{},[265,396,397],{},"Currencies:"," amounts you enter are in your store currency and converted with Shopify's rate for the shopper's currency. A deal set to one market can use that market's currency instead. If no usable rate exists, the shopper gets no discount, never a wrong one.",[288,400,401,404],{},[265,402,403],{},"Markets and B2B:"," Shopify applies the discount only in the deal's markets. With Exclude B2B customers on, Shopify B2B buyers get neither the widget nor the discount.",[288,406,407,410,411,347],{},[265,408,409],{},"A\u002FB tests:"," each variant charges its own price at checkout. See ",[345,412,212],{"href":213},[307,414,416],{"id":415},"checkout-routes","Checkout routes",[262,418,419],{},"The normal cart checkout, Shop Pay and express checkout buttons in the cart all run the discount.",[262,421,422],{},"Buy it now buys only the variant shown in the product form. So the widget hides the theme's Buy it now button whenever the chosen offer is more than that one plain line: a bundle, a Mix & Match set, gifts, upsells, different variants per item, or an Alternative product bar. It is also hidden for a multi-unit bar when the theme's product form has no quantity box. Those offers go through the cart. A quantity break or Buy X, get Y bar of one variant keeps Buy it now.",[262,424,425],{},"Skip cart and go to checkout directly, in Settings, Cart, sends the shopper from the widget's Add to cart straight to checkout. It first takes out this deal's earlier lines for the same product, so pressing Add to cart twice does not double the offer. Other items in the cart stay.",[262,427,428],{},"The app does nothing special for draft orders or POS. With Apply discount only via bundle widget on, items added there get no deal discount.",[307,430,432],{"id":431},"checking-a-price-in-four-steps","Checking a price, in four steps.",[434,435,437,441,446,450,453,457,460,464],"steps",{"level":436},"3",[321,438,440],{"id":439},"publish-a-deal-on-one-product","Publish a deal on one product",[262,442,443,444,347],{},"Pick a product only you are testing with, or use a development store. See ",[345,445,128],{"href":129},[321,447,449],{"id":448},"add-each-bar-from-the-widget","Add each bar from the widget",[262,451,452],{},"Note the price the widget shows for each bar, then open the cart. The cart total should match.",[321,454,456],{"id":455},"go-to-checkout","Go to checkout",[262,458,459],{},"Check the label next to the discount and the total. Use the cart checkout, not Buy it now, for offers of more than one line.",[321,461,463],{"id":462},"change-the-cart","Change the cart",[262,465,466],{},"Lower a quantity or remove one item of a set and check the price again. It follows the cart, as described above.",[307,468,470],{"id":469},"settings-reference","Settings reference",[472,473,474,479,483,493,497,501,505,509,513],"field-group",{},[475,476,478],"field",{"name":477},"Discount","One automatic app discount per published deal, titled TreStack Bundles - deal name in Shopify admin, Discounts. No codes.",[475,480,482],{"name":481},"Discount name (shown in cart\u002Fcheckout)","Settings section. The checkout label. Empty means the bar title is used.",[475,484,486,332,488,336,490,492],{"name":485},"Label variables",[329,487,331],{},[329,489,335],{},[329,491,339],{}," are filled in. Other variables are removed.",[475,494,496],{"name":495},"Label translation","Translations page. Applies only in languages other than the primary one.",[475,498,500],{"name":499},"Active dates","Settings section. The discount starts and ends with the deal.",[475,502,504],{"name":503},"Apply discount only via bundle widget","Settings, Visibility. Off by default. On, only items added through the widget get the discount.",[475,506,508],{"name":507},"Skip cart and go to checkout directly","Settings, Cart. The widget's Add to cart opens checkout instead of the cart.",[475,510,512],{"name":511},"Buy it now","Hidden by the widget for offers that are not one plain line of the page's variant, including Alternative product bars, and for multi-unit bars when the form has no quantity box.",[475,514,516],{"name":515},"Draft orders and POS","No special handling. Excluded when Apply discount only via bundle widget is on.",[307,518,520],{"id":519},"if-this-does-not-work","If this does not work",[262,522,523],{},"The failures most likely on this page, with the check that resolves each one.",[525,526,527,532,536,540],"accordion",{},[528,529,531],"accordion-item",{"label":530},"The Buy it now button is missing on the product page","The widget hides it while the chosen offer is more than one plain line, because Buy it now would buy the page's variant alone. Shoppers use Add to cart for those offers. Pick a single-variant quantity bar and the button comes back.",[528,533,535],{"label":534},"The price changed after the shopper edited the cart","The checkout prices the cart, not the bar clicked. Fewer units move the order to a lower bar, an incomplete set loses its discount, and gifts or upsells below their bar are charged at full price.",[528,537,539],{"label":538},"Home shows A deal was unpublished","The deal's discount was deleted in Shopify admin, so the deal went back to draft. Open the deal and publish it again to create a new discount.",[528,541,543],{"label":542},"The editor shows The discount in Shopify is out of date","The last update to Shopify did not go through, so checkout may still use the previous version of the deal. Publish again to retry.",{"title":545,"searchDepth":546,"depth":546,"links":547},"",2,[548,552,553,554,560,561],{"id":309,"depth":546,"text":310,"children":549},[550],{"id":323,"depth":551,"text":324},3,{"id":350,"depth":546,"text":351},{"id":415,"depth":546,"text":416},{"id":431,"depth":546,"text":432,"children":555},[556,557,558,559],{"id":439,"depth":551,"text":440},{"id":448,"depth":551,"text":449},{"id":455,"depth":551,"text":456},{"id":462,"depth":551,"text":463},{"id":469,"depth":546,"text":470},{"id":519,"depth":546,"text":520},"Each published deal is one automatic discount in Shopify. What the checkout counts, the label shoppers see, which checkout routes apply it, and how to check a price yourself.","md",null,{},true,{"title":191,"description":562},"wPTRX9RKtmRtMNTR4rqrCr52rlU99Nov6BRRmw-qGrQ",[570,572],{"title":182,"path":183,"stem":184,"description":571,"children":-1},"The widget's built-in texts in 20 languages, translating your deal texts and checkout labels, how prices follow the shopper's currency, and deals limited to some markets.",{"title":195,"path":196,"stem":197,"description":573,"children":-1},"How a deal's discount combines with codes and other discounts, what happens when two deals or two bundle apps share a product, Shopify's 25 automatic discounts, the deal size limit, and every other limit in the app.",1791656486240]