Guide

Checkout upsells for subscription stores, done right

A practical guide to running upsells on a subscription Shopify store — what belongs in the cart, what belongs at checkout, what belongs post-purchase, and the legal lines you can't cross when the second product is also a recurring charge.

16 min readUpdated 21 May 2026By SimpleSubscription Team
On this page (10)
  1. The three upsell surfaces and what each is for
  2. Shopify Functions: what they unlock and what they don't
  3. Pre-purchase vs post-purchase: which converts what
  4. Cart upsell patterns that work for subscription stores
  5. Post-purchase upsell mechanics on Shopify
  6. Auto-renewal disclosure rules that constrain checkout upsells
  7. A/B testing checkout upsells without breaking attribution
  8. Friction, fraud, and the upsell that costs you the cart
  9. Upsell offers that only make sense for subscriptions
  10. The tooling landscape for subscription-aware upsells

Checkout upsells make sense everywhere on Shopify, but subscription stores have an extra layer of complexity that one-off stores don't. If the upsell is a one-time add-on you're playing the regular Shopify upsell game — same UX patterns, same conversion tactics. But if the upsell is another subscription, suddenly you're stacking selling plans, deciding which renewal anchor wins, disclosing two recurring prices at signup, and praying your checkout extensibility supports it. This guide walks through the three upsell surfaces (cart, checkout, post-purchase), the Shopify Functions and UI extensions that power them, what actually converts in subscription contexts vs one-off stores, and the legal/UX guardrails that most upsell apps blur. If you sell subscriptions and you want to lift AOV without burning your auto-renewal disclosure compliance, this is the practical playbook.

The three upsell surfaces and what each is for

Shopify gives you three places to run an upsell: the cart drawer (before checkout), the checkout itself (one-page checkout via UI extensions and Functions), and the post-purchase page (the thank-you page after the order is placed). Each surface has different conversion characteristics, different technical constraints, and a different legal footprint when the upsell is a subscription.

Cart upsells convert in the 4-8% range for most stores. They're high-volume, low-friction, but they're competing for attention against the checkout button. Checkout upsells (via the new Shopify Checkout Extensibility model, replacing checkout.liquid for Plus stores in 2024) convert in the 2-5% range — the customer is committed to buying, but they've also entered "I just want to finish" mode. Post-purchase upsells, where the customer has already paid and you offer a one-click add-on before the thank-you page, convert in the 8-15% range and have the highest revenue lift per impression — because the payment-method friction is already gone.

  • Cart drawer / cart page — best for complementary products, free-shipping threshold nudges, and "upgrade to subscription" prompts on one-time items
  • Checkout (Functions + UI extensions) — best for shipping upgrades, gift wrap, and warranty-style add-ons; subscription upsells are restricted and disclosure-heavy here
  • Post-purchase page — best for high-margin one-time add-ons, accessories, and "second flavor for next box" sampler offers
Tip
Pick by intent, not by lift

Post-purchase has the highest conversion rate, but that doesn't mean every offer belongs there. A subscription upgrade belongs on the cart page where the customer can still see the recurring price next to the subscribe button. A second flavor for a box belongs post-purchase. Match the offer to the surface, not the surface to the headline conversion rate.

Cart, checkout, and post-purchase serve different intent layers. Match the offer to the layer.

Shopify Functions: what they unlock and what they don't

Shopify Functions (introduced 2022, GA 2023) are the WASM-based extensibility that replaced Shopify Scripts. They run server-side at checkout to customize delivery options, payment methods, discounts, and cart validation. For upsells specifically, Functions don't directly "show an upsell" — that's the job of UI extensions — but they do power the discount logic and payment customizations that make subscription-aware upsells possible.

The relevant Function types for a subscription store running upsells: (1) cartTransform — modify line items at checkout (bundle expansion, free-gift attachment), (2) discount — apply conditional discounts based on cart contents (e.g. "add a second subscription, get 15% off both"), (3) deliveryCustomization — hide/rename shipping options based on subscription frequency, (4) paymentCustomization — hide payment methods that don't support stored cards (Klarna, gift cards) when a subscription is in the cart.

Watch out
Subscriptions break most upsell apps' assumptions

Off-the-shelf upsell apps were built for one-off Shopify stores. When you drop them into a subscription store, they often fail in one of two ways: (1) they show a subscription product as a "one-time add" because they don't read the selling-plan allocation, or (2) they try to apply a one-time discount code to a subscription line and the discount doesn't carry to renewals. Always test the upsell app with a subscription product in the cart before going live.

Two things Functions can't do: they can't show a popup or modal (that's UI extensions), and they can't reach external APIs for personalization (they're sandboxed, ~5ms execution budget). If you need "customers who bought X also bought Y" recommendations, that ML happens server-side outside the Function and is passed in as a metafield or cart attribute.

Functions power the rules; UI extensions render the UI. You need both for subscription-aware checkout upsells.

Pre-purchase vs post-purchase: which converts what

The intuition most merchants start with is "post-purchase converts highest, so put everything there." That's wrong for a subscription store because post-purchase upsells require a one-click payment confirmation, and Shopify post-purchase pages have a hard rule: you cannot start a new subscription via post-purchase upsell. Post-purchase one-click is limited to one-time purchases using the already-vaulted card. If your upsell offer is "add a second subscription to this order," that has to happen pre-purchase or it doesn't happen at all.

  • One-time add to a subscription order — works post-purchase, highest conversion, cleanest UX
  • Upgrade from one-time to subscription — must be pre-purchase (cart or product page); customer needs to choose the recurring commitment before paying
  • Add a second subscription — must be pre-purchase; the second selling plan and its disclosure have to be visible before the buy button
  • Subscription frequency upgrade (e.g. weekly to biweekly) — better served in the portal post-purchase via email, not at checkout
  • Free-gift threshold — works at cart, works post-purchase if the gift is free; if you're offering "add $X more for a free gift," cart is better because the customer can still add another product

A useful rule of thumb: if the upsell would change the recurring price or create a new recurring charge, it belongs pre-purchase. If it's a one-time add that uses the already-stored card, post-purchase wins on conversion every time.

Post-purchase converts highest for one-time add-ons. Recurring upsells legally must happen pre-purchase.

Cart upsell patterns that work for subscription stores

The cart drawer is the highest-volume upsell surface and the easiest to instrument. Three patterns consistently outperform for subscription stores:

  1. The "upgrade to subscribe" nudge — when a customer adds a subscribable product as one-time, show a banner: "Subscribe & save 10% on this item — same product, cancel anytime." Conversion rates vary 8-15% depending on category. Higher than any cross-sell.
  2. The "add to your box" cross-sell — when a subscription is already in the cart, offer a complementary one-time SKU at a small discount ("Add coffee filters to your order — $4, only on subscription orders"). Works because the bundle feels coherent.
  3. Free-shipping or free-gift threshold — "Add $12 more for free shipping" works the same on subscription carts as one-time. Slight wrinkle: the threshold should be calculated on first-order subtotal, not lifetime value.
Premium Coffee Blend
$29.90
One-time purchase
$29.90
Subscribe & Save
$25.41 Save 15%
Deliver every
1 week -20%1 month -15%3 months -10%
Billing
Per delivery
Annual Save extra 10%
Free shipping on every delivery
Skip or cancel anytime
Subscribe — $25.41/mo
Cart drawer with an "upgrade to subscription" upsell on a one-time line item
Tip
Show the recurring price, always

If your upsell promotes a subscription, the recurring price has to be visible BEFORE the customer can accept the upsell. California's auto-renewal law (AB-390) and the FTC's Click-to-Cancel rule both require it. "Subscribe & save" with a tiny disclaimer underneath isn't enough — the recurring amount and frequency have to be the same visual weight as the offer headline.

Upgrade-to-subscribe and complementary cross-sells convert best in cart. Disclose recurring price prominently.

Post-purchase upsell mechanics on Shopify

Shopify's native post-purchase extensibility (the "Post-purchase" extension point) gives you a single page between the order-confirmation and the thank-you screen where you can show one or two offers that the customer can accept with one click — no re-entering card details, no new checkout. The card vaulted at checkout is reused.

Constraints to know before you build: only one extension per checkout (you can show 1-2 offers within it, not multiple extensions stacked), no new subscriptions (one-time purchases only, as discussed above), and the page is rendered by Shopify in an iframe so you don't have your storefront's full theme available. Style accordingly — most stores use a stripped-down version of their thank-you-page style guide.

  • One-click acceptance — customer clicks accept, the order is amended, card is re-charged for the delta, done in <3 seconds
  • No new subscription — even if your offer is a subscription, post-purchase can only do one-time add-ons; surface subscription upgrades pre-purchase
  • Single offer recommended — two-step funnels (offer A, then if declined offer B) work but degrade UX; one well-targeted offer outperforms two mediocre ones
  • Margin discipline — discount the post-purchase offer no more than you'd discount the cart offer; an 8-15% conversion lift compounds quickly and doesn't need a 50% discount to clear

On the analytics side: track post-purchase offers as a separate revenue stream from the parent order. Shopify's reports lump them in, but for AOV-lift analysis you want to know "X% of orders took the post-purchase, average lift $Y" — that number is what justifies the offer; the combined AOV doesn't.

Post-purchase = one-time add-ons only. Single offer, native one-click acceptance, separate analytics from parent order.

A/B testing checkout upsells without breaking attribution

Most native Shopify analytics aggregate upsell revenue into the parent order, which makes A/B testing the offer itself hard. Two reliable approaches: instrument your own event tracking (offer impression, offer click, offer accept) and roll up by variant, or use an upsell-specific analytics layer that already separates these events.

The variables worth testing in order of impact: (1) offer SKU — what you upsell matters more than how, (2) discount depth — 10% vs 15% vs free shipping, often surprisingly counterintuitive, (3) copy headline — value framing ("complete your routine") vs urgency ("add now, only $X"), (4) placement — cart vs post-purchase for the same offer, (5) visual presentation — image, text-only, or social-proof framing.

Don't run more than one test at a time on the same surface — interaction effects between concurrent tests inflate or hide real lifts. And give each variant at least 1,000 impressions before reading a result; conversion rate variance is wide at low volumes.

Test offer SKU first, discount depth second. Instrument impressions and accepts separately from order revenue.

Friction, fraud, and the upsell that costs you the cart

Every upsell adds a decision point. Decision points cost conversions. The honest tradeoff: a well-targeted upsell that accepts at 8% might cost you 0.5-1% of base cart conversion because it adds a step. That math is usually positive (AOV lift > checkout-rate dip), but it's not free, and it gets negative fast if the upsell is poorly targeted.

  • Don't upsell on first-order discount carts — the customer is already on a promotional flow; another offer feels predatory
  • Don't upsell more than once per surface — cart drawer + checkout + post-purchase is two too many; pick one
  • Don't autopopulate accepted state — pre-checked upsell boxes are a dark pattern, banned by the EU CRD and the FTC, will lose chargebacks
  • Watch fraud rate on post-purchase — cards that pass checkout sometimes fail on the second charge; if your fraud rate spikes, the post-purchase offer is amplifying a card-testing pattern
Watch out
Pre-checked upsells are a chargeback magnet

Some upsell apps default the upsell to "accepted" with a tiny opt-out checkbox. This is explicitly a dark pattern under the FTC's 2024 Click-to-Cancel rule and the EU CRD. Customers who notice the surprise charge on their statement file chargebacks, and Shopify Payments will side with the customer because the negative-option enrollment is non-compliant. Always make upsells opt-in with a clear button.

One upsell per checkout flow. Always opt-in. Pre-checked = chargebacks.

Upsell offers that only make sense for subscriptions

Some offers are unique to subscription stores and don't translate to one-off Shopify carts. These tend to convert better than generic cross-sells because they leverage the recurring relationship.

  1. Frequency upgrade — "Get this every 2 weeks instead of 4 — save 5% more." Best surfaced post-signup in the portal, but works at cart if framed as a choice
  2. Subscription bundle discount — "Add a second subscription, get 15% off both." Powerful because the per-order economics improve and AOV roughly doubles
  3. Sample / trial size — "Add a sample of next month's flavor to your first delivery, $2." Drives discovery, low risk, conversions in the 12-18% range
  4. Annual prepay upsell — "Pay annually upfront, get 1 month free." Works for high-trust subscribers; usually surfaced after the second renewal succeeds
  5. Gift subscription add-on — "Gift a 3-month subscription to a friend, get $10 credit." Doubles as a referral mechanism
My Subscriptions
Manage your subscription orders
2 active
$63.00/month
Premium Coffee Box
Every month · $39.00
Next delivery: Apr 15
Active
SkipPauseSwapManage
Vitamin Bundle
Every 2 weeks · $24.00
Active
Portal-based subscription upsells often outperform checkout upsells once a subscriber is established

A note on portal upsells: once the subscriber has a few orders under their belt and trusts the brand, in-portal offers ("add a second product to your next box") convert dramatically better than first-order upsells. Don't put all your upsell budget into checkout — the portal is where the real LTV lift lives.

Frequency upgrades, bundle discounts, samples, prepay, and gifts are subscription-native offers that beat generic cross-sells.

The tooling landscape for subscription-aware upsells

Most checkout-upsell apps on the Shopify App Store were built for one-time-purchase stores. A handful actively support subscription-aware upselling: ReConvert, AfterSell, Zipify OCU, and a few subscription-app-native upsell flows that ship inside the subscription app itself (avoiding the integration tax).

If you're already running a subscription app with built-in upsell flows, that's often the lowest-friction option — no extra app integration, the upsell knows about the selling plan, and the disclosure is generated correctly. If your subscription app doesn't support upsells, a dedicated upsell app works fine as long as you test that it reads selling-plan allocation correctly.

  • Subscription-app-native upsell — single tool, single source of truth, no integration tax. Best for stores under 5k MRR.
  • Dedicated upsell app + subscription app — more configuration, more flexibility. Best for stores running complex multi-step funnels.
  • Custom Functions + UI extensions — requires a developer. Best for Shopify Plus stores with non-standard requirements (B2B subscription, multi-currency).
Native subscription-app upsells under 5k MRR. Dedicated tools above that. Custom Functions only when standard tools genuinely don't fit.

Common checkout upsell questions

Can I sell a new subscription as a post-purchase upsell?

No. Shopify's post-purchase extension supports one-time products only, using the card already vaulted at checkout. Subscription upsells (any offer that creates a new recurring charge) must be presented pre-purchase — cart drawer, product page, or main checkout — where the customer can see and accept the recurring terms before the order is placed.

What's the difference between Shopify Functions and UI extensions for upsells?

Functions are server-side WASM modules that customize cart logic (discounts, line-item transforms, payment-method visibility) but render no UI. UI extensions are the client-side surface that renders the offer (modal, banner, post-purchase page). You typically need both: a Function to validate the upsell logic and a UI extension to present the offer.

Will an upsell hurt my checkout conversion rate?

It often costs 0.5-1% of base conversion (every decision point does). The math works out positive if the upsell accepts at 5%+ and the AOV lift exceeds the lost-cart revenue. If your upsell takes longer than 3 seconds to render or adds significant visual clutter, the conversion drop can erase the gain entirely.

Are pre-checked upsell boxes allowed?

No. Pre-checked or opt-out-required upsell boxes are explicitly a dark pattern under the FTC's 2024 Click-to-Cancel rule and the EU Consumer Rights Directive. Customers who notice the surprise charge file chargebacks, and Shopify Payments sides with the customer when the negative-option enrollment is non-compliant. Always require an explicit click to accept.

Should I run upsells in the cart, at checkout, or post-purchase?

Match the offer to the surface. Upgrade-to-subscribe goes in the cart. Shipping upgrades and warranty add-ons go at checkout. Complementary one-time add-ons go post-purchase. Don't run the same offer in multiple places — pick the highest-intent surface for each offer type.

Can I A/B test post-purchase upsells?

Yes, and you should — post-purchase offers vary widely in conversion based on SKU and copy. Most modern upsell apps include native A/B testing. If you're rolling your own, instrument impressions and accepts as separate events and roll up by variant; don't rely on Shopify's default reports which lump upsell revenue into the parent order.

Does the auto-renewal disclosure law apply to upsells?

Yes, when the upsell creates a new recurring charge. California AB-390, the FTC Click-to-Cancel rule, and the EU CRD all require recurring price, frequency, and cancellation mechanism to be clearly disclosed BEFORE the customer accepts. "Clear and conspicuous" — equal visual weight to the offer headline, no tooltip-buried disclosures.

What's a realistic post-purchase conversion rate?

8-15% is typical for well-targeted single-offer post-purchase pages with one-click acceptance. Below 5% usually means the offer is poorly matched to the parent order or the discount isn't compelling. Above 20% is unusually high and often a sign that the offer is being marketed too aggressively — watch chargeback rate.

Should I show the same upsell to repeat customers?

No. Repeat customers have already considered (and either taken or declined) your standard upsell. A subscription store benefits most from segmented offers — first-order get the upgrade-to-subscribe, second-order get the bundle discount, sixth-order get the annual prepay. Static one-offer-for-everyone leaves AOV on the table.

Can I use Shopify Functions to hide payment methods that don't support subscriptions?

Yes — that's exactly what paymentCustomization Functions are for. Common pattern: hide Klarna, Afterpay, and gift cards when a subscription is in the cart, because those payment methods don't support stored cards for recurring charges. This avoids the failed-first-renewal pattern that hurts dunning recovery rates.

What's the right discount for a checkout upsell?

Usually 0-10% off the upsell product. The customer already has the parent product in cart — they don't need a 30% discount to add a complementary $4 add-on. Deep discounts on upsells signal desperation and erode the perceived value of the parent product. Keep upsells light on discount, heavy on relevance.

Do checkout upsells work on Shopify (not Plus)?

The new Checkout Extensibility framework (replacing checkout.liquid) ships UI extensions on all Shopify plans, but full checkout customization (Functions for delivery/payment, advanced layout changes) was historically Plus-only. Most upsell apps now support Shopify (non-Plus) for the basic cart/post-purchase patterns. Confirm at install if your app uses Functions or UI extensions and which surfaces are gated by plan.

The pillar

Read the complete Shopify Subscription App overview

Pricing, every feature, side-by-side comparison, FAQ — the single page that ties all these guides together.

Go to the pillar

Run upsells without breaking your subscription compliance

SimpleSubscription handles subscription-aware upsells out of the box — cart, checkout, post-purchase — with auto-renewal disclosure baked in.

Install on Shopify

90-day free trial · Zero transaction fees · Free migration