Articles on: Upsells & Revenue

Creating Upsell Offers (End-to-End Setup)

Purpose

Answer: “How do I build a working upsell from start to finish?”



⭐ Why This Matters


Most upsells fail not because of the product, but because of poor setup:


  • Too many products shown at once
  • Timers conflicting with the edit window
  • Weak or confusing CTAs
  • Offers active but invisible due to missing blocks


This guide walks you through one complete upsell journey, built correctly the first time.


⚙️ How Upsell Offers Work in Account Editor


One upsell offer = one customer journey

Each offer is modular and controlled by:


  • Products shown
  • Incentives (optional)
  • Timing and urgency
  • CTA confirmation

When accepted:


  • The item is added to the same Shopify order
  • Shopify recalculates totals automatically
  • The action is logged in the order timeline


No new checkout. No duplicate orders.


🧭 Step-by-Step: Creating a Complete Upsell Offer


The offer builder is a 5-step wizard.


Open it at Upsells → Offers → Create offer. On the right you'll see a live preview panel with a device toggle (desktop / mobile); the Preview button opens a full-page modal so you can see the offer exactly as a customer would before you publish.


![IMAGE: Create offer wizard with the 5-step progress header and the live preview panel + device toggle

](https://storage.crisp.chat/users/helpdesk/website/-/e/5/a/f/e5af1a5ea93f4000/image_1qwxw97.png)

📌 The five steps are Surface → Setup → Triggers → Incentive → Review. You can move back and forth; nothing goes live until you publish in Step 5.


✅ Step 1 — Surface: Choose Where the Offer Appears


Pick one or more of the six surfaces this offer will run on.


  • Checkout page — order bump at checkout (Shopify Plus only, highest intent)
  • After checkout — one-click post-purchase, between payment and the thank-you page
  • Thank-you page — highest visibility, shown right after the order is placed
  • Order status page — re-engage customers who revisit to check delivery
  • Free-shipping upsell — progress bar + recommendations toward a free-shipping threshold
  • Email — paste a snippet into your email platform (off-site)


Default: none selected — you must pick at least one to continue.


When to use what: see the surface guide in Introduction to Upsells.


⚠️ If you select Checkout page on a non-Plus store, it can't render. If you select After checkout, make sure Account Editor is the selected post-purchase app in Shopify (Settings → Checkout). If you select Email, Step 5 will offer Get email snippet instead of a theme block.


![ Step 1 surface selection with one surfaces chosen

](https://storage.crisp.chat/users/helpdesk/website/-/e/5/a/f/e5af1a5ea93f4000/image_1ls53vv.png)🪜 Building a Post-Purchase Funnel (Upsell & Downsell Steps)


The After-checkout surface isn't a single offer — it's a funnel.


When your surface is After checkout, Step 2 becomes a visual funnel builder: a sequence of up to five steps that branch on whether the customer accepts or declines the previous one. "Configure a sequential upsell and downsell flow. Offers fire based on whether the customer accepts or declines the previous step."


📌 Each funnel step is saved as its own upsell offer on the post-purchase surface. Click Setup offer on a step to configure it inline.


How the branches flow


  • Upsell 1 shows first (full width).
    • Upsell 1 accepted → the customer sees Upsell 2.
    • Upsell 1 declined → the customer sees Downsell 1 (a softer/cheaper fallback).
  • From there it forks again:
    • Upsell 2 accepted → Upsell 3
    • Upsell 2 declined → Downsell 2


So a funnel can include up to five steps: Upsell 1, Upsell 2, Upsell 3, Downsell 1, Downsell 2 — each shown only on the matching accept/decline path.



What you configure inside each step


Click Setup offer on any step to open the step editor. Per step you set:


  • Headline (up to 60 characters)
  • Description (up to 120 characters)
  • Discount typeNo discount, Percentage off, or Free shipping (with a Discount % field for percentage)
  • Accept call to action text (the accept button) and Decline text (the "no thanks" link)
  • Display DesignStacked, Showcase, Reel, or Spotlight
  • Product modules — add one or more product groups; products show top-to-bottom up to your limit
  • Multi-language content — add a translated Headline, Description, Accept button text, and Decline button text per language (English, German, Spanish, French, Italian, Dutch, Swedish, Japanese)



⚠️ A downsell only ever appears on the declined path of the step above it. Use downsells for a lower-commitment fallback (smaller size, lower price, or free-shipping-only) so you still capture revenue when the main upsell is declined.


📌 Best practice: keep Upsell 1 your strongest offer, make Downsell 1 an easy "yes" (e.g. a cheaper variant or free shipping), and don't over-build — 2–3 steps usually outperform a full five-step maze.


✅ Step 2 — Setup: Build What Customers See


This is where you configure the content and presentation of the offer.


Offer name (internal only)


  • What it does: labels the offer in your dashboard, Analytics, and A/B tests. Customers never see it.
  • Default: empty.
  • Best practice: keep under ~20 characters and include the surface or intent, e.g. ThankYou – Bundle 10%, Checkout – Add Charger, OrderStatus – Cross-Sell.
  • Gotcha: vague names make Analytics and troubleshooting painful later.


Headline


  • What it does: the bold offer title customers read first (e.g. "Complete your setup").
  • When to use: always — it's the hook. Keep it benefit-led and short.


Description


  • What it does: one or two supporting lines under the headline.
  • Default: empty (optional). Use it to justify the add-on or state the deal.


Button text


  • What it does: the accept/CTA label. 2–4 words, positive, on-brand ("Add to my order", "Yes, add it").
  • Gotcha: avoid "Submit", ALL CAPS, or aggressive copy.


Product module(s)


  • What it does: decides which products appear in the widget. Add one or more modules; drag to reorder (top = most visible). Maximum 10 products per offer across all modules.
  • Default: none — you must add at least one module.
  • Best practice: 1–3 products convert best; avoid decision overload.


The 12 available product modules:


  • Single product — one pinned product you choose. Best for a hero item or new launch.
  • Group products — a hand-picked, ordered set. Best for "complete the set."
  • Collection upsell — pulls from a Shopify collection and stays in sync as the collection changes.
  • From cart products — suggests items based on the cart (first / last / most expensive / cheapest / specific), with sorting options.
  • Related products — Shopify Search & Discovery recommendations based on attributes and patterns.
  • Complementary products — Search & Discovery cross-sell suggestions that pair with cart items.
  • Frequently bought togetherauto-suggested from your store's own order history (what your shoppers actually buy together). No manual setup.
  • Search query upsell — matches products to the customer's search keywords in real time.
  • Metafield upsell — pulls suggestions from a product metafield you map, so merchandisers control them per product.
  • Gift card upsell — promotes gift-card products; great around holidays and as a fallback.
  • Abandoned checkouts — re-surfaces items the customer previously abandoned. Strong recovery use case.
  • Recently viewed products — shows items from the customer's browsing history. Works well on Order status.


📌 Frequently bought together is driven by your store's actual purchase history — not a generic model — so suggestions get sharper as you sell more.


Manual vs Automated (AI) modules


Every product module is one of two kinds — you pick this with the Product type control on the module:


  • Manual — "Select specific products. Images are embedded directly from the Shopify CDN." You choose exactly which products show (Single product, Group products, Gift card, From cart → specific, Metafield).
  • Automated — "Dynamic modules. The server renders personalised images per recipient." The products are chosen for you, in real time, by Shopify's AI/ML or by live signals.


The Automated (AI-powered) modules:


  • Related products — "Powered by Shopify's Search & Discovery AI" — product attributes, historical purchase patterns, customer browsing behavior, and cart contents.
  • Complementary products — "Powered by Shopify's Search & Discovery AI" — frequently bought together items, accessories & add-ons, cross-category pairings.
  • Frequently bought together — picked automatically from your store's own order history (not a generic model). It anchors on the highest-value item in the cart and falls back to related products and best-sellers when data is thin. No setup required.
  • Search query upsell — powered by search intent and keyword matching in real time.
  • Abandoned checkouts — uses abandoned-checkout data: cart contents at abandonment, customer return sessions, high-intent recovery moments.
  • Recently viewed products — products viewed in the current session, items added then removed, previously browsed categories.


📌 Manual modules give you full control and the fastest, CDN-embedded images. Automated/AI modules give you hands-off personalization that improves as your store gathers more data — great for "set and forget" cross-sells.





Product Group Behaviour


"Control how products within this offer look and work for shoppers." This panel sets how the chosen products are displayed and what shoppers can do with them:


  • Max Products to Show — how many products the widget displays. Maximum is 10.
  • Allow quantity selection — "Let customers choose a quantity for products."
  • Discounted units per variant (Max quantity per product variant) — "Limits how many units of each product variant the offer discount applies to. Extra units are charged full price."
  • Show product variant selection — "Display the variant picker so customers can choose size, colour, and other options."
  • Show product SKU — "Display the product SKU next to the product name."
  • Show product price — "Display the product price on the upsell widget."
  • Show product badge — "Display the configured static badge (or product metafield value) on each product card."
  • Show review count — "Display a 5-star rating with the configured review count."


⚠️ Show product badge and Show review count only do something if you've enabled the matching badge/review in Upsells → Settings → Product badges and reviews. These per-offer toggles decide whether this offer shows the badge/review you configured globally.




Display design


  • What it does: controls the visual layout of the products in the widget.
  • Default: Stacked.


The 6 display designs:


  • Stacked — full-width rows, image on the left. Clean and readable.
  • Showcase — two-column cards, image on top. Good for visual products.
  • Reel — horizontal scroll. Good for many products in little space.
  • Spotlight — one product at a time in a carousel. Maximum focus per item.
  • List view — one product per row. Compact.
  • Grid view — two products per row. Balanced density.


⚠️ On the Email surface, Reel and Spotlight (and the countdown timer) are not available — use Stacked, Showcase, List view, or Grid view.


Schedule (start / end date + timezone)


  • What it does: sets when the offer is allowed to run. Pick a start date, optional end date, and the timezone the dates are evaluated in.
  • Default: no schedule (runs whenever active).
  • When to use: seasonal promos, flash sales, launches.


Priority


  • What it does: ranks this offer against other offers on the same surface; higher priority wins the slot. Priority is auto-bumped as you add offers, and a conflict-warning banner appears if two offers clash on a surface.
  • Gotcha: if an offer "isn't showing," another higher-priority offer may be occupying the surface — check the conflict banner.


Languages (per-language copy)


  • What it does: lets you provide a per-language headline, description, and button text so international shoppers see localized copy.
  • Default: your primary language only.
  • When to use: any store selling across multiple Shopify languages/markets.


Badge & review toggles


  • Show product badge and Show review count turn on a small badge and a static 5-star review count on the cards (configured in Upsells → Settings).



✅ Step 3 — Triggers: Decide Who Sees It


Step 3 ("Triggers") is where you target the offer.


Choose from 16 targeting conditions plus quick presets, and set whether the offer matches Any or All of them.


Quick Presets vs custom conditions


Step 3 has two modes:


  • Quick Presets — "Pick a ready-made targeting option." One click applies a complete, pre-built rule set: New customers only (first-time purchasers), High-value carts ($100+), VIP customers (tagged VIP in Shopify), Weekend Shoppers (Sat/Sun only), Returning customers (≥1 prior order), No Active Discount (hides the offer if the customer already has a discount).
  • Custom conditions — build your own rule from the 16 conditions with Any/All matching.


📌 Targeting is deep enough to have its own guide. See Targeting Rules, Pricing & Market Conditions for every condition, the Any/All logic, customer segments, and market rules.




✅ Step 4 — Incentive: Discount, Urgency & Limits


Step 4 controls the deal, the timer, and how often the offer can appear.


Discount


  • None — no discount (premium positioning, or when the product sells itself).
  • Percentage off (0–100%) — a percent discount applied to the upsell item at runtime (no visible code).
  • Free shipping — grants free shipping when the upsell is accepted.
  • Default: None.


⚠️ Only Percentage off and Free shipping are supported. There is no fixed-amount ($) discount and no stacking with other discounts. If a Shopify automatic discount overlaps, it can override the upsell price.


Countdown timer (optional)


  • What it does: adds time-bound urgency to the offer.
  • Durations: 5, 10, 15, 30, 60 minutes, or Custom.
  • Styles: Digital clock or Progress bar.
  • Live token: insert {{countdown_timer}} into your headline/description to render the live countdown.
  • Expiry message: optional text shown when the timer reaches zero.


⚠️ Critical rule: the timer must be shorter than your order edit window. If the timer expires while editing is still open, customers get confused. Not available on the Email surface.



Exposure limits


  • Limit Per Order → Max per Order — "How many times this offer can show during a single order."
  • Limit Per Customer → Max per customer — "How many times this offer can show to the same customer across all their orders." On the Email surface this counts add-to-cart actions per customer.
  • When to use: whenever you run multiple active offers on the same surface.


Edit & matching options


  • Allow customers to edit items bought through upsell — when ON, an upsell-added item can be edited after the order like any other line item. When OFF, that upsell line item is locked after purchase (the rest of the order stays editable). Default: OFF — leave off to protect your offer pricing.
  • Consider upsell items when matching conditions for other offers — when ON, items added by this upsell count toward the targeting conditions of your other offers, so a follow-on offer can trigger off an accepted upsell. Default: OFF.


⚠️ "Allow customers to edit items bought through upsell" is the toggle that drives the post-purchase upsell-item lock. Off = locked; On = editable.




One-click accept (post-purchase surfaces)


  • On After checkout / post-purchase, acceptance is one tap — no re-entering payment. Shopify adds the item to the existing order and recalculates totals.


✅ Step 5 — Review & Publish


Final checks, then go live.


Before publishing, confirm:


  • Status will be Active
  • At least one surface is selected
  • Product modules are ordered correctly (and ≤ 10 products total)
  • Timer (if used) is valid and shorter than the edit window
  • Headline, description, and button text appear correctly in the preview


Then complete the surface-specific final step:


  • For on-site surfaces (Checkout, After checkout, Thank-you, Order status, Free-shipping): add the Upsell Block in your Shopify theme editor for each selected surface. An offer can be Active but invisible if its block isn't placed.
  • For the Email surface: click Get email snippet and follow the modal (see below) — there is no theme block.



📌 After publishing, place a test order to confirm the offer renders on each surface before relying on it.


✉️ Setting Up the Email Upsell Surface


The Email surface puts your upsell inside the emails you already send.


  1. Build the offer and choose Email as the surface (Step 1).
  2. Configure products, discount, headline, button, and a supported display design (Stacked / Showcase / List / Grid — no Reel/Spotlight, no timer).
  3. Click Get email snippet. The "Your email snippet" modal opens with a live preview, copyable HTML, and an Email platform selector.
  4. Pick your platform: Klaviyo, Omnisend, Shopify Email, Mailchimp, or SendGrid. Each shows its own paste instructions and the correct merge-tag syntax.
  5. Choose the button action:
  • Redirect to PDP (recommended)
  • Add to cart → checkout
  • Add to cart → cart page
  1. Paste the HTML into your email template at the spot you want the upsell.



⚠️ PDP redirect requires enabling the Email upsell app embed and the Email upsell banner block in your theme. Without them, the redirect can't land on the product page.

Open Theme Embeds:



📌 Keep your platform's email/order merge tags in the snippet (e.g. Klaviyo {{email}} / {{event.order_id}}, Mailchimp |EMAIL| / |ORDER_ID|). They power attribution — personalized product images render at email-open, and opens/clicks track back to the offer.


🗂️ Templates & Duplicating Offers


You don't always have to start from scratch.


  • Templates (customer-need presets) — "Start from a customer-need preset — every template uses AI-picked products and lands you on the Review step." The Templates card above the offers table groups ready-made offers by surface and customer need; choosing one auto-selects AI-picked products and drops you straight on Step 5 — Review, so you can publish in a couple of clicks and fine-tune later.
  • Duplicate — the Duplicate row action on any offer clones it as "… (Copy)". The copy is created inactive and has its surfaces stripped, so you can retarget it safely before going live.



⚙️ Global Upsell Settings (Upsells → Settings)


Individual offers aside, the Settings tab controls store-wide upsell behavior. Open Upsells → Settings.


Global control


  • Enable upsell module — "Master switch — turning this off pauses all active offers immediately." Default: ON. Flip it off to instantly pause every upsell across every surface without deleting your offers.


Checkout extension visibility


  • Only show when requested by an extension block — "When enabled, checkout offers only appear where you paste the offer ID into the extension block's customization field in Shopify Checkout." Default: OFF. Turn it on when you want precise, manual control over exactly where a checkout (Plus) offer renders.


Product badges and reviews


"Add a static badge and review count to every upsell product, or wire each to a per-product metafield so values can be set per product."


Static badge


  • Static badge toggle — "Show a label on every upsell product to draw attention (for example, 'Sale', 'Best seller', or 'Limited')."
  • Badge text — up to 24 characters (placeholder "Sale").
  • Badge toneDefault, Critical, or Subdued (controls the badge color).
  • Use a product metafield to override per product — Metafield: accounteditor.upsell_badge (single line text). Click Create metafield definition once; then set values per product under Products → Metafields.


Static review count


  • Static review count toggle — "Show a five-star rating and a fixed review count on every product."
  • Review count — a whole number 0–99,999, shown as 5 stars + the count.
  • Use a product metafield to override per product — Metafield: accounteditor.upsell_review_count (integer).


⚠️ "Showing review counts that aren't backed by real reviews may conflict with Shopify App Store policy and consumer-review laws (FTC, EU)." Only display numbers you can substantiate.


Hide from upsells


Stop specific products or a whole collection from ever being recommended.


  • Hidden products — toggle on, then pick products. "Products added here will never appear in any upsell offer."
  • Hidden collection — toggle on, then pick a collection. "Every product inside the selected collection is excluded from upsell offers."
  • Use cases: exclude clearance/no-margin items, out-of-policy products (alcohol, hazmat), or items you never want discounted via an upsell.


IMAGE: Upsells → Settings: Global control (Enable upsell module), Checkout extension visibility, Product badges and reviews (badge text/tone/metafield + review count), and Hide from upsells (Hidden products + Hidden collection)



🚚 Free-Shipping Upsell — Product Recommendations


Free-shipping product recommendations: AI or manual


For the Free-shipping upsell, choose how the recommended "add this to reach free shipping" products are sourced:


  • AI (recommended) — "Uses AI to automatically recommend best-selling products that help customers reach the free shipping threshold." Hands-off; surfaces best-sellers sized to close the gap to the threshold.
  • Manual — pick the specific products you want to recommend toward the threshold.


(Default count is 3 products; raise/lower it with Max products.)




🧪 Real Merchant Scenarios


Scenario A — “Too many products, low conversion”


Cause:

Five products shown at once → decision overload.

Fix:

Reduce to one primary product + one backup option.


Scenario B — “Timer expired instantly”


Cause:

Timer longer than edit window.

Fix:

Shorten timer or disable it entirely.


Scenario C — “Offer active but invisible”


Cause:

Upsell Block not added to the surface.

Fix:

Add the Account Editor Upsell Block in the correct page template.


❓ FAQs


Q: Can I show multiple products in one upsell?

Yes, but limit it. Fewer options convert better.


Q: Can upsell items be edited later?

Yes — if allowed in your targeting settings and the order remains editable.


Q: Can I reuse the same offer on multiple surfaces?

Yes, but adjust copy and products per surface for best results.


⚠️ Common Issues & Fixes


Issue

Cause

Fix

Offer active but not showing

Block missing

Add Upsell Block in theme

CTA not visible

Button text empty

Set label and save

Timer disappeared

Expired

Shorten duration or disable

Products not loading

Module misconfigured

Re-select products




→ Targeting Rules, Pricing & Market Conditions


→ Upsell FAQs & Troubleshooting


→ A/B Testing & Upsell Analytics

Updated on: 25/06/2026

Was this article helpful?

Share your feedback

Cancel

Thank you!