Skip to main content
A multi-product upsell charges the card from the first order once for several products. The buyer gets one order with one line per product, and the funnel continues to its next step exactly as it does after a single upsell. You can use it two ways:
  • A fixed bundle. One button buys every product you list.
  • A chooser. Your page shows options (1, 3 or 6 bottles, a cream, a gift box) and the buyer picks. You build the layout; window.ef.upsell keeps the selection and buys it.

The tag

Put it in a button’s link like any upsell tag. One click buys prod1, prod3 and prod5. [UPSELL_DECLINE] on the same page works as usual: it skips the offer and continues the funnel.
The tag also decides what the page is allowed to sell. A chooser can only pick products listed in the tag, at most at the quantity the tag allows (max_qty, or the quantity written next to the code). Anything else is refused and the card is not charged. Prices always come from your product catalog, never from the page.

Let the buyer choose: window.ef.upsell

Keep the tag on your buy button. Your chooser tells window.ef.upsell what is selected, and the same button then buys the selection. The tag’s link carries the funnel, page and click details, so the sale is attributed and the funnel continues exactly as with a plain [UPSELL=X] button. If the selection is empty, or holds something the tag does not offer, the button does nothing and an error event fires with the code, so you can show your own message.

Example: 1, 3 or 6 bottles

Without the script, the button would buy all three packs. With it, the button buys only the pack the buyer picked. To sell several products together with a quantity, list them with max_qty and let the buyer add what they want:
You can also skip the button and call ef.upsell.buy() from your own UI.

What gets recorded

  • One charge for the total of the selection, with shipping and tax worked out per product, on the card from the first order.
  • One order with one line per product and its quantity. Fulfillment, order sync, refunds and reports see each product as its own line.
  • The upsell-accept event, your conversion postbacks (Meta, RedTrack and others) and the thank-you page get the full total and every product.
  • A double click, a second tab or a reload charges once. The second request gets the first result.
  • A declined card charges nothing and records no order. The buyer goes to your decline step, as with a single upsell.

Limits

Supported merchants: NMI (also Apple Pay saved on NMI), Stripe, the Test merchant and the card gateways added through plug-ins. Authorize.Net, PayPal, Klarna, Shop Pay and the networks refuse a multi selection. The card is never charged when the upsell is refused, and buy() gives you the code and a message you can show. A selection of one product at quantity 1 is a normal upsell, identical to [UPSELL=X].