# 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:

| Property | Example |
|---|---|
| `product_name` | Vitality NAD+ Booster Powder |
| `product_url` | https://yourstore.com/product/nad-booster/ (no tracking parameters) |
| `image_url` | the product's main image from your store |
| `price`, `currency` | 118, USD |
| `product_id`, `category` | your store's id and category |
| `subscription_customer` | `true` 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.
