Variant Upgrade in Cart: Switch to a Bigger Size or Bundle

Short answer: A variant upgrade in the cart is a one-tap switch from the size or pack the shopper picked to a larger one, at a better price per unit. It is not a new product in the cart. It swaps the SKU. That is why it lifts average order value without extra shipping confusion. Show the save in dollars. Keep the tap inside the drawer.
Most stores upsell a second item. That is a cross-sell. A variant upgrade in cart is different. The person already chose the product. You are asking them to take more of the same thing: 500 ml instead of 250 ml, a 90-day bottle instead of 30, a 3-pack instead of one.
We build cart drawers at Oxify. This is one of the cleanest AOV moves we see, and one of the easiest to mess up. Below is the playbook: when it works, the copy, the swap rules, and the traps.
Key Facts (verified August 2026)
- Shopify's
/cart/change.jsendpoint cannot change a line's variant ID. It only updates quantity, properties, and selling plan. A variant "swap" is always two calls: add the new variant, remove the old line. /cart/change.jsedits one line item at a time, and when you change aselling_planyou must identify the line by itslineindex, not the variant ID.- Variants of one product share a product ID but carry separate variant IDs, prices, and inventory — so the bigger size can sell out independently of the small one.
- Most Google results for "change variant in cart Shopify" are developer forum threads and app listings, not merchant guides. There is no native no-code setting for this in Shopify themes.
- Oxify Cart Drawer & Upsell is Built for Shopify, rated 4.9 with 37 reviews, with visible plans from $9.99 to $49.99/month (checked live on the App Store this month).

Key Takeaways
- A variant upgrade replaces the line item. Do not add a second bottle beside the first unless you mean to.
- Sell the per-unit price, not a vague "upgrade." "Save $4 vs two small bottles" beats "Go premium."
- Best fit: consumables, beauty, coffee, supplements, pet food, and apparel size runs with a clear "bigger is cheaper per wear."
- One offer per line. Two upgrade cards in a phone drawer freeze people.
- Never offer a cheaper, smaller size as the "upgrade." That is a downsell with a smile.
What Is a Variant Upgrade in the Cart Drawer?
It is a prompt on a cart line that says, in effect: switch this SKU to a bigger size or a bundle variant.
Example:
- In cart: Daily Serum, 30 ml, $28
- Offer: Switch to 50 ml for $38 (save $6 vs buying two 30 ml)
- Tap: the 30 ml line becomes 50 ml. Quantity stays 1. Total goes up. Unit price goes down.
Shopify stores variants as different IDs on one product. Under the hood, the cart drawer adds variant B and removes the variant A line in the same tap — Shopify's cart API has no single "replace variant" call. The shopper never goes back to the product page. That is the whole trick.
This is not the same as:
| Move | What happens | When to use it |
|---|---|---|
| Variant upgrade | Swap to a larger size / pack | Same product, better unit price |
| Cross-sell | Add a different product | A related add-on they might miss |
| Quantity break | Same SKU, more units, lower unit price | They already like this exact size |
| Subscription upgrade | Same SKU, one-time becomes subscribe | Consumables with a refill rhythm |
If you sell Subscribe & Save, use our subscription upgrade in cart drawer guide. Do not mix "go bigger" and "subscribe" on the same line. Pick one primary ask.
Why This Works After They Already Picked a Size
On the product page, people pick the safe size. Small bottle. One pair. 30-day supply. They are still deciding if they trust you.
In the cart, they have already said yes. The remaining question is "how much?" That is a cheaper question. You are not restarting the sale. You are editing the order.
Unit price is the lever. A 30 ml at $28 is $0.93/ml. A 50 ml at $38 is $0.76/ml. Write that out. Shoppers are not rude. They are busy. Do the math for them.
You do not need Amazon's recommendation engine for this. You need one honest swap on a product that already has a bigger pack, shown to the person who just proved they want the product. That is the entire "algorithm."
Where Variant Upgrades Convert
Use this as a yes/no filter before you build anything.
- Yes: skincare, haircare, vitamins, protein, coffee, tea, snacks, pet food, candles, detergent, socks sold as 1 vs 3-pack.
- Yes with care: apparel, if "L" vs "XL" is not the offer. Size is fit. Upgrade is a 2-pack or a kit, not a bigger shirt they did not ask for.
- No: custom, made-to-order, one-size art, anything where the small SKU is the product (a print, a single ticket).
- No: when the "bundle" is a different product family. That is a cross-sell. Treat it like in-cart recommendations.
If the bigger variant is often out of stock, skip the offer. A dead "Upgrade" button trains people to ignore you.
Copy That Gets the Tap
Lead with savings. Name the size. Keep it under two lines on mobile.
Lines that work:
- "Switch to 90-day and save $11 vs three 30-day bottles."
- "Make it a 3-pack. $6 less per pair."
- "Go 500 ml — same formula, 20% less per ml."
Lines that flop:
- "Upgrade your experience."
- "Customers also bought the large." (maybe they did; it still sounds like a generic widget)
- "Add the 50 ml" when the 30 ml is still in the cart. People think they will get both and get charged twice.
Button text should say the action: Switch and save, not Add. Add means extra item. Switch means swap.
How to Set It Up (No-Code and Dev)
Method 1: Cart drawer app (fastest)
In a drawer app that supports variant offers or manual upsells, map each small variant to its larger sibling. Show the offer only when the small SKU is in the cart and the large SKU is in stock.
- List your upgrade pairs in a sheet: small variant ID → large variant ID, prices, unit save.
- In the app, create a rule: if cart has small, show large as a swap, not as "add."
- Exclude the offer if the large is already in the cart.
- Test on a phone: tap switch, confirm the old line is gone and the new line is there.
Oxify Cart Drawer & Upsell can run this as a targeted in-cart offer so you do not edit theme files — it is Built for Shopify, sits at 4.9 stars across 37 reviews, and visible plans run $9.99 to $49.99/month by order volume. The important part is the swap behavior, not the brand name of the app. For the broader offer stack around it, see how to add upsells to your cart drawer.
Method 2: Theme code (developers)
The cart talks to Shopify over AJAX. A swap is two steps in one user tap:
- Add the larger variant with
/cart/add.js. - Set the small line's quantity to 0 with
/cart/change.js. There is no way to change the variant ID on an existing line —change.jsonly accepts quantity, properties, and selling plan. - Re-read
/cart.jsand redraw the drawer from that response. Never invent the total in the browser.
Two caveats from the API docs. change.js edits one line at a time, so a swap is always sequential, not batched. And if the line carries a subscription selling plan, you must target it by line index when changing the plan — and decide on purpose whether the new, larger variant should carry the same plan via add.js's selling_plan parameter or land as one-time.
If you only add the large SKU and forget to remove the small one, you have a messy cart and an angry email. Always refresh from Shopify's cart object. Horizon and Dawn already use bundled section rendering for cart updates. Match that pattern if you stay in the theme.
Guardrails So You Do Not Hurt Conversion
- One upgrade per line. If they have two serums, you can show two prompts. Do not stack three sizes for one serum.
- Keep margin. If 50 ml at $38 costs you almost as much as two 30 ml, you are paying for AOV with profit. Run the unit cost first.
- Match images. Show the large pack photo. A tiny thumbnail of the small bottle next to "go large" is confusing.
- Respect selling plans. If the line is already a subscription, do not swap it to a one-time jumbo pack unless that is the point. A naive add-and-remove drops the selling plan silently. See subscription upgrades in the drawer for that flow.
- Check the big size's inventory. Variants track stock separately. Gate the offer on the large variant being available, or the tap errors at the worst possible moment.
- Do not fight quantity breaks. If you already shout "buy 3 of this SKU," a size swap on the same line is two different math problems. Pick one primary path. See quantity breaks in the cart drawer.
A Simple Test Plan
Run 14 days. Do not change five other cart widgets in the same window.
- Primary: attach rate — upgrades / carts that saw the offer.
- Secondary: AOV for sessions that opened the drawer.
- Guardrail: drawer-to-checkout rate. If upgrades rise but checkout falls, the prompt is in the way. Move it below the sticky pay button or shorten the copy.
A 5–12% tap rate on a well-matched size offer is a realistic band for in-cart offers in public Shopify upsell writeups. Your catalog will sit above or below that. Consumables sit high. Fashion sits lower. If you see 0%, the rule is wrong or the button still says "Add." For the full metric setup — what to log, how to segment, and how long to wait — use our guide to measuring cart upsell performance.
Mistakes We See Every Month
- The double bottle. Offer adds the large and leaves the small. Fix the swap.
- The fake bundle. "Bundle" is a separate product, not a variant. Then inventory, shipping, and discounts break. Use a real variant or a real bundle app.
- The smaller size as a deal. Showing 30 ml cheaper after they picked 50 ml trains people to trade down.
- The product-page repeat. They already rejected 90-day on the PDP. Still show it once in the cart with unit math. Once. If they skip it, stop nagging.
Frequently Asked Questions
What is a variant upgrade in the cart?
Is a variant upgrade the same as an upsell?
Can Shopify do variant upgrades without an app?
Will a size upgrade annoy shoppers?
Should I upgrade size or add quantity breaks?
What happens to a subscription when the variant is swapped?
What to Do Next
Open your top 20 SKUs. Write the upgrade pair and the dollar save per unit. If you cannot write that in one sentence, you do not have an upgrade. You have a different product.
Then put the switch in the drawer, not in a popup. If you want that offer next to shipping and checkout in one Built for Shopify cart, try Oxify Cart Drawer & Upsells. Map one pair, test on a phone, and watch attach rate for two weeks before you add more. When the swap is earning its keep, layer the rest of the drawer using the cart upsell strategy guide.