Mailerflow Start free
Blog › Email Marketing Automation › Ecommerce Email Automation

Low Stock Alert Emails: How to Trigger Honest Urgency for Viewed and Wishlisted Items

Published October 13, 2026 · 10 min read

Illustration for Low Stock Alert Emails: How to Trigger Honest Urgency for Viewed and Wishlisted Items

A low stock email only works when two things are true at once: the scarcity is real, and the recipient already showed interest in that specific product. If either is missing, you are either crying wolf or interrupting a stranger. This tutorial builds one automation that joins a stock-level event with a behavior event — a product view or a wishlist add — so the alert lands on someone who was already leaning toward buying, and it stops the moment they do.

What you'll set up and what you need

The flow has a simple shape: an inventory event fires, a condition checks whether the contact is in an "interested" segment, a short wait lets the message feel human rather than robotic, and then one email goes out with a single call to action. If the contact buys, they are suppressed. If they don't, they get one follow-up and the flow ends.

Before you build anything, confirm you have these in place:

  • A product catalog with a stock quantity field that updates when an order is placed and when a restock arrives. If stock only syncs once a day, your alert will sometimes be wrong — fix the sync first.
  • Website behavior tracking installed so product views and wishlist adds are recorded as events against a contact. In Mailerflow this is the JS SDK.
  • At least one product with a threshold you are comfortable publishing. Pick a number that is genuinely low for that item, not a number that sounds urgent.
  • A sending domain with DKIM, SPF and DMARC verified. Mailerflow guides the setup and verifies it automatically; do this before you send anything, because a scarcity email that lands in spam is worse than no email.
  • A way to get inventory events into the platform. Either a native integration with your store, or a signed webhook from your inventory system. Mailerflow's webhooks are signed, retried on failure, and keep delivery logs, so you can see whether an event actually arrived.

The two trigger sources, and why you need both

There are two independent signals here:

  1. A stock-level event — inventory for a SKU drops to or below your threshold.
  2. A behavior event — the contact viewed that product, or added it to a wishlist.

Stock alone tells you the item is scarce. It says nothing about who cares. Behavior alone tells you someone is interested. It says nothing about urgency. The automation's job is to intersect them: fire on stock, but only for people whose behavior says they want this specific thing.

Step-by-step: build the automation

1. Build the interested segment

Create a dynamic segment that updates itself. You want contacts who viewed a specific product or added it to a wishlist recently.

  • Segment type: Dynamic
  • Condition group: Website behavior
  • Rules: Viewed product where Product ID = {SKU} OR Added to wishlist where Product ID = {SKU}
  • Lookback window: last 14 days

On screen you'll see a rule builder with an AND/OR toggle. Add the two behavior rules inside one OR group, then wrap the whole group in an AND with the 14-day window.

If you'd rather not click through rule builders, Mailerflow's AI segmentation accepts a plain-language description and drafts the segment for you to review.

2. Define the threshold per product

Don't use one global number. A threshold of 6 makes sense for a jacket and is meaningless for a phone case.

  • Where: Product catalog → custom field low_stock_threshold
  • Value: set per SKU, based on how fast that item sells
  • Trigger event: inventory.updated where stock_quantity <= low_stock_threshold

If your store platform doesn't expose a threshold field, store it as a custom field on the product record and evaluate it in the automation condition instead.

3. Assemble the automation in the visual builder

This is the core of the low stock email. Build it in this order:

  1. Trigger: inventory.updated — fires when a SKU's stock changes.
  2. Condition: contact is in the interested segment for that SKU.
  3. Condition: contact has not purchased this SKU in the last 30 days.
  4. Wait: 2 hours (long enough to avoid firing mid-browse, short enough to stay relevant).
  5. Condition: stock is still at or below threshold (re-check — it may have sold out or been restocked during the wait).
  6. Send email.
  7. Wait: 3 days.
  8. Condition: contact still hasn't purchased.
  9. Send one follow-up. Then exit.

Each node is a card you click to edit, and you can drag the connector lines between them to reorder the flow.

If you'd rather start from a description, the AI automation builder takes one sentence — something like "when a wishlisted product drops below its low-stock threshold, email the contact once, then follow up in three days if they haven't bought" — and drafts the trigger, waits, conditions and emails for you to review before you activate anything.

4. Write the email

The email has one job: tell the truth about the stock and make the next click easy.

  • Subject: The Ridgeline Trail Jacket is down to 6
  • Preview text: Still in your wishlist — here's where it stands.
  • Body: one hero image of the product, one line of honest stock copy, one CTA button.
  • CTA: See the jacket — link straight to the product page, not the category.

You can describe this to the AI email builder and get a complete responsive design with subject lines and preview text back, then edit the blocks in the visual editor. Keep the stock number in the copy dynamic — pull it from the product record so it's always current at send time.

5. Set send-time behavior and frequency caps

  • Send time: "send when the contact is most active" inside the automation, so the email doesn't land at 3 a.m.
  • Frequency cap: maximum one low-stock email per contact per product, ever. The follow-up counts toward that cap.
  • Quiet hours: if you have them configured, respect them here too.

6. Activate and test

Don't activate on live inventory first. Use a test contact, set a product's stock below threshold manually, and watch the automation's activity log to confirm the enrollment, the wait, and the send.

A worked example: the Ridgeline Trail Jacket

This is an illustrative example, not a real customer.

An outdoor gear store sells a jacket with 40 units in stock. The threshold is set to 6 because, in this example, the jacket typically sells 2–4 units on a good weekend.

What happens:

  • A contact views the jacket twice on a Tuesday and adds it to their wishlist. Both events are recorded against their profile.
  • Over the weekend, 34 units sell. Stock drops to 6, which is at the threshold, so inventory.updated fires.
  • The automation checks: is this contact in the interested segment for this SKU? Yes — wishlist add, 4 days ago.
  • Has the contact purchased in the last 30 days? No.
  • The flow waits 2 hours, re-checks stock (still 6), and sends.

The email:

Subject: The Ridgeline Trail Jacket is down to 6
Preview: Still in your wishlist — here's where it stands.

[Product image: Ridgeline Trail Jacket]

You saved the Ridgeline Trail Jacket to your wishlist.
There are 6 left in stock right now.

[ See the jacket ]

What happens next:

  • If the contact buys within 3 days, the purchase condition suppresses the follow-up and the flow ends.
  • If they don't buy, they get one follow-up on day 3: Still thinking about the Ridgeline? 6 left. Then the flow exits.
  • If the item restocks before the follow-up sends, the re-check condition fails and the follow-up is skipped. You don't want to send a scarcity email about an item that's back in stock.

How to check it works before and after launch

Before launch

  1. Add a test contact to the interested segment by viewing the product from a browser session tied to that contact.
  2. Manually set the product's stock to a value below threshold in your catalog.
  3. Open the automation's activity log. You should see the contact enrolled, the trigger event logged, and the wait node showing a scheduled resume time.
  4. Wait out the 2-hour delay (or temporarily shorten it to 2 minutes for testing). Confirm the email renders with the correct product name, image and current stock number.
  5. If you pipe inventory events in via webhook, open the webhook delivery log and confirm the event arrived with a 2xx response. A failed delivery with a retry queued tells you the event never reached the automation.

After launch

  • Delivery and engagement: watch delivery, bounces, complaints, clicks and approximate opens in analytics, per campaign and overall. A bounce spike is worth investigating — it often points to list quality rather than this flow.
  • Suppression: buy the product as a test contact and confirm the follow-up never sends. The activity log should show the contact exiting at the purchase condition.
  • Frequency cap: trigger the same product's threshold twice in a row and confirm the second event does not produce a second email to the same contact.
  • Event integrity: if your inventory events come from a webhook, the delivery logs are your source of truth. Signed webhooks with retries mean you can tell the difference between "the event never arrived" and "the automation decided not to send."

Common mistakes and how to fix them

Firing on stock alone

Sending "only 5 left" to your whole list is a discount-blast in disguise. Fix: require the behavior segment as a condition before the send. No view, no wishlist, no email.

Thresholds set so low the email arrives after sellout

If your threshold is 2 and you sell 4 a day, the email goes out to a product that's already gone. Fix: set the threshold above your typical daily sell-through for that SKU. For the jacket above, 6 works because weekends move 2–4 units.

Sending to everyone who ever viewed anything

A 180-day lookback can balloon your segment to near your whole list. Fix: cap the window at 14 days. Interest decays.

Repeating the same alert every time stock dips

Stock oscillates. Without a cap, the same contact gets the same email three times. Fix: one alert per contact per product, plus a single follow-up, then stop.

Fake or evergreen scarcity

"Only 3 left!" that's been true for six months trains people to ignore you. Fix: only send when the number is real and current at send time. Pull it dynamically from the product record.

No suppression on purchase

Nothing erodes trust faster than a scarcity email for something the recipient already bought. Fix: add the purchase condition before the send, and again before the follow-up.

Ignoring restocks

Reusing this flow for restocks sends the wrong message. Fix: build a separate back-in-stock flow. The trigger is different, the copy is different, and the emotional register is different.

Next steps: extend the flow without spamming

Once this flow is stable, three adjacent automations share the same data and cost you almost nothing to add:

  • Back-in-stock alerts for the same wishlisted items, triggered on a restock event rather than a low-stock event.
  • Price-drop alerts for wishlisted products, triggered on a price change. This pairs naturally with a wishlist reminder flow if you already have one running.
  • Post-purchase cross-sell that recommends items commonly bought with the jacket, sent a few days after delivery.

All three use the same dynamic segments on events and website behavior, and you can use AI personalization steps to tailor the copy to what each contact actually viewed. A/B test the subject line on the low-stock email — the stock number versus the product name is a genuinely interesting test — and let the data pick the winner.

FAQ

How low should the threshold be?

Set it above your typical daily sell-through for that SKU, not at a round number that sounds dramatic. If a product moves 3 units a day, a threshold of 2 means the email arrives after sellout. A threshold of 8–10 gives the recipient time to act. Set it per product, not per store.

Can I send a low stock email to people who only viewed the product?

Yes. The view audience is usually larger, so it can reach more people — but a single view is a weaker signal. Use a 14-day window, and if you want to be stricter, require two views or a view plus a wishlist add before the contact qualifies.

Scarcity messaging itself isn't regulated — the consent and data handling around it are. You need a lawful basis for the contact (usually consent or legitimate interest), a way to withdraw it, and records of both. Mailerflow provides data export, erasure, consent logs and configurable retention, with data hosted in Europe, which covers the mechanics. Your legal basis is your call.

What if the item sells out before the email sends?

That's what the re-check condition after the wait is for. If stock hits zero, the condition fails and the email is skipped. You can also add a branch that sends a back-in-stock promise instead, but only if you actually intend to restock.

How often can I send these without hurting deliverability?

Cap it at one alert per contact per product, plus one follow-up, and let the behavior segment do the filtering. The volume stays low because the audience is narrow by design. Watch complaints in analytics — if they rise, your thresholds are too loose or your lookback window is too wide.


Describe this automation in a sentence and Mailerflow drafts the workflow for you to review — start free. Build it in the automation builder.