Skip to main content

Cart-value upsell

Time: ~15 minutes | Difficulty: Beginner | Type: part of Funnel demos
Finished project: cart-value-upsell. Clone it if you want the working app first — or keep reading and rebuild the same graph.
The classic AOV ladder. Orders of 50ormoregetthepremiumhoodieupsellthatshopperalreadyshowedintent.Smallerordersgeta50 or more** get the premium hoodie upsell — that shopper already showed intent. Smaller orders get a **9 add-on instead: an easy yes that still lifts average order value. Unlike the geo and tag demos, nothing is simulated here — the real order total decides. Cart-value upsell funnel: checkout, then hoodie for totals of fifty dollars or more, socks otherwise

What you need

Prices are integer cents — the $50 threshold is 5000.

The graph

Four steps. The split is two edges out of checkout — the total edge outranks the always fallback.
Related conditions: mainOrder.hasProduct { productId } routes on what they bought instead of how much; lastOrder.totalGreaterThan looks at the most recent order in the session (useful after an accepted offer); payment.amountGreaterThan checks the payment itself.

Same type on the Headless SDK

Self-hosted, load the main order on the offer route and branch on its amount. The finished project keeps /offer as one route:
Accepting still charges the saved card in one click via processOfferPayment({ offerId, mainOrderId }).
The demo landing sells 1 tee (29.99)or2tees(29.99) or 2 tees (59.98) so both tiers are one click apart. Buy 1, see the socks. Buy 2, see the hoodie.

Paths the customer can take

Every accepted offer appears on thank you as a related order (relatedOrders[]), exactly like the basic post-purchase demo.

Next

Finished project on GitHub

Clone cart-value-upsell and try both cart sizes in a minute

Basic post-purchase

Start here if this is your first funnel demo

Geo-based offers

Same split, driven by the visitor’s country

Funnel Orchestrator

Nodes, edges, conditions, priorities