Retenso
flows · klaviyo

Sold out isn't lost. It's waiting.

14 Jul 2026 · Stam · 7 min read

A product sells out. The demand that sold it out doesn’t disappear at that moment — it keeps arriving. People land on the page, see the grey button, and leave. Some come back the next day to check. Some ask in community threads whether anyone knows when it returns. In categories with limited releases, people describe visiting two or three stockists hunting for one product.

All of that is purchase intent, already created, already paid for by whatever earned those customers in the first place. And on most stores it evaporates against a grey button, because nothing exists to hold it.

The raincheck

Physical retail solved this decades ago. You walk into a hardware store, the drill you came for is gone, and the person at the counter writes you a raincheck: we’ll hold one for you, we’ll call when it lands. The store loses nothing to the stockout except a delay. The customer leaves with a commitment instead of a disappointment.

Most ecommerce stores replaced the raincheck with nothing. The out-of-stock page is a dead end, and the store finds out how much demand it lost only by watching how fast the restock moves — through whoever happened to check the site that day.

The back-in-stock flow is the raincheck, rebuilt. Everything below is the mechanics of writing one properly.

Restocks: the native build

Klaviyo has first-class support for this, and it’s one of the most underused features in the accounts I audit.

The event. A notify-me button on the out-of-stock product page fires Subscribed to Back in Stock — Klaviyo’s onsite snippet provides this for Shopify natively; other platforms send the same event through the API. Each event carries the product, so one flow serves the whole catalog.

The flow. Triggered on Subscribed to Back in Stock. When inventory for that item comes back above your threshold, Klaviyo releases the send to everyone who raised a hand for that specific product. One email is usually enough. It needs almost no copy, because the recipient wrote the brief: the thing you asked about is back. Product, image, price, one button.

The catalog requirement. The flow depends on Klaviyo knowing your live inventory. On standard Shopify that’s automatic. On custom storefronts or unusual checkout stacks — common in the categories I work in, where payment and fulfilment rarely follow the default path — the catalog has to be fed through the Catalog API, and this is the step most botched builds skip. If the catalog doesn’t know stock levels, the raincheck is a promise with nobody watching the loading dock.

Drops: when the product doesn’t exist yet

Restocks have inventory history. Drops don’t — the product is new, limited, and often gone within days. The native back-in-stock trigger can’t help before a product page exists, so the build changes:

Collect intent early. A “notify me about the next drop” signup — on the site, in the post-purchase flow, at the bottom of every drop announcement — writing a profile property or list membership for the product line they care about.

Send in two rings. When the drop lands, the raised hands hear first — a short head-start before the full-list campaign. That head-start is a genuine reward for handing over intent, it costs nothing, and it trains the behaviour you want: the people who tell you what they want get served first.

Stay honest. No fake scarcity, no “almost gone” on deep stock. In communities where customers compare notes daily, invented urgency gets noticed, named, and remembered. Real scarcity doesn’t need decoration.

The small-stock problem

The failure mode that breaks rainchecks: 400 people waiting, 40 units landing. Blast all 400 and the product sells out in an hour — followed by 360 people clicking an alert for something that’s already gone. That email did the opposite of its job; it re-ran the disappointment with the brand’s name on it.

Two fixes, used together:

Sells out grey button Hands raised notify-me event, per product Restock lands inventory check, throttled release Alert → sold one email, no persuasion the raincheck: demand held, not lost
The raincheck pipeline. The demand existed at "sells out" — every later step just keeps hold of it until there's something to sell.

On WooCommerce, the rules change

Everything above assumes Klaviyo can see your inventory. On WooCommerce it can’t: the standard Woo integration syncs products but not stock levels, so the native back-in-stock trigger has nothing to watch. Klaviyo’s own answer is an inventory-aware custom catalog fed through the API — real developer work, and rarely worth it, for a reason that goes deeper than the integration.

Stores that receive goods in batches — coffee roasters, small-batch producers, several categories I work in — often list each incoming lot as a new product, because the batch genuinely differs: different date, different specs, different label. From the platform’s view, the old product never comes back in stock. It just dies at zero. Product-level back-in-stock can’t fire on a product that no longer exists, on any platform.

The fix is to move the raincheck up a level. The customer was never waiting for product ID 4412 — they were waiting for that product line. So the notify-me button writes an interest property (the line, the range, the type) instead of a product subscription, and when the new batch lands, a campaign goes to that waitlist segment. Five minutes per arrival, no custom code, and the email gets to say what a batch business should be saying anyway: new lot, fresh dates, here’s what’s different. A waitlist plugin with a Klaviyo add-on can automate the same-page restock case alongside it — but let the plugin only collect, and let Klaviyo send, from your warmed domain, in your voice.

The raincheck is written for the drill, not for the pallet it arrived on.

The out-of-stock page is a list-builder

One more reframe. The out-of-stock page is usually treated as an embarrassment to be minimised. It’s actually one of the highest-intent signup surfaces on the site: everyone on it wants a specific product badly enough to have clicked through knowing — or about to learn — that it’s gone.

Make the notify-me button the page’s primary action, not a small link under the dead add-to-cart. And say plainly what the signup does: “one email when it’s back — nothing else.” That single line of microcopy addresses the exact fear that stops people from handing over an address, and in my experience it’s the difference between a notify-me button that collects and one that decorates.

What it does to the numbers

I won’t invent a benchmark. What I can tell you from the accounts I run: when a back-in-stock flow is live and the catalog is wired correctly, it’s routinely the highest click-rate email in the entire program, and it never fatigues, because every send is an answer to a request. It’s one of the five emails customers already want — arguably the purest of the five, since the recipient literally filled in a form asking for it.

The take

Check your account for Subscribed to Back in Stock events with no live flow behind them. It’s a two-minute look, and it’s one of the most common gaps I find: the theme has the button, customers have been pressing it for months, and the alerts have never sent. That’s a stack of rainchecks in a drawer nobody opens. Build the flow, wire the catalog, throttle for small stock — and stop paying twice for demand you already earned.

From the blog

More notes from real accounts.

Deliverability, flows, and the mistakes I keep fixing.

All posts →

Free audit · no strings

Get your free audit.

If you want to know how many notify-me hands are currently raised in your account with no flow behind them, that's one of the first things I check in an audit. A complete audit of your retention as a short Loom: what's working, what's leaking, what I'd do first. Implement it yourself, hand it to someone else, or work with me — it's yours either way.

Free, no obligation.