Email subscribers who viewed a product and didn't buy

The job: someone on your email list looks at a product and leaves. Send them one well-timed email about that product, and nothing if they bought it anyway.

Who this is for: stores with Klaviyo connected to Signal.


What Signal sends

Once an hour, Signal tells Klaviyo about every email subscriber who viewed a product: someone Klaviyo holds as subscribed to email marketing. Signal identifies far more of your visitors than Klaviyo can on its own, so this reaches subscribers Klaviyo's own browse tracking misses.

Each view arrives as the event Geysera Signal: Viewed product, at most once per person, product and day, with these properties:

PropertyExample
product_nameVitality NAD+ Booster Powder
product_urlhttps://yourstore.com/product/nad-booster/ (no tracking parameters)
image_urlthe product's main image from your store
price, currency118, USD
product_id, categoryyour store's id and category
subscription_customertrue if they have a subscription order. Only on stores that record it (WooCommerce today); absent elsewhere, never a guess

Only subscribed people are sent. People who never opted in, unsubscribed or are suppressed are not, and Signal never creates a profile in your Klaviyo.


Before you start

  • ESP sync is on (Settings → Connections). Nothing is sent while it is off.
  • Your Klaviyo key has Events: Write. If it doesn't, the Klaviyo row under Settings → Connections says so. Add the permission on Klaviyo's API keys page.

Build the flow in Klaviyo

  1. Flows → Create flow → Build your own. Name it, for example, "Viewed product (Signal)".
  2. Trigger: Metric → Geysera Signal: Viewed product.
  3. Flow filters:
    • Placed Order zero times since starting this flow. This is what makes it "didn't buy": anyone who orders while waiting leaves the flow.
    • Optionally, Has been in this flow zero times in the last 7 days, so a keen browser gets one email a week, not one a product.
  4. Time delay: 4 hours is a sensible start. Long enough to buy on their own, short enough that they still remember the product. Tune it later.
  5. Email: use the event's properties, e.g. {{ event.product_name }}, {{ event.product_url }}, {{ event.image_url }}. To treat your subscription customers differently, add a conditional split on subscription_customer equals true.

Set the flow live. The next hourly run sends anything new.


Things that will surprise you

  • Events come within the hour, not the second. The delay in step 4 absorbs it.
  • "Didn't buy" is judged by Klaviyo, from the orders your store sends it, not by Signal. Klaviyo already knows about every order the moment it happens.
  • One event per product per day. Reloading the page, or viewing it from a phone and then a laptop the same day, still counts as one view.

Markdown source: /developers/workflows/email-subscribers-who-viewed-a-product.md