Playbook · Shopify upsell / cross-sell popup not showing

Shopify upsell popup not showing.

Written for a Shopify DTC owner whose upsell / cross-sell popup or post-add-to-cart offer never appears — upsell app embed off on Current, Shopify Function / cart transform unpublished, theme cart drawer offer block missing, or checkout / post-purchase UI extension not on the Live profile. DIY-first: prove apps vs Functions vs cart drawer vs checkout extensions; repair the live add-to-cart path; retest on the live storefront. Distinct from bundle builder / FBT widget missing, quantity breaks / volume discount tiers missing, free shipping progress bar missing, sticky add-to-cart bar missing, and product recommendations / recently viewed carousels. Also distinct from thank-you / order status page upsell broken (post-purchase surface). No earnings claims, no invented case studies.

Nico at Latch AI Ops · Sep 8, 2026 · ~12 minute read

Buy the 72-hour install — $997Bundle builderQuantity breaksMerchant FAQ

01

Upsell / cross-sell popup or post-add-to-cart offer missing — not bundle builder, not quantity breaks, not free shipping bar, not sticky ATC, not recommendations.

Several cart / PDP surfaces can look like “the upsell is broken.” They do not share a settings panel. This page is only when an upsell / cross-sell popup or post-add-to-cart offer never appears for buyers (upsell apps, Shopify Functions / cart transforms, theme cart drawer offer blocks, checkout / post-purchase UI extensions). Bundle builder / frequently bought together widgets on the PDP are shopify-bundle-builder-not-showing. Quantity break / volume discount / Buy X Get Y tier UIs are shopify-quantity-breaks-not-showing. Free shipping progress bars are shopify-free-shipping-bar-missing. Sticky / floating add-to-cart bars are shopify-sticky-add-to-cart-missing. Product recommendations / recently viewed carousels are shopify-recently-viewed-not-showing. Thank-you / order status page upsells (after payment) are thank-you-page-upsell-broken — post-purchase surface, not post-add-to-cart popup.

02

Prove apps vs Shopify Functions vs theme cart drawer vs checkout extensions on a live add-to-cart path.

Add a product on a live product URL (or collection quick-add) — not only Theme editor preview. Capture four proofs before you install another upsell app:

  1. Theme settings → App embeds and product / cart template theme app blocks: is the upsell / cross-sell / post-ATC app enabled on Current with a block on the template that fires after add to cart?
  2. If the offer uses Shopify Functions / cart transforms: is the Function published, installed on the live shop, and scoped to the products / markets you just tested?
  3. Customize Current → cart / cart-drawer / product template: is there an upsell / cross-sell / “Complete the look” offer section or block on the published theme — not only on a draft theme?
  4. If your surface is checkout / post-purchase: Settings → Checkout → Live profile — is the upsell UI extension on the Live profile (thank-you / order status / checkout)? DevTools: does a modal DOM node exist but stay display:none / height:0 under CSS, cookie consent, or a second cart-drawer app?

If you only tested a PDP bundle builder, quantity-break tiers, a free shipping bar, a sticky ATC bar, or a “You may also like” carousel, you are on the wrong playbook. If add-to-cart popup works but thank-you page upsells fail after payment, chase thank-you-page-upsell-broken instead.

03

Upsell / cross-sell apps unpublished, wrong trigger, or fighting the theme cart drawer.

Most post-add-to-cart popups come from an upsell / cross-sell app (App embed + theme app block, or a script that listens for cart/add). The embed can be off on Current, enabled only on a draft theme, scoped to products / tags / Markets the buyer is not in, or set to trigger on cart page only while you use a cart drawer. Two upsell apps plus a theme cart drawer often blank each other — the first claim on the add-to-cart event wins and the popup never mounts.

Fix path: Theme settings → App embeds → enable one upsell / cross-sell app on Current → Save. Customize Current → add the app’s popup / post-ATC / cart-drawer offer block where the app docs say → Save. In the app admin, confirm triggers (after add to cart / open drawer / cart page), product rules, and Markets. Disable the second upsell app while testing. Retest live add-to-cart. Generic App embeds failing across many apps is app-embed-not-loading. Cart drawer that never refreshes after add is cart-drawer-not-updating.

04

Shopify Functions / cart transforms unpublished, or theme cart drawer offer block missing on Current.

Some offers need a cart transform / product-discount Function so the popup can add a discounted companion SKU. The Function can be drafted, not installed on the live shop, or scoped away from the products you tested — the modal never opens because the app aborts when the Function returns nothing. Separately, Online Store 2.0 themes can mount a native “upsell” / complementary products block inside the cart drawer; that block can be removed from the cart-drawer section group, present only on a draft theme, or hidden when the complementary products API returns empty.

Fix path: Apps → your Function / cart transform app → publish and confirm it is installed on the live shop with the right product / market scope. Customize Current → cart drawer / cart.json → add Complementary products / Upsell / Cross-sell block → Save / Publish Current. Retest live add-to-cart. Functions that fail at checkout math (no popup goal) are shopify-functions-discount-not-applying. Theme editor publish / save failures are theme-editor-publish-failing.

05

Checkout / post-purchase UI extensions not on the Live profile (or you meant thank-you upsell instead).

If your “upsell popup” is actually a checkout UI extension or a post-purchase offer after payment, the surface is the Live checkout profile — not the theme cart drawer. Extensions can be on a draft profile only, removed after a Checkout Extensibility upgrade, or still targeting retired Additional scripts / checkout.liquid. That is adjacent to this page but not the same as a post-add-to-cart modal on the storefront.

Fix path: Settings → Checkout → open the Live profile → confirm the upsell / cross-sell UI extension is enabled on the correct surface (checkout / thank you / order status / post-purchase). Publish the profile. If Additional scripts died after extensibility and thank-you offers never load, use thank-you-page-upsell-broken. Broader Checkout Extensibility upgrade breakage is checkout-extensibility-upgrade-broken. CSS / consent that leaves a modal node at display:none, or a cookie banner holding the upsell script, is the same class of hide as other widgets — inspect DevTools and allow the documented consent category (cookie-banner-blocking-checkout when consent blocks cart / checkout scripts).

06

You tested bundle builder, quantity breaks, free shipping bar, sticky ATC, or product recommendations instead.

Bundle builder / FBT widget missing is shopify-bundle-builder-not-showing. Quantity breaks / volume discount tiers missing are shopify-quantity-breaks-not-showing. Free shipping progress bar missing is shopify-free-shipping-bar-missing. Sticky add-to-cart missing is shopify-sticky-add-to-cart-missing. Recently viewed / recommendations carousels are shopify-recently-viewed-not-showing. Thank-you / order status upsell after payment is thank-you-page-upsell-broken.

The only honest test for this page: upsell / cross-sell popup or post-add-to-cart offer is missing on a live add-to-cart path that should show an offer — fixable with one upsell app path on Current, a published Function if used, a cart drawer / popup block on the published theme, checkout extensions on Live if that is the surface, and no CSS / consent hide — not bundle builder alone, not quantity breaks alone, not free shipping bar alone, not sticky ATC alone, not recommendations alone, not thank-you upsell alone. Capture app + Function + drawer + extension path, fix the path. Anything else is a different product.

07

When to stay DIY vs pay $997.

Stay DIY if one upsell / cross-sell path is enabled on Current, any required Function is published, the cart drawer / popup block is on the published theme (or checkout extension is on Live), and the offer now shows on a live add-to-cart. That is ordinary Shopify admin + theme work.

Pay $997 when the gap is wiring: lead capture, ops alerts, and a checkout-ready workflow on the stack you already pay for, installed in 72 hours after collaborator access lands. Latch does not sell an earnings, conversion, or AOV / upsell lift number. Latch does not rebuild your theme’s cart drawer as a design agency. One live store. Clock starts when collaborator access is in.

Buy the 72-hour install — $997Merchant FAQAll playbooks