Legend
Color-coded tracks. Email touchpoints are filled boxes; no-email moments (delays, exits) are dashed/grey.
Track A — Habit / behavior change
Track B — Replenishment (single-pack)
Track C — Retention (bulk)
Offer kicks in
Exit / no-send moment
1. Welcome Series
Top revenue flow — $3.67 / recipient, $17,756 total (US, 365d). Triggered when profile added to newsletter list. Email 1 with 10% off code is the biggest single converter. Current sequence + recommended additions below.
TRIGGER: Profile added to Newsletter list · Klaviyo native (Shopify subscribers + form fills)
W1 · Day 0 (signup)
Welcome + 10% off
"Welcome to the Rhinomed community"
Brand intro. 10% off code. Single CTA. This send drives most welcome-flow conversions.
10% off
Shop Mute
W2 · Day 4
Product range
"Whether it's sleep issues or athletic performance, there's a Rhinomed for you"
Mouth Tape + Turbine product spotlight. Educate on full range.
Browse products
W3 · Day 11
Brand story
"So, who is Rhinomed?" (or "So, who is Mute?" — branded variant)
Origin story. Designed in Australia, clinically tested. Trust-building.
Learn more
W4 · Day 14
Testimonials
"Still need some convincing?"
Customer reviews + Judge.me ratings. Final push.
Read reviews
W1.5 · Day 2 NEW
Code reminder
"Still thinking? Your 10% off is waiting"
Soft nudge to non-redeemers. Same code. Single hero product (Mute Starter or Mouth Tape — cheapest entry point). Captures 15–25% additional conversion based on industry benchmark.
10% off (same code)
Use my code
W3.5 · Day 13 NEW
Last chance — code expires
"Last chance — 10% off ends tomorrow"
Hard urgency. Set code to expire 14 days from signup. Final cart push before flow ends. Skip if customer already purchased.
10% off (expiring)
Redeem now
Flow filter: exit on Placed Order. Customer who buys mid-flow skips remaining sends and enters Post-Purchase replenishment.
2. Abandoned Checkout
Second-best revenue flow — $3.21 / recipient, $1,058 total (US, 365d). Current 2-email sequence; recommend extending to 3 with discount on final send.
TRIGGER: Started Checkout metric · Shopify integration · suppress if Placed Order within 24h of trigger
AC1 · 2h after abandon
Cart reminder
"Your dream cart awaits"
Cart contents w/ product image. Single CTA back to checkout. No discount. Free shipping reminder.
Finish my order
AC2 · ~24h (current second send)
Second nudge
(continuation of current flow)
Reminder send. Performance suggests room for sharper urgency / social proof.
Return to checkout
AC1 · 1h
Forgot something?
"Forgot something, {{first name}}?"
Cart contents block. "Stock is moving — finish your order before someone else grabs them." No discount. Free shipping reminder.
Complete order
AC2 · 24h
Social proof + urgency
"Still thinking? 12,000+ customers can't be wrong"
3 customer reviews + star rating. Soft urgency on stock. Still no discount — let the social proof do the work.
Finish my order
AC3 · 72h
10% off to close
"Here's 10% off to finish your order"
Discount unlock. Code FINISH10 (different from welcome to track attribution). Expires in 48h.
10% off
Use my code
+24h after AC3
Exit to general list
If no order, end flow. Don't keep pushing same cart — pollutes deliverability. Customer stays on newsletter for future campaigns.
Flow filter: exit on Placed Order event for any product. Avoid double-discounting: suppress if Welcome 10% code already redeemed in last 7 days.
3. Post-Purchase Replenishment — Entry & Branching
A single Klaviyo flow triggers on every Placed Order. First gate routes to single-pack or bulk-buyer track based on line-item quantity.
TRIGGER: Placed Order metric · Klaviyo Shopify integration · per region
ANCHOR: all
Day N values below count from
delivery, not order. Resolution cascade:
- Wait for
Order Delivered event (AfterShip / Shopify Shipping Notifications) — max 14 days.
- If timeout, wait for
Fulfilled Order event (Shopify native) — max 10 days.
- If still no event, anchor = order date + regional shipping buffer: US +3d · UK +4d · AU +5d.
Implementation: trigger Placed Order → 3 sequential "Wait for event or X days" steps → branch into Track A/B/C using whichever anchor resolved.
Conditional split: ANY line item quantity ≥ 3?
YES → Bulk buyer flow (Tracks A + C) · NO → Single-pack flow (Tracks A + B)
Flow filter (always applied): exit when profile records another Placed Order event after trigger. Customer who reorders early skips remaining sends.
4. Single-Pack Buyer Flow
For 1× of any SKU. Customer is exploring. Need habit formation, then a clear reorder ladder timed to actual run-out. 5 emails over ~50–90 days depending on product.
A1 · Day 3 (starter) / Day 7 (standard)
How's the first week going?
"How's the first week of better sleep going?"
Lifestyle hero. 2 short usage tips: apply just before bed; one dilator lasts ~10 nights, don't stretch. Soft link to usage guide. No reorder CTA.
Read the guide
A2 · Day 7 / Day 21
Refill nudge (gentle)
"You're 7 nights into the habit. Keep going."
Streak framing. Reorder is an option, not a pitch. Secondary link to "7 sleep tips" content.
Reorder {{product}}
B1 · Day 14 (starter) / Day 35 (standard)
Almost out
"Almost out of mouth tape, {{first name}}?"
Clean product shot. "Based on when your order arrived ({{delivery date}}), a few days left." Single CTA. No discount.
Reorder {{product}}
AU/UK: "Subscribe & Save 15% →" small link · US: "Save 20% on the 60-night pack →"
B2 · Day 28 / Day 55
10% off refill
"Running low? 10% off your refill"
Clean hero. Code MUTE10. Free shipping over $40. Short body.
Reorder + save 10%
10% off
B3 · Day 50 / Day 90
Win-back + S&S
AU/UK: "Never run out — 15% off + S&S" · US: "Come back to better sleep — 15% off"
Lifestyle hero. Bigger offer. AU/UK pivots to S&S anchor. US offers waitlist signup.
Reorder + save 15%
15% off
AU/UK secondary: Switch to Subscribe & Save · US: Join S&S waitlist
+30 days
Exit to reactivation
If no order, move to standard win-back / sunset segment. Replenishment flow stops.
5. Bulk Buyer Flow (3×, 6×, 12×)
For any order with quantity ≥ 3 on any SKU. Customer is committed — they pre-paid for the long haul. Replenishment urgency wastes the relationship. Use the long supply runway for cross-sell, S&S conversion, and brand deepening. Reorder ask comes very late.
A · Day 7
How's it going?
"How's the first week of better sleep going?"
Acknowledges bulk purchase. "Smart move — you're set for {{effective supply}} nights." Two usage tips. Soft link to guide.
Read the guide
C1 · Day 21 (3-pack) / Day 30 (6-12 pack)
Cross-sell + S&S pitch
"You're set on {{product}}. Let's level up."
Hero shows complementary product. Bought dilator → push Mouth Tape. Bought Mouth Tape → push Nasal Dilator. AU/UK include S&S CTA on existing purchase.
Try {{cross-sell}}
10% off cross-sell
AU/UK secondary: Subscribe & Save your {{purchased product}} · US: bundle discount only
C2 · Day 60 (3-pack) / Day 90 (6-12 pack) / Day 180 (12 pack only)
S&S lock-in OR pack-size upsize
AU/UK: "Lock it in — save 15% every order" · US: "Going through these faster? Try the 12-pack"
AU/UK: S&S badge hero + lock-in pitch. US: bigger-pack upsell with per-night savings math + waitlist signup link.
AU/UK: Subscribe & Save · US: Try the 12-pack
C3 · 80% of effective supply
Replenishment ask (acknowledges bulk)
"Time for another {{quantity}}-pack? 15% off"
"You bought {{quantity}}× delivered {{delivery date}} — by our math you've used most of them." 15% off. AU/UK: S&S CTA.
Reorder + save 15%
15% off
+30 days
Exit to VIP segment
Bulk buyers exit to VIP, not generic win-back. Already proven high-LTV — handle with care.
6. Timing Matrix — All Effective Supply Combinations
Computed as effective supply = unit_supply × quantity. Reorder ask fires at ~80% of effective supply.
| Order combo |
Effective supply |
Track (A flows always run early) |
First reorder ask |
10% off |
15% off / S&S |
| 1× Starter | 10 nights | Single-pack (A + B) | Day 14 | Day 28 | Day 50 |
| 1× Standard (3 dilators) | 30 nights | Single-pack (A + B) | Day 35 | Day 55 | Day 90 |
| 1× Mouth Tape | 30 nights | Single-pack (A + B) | Day 35 | Day 55 | Day 90 |
| 3× Starter | 30 nights | Bulk (A + C) | Day 60 | — | Day 90 (S&S/upsize) |
| 3× Standard / Mouth Tape | 90 nights | Bulk (A + C) | Day 75 | — | Day 90 (S&S/upsize) |
| 6× Starter | 60 nights | Bulk (A + C) | Day 50 | — | Day 90 (S&S/upsize) |
| 6× Standard / Mouth Tape | 180 nights | Bulk (A + C) | Day 145 | — | Day 90 (S&S), Day 180 (replenish) |
| 12× Starter | 120 nights | Bulk (A + C) | Day 95 | — | Day 90 (S&S/upsize) |
| 12× Standard / Mouth Tape | 360 nights | Bulk (A + C) | Day 290 | — | Day 90 (S&S), Day 180 (replenish) |
7. Bulk-Buyer Signal — Cross-Program Impact
Once you tag a profile as "Bulk buyer" you don't stop at the replenishment flow. Apply across the entire program.
Suppress from "First Purchase" discounts
Bulk buyers have already committed. Sending them "15% off your first order" insults them and erodes margin.
FILTER: bulk_buyer = true → EXCLUDE
Add to VIP / Early Access segment
Bulk buyers see new products, restocks, and bundles 48–72 hrs before the general list. Reinforces premium feel.
SEGMENT: bulk_buyer = true → VIP list
Higher-touch review request
Their UGC carries more weight. Add a personal touch — named ask, free shipping next order in return for review.
FLOW: bulk + days_since_order > 21 → Judge.me w/ incentive
Skip beginner content
Don't send "what is Mute?" educational emails to a 12-pack buyer. They know. Push them to advanced content or community.
CONTENT: bulk_buyer = true → skip onboarding emails 1-2
Exit to VIP, not generic win-back
If bulk buyer goes inactive, they get a different sunset sequence than a one-time buyer. More respect, longer dwell, custom offer.
FLOW EXIT: bulk → VIP win-back · single → standard win-back
S&S waitlist priority (US)
When US S&S launches, bulk buyers get notified first. They're the most likely converters.
TAG: us + bulk_buyer = true → S&S waitlist priority
8. Klaviyo Implementation — How To Actually Build This
Concrete steps. Most of this lives in Klaviyo's flow builder + Shopify integration. Some needs custom event properties from Shopify.
Step 1 — Confirm Klaviyo-Shopify line-item data
Klaviyo's Placed Order event from Shopify includes Items as an array. Each item has Product Name, SKU, Quantity, ItemPrice. Verify this in Klaviyo:
- Go to Profiles → search any past customer → click their latest Placed Order event.
- Check the event payload for
Items[].Quantity and Items[].SKU.
- If quantity isn't there, the Shopify integration needs upgrading or a custom webhook.
Step 2 — Tag bulk buyers at trigger
Two ways:
- Klaviyo flow only: trigger flow on Placed Order, first action is conditional split using
Placed Order event dimension. Filter: Items contains where Quantity is greater than 2.
- Profile property (recommended): add a flow that updates profile property
bulk_buyer = true when the conditional fires. Persistent flag lets you segment them globally for the other 6 cross-program use cases.
Step 3 — Compute effective supply
Klaviyo can't do arithmetic in a flow split natively. Two workarounds:
- Discrete flow per pack/quantity combo: 9 flows per region (the matrix in section 4). Cleaner but more to maintain.
- Custom property via Shopify webhook → Klaviyo: on order paid, compute
effective_supply_days server-side and POST to Klaviyo via Track API as a custom event. Use that as flow trigger. Most flexible but needs dev.
Recommend (1) for v2; consider (2) for v3.
Step 4 — Conditional split for tracks
Inside each flow, use Klaviyo's conditional split:
If: Items[].SKU starts with 'STARTER'
AND total quantity = 1
Then: → Starter single-pack track
Else: → continue to next split…
Or use profile-level bulk_buyer property if step 2 set it.
Step 5 — Flow filters
Every replenishment flow needs three filters:
What someone did/didn't do: NOT placed an order since flow start (auto-exit on reorder).
Has consented to marketing: opted in to email channel.
Is on suppression list: NOT on exclusion (no recent unsubscribe, no bounces).
Klaviyo refreshes filters at each step, so reorder mid-flow exits cleanly.
Step 6 — Regional fork (S&S)
Use Klaviyo's Location → Country profile property to vary content:
- Build one template per email (B1, B2, B3, C1, C2, C3) with dynamic content blocks.
- Inside template, conditional block:
{% if person.location.country in ['AU','GB'] %} renders the S&S CTA; {% else %} renders US-specific pack-size upsize / waitlist link.
- Alternative: split per region with 3 parallel flows (US/UK/AU). More flows, simpler templates. Recommended if regional copy diverges materially over time.
Step 7 — Subscribe & Save integration
For AU + UK:
- Confirm S&S app on Shopify (Recharge / Skio / Loop). Each has Klaviyo integration that adds
Subscribed profile property.
- S&S subscribers should be excluded from replenishment flow (they're already on auto-ship). Add filter:
subscriber_active = false.
For US: build a Klaviyo signup form for "S&S waitlist" — tag profile ss_waitlist = true. On US S&S launch, run dedicated campaign to that segment first.
Step 8 — SMS layer
Replenishment is the highest-ROI SMS use case. For each email (B2, B3, C3 especially), build a parallel SMS variant:
Hey {{first}}, your Mute strips are
running low. Reorder + save 10%:
mutesnoring.com/r/abc Code MUTE10
Reply STOP to opt out
Klaviyo flows support multi-channel — add SMS send block after email send block. Will only fire for profiles with SMS consent + phone number.
Step 9 — A/B testing
Klaviyo supports A/B at the message level. Set up:
- B1: test "Almost out" vs "Running low" subjects (50/50).
- B2: test 10% off vs free shipping vs both (33/33/33).
- C2: AU/UK test "Lock it in" vs "Never run out" framings.
Run each test for at least 4 weeks or 200 recipients per arm, then promote winner.
Step 10 — Build order in Klaviyo
Don't try to build everything at once. Sequence:
- Pause existing replenishment flows.
- Build single-pack Track A + Track B for Mute Nasal Dilator standard pack only, AU region first (smallest list, fastest learning).
- Validate timing, copy, conversions for 30 days.
- Clone to UK, US.
- Clone to other products (Mouth Tape, Turbine, Starter).
- Build bulk flow (Track C) as separate flow, again AU first.
- Layer SMS once email is stable.
Total build: ~3 weeks if focused. Iterate from there.
9. Measurement — What To Track
Re-run repeat_cycle.py + pull_flows.py every 30 days post-launch.
| KPI | Today | 30 days | 90 days | 12 months |
| Repeat rate (US) | 9.2% | 10% | 12% | 25–30% |
| Repeat rate (UK) | 8.8% | 9.5% | 11% | 22–28% |
| Repeat rate (AU) | 11.3% | 12% | 14% | 28–35% |
| Replenishment flow revenue (combined) | ~$100/yr | $1k/mo | $3k+/qtr | $30k+/yr |
| Bulk-buyer share of customers | TBC | baseline | track | 20%+ of repeat orders |
| S&S subscribers (AU/UK) | ~recent launch | 50+ | 200+ | 1,000+ |
| US S&S waitlist signups | 0 | 50+ | 300+ | 2,000+ at launch |
Source data: out/{region}/repeat_cycle.json · out/{region}/flows/ · replenishment-strategy.md
Open this file in browser: open replenishment-flow-map.html