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.

📌 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.
🪜 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."

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 type — No 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 Design — Stacked, 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)
✅ 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 together — auto-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.
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.


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."
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.
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.

✅ 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.
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.
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.

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.
✉️ Setting Up the Email Upsell Surface
The Email surface puts your upsell inside the emails you already send.
- Build the offer and choose Email as the surface (Step 1).
- Configure products, discount, headline, button, and a supported display design (Stacked / Showcase / List / Grid — no Reel/Spotlight, no timer).
- Click Get email snippet. The "Your email snippet" modal opens with a live preview, copyable HTML, and an Email platform selector.
- Pick your platform: Klaviyo, Omnisend, Shopify Email, Mailchimp, or SendGrid. Each shows its own paste instructions and the correct merge-tag syntax.
- Choose the button action:
- Redirect to PDP (recommended)
- Add to cart → checkout
- Add to cart → cart page
- Paste the HTML into your email template at the spot you want the upsell.



Open Theme Embeds:

🗂️ 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 tone — Default, 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).
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.

🚚 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 |
🔗 Related Guides
→ Targeting Rules, Pricing & Market Conditions
→ Upsell FAQs & Troubleshooting
→ A/B Testing & Upsell Analytics
Updated on: 25/06/2026
Thank you!
