Shopify Cart Upsell: 9 In-Cart Tactics That Lift AOV (2026)

Short answer: A Shopify cart upsell is an offer shown inside the cart drawer or cart page after an item is added and before checkout: a related product, a one-click add-on, a bigger size, a subscription switch, or a nudge toward a free-shipping or free-gift threshold. Dawn and Horizon render a cart drawer but no upsell block, so you build one with native discount and shipping rules (which set prices but display nothing), a short custom script, or a cart upsell app. The nine tactics below cover all three routes, with where each renders and when to use it.
Key Facts (Verified September 2026)
- Dawn's cart drawer has no recommendation, add-on or progress-bar block; its only merchandising setting is a collection "shown when cart drawer is empty" (Dawn source).
- Horizon's cart drawer section defines no blocks; its cart page accepts app and theme blocks, and a theme setting adds a discount-code field to the cart (Horizon settings schema).
- A native Buy X get Y free gift "is never automatically added to the cart" (Shopify Help).
- Shopify caps active automatic discounts at 25 per store, app-based discounts included (Shopify Help).
- The Product Recommendations API returns 1 to 10 related or complementary products per product ID (shopify.dev).
- Baymard's running average puts cart abandonment at 70.22%, with "extra costs too high" the top stated reason at 40% (Baymard Institute).
What is a cart upsell on Shopify?
A cart upsell (also "in-cart upsell") is any offer that appears inside the cart, between "Add to cart" and "Checkout". On most Shopify stores that is a slide-out cart drawer; on some, the full cart page. The tactics are identical, only the space differs, which is why drawer vs. page decides how many offers fit.
Strictly, an upsell moves the shopper to a higher-value version of the same product and a cross-sell adds a companion. Merchants and apps use "cart upsell" for both, plus threshold nudges and add-ons, and so does this guide. New to the drawer? Start with what a cart drawer is.
Cart upsell vs. product-page, checkout and post-purchase upsells
The cart is one of five places an upsell can live, each with its own timing and plan requirement. Cart and post-purchase are complementary: the cart shapes the order before payment; post-purchase makes a second offer after the money is in.
| Placement | When the shopper sees it | Requirement | Best used for |
|---|---|---|---|
| Product page upsell | Before add-to-cart, while comparing | Any plan; theme sections, Search & Discovery complementary products, or an app block | Bundles, frequently bought together |
| Cart upsell (drawer or page) | After add-to-cart, before checkout | Any plan; custom code or an app to render offers in the drawer | Threshold nudges, add-ons, size and subscription upgrades, quantity breaks |
| Checkout upsell | On the information, shipping or payment step | Shopify Plus only (checkout UI extensions) | Small, low-friction add-ons |
| Post-purchase upsell | After payment, before the thank-you page | Settings → Checkout → Post-purchase page; not shown for wallet or installment payments | One-click second offers with no risk to the first order |
| Thank-you page upsell | On the order confirmation page | Basic plan and up, via thank-you page apps | Reorder prompts, loyalty, low-pressure cross-sells |
Why the cart is the highest-intent placement
By the time a shopper opens the cart they have chosen a product, a variant and a price. The only decision left is "check out now or not", so a cart offer attaches to a decision already made. A product-page upsell interrupts someone still evaluating; a post-purchase offer arrives after the shopper has mentally closed the transaction.
- Every buyer passes through the cart. Returning customers skip product pages with quick-add; nobody skips the cart.
- Cart offers work with every payment method. Post-purchase offers are not shown for Apple Pay, Google Pay, Amazon Pay, Klarna, Affirm, Afterpay or gift-card payments (shopify.dev).
- The cart is where "extra costs", Baymard's top abandonment reason at 40%, become visible. A threshold nudge turns "shipping is $6.95" into "add $12 and shipping is free".
The counterweight: the cart is also the most fragile screen in the funnel, so the placement rules below matter as much as the tactics (see also cart abandonment fixes for the drawer).
9 in-cart upsell tactics that work on Shopify
Each tactic gives the offer as the shopper reads it, where it renders, and when to use it, from the lowest-friction nudges to the ones that need the most data.

1. Free-shipping threshold nudge
Offer: "You're $12.00 away from free shipping", a progress bar that flips to "You've unlocked free shipping" at the threshold.
Where it renders: one bar at the top of the drawer, above the line items, updating on every quantity change.
Set the threshold slightly above your current average order value so most carts need one more item, and match it to a real shipping rate or free-shipping discount (paths in the setup section); a bar that promises what checkout does not deliver is worse than none. Details: the free-shipping bar guide.
When to use it: any store that charges shipping below a threshold.
2. Tiered rewards and free-gift thresholds
Offer: "Spend $50 for free shipping · $80 for a free travel-size cleanser · $120 for a free tote", one bar with three milestones, the gift auto-added at $80.
Where it renders: the same top bar with milestone markers; the gift appears as a $0 line item.
Native Shopify gets closest here and still misses: Buy X get Y prices the gift at free, but the item "is never automatically added to the cart", and nothing in Dawn or Horizon draws progress toward it. Auto-adding and the milestone bar are app territory (Oxify calls it the multi-tier rewards bar, UpCart the Rewards Module). See tiered cart rewards and free gift with purchase.
When to use it: a low-cost, high-perceived-value gift and order values that cluster just below a natural next tier.
3. Frequently bought together, inside the cart
Offer: the cart holds a burr coffee grinder; two cards below read "Add cleaning tablets, $9" and "Add a 250 g bag of the house blend, $14", each a single tap.
Where it renders: a two- or three-card row directly under the line items.
Sources: your own picks in Search & Discovery (up to 10 complementary products per product), the Product Recommendations API, or an app's co-purchase model. Whatever the source, exclude items already in the cart and out-of-stock variants. More: in-cart recommendations and FBT apps.
When to use it: catalogs with obvious companions (consumables, accessories, refills); weak for single-product stores.
4. One-click add-ons: shipping protection, gift wrap, warranty
Offer: a toggle row: "Protect my order from loss or damage, $2.49" · "Gift wrap with a handwritten note, $4.00" · "2-year protection plan, $19.00".
Where it renders: between the line items and the subtotal, as a checkbox or switch rather than a product card.
Leave add-ons unchecked by default; pre-checked ones inflate take rate for a week and come back as refunds and chargebacks. Each add-on should be a real product with its own SKU so it flows through fulfilment and reporting. Guides: shipping protection, gift wrap, warranty upsell.
When to use it: protection for fragile or high-value goods, gift wrap for giftable categories and Q4, warranties for electronics, tools and furniture.
5. Variant or size upgrade
Offer: on a 250 ml line item: "Upgrade to 500 ml for $6 more (20% less per ml)". One tap swaps the variant.
Where it renders: inline on the line item, under the variant title (technically a remove-and-add through the cart API).
Show the per-unit saving, not only the higher price, or the upgrade reads as "pay more". Step-by-step: variant upgrade in the cart drawer.
When to use it: consumables sold in sizes, multi-packs, and catalogs where the larger variant carries the better margin.
6. Subscription upgrade in the cart
Offer: a switch on the line item: "One-time purchase $32" / "Subscribe & save 15%: $27.20 every 30 days".
Where it renders: inline on the line item. It sets the line's selling_plan, which the cart API accepts on /cart/add.js and /cart/change.js (shopify.dev).
You need selling plans first (Shopify's own Subscriptions app or another subscription app creates them), and the saving shown must be the plan's real discount. Details: subscription upgrade in the cart drawer.
When to use it: replenishables with a predictable cycle, once recurring fulfilment already runs smoothly.
7. Quantity breaks / buy more, save more
Offer: "Buy 2, save 10% · Buy 3, save 15%", collapsing to "Add 1 more to save 10%" when the shopper is one unit short.
Where it renders: on the line item beside the quantity stepper.
Pricing can be native (an automatic Amount off products discount with a minimum quantity), but only an in-cart prompt shows "add 1 more" where the extra unit is decided. Two or three tiers is the sweet spot. See quantity breaks in the cart drawer and how many tiers to use.
When to use it: low unit prices, consumables, gifting seasons and buyers who stock up.
8. Discount-code-driven upsell
Offer: "Add any second item and code PAIR10 applies automatically", with the code field in the drawer showing the reduced subtotal.
Where it renders: a discount-code field beside the subtotal, plus a one-line prompt above the recommendation row.
Horizon has a theme setting for a discount-code field in the cart; Dawn does not, so on Dawn it needs code or an app. Keep this to campaign moments, or you train buyers to wait for codes. How-to: discount codes in the cart drawer.
When to use it: campaigns with a second-item goal, and stores whose customers arrive with creator or email codes.
9. AI vs. manual recommendations
Offer: the same row as tactic 3; the difference is who picks. Manual: "for every Skincare item, recommend the SPF 30 and the cleansing balm". AI: ranked by what other shoppers bought alongside this cart's items.
Where it renders: the recommendation row under the line items.
Manual rules win with a small catalog, little order history, or a margin reason to push a product. AI wins once co-purchase patterns are real and the catalog is too big to curate; Rebuy's engine is the enterprise reference point. Most stores run manual rules for top sellers with AI as the long-tail fallback (FBT vs. cross-sell vs. related products).
When to use it: manual first; switch a collection to AI only after you can check its picks against real orders.
Placement and count rules (mobile first)
Most cart opens happen on a phone. These rules protect the checkout button, because an upsell that costs a checkout click is a net loss whatever its take rate.
- Checkout stays visible without scrolling. Pin subtotal and checkout to the bottom of the drawer; everything else scrolls above them.
- One block per job, top to bottom: threshold bar → line items → add-on row → recommendation row → discount field → sticky checkout.
- Count limit: one bar, one add-on row, at most three recommendation cards (two on a narrow phone), no popup over the checkout button.
- Price ceiling: recommend items cheaper than the cheapest item already in the cart; big-ticket cross-sells belong on the product page.
- Nothing delays the open. Fetch recommendations after the drawer is visible. Built for Shopify apps are held to a maximum 10-point Lighthouse drop, a fair bar for your own code (does a cart drawer app slow your store down).
- Express checkout beside checkout, never below the offers (express checkout in the drawer).
How to set up a cart upsell on Shopify
Option 1: without an app. What Dawn and Horizon can and cannot do
Both reference themes ship a cart drawer and neither ships a cart upsell. Checked against the theme repositories in September 2026:
Dawn. Theme settings → Cart → Cart type offers Drawer, Page or Popup notification (the default). The drawer's one merchandising option is a Collection setting whose help text reads "Shown when cart drawer is empty". The cart page footer accepts @app blocks; the drawer is a snippet with no block support.
Horizon. Theme settings offer Cart type: Page or Drawer, auto-open, a cart note, an add-discount-code field and accelerated checkout buttons. The drawer section defines no blocks. The cart page section accepts @app and @theme blocks plus text, image and button blocks, so a static "you may also like" strip or an app block can sit under the cart page, but nothing of the kind renders in the drawer.
Native Shopify can set the pricing rules behind several tactics, without displaying them:
- Free-shipping threshold (tactic 1): Settings → Shipping and delivery → profile → zone → Add shipping option → Rate type: Order amount, top tier priced 0. Or Discounts → Create discount → Free shipping → Minimum purchase amount → Method: Automatic discount.
- Free gift (tactic 2): Discounts → Create discount → Buy X get Y → Customer buys: Minimum purchase amount → Customer gets: Free → Automatic discount. The gift is $0 once the shopper adds it; it is never auto-added.
- Quantity breaks (tactic 7): Discounts → Create discount → Amount off products → Minimum quantity of items → Automatic discount. Mind the cap of 25 active automatic discounts, which app-generated discounts also count against.
- Recommendation data (tactics 3 and 9): Apps → Search & Discovery → Product recommendations → Add recommendations, up to 10 complementary products per product. By default these show on product pages, not in the cart.
The developer route. A developer can build tactic 3 on any Online Store 2.0 theme: when the drawer opens, request /recommendations/products.json?product_id=<first line item's product_id>&intent=complementary&limit=3, render three cards, call POST /cart/add.js on tap, then re-render the drawer with the Section Rendering API. You own maintenance, stock filtering and analytics, and still have no threshold bar, auto-added gift, add-on toggle or subscription switch.
Verdict: native Shopify gives you the prices behind a cart upsell, not the offer inside the drawer. Anything the shopper must see or tap in the cart needs custom code or an app.
Option 2: with a cart upsell app
A cart upsell app replaces or wraps the theme's drawer and renders the offers inside it, with analytics to show which earned their space. The cost is one more script on every page, so check speed and the Built for Shopify badge before installing.
The setup path is similar across apps. In Oxify Cart Drawer & Upsell it runs: Cart editor → Upsells → enable the module → choose the algorithm (AI, manual picks, or frequently bought together) → pick a card template → write the heading and button copy. The rewards bar, add-ons and subscription upgrade live in the same editor, so the drawer stays one component. General walkthrough: how to add upsells to a Shopify cart drawer.
Six apps that render upsells inside the cart, with ratings, review counts and starting prices read from their App Store listings on 2 September 2026:
| App | Rating (reviews) | Starting price | Built for Shopify | Best fit |
|---|---|---|---|---|
| Oxify Cart Drawer & Upsell | 4.9 (37) | $9.99/mo for 0–100 orders, all features, 14-day free trial | Yes | All-in-one drawer: upsells, add-ons, tiered rewards, subscription upgrade, post-purchase |
| Kaching CartDrawer Cart Upsell | 5.0 (1,226) | $9.99/mo for up to 99 orders, 14-day free trial | Yes | Simple drawer with an upsell carousel and shipping-protection toggle |
| UpCart Cart Drawer Cart Upsell | 4.7 (875) | $29.99/mo for 0–200 orders, 14-day free trial | Yes | Mature drawer builder with rewards, add-ons and custom CSS |
| iCart Cart Drawer Cart Upsell | 4.7 (435) | First 100 orders free, then $9/mo | Yes | Budget drawer with bundles and volume discounts |
| Upsell & Cross Sell — Selleasy | 4.9 (2,541) | Free to install up to 50 orders/mo, then $9/mo | Yes | Product-page and in-cart upsell widgets inside your theme's own cart |
| Rebuy Personalization Engine | 4.7 (748) | From $25/mo, scales with order volume | Yes | Enterprise AI across cart, checkout and post-purchase |
Longer comparisons: best cart drawer apps and best Shopify upsell apps.
How to measure a cart upsell
Three numbers, and the third is the guardrail:
- Upsell take rate = accepted offers ÷ drawer opens where the offer was shown, tracked per tactic and per product.
- Incremental AOV = the change in average order value attributable to the upsell. Comparing accepting orders with non-accepting ones overstates it, because bigger carts see more offers; compare before and after, or split test.
- Drawer-to-checkout rate = checkout clicks ÷ drawer opens. If it falls when you add an offer, the offer costs more than it earns.
A worked example with made-up numbers: 1,000 drawer opens and 70 accepted recommendations at $14 is a 7% take rate and $980 of upsell revenue. If drawer-to-checkout slipped from 48% to 45% at the same time, that is 30 lost checkouts, $1,800 at a $60 AOV, against $980 gained. Full method: how to measure cart upsell performance; the conversion question: do upsells hurt conversion rate.
5 cart upsell mistakes to avoid
- Burying the checkout button under a recommendation row on a phone. Sticky footer, always.
- Recommending the wrong things: items already in the cart, out-of-stock variants, or a cross-sell dearer than the main product.
- Pre-checked add-ons. A week of higher take rate, then refunds, chargebacks and one-star reviews.
- Running every tactic at once. Start with one bar and one recommendation row; add more only while drawer-to-checkout stays flat.
- Trusting the native free gift to appear. Buy X get Y prices the gift; it does not add it. Tell shoppers to add it, or use a tool that auto-adds it.
Want all nine tactics in one drawer? Oxify Cart Drawer & Upsell (4.9 from 37 reviews, Built for Shopify) renders the rewards bar, in-cart recommendations, one-click add-ons, quantity breaks and the subscription upgrade in a single drawer, from $9.99/mo with every feature included. See the cart drawer upsell feature page or start the 14-day free trial.