Klaviyo: upsell events & next pick
What Luv Upsell sends
- Accepted Upsell Offer: one event for every offer a customer takes, with the product, its quantity and value, where it was taken, the funnel, the A/B version and the order. Offers taken before checkout are sent when the order reaches Luv Upsell; post-purchase offers once Shopify confirms the charge. Each offer is sent once.
- Declined Upsell Offer: when a customer says no thanks to a post-purchase offer, so a later email can bring it back without another popup.
- Next pick: after each order, the product the customer is most likely to buy next, from your Bought together data, written to their profile.
When Klaviyo's onsite tracking is on in your store, popups and blocks also report Added Upsell to Cart, and popups report Declined Upsell Offer, through it, for shoppers Klaviyo already knows. Those need no key.
Set it up
- In Klaviyo, create a private API key with Accounts: Read, Events: Write and Profiles: Write (Full access works too).
- In Luv Upsell, open Settings › Integrations, paste the key and click Save and check. The key is checked straight away, stored encrypted, and never shown again.
- Turn on Send accepted offers to Klaviyo and, if you like, Write the next best product to Klaviyo profiles.
The event properties
Accepted Upsell Offer carries product_title, product_id, quantity, placement, funnel, version (A or B) and offer_id, with the value in the order's currency; offers taken before checkout also carry order_name and order_id. Declined Upsell Offer carries offer_id, placement and funnel.
placement is one of product, atc (after add to cart), checkout (before checkout), cart, post, post_yes and post_no (post-purchase, and its follow-ups), thanks or in_checkout.
Two flows to start with
- Thank them and show them how: trigger a flow on Accepted Upsell Offer, wait a day or two, and send a short how-to for what they added, using
{{ event.product_title }}. - Bring a declined offer back: trigger a flow on Declined Upsell Offer with the trigger filter placement contains post, add the flow filter Placed Order zero times since starting this flow, wait a few days, and send the offer again. Running several funnels? Split on
funnel.
Next pick on each customer's profile
Turn on Write the next best product to Klaviyo profiles and, after each order, Luv Upsell writes these properties:
luv_upsell_next_pick_title: the product's nameluv_upsell_next_pick_url: a link to the product on your storeluv_upsell_next_pick_image: the product's imageluv_upsell_next_pick_handle: the product's handleluv_upsell_next_pick_at: when it was written
A sample email block
{% if person|lookup:'luv_upsell_next_pick_title' %}
<a href="{{ person|lookup:'luv_upsell_next_pick_url' }}">
<img src="{{ person|lookup:'luv_upsell_next_pick_image' }}" alt="{{ person|lookup:'luv_upsell_next_pick_title' }}" width="280">
</a>
<p>Picked for you: {{ person|lookup:'luv_upsell_next_pick_title' }}.</p>
<a href="{{ person|lookup:'luv_upsell_next_pick_url' }}">Take a look</a>
{% endif %}
Keep a delay of a few days between the order and this email: the property is written when the order reaches Luv Upsell, and the delay makes sure it's there.
luv_next_pick_title and so on. Luv Upsell's properties start with luv_upsell_, so the two never overwrite each other.Questions? hi@customerluv.app — a founder answers every message.