Cross-sell on Shopify - recommend the right add-ons, discount only the add-ons
Last updated: October 2026
Show a frequently bought together row on the product page or add-on cards in the cart whenever a trigger is in the cart, and let customers add each offer with one tap. Discount the add-ons by percent, amount or a new price, or recommend them at full price, while the trigger itself is never discounted.
Free Starter plan · No long-term contracts · Built for Shopify
What is a cross-sell campaign on Shopify?
A cross-sell campaign recommends add-on products when the cart contains a trigger (a product, collection, tag, vendor, product type, or any product) and, optionally, discounts only those add-ons, which customers add with one tap from the product page or the cart. The trigger is never discounted, and the discount applies only while the trigger is in the cart. That is the difference from a Product Bundle, which discounts a completed set once every slot is filled, and from an Upsell, which replaces the item in the cart with a better version. Cross-sell is one of Discount Prime's 14+ campaign types, all in one install.
Everything a cross-sell needs, in one campaign
Flexible triggers
Any product, specific products, a collection, tag, vendor or product type, with an optional minimum quantity and minimum spend.
Three offer sources
Manual picks (up to 6), a Pool ranked by 90-day units sold, or Smart suggestions from your order history (Ultimate).
Discount on add-ons only
No discount, % off, $ off or a New price, capped by Max discounted units. The trigger stays at full price.
One-tap add
Offers show on the product page, in the cart, or both, with variant selectors and an Add button on every tile.
Stack or best deal
Let the best deal win, or stack the add-on discount on top of product discounts such as wholesale prices.
Attach-rate analytics
Impressions, adds and attach rate per offer, even for recommendation-only campaigns with no discount.
Every Cross-sell setting, explained
Cross-sell is on Prime and above; settings marked Ultimate need the Ultimate plan. The groups below follow the campaign builder from top to bottom, then the Cross-sell widget settings.
Scenarios (optional starting points)
Picking a scenario pre-fills the builder. Every field stays editable.
| Setting | What it does | Plan |
|---|---|---|
| Frequently bought together | Pre-fills a Specific products trigger, Manual picks, 10% off and Product page placement. | |
| Complete it with an add-on | Pre-fills an Any product trigger, accessory offers and Cart placement. | |
| Pairs well with | Pre-fills a Collection pool as a recommendation only, with no discount. | |
| Reorder essentials | Pre-fills a Vendor trigger, a minimum spend and Stack on top of other discounts. | |
| Smart suggestions | Pre-fills AI-ranked offers built from your orders. | Ultimate |
Campaign basics
| Setting | What it does | Plan |
|---|---|---|
| Campaign name | The internal name you see in the Campaigns list. | Prime |
| Offer title (storefront) | The heading shoppers see on the offer, for example "Frequently bought together". | Prime |
Trigger (When the cart contains)
The trigger decides what has to be in the cart. Trigger items are never discounted.
| Setting | What it does | Plan |
|---|---|---|
| Trigger | Any product, Specific products, Collection, Product tag, Vendor or Product type. Rule triggers (collection, tag, vendor, type) update live as products move in and out. | Prime |
| Min quantity | Optional minimum number of trigger units in the cart before the offer applies. | |
| Min spend | Optional minimum spend on the trigger before the offer applies, useful to keep a reminder to real orders. |
Offer (Recommend)
Choose where the recommended add-ons come from.
| Setting | What it does | Plan |
|---|---|---|
| Manual picks | Search or Browse products to pick up to 6 add-ons. Best when add-ons must match a specific model. | Prime |
| Pool | Pick a pool type (Collection, Tag, Vendor, Product type) and the pool. The list is ranked by 90-day units sold. | Prime |
| Exclusions | Remove products from a pool so they are never offered, for example the trigger products themselves in a same-vendor pool. | |
| Items to show | How many pool offers the widget shows, from 1 to 6. | |
| Smart suggestions | Offers ranked from your order history, with pin and dismiss controls. New shops start from catalog signals and switch to order signals as orders come in. | Ultimate |
| Preview of offer list | Shows the real products that will be offered, with price and stock, and an Exclude button on every row. It also flags discontinued manual picks. |
Offer discount
The discount applies only to the offered items, and only while the trigger is in the cart.
| Setting | What it does | Plan |
|---|---|---|
| No discount | Recommendation only. The widget adds items at full price, nothing is applied at checkout, and you still get impressions, adds and attach rate per offer. | Prime |
| % off | A percentage off each discounted add-on unit. | Prime |
| $ off | A fixed amount off each discounted add-on unit. | Prime |
| New price | A fixed price for each discounted add-on unit, for example a $4.50 add-on sold for $3.00. | Prime |
| Discount value | The percentage, amount or new price for the chosen reward. | |
| Max discounted units | How many units of an offer line get the discount. Extra units pay full price. Hidden when No discount is selected. | |
| Apply when: Trigger and add-on both in cart | The discount applies whenever both are in the cart, however the add-on got there. | |
| Apply when: Only if added from the widget | The line is tagged _prime_xsell (like BOGO rewards) and only those lines are discounted, which makes a context-specific price possible. Hidden when No discount is selected. |
Combinations & overlap
| Setting | What it does | Plan |
|---|---|---|
| Best deal wins | The default. The add-on discount is compared with other discounts and the better one applies. | Prime |
| Stack on product discounts | The add-on discount sits on top of other product discounts. Typical for wholesale, where it comes off the account's wholesale price. | Prime |
Placement & schedule
| Setting | What it does | Plan |
|---|---|---|
| Placement | Product page, Cart, Both, or Don't show it (discount only). Placement is set per campaign, not in the widget. | Prime |
| Manage widget settings | Opens the shared Cross-sell widget for text and colors. | |
| Schedule | Set dates if needed, then click Save. |
Built-in storefront behavior
| Setting | What it does | Plan |
|---|---|---|
| No self or duplicate offers | The widget never offers the product being viewed, or something already in the cart. | |
| Variant grouping | Duplicate variants of the same product are grouped into one tile with a variant selector. | |
| Cart sync after add | The page refreshes shortly after an add so the cart count and totals stay in sync with your theme. |
Cross-sell widget
Found under Widgets, then Cross-sell. These texts and colors are shared by all cross-sell campaigns. The widget only displays offers; discounts come from the campaign.
| Setting | What it does | Plan |
|---|---|---|
| Display widget on store | Master on/off switch for the widget. | |
| Product page title | Shown above the offers on the product page. | |
| Cart title | Shown above the offers in the cart. | |
| Add button text | The text on the add button. | |
| Added button text | Shown on the button right after the offer is added. | |
| Discount badge suffix | Used in the reward badge, for example "10% off". | |
| New price badge text | Used when the reward sets a fixed price, for example "New price $18.00". | |
| Error message | Shown under an offer when adding it fails. | |
| Colors | Button background, Button text color, Widget background color and Text color. | |
| Live preview | Switches between Product page and Cart, and includes a sample variant selector. |
How a cross-sell works in Discount Prime
Set the trigger
Choose what has to be in the cart: any product, specific products, or a collection, tag, vendor or type, with an optional min quantity and spend.
Pick offers and a reward
Hand-pick up to 6 add-ons or use a ranked pool, then choose No discount, % off, $ off or a New price with a unit cap.
Place it and launch
Show it on the product page, in the cart or both. Customers add offers with one tap and the discount applies in the cart.
Why merchants pick Discount Prime for cross-sell
The trigger stays full price
Only the add-ons are discounted, so your most expensive item is never part of the discount math.
The right companions
Manual picks put the exact battery next to the exact camera instead of whatever an algorithm guesses.
Cart-only prices
Only if added from the widget creates a price that exists in the cart card and nowhere else.
Works with wholesale
Stack on product discounts so the add-on saving comes off the wholesale price, in the same install.
Cross-sell questions, answered
How do I add a "frequently bought together" section to a Shopify product page?
Create a Cross-sell campaign with a Specific products trigger, Manual picks as the offer source and Product page placement. The Frequently bought together scenario pre-fills exactly that. Manual picks matter when the add-on has to fit: a pool drawn from an Accessories collection may offer the wrong battery for the camera being viewed.
In the Lumen Camera Co. scenario, nine camera bodies triggered three hand-picked add-ons (spare battery, 128 GB card, strap) at 10% off, with Max discounted units set to 1. A $49 battery dropped to $44.10 while the $1,400 body stayed at full price, and the accessory attach rate on camera bodies went from 23% to 61%.
How do I offer a discounted add-on only in the Shopify cart?
Use an Any product trigger, Cart placement, a New price reward and Apply when set to Only if added from the widget. The widget tags the line it adds, and only tagged lines get the price, so the product keeps its normal price everywhere else in your store.
In the Bright Bites Snacks scenario, a $4.50 sample pack was offered for $3.00 from the cart card, one unit per order. A shopper who added it from its product page paid $4.50. The sample pack went from 0.4% of orders to 31%, with no list of trigger products to maintain.
Do I have to discount cross-sell products on Shopify?
No. No discount is a full reward type. The campaign becomes recommendation only: the widget suggests items and adds them at full price, nothing is applied at checkout, and you still get impressions, adds and attach rate per offer in analytics.
In the Thistle & Vine scenario, glassware ran on a 28% margin the team would not discount. A Decanters collection trigger offered three glasses from a Stemware collection pool, ranked by 90-day units sold, on both the product page and the cart. The glassware attach rate on decanters rose from 18% to 44% and the price never moved.
How do I cross-sell to wholesale customers without losing their wholesale price?
Set Combinations & overlap to Stack on product discounts. With Best deal wins, the add-on discount is compared with the standing wholesale price, and the add-on shows no extra saving. Stacking puts the add-on discount on top of the wholesale price instead.
In the Meridian Salon Supply scenario, a Vendor trigger with a minimum of 6 units and $300 spend kept the cart card to real orders. A same-vendor pool with the color shades excluded offered consumables at 8% off, capped at 2 units, so a box of foils at a $31 wholesale price became $28.52. The consumables attach rate rose from 34% to 71%.
Cross-sell vs Product Bundle vs Upsell
Three ways to grow the order. They differ in what ends up in the cart and where the discount goes.
| Cross-sell | Product Bundle | Upsell | |
|---|---|---|---|
| Cart result | Trigger plus add-on | A completed set | Trigger replaced by a better version |
| Discount goes to | The add-on only | The whole set | The upgraded line (optional) |
| Needs | A trigger | Every slot filled | A trigger product |
| Best for | Accessories, "goes well with" | Kits and outfits | Premium alternatives, bigger sizes |
Trusted by Shopify merchants
“I can't say enough good things about DiscountPrime and the incredible support I received! The app optimizes promotions with volume deals, discounts, and strategic pricing, making it a breeze to create effective sales campaigns. The ability to set max/min purchase requirements for tier-based campaigns is a fantastic feature. The widget customization and compatibility with popular themes add a layer of flexibility that is truly unmatched. Highly recommended!”
“Prime: Volume & Bulk Discount is a game-changer! The app is super easy to use, with all the functionalities we needed to manage bulk discounts effortlessly. The best part? The support team is amazing-polite, responsive, and incredibly helpful. They made everything so smooth, and we're beyond satisfied. Highly recommend this app to anyone looking to boost their sales with volume discounts!”
“Perfect app! Does exactly what it promises - easy discount setup, clean interface, and great support. Everything worked out of the box without any issues. Very happy with the experience.”
Cross-sell FAQ
Which Discount Prime plan includes Cross-sell?
Cross-sell is on the Prime plan and above. Every core setting, including triggers, Manual picks, Pools, all four reward types, placement and the Cross-sell widget, is available on Prime. Smart suggestions, which rank offers from your order history with pin and dismiss controls, need the Ultimate plan.
Does a cross-sell discount need a discount code?
No. The cross-sell discount applies automatically in the cart when the trigger and the add-on qualify, so customers never type a code. With Apply when set to Only if added from the widget, the discount applies to add-on lines that were added through the cross-sell widget, which tags them, and to no other lines.
Does the cross-sell discount the product that triggered it?
No. Trigger items are never discounted. The saving applies only to the offered add-ons, and only while the trigger is in the cart. If a customer removes the trigger, the add-on goes back to full price. A battery bought without the camera body that triggers the offer is charged at its normal price.
How does a cross-sell combine with other discounts?
You choose under Combinations & overlap. Best deal wins is the default and applies the better of the add-on discount and any other discount. Stack on product discounts puts the add-on saving on top, which is typical for wholesale, because Best deal wins would compare it with the standing wholesale price and the add-on would show no extra saving.
Why did a customer pay full price for an add-on?
Usually because Apply when is set to Only if added from the widget and the customer added the product some other way, such as from its own product page. That mode discounts only lines added through the widget, which is what makes a cart-only price possible. Use Trigger and add-on both in cart if the discount should apply however the add-on arrives.
What happens if the add-on is already in the cart?
It is not offered again. The widget never offers the product being viewed or anything already in the cart. Only the number of units set in Max discounted units get the discount, so a customer who adds two batteries with a cap of 1 gets the discount on one battery and pays full price for the second.
Can I recommend products without a discount?
Yes. Choose No discount as the reward. The campaign becomes recommendation only: the widget suggests items and adds them at full price, nothing is applied at checkout, and Max discounted units and Apply when are hidden. You still get impressions, adds and attach rate per offer in analytics, which suits thin-margin products.
Related reading
Launch a cross-sell on Shopify
Recommend the add-ons that belong with each product, discount only those add-ons if you want to, and keep the trigger at full price.
Start free on Shopify