Handing your alert emails to Klaviyo is optional and entirely your choice — by default Notify Me! sends them itself, and nothing changes just by connecting. When you choose to let Klaviyo send your alert emails, Notify Me! sends Klaviyo an event (Klaviyo calls it a metric) each time an alert fires, and your Klaviyo Flow turns that event into an email. This guide lists every event and variable, and shows how to configure a flow so it reaches shoppers who did not opt in to marketing.
Prerequisite: connect Klaviyo (see How does the Klaviyo integration work?) and, when you're ready, set the sender to Third-party sender (Klaviyo) under Settings → Notifications. Real alert events are only sent in that mode — the one exception is Send test event, which works any time. The safe order: connect → build the flow → test it → then switch the sender. (The moment you switch, Notify Me! stops sending the emails itself — a live flow must be ready to take over.)
How it works
Shopper subscribes to an out-of-stock product
│
Product restocks ──► Notify Me! sends a "Back in Stock" event to Klaviyo
│
Your Klaviyo Flow is triggered by that metric
│
Klaviyo sends the email using the event's data
Notify Me! still decides who gets notified and when (inventory monitoring, location rules, batching) — Klaviyo just sends the email. Your flow must not add its own inventory logic.
The events (metrics)
The "Events sent to Klaviyo" card on the Klaviyo page lists every event with the data it carries:
Metric | Fires when | Typical flow |
Subscribed to Back in Stock | A shopper signs up to be notified — only if your subscription-confirmation email is enabled | An opt-in confirmation email |
Back in Stock | A subscribed product is available again | The main restock alert email |
Back in Stock Reminder | The follow-up when a subscriber hasn't purchased and the item is still available | A "still available" nudge |
Pre-order Confirmed | A shopper places a pre-order | A pre-order confirmation |
Pre-order Delayed | A confirmed pre-order's ship date moves | A delay notice |
Metric names are exactly as shown (e.g. Back in Stock). An event fires under the same conditions the matching Notify Me! email would have been sent — so a shopper who unsubscribed via a Notify Me! email link gets no event (and no flow email), and your channel settings and plan limits still apply.
The event variables (what you can put in the email)
Reference event data in a Klaviyo email with {{ event.<PropertyName>|default:'' }}.
A property is omitted when it has no value (e.g. a product with no variants sends no VariantName) — always add |default:'' so your template renders cleanly. Prices are strings; dates are YYYY-MM-DD strings — except the pre-order ship dates, which read as soon as possible! when the offer uses ASAP delivery.
Back in Stock and Back in Stock Reminder
Variable | Example | Notes |
|
| Product title |
|
| Omitted if no variants |
|
| Link straight to the product |
|
| Product image for an |
|
| Price as a string |
|
| Back in Stock only |
These two events also carry a monetary value (the price, in your store's currency), so Klaviyo can attribute revenue to the flow in its analytics — no setup needed.
Subscribed to Back in Stock
Variable | Example | Notes |
|
| The product they subscribed to |
|
| Omitted if no variants |
|
| Link back to the product |
|
| Product image |
|
| Whether the shopper ticked the marketing-consent checkbox — use in a conditional split |
Pre-order Confirmed
Variable | Example | Notes |
| (a list — loop over it) | One entry per pre-ordered product: |
|
| Expected ship date |
|
| The buyer's marketing choice at checkout (omitted on pre-orders placed before this field existed) |
Loop in the template:
{% for product in event.Products %}
{{ product.ProductName }} — {{ product.Quantity }} × {{ product.Price|default:'' }}
{% endfor %}
Pre-order Delayed
Variable | Example | Notes |
| (a list — loop over it) | Each item: |
|
| The date it was going to ship |
|
| The new expected date |
Build a back-in-stock flow
In Klaviyo, go to Flows → Create Flow → Create from scratch.
Trigger: choose Metric → Back in Stock. (New to metric triggers? See Klaviyo's guide: How to create a metric-triggered flow.)
Confirm the trigger and leave Trigger filters and Profile filters empty (see why below):
Add an Email action and build your content from the event variables. A minimal restock block:
{{ event.ProductName|default:'' }} is back in stock! {% if event.VariantName %}({{ event.VariantName }}){% endif %} <a href="{{ event.ProductURL|default:'' }}">Shop now</a>Set the flow to Live.
Flows are forward-only: a newly turned-on flow only acts on events that arrive after it's live. Past subscriptions are not replayed. Turn the flow on, then send a test event to see it run end to end.
Sending to shoppers who did NOT consent to marketing
A back-in-stock alert is a transactional message — the shopper explicitly asked to be told when the item returns — so it's appropriate to send it even to shoppers who didn't tick a marketing-consent box. To make Klaviyo deliver it to everyone, configure the flow as follows.
You don't need to create the profile — the event does it
Every event Notify Me! sends carries the shopper's email; if no Klaviyo profile exists for that email, Klaviyo creates one the moment the event arrives — regardless of marketing consent. There is nothing to pre-create or import: by the time your flow triggers, the profile is there to send to.
Marketing consent is separate. A profile is only subscribed to email marketing (added to the "Notify Me - Back in Stock" list) when the shopper ticks the consent checkbox on your subscriber form. Shoppers who don't tick it still get a profile from the event — just without marketing consent.
What Klaviyo actually blocks
Per Klaviyo's own rules: a marketing message is never delivered to a profile that has unsubscribed or been suppressed. A transactional message is delivered to everyone the flow triggers for — including unsubscribed and suppressed profiles (only hard bounces and spam complaints stop it). Marking the alert transactional is what guarantees delivery to all of them — including a shopper who unsubscribed from your Klaviyo marketing last year and requests a restock alert today.
Two ways to make sure everyone gets the alert
Option A — apply for transactional status (full coverage). A transactional message is delivered to everyone the flow triggers for, including unsubscribed and suppressed profiles. Klaviyo grants this per message, after a short review (Klaviyo's own guides: Understanding transactional messages and How to use flows to send transactional emails):
In the flow builder, click your alert email message.
Switch the message to Manual mode.
In the right sidebar, click Apply for transactional status.
Klaviyo reviews it (typically up to 1 business day). The message shows "under review", then "accepted" once approved — after that it sends regardless of marketing-consent status.
For the review to pass, the email must be genuinely transactional: the alert must be the primary purpose, the subject line clearly transactional, and the transaction details first and most prominent — no promotions, cross-sells, or unrelated marketing. If a request is rejected, fix the content and appeal via Klaviyo Support (their chat handles "need emails marked as transactional").
⚠️ Keep transactional messages strictly about the alert. Abusing the designation can put your sending reputation (and Klaviyo account) at risk. To market to these shoppers, use the consent checkbox and your "Notify Me - Back in Stock" list instead.
Option B — collect consent on the subscriber form (simplest). Enable the Email marketing consent checkbox (Back in stock → Customization → Subscriber form → set the field to Show) — the Klaviyo page reminds you with a direct link after you connect. Shoppers who tick it are subscribed with consent in Klaviyo, so your flow email reaches them with no special designation. Note the limits of this path: shoppers who don't tick the box are still reachable by a normal flow email unless they are unsubscribed or suppressed in Klaviyo — only transactional status (Option A) covers those.
You can combine both: collect consent for cleaner deliverability and marketing, and hold transactional status so no shopper ever misses an alert.
Also check these Klaviyo settings
Smart Sending — leave it off for alert messages. Flow messages have Smart Sending disabled by default, so normally there is nothing to do. Just make sure nobody has enabled it on your alert email: click the message in the flow and check that "Skip recently emailed profiles" (in the message's Settings sidebar) is unchecked — if it's on, a restock alert can be silently skipped because the shopper got another email in the previous hours. (Details: Klaviyo's Understanding Smart Sending.)
Flow filters — don't gate on consent. A filter like "is in list Notify Me - Back in Stock" or "has consented to email marketing" silently excludes the non-consented shoppers you're trying to reach. For an all-shoppers alert, leave trigger and profile filters off.
Want to treat the two groups differently?
Use a conditional split. The Subscribed to Back in Stock and Pre-order Confirmed events carry the choice directly — split on {{ event.EmailConsent }}. The Back in Stock / Reminder events don't include it, so split on list membership (is / is not in "Notify Me - Back in Stock"). A common pattern:
Consented branch → a richer email; they stay on your marketing list for future campaigns.
Not-consented branch → a clean transactional alert, plus (optionally) a tasteful opt-in link.
Deduplication
Every event includes a unique identifier, so if the same alert is ever delivered twice (retries, etc.), Klaviyo treats it as one event and your flow won't fire twice. No dedup logic needed on your side.
Testing your flow end to end
Set the flow to Live first (flows are forward-only).
On the Klaviyo page in Notify Me!, click Send test event on an event row and enter an email you control. Notify Me! pushes a sample Back in Stock event with placeholder product data.
In Klaviyo, open that profile's activity feed and confirm the event arrived, then confirm the flow queued/sent the email.
Tips:
Use a real inbox. Placeholder addresses (
[email protected],@test.com, …) are accepted by Klaviyo but may be silently dropped — the event never shows up and nothing is wrong with your setup.If your live email is marketing, the test profile must be consented; if it's transactional, it sends regardless.
If "Skip recently emailed profiles" was enabled on the message (it's off by default), a test can be silently skipped when that address got a recent email — uncheck it or use a fresh address.
Once the flow test passes, switch the sender to Third-party sender (Klaviyo) and do one real end-to-end check: subscribe to an out-of-stock product with your own email, restock it, and confirm the flow email arrives.
Common pitfalls
⚠️ Don't use Klaviyo's product/catalog blocks. They pull from Klaviyo's own synced catalog — Notify Me! sends events, not a catalog sync — so a catalog block may render empty or skip the send ("Catalog Item Unavailable"). Build product content from the event variables instead. This is the single most common reason a restock email "doesn't send."
Sender still set to Notify Me! → no events, flow never fires. If your flow works with the test event but never fires for real restocks, check the Email provider setting under Settings → Notifications.
Sender switched before the flow was live → alerts silently stop. Once Klaviyo is the sender, Notify Me! no longer emails — build → test → then switch.
Duplicate emails from a list-triggered flow. Notify Me! sends exactly one path per alert. Duplicates come from a flow triggered by "Added to list: Notify Me - Back in Stock" alongside the alert flow, or two flows on the same metric.
Flow turned on after the event. Flows only act on events that arrive after they're live. If a specific shopper was skipped, Klaviyo's Troubleshooting why a flow message skipped a profile shows the exact reason per profile.
Consent filter on a transactional alert. It silently excludes non-consented shoppers — remove it for all-shoppers alerts.
Shopper unsubscribed from Notify Me! emails. They get no event at all — that's their choice being honored, not a bug.
Connection expired → flows stop firing, but shoppers are safe. Notify Me! automatically falls back to sending the alert emails itself (and emails you about it). Your flows resume when you reconnect.
Need help?
If you get stuck building your flow, reach out to us through live chat in the app or at [email protected] — we're happy to help.




