Lifecycle Briefs — 2026

Canvas Briefs: Master Review

Swimply + MH1 Strategic Services — March 2026
38
Total Flows
14
Guest
14
Host
10
Summer Pass
G-P1
All in BrazeCopy Approved

Onboarding: Account Creation → First Booking

Objective
Convert new guest registrations into first bookings via a 13-step multi-channel sequence. Combines platform education, social proof, use-case inspiration, and personalized pool discovery.
Entry Trigger
`UserLeadAccountCreated`
Exit Condition
First `BookingConfirmedToGuest` or `BookingNewToGuest` event, or 30 days from registration
Audience
All new guest accounts. 3 segments at Day 7+: Family / Party / Pet (segment-matched copy in Blocks 07+).
Timing Coordination
The transactional booking confirmation email (`BookingConfirmedToGuest`) fires at the moment of booking - it contains transactional content only. GP1 Block 01 sends ~1 hour after `UserLeadAccountCreated` with welcome + collections content. No channel conflict. The live Onboarding-AccountCreated-NoBooking-HasControlGroup canvas uses the same `UserLeadAccountCreated` trigger and runs a parallel drip - GP1 is its replacement. Both will stack until GP1 is verified sending and the old canvas is turned off.

Message Blocks

Block 01 Email ⏱ ~1 hour post-registration
Subject AYour private pool in {{city}} is one tap away, {{first_name}}
Subject BWelcome to Swimply, {{first_name}} - here's what's near you
TitleWelcome - Your First Pool
PreviewYou've unlocked thousands of private pools - here's where to start.
BodyHi {{first_name}},

Welcome to Swimply. [Watch video]

You've now unlocked thousands of private pools and beautiful backyards, all bookable by the hour - on your terms. From hidden neighborhood gems to show-stopping spaces made for unforgettable moments.

Whether it's:
• A relaxed family afternoon
• A spontaneous pool day with friends
• The pool party you've always dreamed of
• Or just treating yourself

Swimply makes it possible.

Every Swimply booking includes:
• 100% private access
• A beautiful, well-loved backyard
• Your favorite people
• A friendly host (hands-on or hands-off - your call)
• The Swimply Guarantee

All listings are vetted, reviewed, and ready for your arrival.

Start with a Collection - curated pools by vibe: Family-Friendly Favorites, Perfect for Groups & Celebrations, BBQ & Chill, Pet-Friendly Spaces, Resort-Style Escapes. Most first-time guests find their perfect pool by starting here.

- Bunim & the Swimply Team
CTA ABrowse Collections
CTA B (test)Browse Pools Near You
📌 Founder-signed email (Bunim). [Watch video] = embed or link to onboarding video - confirm asset with product/brand team. Connected Content: 3 top-rated listings near {{city}} render below the body copy as pool cards (name, price, rating, image, deep link). CTA test: "Browse Collections" (curated, lower friction for first-timers) vs. "Browse Pools Near You" (direct inventory browse). Hypothesis: Collections convert better for guests with no search intent yet; direct browse may win for higher-intent signups.
Block 02 In-App ⏱ Next app open post-registration
TitleWelcome Modal
HeadlineYour private pool is one tap away.
BodyPools in {{city}} available this weekend. No crowds, no wait list - just you and a great backyard.
CTAFind my first pool
Block 03 SMS ⏱ Day 2
TitleQuick Nudge
Variants['A: "{{first_name}}, there\'s a private pool in {{city}} with your name on it: [link]"', 'B: "Your first pool day in {{city}} is one tap away. See what\'s open: [link]"', 'C: "{{first_name}} - private pool, no crowds, {{city}}-area. Book here: [link]"']
📌 Under 160 chars each. Intelligent Timing enabled. Suppress if guest browsed a listing since registration.
Block 04 Push ⏱ Day 3
TitleFirst Nudge
Title A{{city}}'s best pools are still open this weekend
Title BPool day pending - {{city}} has a few great spots left
Title CYour first Swimply pool day hasn't happened yet, {{first_name}}
BodyPrivate pools near you, available this weekend. No crowds.
📌 3-way title A/B/C test. Intelligent Timing enabled. Suppress if booking confirmed.
Block 05 Email ⏱ Day 4
Subject AIs booking a Swimply actually that easy?
Subject BBooked by noon. In the water by 2. Here's how.
TitleEase + Weekend Reality
PreviewPick a pool. Choose your time. Show up and enjoy.
BodyHi {{first_name}},

"Is booking a Swimply actually that easy?" - It is.

1. Pick a pool you love (start with a Collection or browse nearby favorites)
2. Choose your time (most guests book 2–4 hours)
3. Show up & enjoy (private access, no crowds, no sharing)

Every host is reviewed, every space is vetted, and support is available if you need it.

First-timer tip: the most-loved pools tend to book a few days ahead - especially for weekends.
CTABrowse Pools Near You
Block 06 Push ⏱ Day 5, Friday PM
TitleWeekend Reality
Title A{{city}} pool weekend - prime spots going fast
Title BPool plans this weekend? {{city}} has you covered.
Title CFriday reminder: private pools, no crowds, {{city}}
BodySome prime weekend times are still available. Lock one in before Sunday fills up.
📌 Send window: 3–6 PM local time Friday. Intelligent Timing enabled. Suppress if booking confirmed.
Block 07 Email ⏱ Day 7
Subject A4 million guests. 95% say they'd do it again.
Subject BThe birthday party. The family reunion. Your pup's best day. And counting.
TitleSocial Proof at Scale
PreviewReal guests. Real pools. Real moments.
BodyHi {{first_name}},

Over 4 million guests have tried Swimply - and 95% say they'd do it again.

"It felt like a mini vacation without leaving town."
"Private, peaceful, and exactly what we needed."
"So much better than a public pool."

Swimply is about more than swimming - it's about spending time the way you actually want to.

Popular pools, especially for weekends, tend to book a few days in advance.
CTABrowse Pools Near You
📌 If segment data available at Day 7, match the social proof angle to the guest's use-case signal (Party → group story, Pet → dog story, Family → kids story). Photo-matched layout recommended.
Block 08 In-App ⏱ Next app open after Day 7
TitleBrowse Nudge
HeadlineStill looking? Here's one worth your time.
Body{{listing_name}} in {{city}} - {{listing_price}}/hr · ⭐{{listing_rating}} · Available this weekend
CTASee availability
📌 Connected Content: 1 top-rated available listing near {{city}} - same live endpoint as Block 01.
Block 09 SMS ⏱ Day 10
TitleRe-Engage SMS
Variants['A: "Still thinking, {{first_name}}? {{city}} pools are booking up for the weekend: [link]"', 'B: "{{first_name}} - found a pool yet? A few great ones still open near {{city}}: [link]"']
📌 2 variants. Under 160 chars. Suppress if guest browsed any listing since Day 2 SMS.
Block 10 Email ⏱ Day 12
Subject AWays people are using Swimply right now
Subject BYou don't need a big occasion - just a space you'll love
TitleUse-Case Inspiration
PreviewParties. Families. Pups. You.
BodyHi {{first_name}},

Ways guests are using Swimply right now:
• Family afternoons
• Small celebrations
• Luxury swims
• BBQ & Chill
• Tennis & pickleball sessions
• Evening dips
• Mental-health days
• Bring-your-pup days

You don't need a big occasion - just a space you'll love.

Popular spaces tend to book a few days ahead, especially for weekends.
CTABrowse Near You
Block 11 Push ⏱ Day 14
TitleBrowse Nudge Push
Title A{{city}} has a pool with your name on it
Title BYour first Swimply pool day is still one tap away
Title CLast call: {{city}} weekend pools, a few spots left
BodyPrivate pool. Your terms. {{city}}.
📌 Suppress if guest browsed any listing since Day 10. Intelligent Timing enabled.
Block 12 SMS ⏱ Day 17
TitleDirect Nudge SMS
Body{{first_name}} - private pool. {{city}}. You pick the date: [link]
📌 Single variant. Under 160 chars. No soft sell - just the direct offer. Suppress if booking confirmed or guest browsed in last 48h.
Block 13 Email ⏱ Day 21
Subject AWe picked these for you, {{first_name}}
Subject BGuest favorites near {{city}} - hand-picked
TitleHand-Picked Pools (Connected Content)
PreviewBeautiful backyards, great hosts, easy first-time experiences.
BodyHi {{first_name}},

Hand-picked guest favorites near you - beautiful backyards, great hosts, easy first-time experiences.

[CC Pool Card 1: {{listing_name_1}} · {{listing_price_1}}/hr · ⭐{{listing_rating_1}}]
[CC Pool Card 2: {{listing_name_2}} · {{listing_price_2}}/hr · ⭐{{listing_rating_2}}]
[CC Pool Card 3: {{listing_name_3}} · {{listing_price_3}}/hr · ⭐{{listing_rating_3}}]

Whether for a relaxed afternoon, a weekend plan, or something special - these pools tend to book a few days ahead.

- Bunim & the Swimply Team
CTABrowse More Pools
📌 Founder-signed email (Bunim). Connected Content: 3 top-rated available listings near `{{city}}` rendered as pool cards (name, price, rating, image, deep link). Live endpoint - no new backend needed.

Data Requirements

  • `UserLeadAccountCreated` event (Braze canonical trigger)
  • `{{first_name}}` and `{{city}}` attributes for personalization
  • Connected Content endpoint for personalized pool recs (Block 13)
  • `BookingConfirmedToGuest` or `BookingNewToGuest` event for exit suppression
  • Intelligent Timing enabled for push/SMS blocks

Success Metrics

MetricTarget
Registration-to-first-booking rate (21 days)>=35%
Email open rate (sequence avg)>=28%
Block 13 (personalized pools) CTR>=12%
🚩Turn Off When Ready
Turn off Onboarding-AccountCreated-NoBooking-HasControlGroup in Braze when GP1 is live and confirmed sending. GP1 is the full replacement. Do not run both simultaneously.
G-P2
All in BrazeCopy in Progress

1st Booking → 2nd Booking (21-Day Recovery)

Objective
Drive a second booking within 21 days of a guest's first swim. Strikes at peak intent moments: anticipation (pre-swim), in-water high (with a timed offer), and post-swim recovery.
Entry Trigger
`BookingConfirmedToGuest` (first booking only — filter: BOOKING_COUNT_AS_GUEST = 1). Canvas entry at confirmation. First marketing message (Block 01) holds until the reservation start time — nothing fires before the guest is actually in the water.
Exit Condition
Second `BookingConfirmedToGuest` or 30 days from first booking
Audience
All guests completing their first booking. Single general segment — no Pet/Party/Family splits.
Timing Coordination — Chronological Send Stack
Relative to Swim Day (SD = calendar day of booked swim):

Booking confirmed: Transactional confirmation only. No marketing fires here.
SD — reservation start: Block 01 Arm A — In-Water Email/Push (10% off offer, expires at reservation end).
SD — reservation midpoint: Block 01 Arm B — In-Water Email/Push (same offer, timing test). Arm A and Arm B are a split test — each guest receives only one.
SD — 30 min and 10 min before end: Extend-booking comms fire here (separate canvas, not GP2). GP2 has no sends in this window.
SD+0 (window close): Block 02 — Booking Concluded Push. `BookingConcludedToGuest` transactional push also fires here — coordinate with Eng so GP2 Block 02 delays 15 min after transactional to avoid double-push.
SD+0 to SD+1 (0–2h post-swim): Block 03 — Memory Email.
SD+2 (6:30–8:30 PM local): Block 04 — Re-engagement Push. V2_PostBooking_Retention D+2 email is being cut — GP2 owns this slot once V2 retires.
SD+3 (11 AM–5 PM local): Block 05 — SMS Nudge.
SD+5: Pass Upsell email (non-SP holders only — see PassesUpsell suppress logic). Not part of GP2.
SD+7: Block 06 — Promo Experiment (3-arm: Email + Push + SMS + In-App).
SD+8–29: Rest zone — no marketing sends. Behavioral triggers only.
SD+30: Block 07 — Lapse Prevention Email.

Message Blocks

Block 01 Email Push ⏱ SD — timing test: Arm A at reservation start, Arm B at reservation midpoint
TitleP2: In-Water Offer — Timing Test
Subject (Email)The best day calls for a sequel — 10% off your next pool day. ☀️
Preview (Email)Offer expires at {{reservation_end_time}}. Lock it in before it's gone. 💦
Push TitleYour next pool day is 10% off — but only until {{reservation_end_time}}. 🌊
Body (shared)You know that feeling you have right now? The sun-tired, can't-stop-smiling, "we need to do this again" feeling? 🌞 Hold onto it. Your next pool day is 10% off — but only until {{reservation_end_time}}. Code: [PROMO_CODE_10PCT]
CTA ABook my next pool day 🏊
CTA B (test)Back to {{listing_name}} 🌊
✅📌 Timing A/B test: Arm A fires at reservation start time, Arm B fires at reservation midpoint (50% through booking duration). Each guest receives only one arm. Offer urgency is real — tied to actual reservation end time via {{reservation_end_time}}. Avoid 30/10 min before end window (extend-booking comms own that window). Requires Eng: reservation_start_time + reservation_end_time attributes. Promo code generation for 10% off next booking. | TIMING TEST: This should be a 3-arm timing test — Arm A at 30 min in, Arm B at 1 hr in, Arm C at end of swim. | OFFER TEST: Run 10% off vs. no offer AB test across all three timing arms (6 total variants). | EXTENSION FALLBACK: If the pool is not available for extension, replace the extend-booking send with "book your next one 10% off" messaging. | SUMMER PASS: Add Summer Pass upsell banner at bottom of email for all arms.
Block 02 Push ⏱ SD+0 — 15 min after booking window closes
TitleP3-A: Booking Concluded Push
Push Title — Arm A (no offer)Another pool day is calling your name. 🌊
Push Title — Arm B (10% off)Another pool day + 10% off is calling your name. 🌊
Body (shared)That feeling when everyone's sun-tired and happy and already planning the next one? {{city}} pools are wide open. 🏊
✅📌 Fires at `BookingConcludedToGuest` + 15 min delay to avoid stacking on transactional post-booking push. No assumptive copy — neutral browse nudge only. AB test: Arm A (no offer) vs. Arm B (10% off).
Block 03 Email ⏱ SD+0 — 0–2 hours post-swim
Subject A (no offer)That post-pool glow looks good on you. Ready for the next one? 🌞
Subject B (10% off)That post-pool glow looks good on you. 10% off your next one. 🌞
TitleP3-B: Memory Email
PreviewPick a crew, pick a date, and let {{city}} do the rest. 🌊
Body — Arm A (no offer)There's a version of this weekend where you're floating in a private pool, the sun is doing its thing, and nobody has anywhere else to be. 🌞 Here's what's open near {{city}} right now: [CC: 2 top-rated listings near {{city}}] All you need is a date and a crew. The pool handles the rest. 🏊
Body — Arm B (10% off)There's a version of this weekend where you're floating in a private pool, the sun is doing its thing, and nobody has anywhere else to be. 🌞 Here's what's open near {{city}} right now: [CC: 2 top-rated listings near {{city}}] Plus 10% off to seal the deal. Code: [PROMO_CODE_10PCT] — expires {{reservation_end_time}}. 🏊
CTA AFind my next pool 🌊
CTA B (test)Back to {{listing_name}} 🏊
✅📌 AB test: Subject/Body Arm A (no offer) vs. Arm B (10% off). No backward-looking copy — forward only. CC: 2 top-rated listings near {{city}} — live endpoint. CTA test: discovery (new pool) vs. same-pool rebook. Subject line test runs in parallel. ✅ Editorial feedback applied — removed all "that was a good one / done" framing; body now looks forward to next booking.
Block 04 Push ⏱ SD+2, 6:30–8:30 PM local
TitleP3-C: Re-engagement Push
Push Title — Arm A (no offer)A BBQ, a slide, a hot tub. {{city}} has it all this weekend. ☀️
Push Title — Arm B (10% off)A BBQ, a slide, a hot tub, and 10% off. {{city}} has it all this weekend. ☀️
Body (shared)Your people, a private backyard, and the kind of evening where nobody checks the time. {{city}} has spots wide open this weekend. 💦
✅📌 AB test: Arm A (no offer) vs. Arm B (10% off). Social proof angle removed — forward-looking availability hook only. 3-timing test: (1) beginning of swim, (2) middle of swim, (3) end of swim. Note: avoid overlap with extend-booking comms near end of reservation — do not fire Arm 3 within the extend-booking suppression window. Send window: 6:30–8:30 PM local. V2_PostBooking_Retention D+2 email is being cut — GP2 owns this slot once V2 retires. ✅ Editorial feedback applied.
Block 05 SMS ⏱ SD+3, 11 AM–5 PM local
TitleP3-D: SMS Nudge
SMS — Arm A (no offer){{first_name}}, {{city}} pools are wide open this weekend. Your next pool day is waiting. 🌊 [link]
SMS — Arm B (10% off){{first_name}}, {{city}} pools are wide open this weekend — 10% off. Code: [PROMO_CODE_10PCT] 🌊 [link]
✅📌 AB test: Arm A (no offer) vs. Arm B (10% off). Both under 160 chars. No weather/temperature language — we can't know conditions at send time. `{{guestFirstName}}` attribute name — confirm with Eng (Braze SMS may differ from `{{first_name}}` used in email). Send window: 11 AM–5 PM local. ✅ Editorial feedback applied.
Block 06 Email ⏱ SD+7 — 3-arm promo experiment
Subject A (control — no offer)Picture it: your crew, a private pool, and nowhere to be all Saturday. 🌞
Subject B (10% off)Picture it: your crew, a private pool, and nowhere to be all Saturday — 10% off. 🌞
TitleP3-E: Promo Experiment (2-Arm)
Preview{{city}} has incredible pools open this weekend. Come find yours. 🌊
Body — Arm A (control)There's a Saturday this month where you and your people end up in a private pool, the music is right, nobody's watching the clock, and everyone agrees you need to do this every weekend. That Saturday is available right now in {{city}}. 🌞
Body — Arm B (10% off)There's a Saturday this month where you and your people end up in a private pool, the music is right, nobody's watching the clock, and everyone agrees you need to do this every weekend. That Saturday is available right now in {{city}} — and it's 10% off for the next 7 days. 🌞 Code: [PROMO_CODE_10PCT]
CTAFind my Saturday pool 💦
Push Title A (control)Your crew, a private pool, nowhere to be. {{city}} is ready. ☀️
Push Title B (10% off)Your crew, a private pool, nowhere to be. {{city}} is ready — 10% off. ☀️
SMS A (control){{first_name}}, {{city}} has private pools open this weekend. Your crew would love it. 🏊 [link]
SMS B (10% off){{first_name}}, {{city}} has private pools open this weekend — 10% off. Code: [PROMO_CODE_10PCT] [link] 🏊
In-App A (control)The kind of afternoon where everyone ends up sun-tired and happy — that's what's waiting in {{city}} right now. 🌞
In-App B (10% off)The kind of afternoon where everyone ends up sun-tired and happy — that's waiting in {{city}} right now, and it's 10% off. 🌞
Copy Angle Test — Option 1Back to {{listing_name}}? 🔁
Copy Angle Test — Option 2Something new in {{city}} this time? 🌊
Copy Angle Test — Option 3{{N}} pools near {{city}} — which one's calling your name? ☀️
Collections vs. Pools Test (note)Test: show curated collections (BBQ pools, slide pools, hot tub pools) vs. direct inventory listings nearby. Measure browse-to-book rate by content type. 🏊
✅📌 Reduced to 2-arm incentive test (Arm A: control/no offer, Arm B: 10% off). Arm C ($25 off) removed. Deployed simultaneously across Email, Push, SMS, and In-App. No backward-looking copy — no "it's been a week" or assumptive framing. Primary metric: 2nd booking conversion rate by arm. Do not scale promo spend until lift vs. control is confirmed. Additional tests staged: copy angle (book again vs. try something new vs. N pools nearby) and collections vs. pools inventory display. ✅ Editorial feedback applied.
Block 07 Email ⏱ SD+30 — lapse prevention
Subject A (no offer){{first_name}}, remember that feeling? The pool is still there. 🌊
Subject B (10% off){{first_name}}, remember that feeling? The pool is still there — 10% off. 🌊
TitleP3-F: Lapse Prevention Email
PreviewPrivate pools in {{city}} are still wide open and waiting for you. 🌊
Body — Arm A (no offer)You know that afternoon where the sun hits different, everyone's laughing about nothing, and someone says "we should do this every weekend"? 👀 That's still out there. Private pools in {{city}} with incredible hosts, open right now, and yours for the afternoon. [CC: top-rated available listing near {{city}}] 🏊
Body — Arm B (10% off)You know that afternoon where the sun hits different, everyone's laughing about nothing, and someone says "we should do this every weekend"? 👀 That's still out there. Private pools in {{city}} with incredible hosts, open right now, and yours for the afternoon. Plus 10% off to make it happen. Code: [PROMO_CODE_10PCT] — expires in 14 days. 🏊
CTAFind my next pool 🏊
✅📌 AB test: Arm A (no offer/control) vs. Arm B (10% off). No other discount amounts. No backward-looking copy — no "it's been a while" framing. Forward-looking only. No pet/family/party-specific hooks. Promo code (Arm B): generate via Braze promo code list, 14-day expiry. ✅ Editorial feedback applied.

Data Requirements

  • `BookingConfirmedToGuest` event — entry filter: BOOKING_COUNT_AS_GUEST = 1
  • `{{reservation_start_time}}` and `{{reservation_end_time}}` attributes (Block 03 timing test + offer expiry)
  • `BookingConcludedToGuest` event (Block 04/05 timing trigger)
  • `{{first_name}}` and `{{guestFirstName}}` — confirm SMS vs. email attribute names with Eng
  • `{{listing_name}}`, `{{host_name}}`, `{{city}}` attributes
  • Promo code generation: 10% off (Block 03), $10 off / $25 off (Block 08), $25 off (Block 09)
  • Connected Content: 2 top-rated listings near {{city}} (live endpoint — Block 05)
  • No guest segment attribute required — segment-based variants removed

Success Metrics

MetricTarget
1st-to-2nd booking rate (21 days)>=35%
Block 03 in-water offer redemption rateTrack — new test
Block 03 timing: start vs. midpoint CTRTrack — determine optimal window
Block 08 promo: $10 vs. $25 incremental lift vs. controlMeasure before scaling
Block 09 lapse recovery rate>=12%
🚩Turn Off When Ready
Turn off Marketing-Guest-1stbookingto2ndbooking (health score 52 🔴) when GP2 is live and confirmed sending — GP2 is the full replacement.

Turn off V2_Guest_Marketing_PostBooking_Retention_SP when GP2 reaches steady state. V2_PostBooking D+4 ("This is your sign") and D+6 ("More to explore") emails are cut — not replaced, removed. Run both canvases in parallel during QA, then sunset V2_PostBooking.
G-P3
Needs EngNot Started

Browse-Only Re-engagement

Objective
Re-engage guests who browsed multiple listings but never entered the booking flow. This is the earliest-funnel drop-off gap in the guest journey - score 0, not currently addressed. Surfaces the pools they viewed and creates urgency to take the next step.
Entry Trigger
Guest views ≥2 listings (`listing_viewed` × 2+) with no `UserPressedToEnterBookingFlow` within 48 hours
Exit Condition
`UserPressedToEnterBookingFlow` or `BookingConfirmedToGuest` event
Audience
Guests who browsed 2 or more listings but did not press to enter the booking flow. Distinct from cart abandonment (which requires entering the booking flow). Health score: 0 🔴 - missing entirely per Q1 lifecycle report.
Timing Coordination
The existing V1_MinusMI cart abandon canvases (5 variants, recently refreshed Feb 2026) already handle guests who entered the booking flow but didn't complete. Those are healthy and should not be touched. GP3 targets an earlier, distinct drop-off: guests who browsed but never pressed "Book." There is no current canvas covering this segment - GP3 is net new. Cadence per Q1 lifecycle report recommendation: Day 0 trigger, Day 2, Day 5.

Message Blocks

Block 01 Email ⏱ Day 0 - within 2 hours of 2nd listing view, 9 AM–8 PM local only
Subject AThe pool with a {{feature}}? Still has spots. Don't let it slip. 🌊
Subject B{{listing_name}} is still open — and it's as good as you think it is. 🏊
PreviewYou have great taste. Now lock it in. 🦩
Body{{listing_name}} in {{listing_city}} — you were looking at this one for a reason. It's still available, and honestly, it's one of the best in the area. 🌞 {{listing_city}} · {{listing_price}}/hr · ⭐ {{listing_rating}} Weekend slots at places like this don't sit around for long. This one's still yours if you want it. 🏊
CTAGrab my spot ☀️
✅📌 Email 1 of 2 (flow reduced from 3 emails to 2): this email references the specific listing they were looking at ({{listing_name}} in {{listing_city}}). Email 2 (Block 02) surfaces other pools nearby. No "you browsed / you saved / you checked out" language — forward-looking only. Connected Content required: pull last viewed listing name, city, price, and rating by user attribute. Listing IDs must be stored as Braze user attributes on `listing_viewed` event. ✅ Editorial feedback applied.
Block 02 Push ⏱ Day 0 — same day as Email (Block 01), send 3–4 hours after email (if no booking flow entry)
Title A{{listing_name}} is still available — but weekends fill up fast. ☀️
Title BThat pool you were eyeing in {{listing_city}}? Still there. Go grab it. 🏊
BodyThe pool that caught your eye still has weekend slots. These tend to go quickly once people start planning. 💦
CTALock in my spot 🌊
✅📌 Push moved to same day as Email (Block 01) — send 3–4 hours after email. Was previously Day 2; updated per editorial feedback. Email 2 in this flow (other pools nearby) now sits at Day 2. No "pools you checked out" language. ✅ Editorial feedback applied.
Block 03 — ⚠️ CUT (flow reduced to 2 emails per editorial feedback) Email ⏱ [REMOVED — was Day 5] Now repurposed: Email 2 (other pools nearby) fires Day 2
Subject A [Email 2 — other pools nearby]{{city}} has private pools you probably don't know about yet. 🌊
Subject BThe best-kept secret in {{city}}? The private pool scene. 🏊
PreviewIncredible hosts, private backyards, and weekend spots still open. ☀️
Body{{city}} has some genuinely incredible private pools — the kind you walk past every day without knowing they're bookable. Backyards with personality, hosts who actually care, and the whole place to yourselves. 🌞 [CC: 2 top-rated available listings near {{city}}] One of these could be your Saturday. 🏊‍♀️
CTAFind my pool ☀️
✅📌 This is now Email 2 of 2 in the GP3 flow — fires Day 2 if no booking after Email 1 + Push. The original 3rd email (Day 5) has been cut per editorial feedback. Flow is now: Email 1 Day 0 (specific listing) → Push Day 0 same day → Email 2 Day 2 (other pools nearby). No "pools you looked at / browsed" language. Connected Content: 2 top-rated available listings near {{city}}. ✅ Editorial feedback applied.

Data Requirements

  • `listing_viewed` event - requires count tracking (entry filter: 2+ views without `UserPressedToEnterBookingFlow`)
  • Last 2 viewed listing IDs stored as Braze user attributes on each `listing_viewed` event (Eng dependency)
  • Connected Content endpoint: pull listing name, city, price, availability by listing ID
  • `UserPressedToEnterBookingFlow` event for exit suppression
  • `BookingConfirmedToGuest` event for exit suppression
  • Fallback pool endpoint: top-rated available listing in guest's city (for Block 03 if original viewed listings unavailable)

Success Metrics

MetricTarget
Browse-to-booking-flow entry rate>=15% (baseline - no prior benchmark)
Block 01 email open rate>=28%
Block 02 push tap rate>=6%
Net new bookings attributed to GP3 (30-day window)Track from launch
G-P4
Needs EngNot Started

Lapsed Guest Win-Back

Objective
Re-engage guests who haven't booked in 90+ days. The hospitality move: make them feel remembered, not marketed to. Anchor every send to where they swam last, who they were with, and what's new since then. This is the Airbnb wishlist-reminder play - built for a product where the memory of a great afternoon is the conversion hook.
Entry Trigger
`360SinceLastBookingConfirmed` (existing Braze event from live YoY_Retention canvas). Recommended addition: build a 90-day trigger for seasonal re-engagement ahead of summer - coordinate with Eng.
Exit Condition
`BookingConfirmedToGuest` event
Audience
Guests with at least 1 completed booking who have not booked in 90+ days. 4 segments: Pet / Party / Family / Everyone. Source canvas: `Guest_Marketing_YoY_Retention_360dSinceLastbooking_SP` (health score 48 🔴 - exists, not personalized).
Timing Coordination
The live Guest_Marketing_YoY_Retention_360dSinceLastbooking_SP canvas fires at 360 days and sends generic re-engagement - no last-booking reference, no personalization, no segment matching. GP4 replaces it. The core unlock is Connected Content pulling the guest's actual swim history: where they went, the listing name, the city. That single detail changes the email from a broadcast to a personal note. Run GP4 in parallel with the live canvas during QA, then retire the original. Coordinate Block 03 promo ($25) with GP2 Block 10 - don't let both fire within the same 30-day window.

Message Blocks

Block 01 Email ⏱ Day 0 - 360-day trigger fires (or 90-day seasonal re-engagement trigger)
Subject{{first_name}}, a lot of great pools have opened up since your last swim. 🌊
Preview{{last_booked_listing_name}} was just the start. Wait until you see what's new. ☀️
BodyRemember {{last_booked_listing_name}} in {{last_booked_city}}? That was {{last_booking_month}}. Good taste, by the way. 👏 A lot has opened up in {{city}} since then — new pools, new hosts, and some seriously beautiful backyards you haven't seen yet. Here's what's waiting for you right now: 🏊
CTASee what's new 🌊
Body [Version B — interim, no history endpoint]{{first_name}}, there are some genuinely amazing private pools in {{city}} right now — new listings, incredible hosts, and the kind of backyards that make you wonder how you didn't know about them sooner. 🌞 Here's what's open right now: 🏊 [CC: 2–3 top-rated available listings near {{city}}]
✅📌 Connected Content - last booking history (new endpoint needed): `{{last_booked_listing_name}}`, `{{last_booked_city}}`, `{{last_booking_month}}` pulled from last completed booking event attributes. This is the #1 personalization hook - without it, fall back to Version B below. Version B (interim - no history endpoint yet): Remove listing-specific references. Lead with: 'It\'s been a while since your last swim, {{first_name}}. Here\'s what\'s new in {{city}}.' - still better than the current live canvas. Connected Content - listing recs (live now): 2–3 top-rated available listings near `{{city}}` via existing endpoint.
Block 02 Push ⏱ Day 3 (if no click on Block 01)
Title ANew pools in {{city}} since your last swim. Come see what's open. 🏊
Title BA floatie, a hot tub, and a BBQ are all still waiting in {{city}}. ☀️
BodyGreat hosts, beautiful backyards, and some incredible new spots have opened in {{city}} since you last swam. Worth a look. 🌊
CTASee what's new 🌊
✅📌 `{{city}}` from guest profile attribute - no listing-level CC required for this block. Keep it light. The email (Block 01) is doing the heavy lifting; this push is just a tap on the shoulder.
Block 03 Email ⏱ Day 7 (if still no booking after Blocks 01–02)
Subject A [Everyone]{{first_name}}, we saved you $25 toward your next pool day. 🏊‍♀️
Subject B [Everyone]$25 off any pool in {{city}}. Consider this your nudge. 💦
Subject A [Party]Drop this in the group chat: $25 off a private pool day. You're welcome. 🎉
Subject B [Party]{{first_name}}, your crew is overdue for a pool day. $25 off to make it happen. 🏊
Subject A [Family]The kids have been asking about the pool. $25 off your next family swim. ☀️
Subject B [Family]{{first_name}}, private pool, kids going wild, $25 off. That's a Saturday sorted. 🌊
Subject A [Pet]Your dog deserves a pool day. $25 off makes it happen this weekend. 🐾
Subject B [Pet]{{first_name}}, the pool zoomies are long overdue. $25 off to unleash them. 🐕💦
Preview$25 off any pool in {{city}}. No minimum. Good for the next 7 days. 🌊
BodyYou know what makes a perfect afternoon? A private pool, your favorite people, and absolutely nowhere else to be. 👀 Here's $25 off to make it happen. No minimum. Any pool in {{city}}. {{promo_code}} Expires in 7 days. Go find your pool. 🏊
CTAUse my $25 💦
Variants4 segment variants for subject + pre-header. Promo body stays consistent across all segments.
✅📌 Promo code generation required (Eng). $25 matches the GP2 Block 10 lapse prevention incentive - coordinate suppress logic: if guest received GP2 Block 10 in the last 30 days, skip Block 03 entirely to avoid double-incentive. Cross-canvas suppression requires Eng. `{{last_booking_month}}` uses same CC endpoint as Block 01 - fallback to 'a while' if unavailable.

Data Requirements

  • `360SinceLastBookingConfirmed` event (existing in live canvas - confirmed from Braze audit)
  • Connected Content (new endpoint needed): `{{last_booked_listing_name}}`, `{{last_booked_city}}`, `{{last_booking_month}}` from last completed booking event - this is the primary personalization hook for Block 01
  • Connected Content (live now): 2–3 top-rated available listings near `{{city}}` for bottom-of-email grid
  • `{{city}}` guest profile attribute (required for both CC calls + Block 02 push)
  • Guest segment attribute (Pet / Party / Family / Everyone) for subject variant selection
  • Promo code generation for Block 03 ($25 off)
  • Cross-canvas suppress: skip Block 03 if guest received GP2 Block 10 within last 30 days (Eng dependency)

Success Metrics

MetricTarget
Win-back booking rate (30 days post-Block 01)>=8%
Block 01 open rate - personalized vs. Version B interimA/B at launch to validate CC lift
Block 03 promo redemption rate>=15% of sends
Win-back CAC vs. new guest acquisition costTarget: win-back ≤30% of new acquisition cost
🚩Turn Off When Ready
Turn off Guest_Marketing_YoY_Retention_360dSinceLastbooking_SP when GP4 is live and confirmed sending. GP4 is the full replacement.
G-P5
Needs EngNot Started

Post-Swim Evergreen (Bookings 2+)

Objective
Capture the emotional peak after every swim beyond the first. Seed the next booking while the memory is fresh. Celebrate milestones. This is the Airbnb post-trip loop applied to Swimply - runs on every completed swim #2, #3, #4 onward. GP2 owns swim #1. GP5 owns everything after.
Entry Trigger
`BookingConcludedToGuest` WHERE `booking_count_as_guest >= 2`
Exit Condition
Next `BookingConfirmedToGuest` or 21 days from trigger
Audience
All guests who have completed 2+ bookings. 4 segments: Pet / Party / Family / Everyone. No education needed - these are converted, repeat swimmers.
Timing Coordination
GP2 owns booking_count = 1 - no overlap possible. GP5 fires on booking_count >= 2. Coordinate with G07 (review request fires 48h after `BookingConcludedToGuest`): GP5 Block 01 memory email fires within 2h of window close - different content, no conflict. GP5 Block 02 push fires SD+2 (6:30–8:30 PM local) - G07 Block 02 review push fires SD+3. No collision. For SP holders: SP1 covers the post-swim re-engagement sequence - suppress GP5 Block 03 (SMS) for active SP holders to avoid double-touch. GP5 Block 01 (memory) and Block 04 (milestone) can coexist with SP1.

Message Blocks

Block 01 Email ⏱ Within 2 hours of BookingConcludedToGuest (SD+0 to SD+2)
SubjectSwim #{{booking_count_as_guest}} is done. The only question: when's the next one? 🌊
TitleMemory + Next Rec
PreviewYou already know how this works. Here's your next pool day. 🏊
BodySwim #{{booking_count_as_guest}} at {{listing_name}} — another one for the books. 🌞 That post-swim feeling? Don't let it fade. Here's how to keep it going: [CC: same-host next available slot] [CC: 1 alternative top-rated listing near {{city}}] Back to {{host_name}}'s place or try somewhere new in {{city}}? Either way, your next pool day is right here. 🏊‍♀️
CTABook my next pool day 🌊
✅📌 A/B test: Arm A surfaces same-host next slot ('Back to {{host_name}}?') vs. Arm B surfaces a different pool ('Try something new near {{city}}'). Primary learning: does familiarity or novelty drive higher repeat booking rate? CC same-host next availability may require new endpoint - flag with Eng. Interim fallback: skip same-host arm, serve alternative pool only (live now).
Block 02 Push ⏱ SD+2, 6:30–8:30 PM local
TitleSocial Proof / Milestone Push
Title AAnother pool day in {{city}}? You know you want to. 🏊
Title BSwim #3 is in the books. You're officially a regular now. 🌊 [milestone: 3rd swim]
Title CFive pool days and counting. This is what a real summer looks like. ☀️ [milestone: 5th swim]
Title D10 pool days. You are living your best life and we're here for it. 🦩 [milestone: 10th swim]
BodyGreat pools in {{city}} are open this weekend — and you already know how good a pool day feels. 🏊‍♀️
✅📌 Milestone variants fire when `booking_count_as_guest` = 3, 5, or 10. Non-milestone variant fires on all other swims. Braze Liquid conditional on `booking_count_as_guest` - confirm real-time attribute value at send time with Eng.
Block 03 SMS ⏱ SD+5, 11 AM–5 PM local
TitleCredits + Direct Nudge
Variants['SP holders: "{{first_name}}, you earned credits at {{host_name}}\'s pool — they\'re loaded and ready to use: [link] 🏊"', 'Non-SP: "{{first_name}}, {{city}} has private pools open this weekend with your name on them: 🌊 [link]"']
✅📌 SP holder variant requires `has_active_summer_pass` attribute filter. Under 160 chars each. Suppress SP-holder variant if SP1 Block 03 already fired within 3 days.
Block 04 Email ⏱ SD+10 (if no booking confirmed since Block 01)
Subject A{{booking_count_as_guest}} pool days and counting. Your summer is looking incredible. 🎉 [milestone: 3rd, 5th, 10th]
Subject B{{first_name}}, great pools in {{city}} are open this weekend. 🌊 [non-milestone]
TitleMilestone Celebration OR Re-engagement
PreviewSwim #{% assign next_swim = booking_count_as_guest | plus: 1 %}{{next_swim}} is right there. Let's make it happen. 🌊
Body [Milestone (count = 3, 5, or 10)]{{booking_count_as_guest}} pool days on Swimply. That's not a hobby — that's a lifestyle. 🎉 {{booking_count_as_guest}} afternoons of sun-tired, happy people who didn't want to leave. {{booking_count_as_guest}} times someone said "we need to do this every weekend." That's the kind of summer worth protecting. Here's what's waiting in {{city}} for swim #{% assign next_swim = booking_count_as_guest | plus: 1 %}{{next_swim}}: 🌊 [CC: 2 listings near {{city}}]
Body [Non-milestone]You already know what a great pool day feels like. Here's what's open in {{city}} this weekend — some incredible hosts with beautiful spots, wide open and waiting for you. 👀 [CC: 2 listings near {{city}}]
CTABook swim #[next] 🏊
✅📌 Milestone mode: use Braze Liquid conditional on `booking_count_as_guest` to render milestone vs. standard variant. CTA on milestone sends can dynamically show 'Book swim #[N+1]'. CC: 2 top-rated available listings near `{{city}}` - live endpoint.

Data Requirements

  • `BookingConcludedToGuest` with `booking_count_as_guest >= 2` as canvas entry filter (Eng - confirm real-time attribute value at entry time)
  • `booking_count_as_guest` - must be updated before GP5 fires for milestone Liquid conditionals to work correctly
  • `{{host_name}}` and `{{listing_id}}` from most recent `BookingConcludedToGuest` event payload (for same-host CC lookup in Block 01 A/B Arm A)
  • `has_active_summer_pass` attribute for Block 03 SMS segment split
  • Connected Content: same-host next available slot by `{{listing_id}}` (likely new endpoint - flag with Eng; interim: skip Arm A, serve alternative pool only)
  • Connected Content: 2 top-rated available listings near `{{city}}` (live now)
  • Guest segment: Pet / Party / Family / Everyone (existing attribute)
  • Milestone logic: `booking_count_as_guest` = 3, 5, 10 for milestone variants in Blocks 02 + 04 (Braze Liquid)

Success Metrics

MetricTarget
Repeat swim rate (booking 2+ → next booking within 21 days)>=45%
Block 01 A/B: same-host vs. new pool CTRPrimary learning - measure before scaling either arm
Milestone email open rate vs. non-milestoneTrack lift - expect +8–12% on milestone subjects
Block 03 SP-holder credit utilization post-SMSTrack vs. non-SP variant
🚩Turn Off When Ready
No existing canvas covers this segment - GP5 is net new. Score: 0 🔴. Note: V2_Guest_Marketing_PostBooking_Retention_SP has partial overlap for SP holders - suppress GP5 Block 03 for active SP holders once GP5 is live.
G03
Needs EngNot Started

Liked Listing Urgency

Objective
Convert guests who saved or liked a listing into bookers by striking with scarcity messaging within hours while intent is still elevated.
Entry Trigger
`UserFavoritedListing` (Braze canonical event name), no `BookingConfirmedToGuest` within 6 hours
Exit Condition
`BookingConfirmedToGuest` or 48 hours post-trigger
Audience
Guests who favorited a listing without booking within 6 hours
Timing Coordination
The live FavoritedSpace canvas currently fires on `UserFavoritedListing` and sends Email D+3 + Push 3h post-trigger. G03 replaces both with a tighter cadence: Push 2h → Email 6h. Same trigger, better timing. Run G03 in parallel with FavoritedSpace during QA to compare performance before turning off the original.

Message Blocks

Block 01 Push ⏱ 2 hours post-save, 9 AM–8 PM local only
Title A{{host_name}}'s pool is one of the most popular in the area — and it's still open. 🌊
Title B{{listing_name}} has weekend slots — but they tend to go fast. 🏊
Body{{host_name}}'s pool is the kind of place people rebook as soon as they get out of the water. Weekend spots are still open, but not for long. 💦
CTAGrab my spot 💦
✅📌 No "you saved / you hearted / you liked it" language — focus entirely on the urgency and excitement of the listing itself. CC Version A (live now): `{{host_name}}` pulled from saved listing ID attribute - host first name only. CC Version B (when booking-frequency endpoint is ready): replace 'books out most weekends' with real stat, e.g. '{{host_name}}\'s pool had {{listing_bookings_last_month}} bookings last month.' Until then, use Version A — host name alone elevates this above generic scarcity. Fallback if listing ID not stored: use title variant B with {{listing_name}}. Reference existing Braze canvas for context. ✅ Editorial feedback applied.
Block 02 Email ⏱ 6 hours post-save (if no booking after push)
Subject A{{host_name}}'s pool is still open this weekend. Great taste deserves a booking. 🌊
Subject BSaving a pool is nice. Booking it is better. {{listing_name}} is still available. 🏊
PreviewThe pool you loved is still there. Weekend spots won't last. 💦
BodyYou clearly know a good pool when you see one. And this one is still waiting for you. 👇 {{listing_name}} {{listing_city}} · {{listing_price}}/hr · ⭐ {{listing_rating}} {{host_name}}'s pool is one of the most popular in the area — people rebook it before they even leave. Weekend slots are still open, but they don't last. Two minutes to make it yours. 🏊‍♀️
CTABook {{listing_name}} 🌊
Variants3 variants: Party / Family / Pets - segment one-liner above CTA: 'Bring the whole crew — the space is yours for the day.' / 'Dog-friendly and totally private.' / 'Private pool, perfect for families.'
Body (fallback — no listing ID stored)You found something great in {{listing_city}} — and it's still available. 👇 The most popular private pools in {{listing_city}} tend to book up fast, especially on weekends. If one caught your eye, this is the moment. Two minutes to lock it in. 🏊‍♀️
CTA (fallback)Find my pool in {{listing_city}} 🌊
✅📌 Connected Content (live now): pull `{{listing_name}}`, `{{listing_city}}`, `{{listing_price}}`, `{{listing_rating}}`, `{{host_name}}` from saved listing ID user attribute - all available via existing listing endpoint, no new backend required. Booking frequency line ('hosts most summer weekends') is interim - replace with '{{listing_bookings_last_month}} bookings last month' when booking_history endpoint ships. Fallback if listing ID attribute not stored on `UserFavoritedListing`: use generic copy with `{{listing_city}}` only.

Data Requirements

  • `UserFavoritedListing` event (Braze canonical - confirmed from live FavoritedSpace canvas)
  • Favorited listing ID stored as Braze user attribute on `UserFavoritedListing` fire (confirm attribute name with Eng - this is required for all CC pulls)
  • Connected Content (live now): `{{listing_name}}`, `{{listing_city}}`, `{{listing_price}}`, `{{listing_rating}}`, `{{host_name}}` via existing listing endpoint by listing ID
  • Connected Content (new endpoint needed): `{{listing_bookings_last_month}}` - booking frequency per listing for real urgency signal
  • `BookingConfirmedToGuest` for exit suppression

Success Metrics

MetricTarget
Like-to-booking conversion rate>=10%
Time-to-book from saveTrack baseline - no prior benchmark
Block 01 push tap rate (host-name variant vs. generic)A/B test at launch
🚩Turn Off When Ready
Turn off FavoritedSpace canvas in Braze when G03 is live and confirmed sending. G03 is the full replacement with improved cadence and segment-matched copy.
G07
Needs EngNot Started

Review Request - Post-Booking Follow-up

Objective
Drive post-booking review completion within 48 hours of experience end. Build host quality signals, improve listing search visibility, and create social proof for future guests.
Entry Trigger
48 hours after `BookingConcludedToGuest`, no review submitted
Exit Condition
Review submitted or 7 days post-booking
Audience
All guests who completed a booking without leaving a review
Timing Coordination
Transactional pushes fire on `BookingConcludedToGuest` immediately (SD+0) and again D+1. G07 intentionally waits 48 hours (D+2) before sending its first email - this gap prevents review request from stacking on transactional push fatigue. The downstream GuestLeavesReviewToGuest_Marketing_Post5Star_ExternalReviewRequest_SP canvas does not conflict - it fires only after a guest has already left a 5-star review (different trigger entirely). The existing partial review request canvas (health score 58 🔴) has timing issues - G07 rebuilds the cadence correctly.

Message Blocks

Block 01 Email ⏱ 48 hours after `booking_concluded`
Subject AHow was {{host_name}}'s pool? Give them their flowers. ⭐
Subject B30 seconds to rate your pool day at {{host_name}}'s — they'd love to hear it. 🌊
PreviewYour review helps {{host_name}} and helps the next person find somewhere amazing. 💦
BodyEvery great pool day deserves a proper ending — and this is it. ☀️ Your review helps {{host_name}} get discovered by the next group looking for somewhere special. It's also how other guests find the spots that are actually worth booking. Takes about 30 seconds. Had a rough experience? We want to hear that too. Every review gets read. 🏊‍♀️
CTALeave my review ⭐
✅📌 Deep link to in-app review flow required. Trigger is `BookingConcludedToGuest` (Braze canonical - confirmed from live transactional canvas). G07 fires 48h after this event - delay configured in Braze canvas step.
Block 02 Push ⏱ 72 hours post-booking (if no review and no email click)
Title{{host_name}} would love to know how your pool day went. 30 seconds. ⭐
BodyYour review helps {{host_name}} get found — and helps the next person find a pool day they'll love. 🌊
CTALeave my review ⭐

Data Requirements

  • `BookingConcludedToGuest` event (Braze canonical - confirmed from live Transactional-Guest-CompletedBooking canvas)
  • Review submission event for exit suppression (requires Eng - confirm custom event name)
  • `{{host_name}}` attribute
  • Deep link to in-app review screen

Success Metrics

MetricTarget
Review completion rate>=35% of completed bookings
Average review rating post-flowTrack for quality signal
G08
Needs EngNot Started

5-Star Review → 2nd Booking

Objective
Capitalize on peak guest satisfaction immediately after a 5-star review. Strike while motivation is highest to convert first-time guests into repeat bookers before momentum fades.
Entry Trigger
`GuestLeavesReviewToGuest` — filter: review_rating = 5 AND BOOKING_COUNT_AS_GUEST = 1 (first-time guest who just left a 5-star review). Entry fires within 1 hour of review submission.
Exit Condition
Guest confirms a 2nd booking OR 14 days pass post-review with no booking
Audience
First-time guests who rated their experience 5 stars. High-intent, high-satisfaction. Most likely segment to rebook within 30 days.
Timing Coordination
G08 entry fires immediately after a 5-star review is submitted. Requires coordination with the existing GuestLeavesReviewToGuest_Marketing_Post5Star_ExternalReviewRequest_SP canvas — confirm that canvas suppresses entry into G08 (or vice versa) to avoid double-messaging. G07 (review request) will have completed before G08 triggers. No send window overlap if filters are correctly applied.

Message Blocks

Block 01 Email ⏱ ~1 hour after 5-star review submitted
Subject AFive stars for {{listing_name}}. You clearly know a great pool when you find one. 🌊
Subject BThat pool day was a five-star afternoon. Your summer is just getting started. 🏊
PreviewYou found one amazing pool. Here are a few more that match your taste. ☀️
Body{{first_name}}, you gave {{listing_name}} five stars — and honestly, we get it. That's the kind of afternoon where everyone leaves sunburned and happy and already texting about the next one. 🌟 Now that you know what a great Swimply day feels like, here are a few more spots near {{city}} that are right up your alley: {{personalized_pool_recommendations}} Your taste is excellent. Keep going. 🏊‍♀️
CTA AFind my next pool 🌊
CTA B (test)Back to {{listing_name}} 🏊
✅📌 Entry fires within 1h of 5-star review submission. CTA A/B test: "Find my next pool" (discovery) vs "Book {{listing_name}} again" (same-pool rebook). Same CTA framework as GP2 Block 01. Requires Eng: review_rating filter + BOOKING_COUNT_AS_GUEST = 1 filter. Personalized recommendations require Braze Connected Content or catalog feed.
Block 02 Push ⏱ Day 3 — no 2nd booking confirmed
Title{{first_name}}, new pools are opening every week in {{city}}. Your next five-star day is waiting. 🌟
BodyFresh listings, incredible hosts — the pool scene in {{city}} keeps getting better. The most popular spots book up quickly, so it's worth looking now. 🏊‍♀️
CTASee what's new ☀️
✅📌 Suppress if guest has confirmed a 2nd booking. Deep link to geo-filtered search results for {{city}}.
Block 03 Email ⏱ Day 7 — no 2nd booking confirmed (final send)
Subject{{first_name}}, that perfect pool day is worth repeating. 🏊
PreviewPrivate pool, great host, your crew — you already know how good it is. 🌊
Body{{first_name}}, you already know what a perfect pool day feels like — the kind where everyone leaves sun-tired, happy, and already talking about doing it again. 🌟 Great spots in {{city}} are open this weekend. This is the last time we'll mention it, but the pools aren't going anywhere. Whenever you're ready. 🏊‍♀️
CTAFind pools near {{city}} 🌊
✅📌 Final send in G08. Suppress if 2nd booking confirmed. Light urgency — no heavy scarcity language. Canvas exits after this block regardless of action.

Data Requirements

  • `GuestLeavesReviewToGuest` Braze event with `review_rating` property (value = 5)
  • BOOKING_COUNT_AS_GUEST = 1 segment filter
  • `{{city}}` and `{{first_name}}` attributes
  • `{{listing_name}}` from most recent booking
  • Booking confirmed exit event (any booking confirmation suppresses further sends)
  • Geo-filtered pool recommendations (Connected Content or catalog)
  • Coordinate suppression with `GuestLeavesReviewToGuest_Marketing_Post5Star_ExternalReviewRequest_SP` canvas

Success Metrics

MetricTarget
2nd booking rate (within 14 days)>=20% of 5-star reviewers
Block 01 email → booking conversionTrack vs baseline
CTA A vs CTA B click rateSame-pool vs discovery preference
G11
Needs EngNot Started

Invited Users - Book Your First Swim

?Question for Bunim
What does the invitee earn on their first booking? What does the inviter earn when the invitee books? These amounts are the #1 copy hook - required before this brief goes to build.
Objective
Convert referral-invited guests into first-time bookers using the social context of who sent the invite. Both parties earn on first booking.
Entry Trigger
Account created via referral invite, no `booking_confirmed` within 7 days
Exit Condition
First booking confirmed or 21 days post-signup
Audience
Guests who signed up via a referral link and haven't booked yet

Message Blocks

Block 01 Email ⏱ Day 7 post-signup, no booking
Subject A{{inviter_name}} sent you a private pool invite. This is going to be good. 🌊
Subject B{{inviter_name}} thinks you'd love private pool days. They're right. 🏊
Preview{{inviter_name}} already tried it and thought of you. That says something. ☀️
Body{{inviter_name}} thought you'd be into this — and honestly, they know you well. 🌞 Swimply lets you book private pools by the hour. We're talking someone's beautiful backyard, the whole place to yourselves, a host who texts "pool is all yours, enjoy!" and means it. It's personal, it's private, and it's the best-kept secret in your neighborhood. Book your first swim and you both win: $[INVITEE_REWARD] off for you, $[INVITER_REWARD] back for {{inviter_name}}. Applied automatically at checkout. Go find your pool. 🏊‍♀️
CTABook my first swim 🌊
Variants3 variants: Party / Family / Pets
✅📌 $[INVITEE_REWARD] and $[INVITER_REWARD] are placeholders - requires reward amounts from product before build.
Block 02 Push ⏱ Day 10 (if no booking after email)
Title{{inviter_name}}'s invite is still live — and so are the best pools in your area. ☀️
Body{{inviter_name}} vouched for this, and the invite still has your $[INVITEE_REWARD] attached. Book your first swim and you both come out ahead. 🌊
CTAFind my pool 🏊

Data Requirements

  • `referral_invite_accepted` event (requires Eng)
  • `{{inviter_name}}` attribute linked to referral source
  • Referral reward credit amounts (confirm with product - required before build)
  • `booking_confirmed` for exit

Success Metrics

MetricTarget
Referral-to-first-booking conversion rate>=20%
Referral revenue attributionTrack per cohort
G12
All in BrazeNot Started

Weekly Pool Drops - New Pools by Market

Objective
Drive discovery and repeat bookings by surfacing newly listed pools weekly in each guest's local market. Re-engage non-recent bookers with fresh supply.
Entry Trigger
Weekly scheduled send - Tuesdays, 9–11 AM local time
Exit Condition
Unsubscribe (ongoing recurring series)
Audience
All guests who have not booked in the last 14 days, filtered by market

Message Blocks

Block 01 Email ⏱ Every Tuesday, 9–11 AM local
Subject ANew private pools just listed in {{city}} — and they look incredible. 🌊
Subject B{{city}} just got new pools this week. Some seriously beautiful backyards. 🏊
PreviewFresh listings from new hosts. Weekend spots are already filling up. ☀️
BodyNew private pools just opened in {{city}} this week — these weren't here seven days ago. 🌞 New hosts, gorgeous backyards, and the kind of spots that make you wonder how you didn't know they were in your neighborhood. Weekend availability is already moving, so it's worth looking now. Go see what just opened near you. 🏊‍♀️
CTASee new pools near me 🌊
Body (fallback — no new listings in market)No new listings this week, but the top-rated pools in {{city}} are open and absolutely worth your time. 🌞 These are the ones people in your area keep coming back to — private, well-loved, and available this weekend. Here's what's good near you: 🏊‍♀️ [CC: top-rated available listings near {{city}}]
✅📌 Subject B ('{{city}} just added new pools') only sends if Connected Content returns >=1 new listing in market. If no new listings exist, fall back to Subject A with top-rated pool content. Suppress entire send if `booking_confirmed` in last 14 days.

Data Requirements

  • Connected Content endpoint: new listings by market in last 7 days (requires Eng to build or confirm existing endpoint)
  • Fallback content: top-rated pools by market when no new listings exist
  • `{{city}}` attribute per guest
  • Suppress if `booking_confirmed` in last 14 days (changed from 30 days - recent bookers are warm, not cold)
  • Frequency cap: 1x/week hard cap in Braze

Success Metrics

MetricTarget
Email open rate>=25%
CTR to search/listing>=8%
Booking rate from flow (monthly)>=5% of recipients
G13
Needs Third PartyNot Started

Weather-Triggered Push Alerts

Objective
Send timely push notifications when the weekend forecast hits 70°F+ in a guest's market to capitalize on weather-driven pool day intent.
Entry Trigger
OpenWeatherMap API: 70°F+ Saturday or Sunday forecast detected Thursday/Friday. Suppress if no API response for market.
Exit Condition
Single send per weather event (frequency cap: max 1x/week per user)
Audience
Priority segment: guests who have NOT booked in 30+ days AND have push enabled, geo-filtered by market forecast. Secondary: all push-enabled guests in market. The weather trigger is most valuable as a re-engagement surface - guests mid-onboarding or recently active don't need the weather nudge to convert, lapsed guests do. Confirm segmentation logic with Eng before launch.
Timing Coordination
⏱ Two build paths - pick one based on what Eng can ship: **Now (All in Braze):** Weekly scheduled canvas, every Thursday 6–8 PM local, May–September. Target lapsed guests in all major markets regardless of forecast. No API needed - less precise, available today. Same copy as below, just without the weather condition. **Later (Needs Third Party):** OpenWeatherMap 5-day forecast (`api.openweathermap.org/data/2.5/forecast`) fires only when a market is actually hitting 70°F+ that weekend - precision version. Same copy, smarter trigger. Worth building once the weekly version proves the concept. Coordinate suppress logic with GP4 lapsed win-back - G13 can still fire alongside GP4 (different hook), but confirm with Eng that messaging doesn't overlap.

Message Blocks

Block 01 Push ⏱ Thursday PM or Friday AM (before the 70°F+ weekend)
Title A{{day}} in {{city}} is going to be perfect pool weather. 🏊 ☀️
Title B70°+ and sunny in {{city}} this weekend. You know what to do. 💦
Body{{day}} in {{city}} is shaping up to be exactly the kind of day that was made for a private pool. The best weekend spots are already booking up. 🌞
CTABook a pool for {{day}} ☀️
Block 02 In-App ⏱ Same trigger window - shown on next app open before the weekend
HeadlineIt's going to be gorgeous in {{city}} this weekend. 🌞
BodyBeautiful weather this weekend in {{city}} and private pools with great hosts still have spots open. The kind of afternoon where you just show up, jump in, and let the sun do the rest. 🏊
CTABook a pool 🌊

Data Requirements

  • OpenWeatherMap API (5-day forecast endpoint: `api.openweathermap.org/data/2.5/forecast`)
  • API key stored in Braze Connected Content credentials
  • If no API response for a given market: suppress send for that market (do not error-send)
  • `{{city}}` and geo-coordinates per guest for market-level forecast matching
  • Push notification opt-in required
  • Frequency cap: 1 trigger/week/user regardless of forecast
  • Suppress if `booking_confirmed` exists for the upcoming weekend

Success Metrics

MetricTarget
Push CTR (vs. 5% non-triggered baseline)>=12%
Same-day/next-day booking rate>=6%
G14a
All in BrazeNot Started

Guest Announcement: Lifeguard Bookings

Objective
Announce the new lifeguard add-on to all guests at launch. Drive first-use by framing it as the upgrade that removes the one thing that holds groups back from booking a pool.
Entry Trigger
Scheduled blast - lifeguard feature launch date (confirm with product)
Exit Condition
Single send
Audience
All guests (no segment restriction). Prioritize guests with party size >= 4 or Family tag for resends.

Message Blocks

Block 01 Email ⏱ Feature launch day - Tuesday or Wednesday send
Subject ANew: add a certified lifeguard to any Swimply pool day. 🏊
Subject BThe one thing holding groups back from the pool? Just solved. ☀️
PreviewCertified lifeguard, any booking, added right at checkout. Everyone gets in the water. 💦
BodyFor every group that almost booked a pool day but hesitated because someone asked "but who's watching the kids?" — this one's for you. 🌊 You can now add a certified lifeguard to any Swimply booking, right at checkout. Big groups, families, birthday parties — anyone who wants the full pool day experience without carrying the mental load of watching the water. Everyone gets to actually relax. Everyone gets in. That's the whole point. 🙌 Note: messaging can reference swim lessons in follow-up campaigns. See G14b.
CTABook with a lifeguard 🏊
Block 02 Push ⏱ Same day as email
TitleNew: Add a certified lifeguard to any pool day. Now everyone can relax. 🏊
BodyCertified lifeguard, added at checkout. Groups, families, anyone — everyone gets in the water. 💦
CTAAdd a lifeguard 🌊

Data Requirements

  • Lifeguard feature launch date from product (required before scheduling)
  • Deep link to lifeguard add-on feature or help article
  • Lifeguard booking event for adoption tracking

Success Metrics

MetricTarget
Email open rate>=30% (announcement benchmark)
Lifeguard add-on bookings in first 30 daysTrack as feature adoption baseline
G14b
All in BrazeNot Started

Guest Announcement: Swim Lessons

Objective
Announce bookable swim lessons at launch. Lead with Family segment (guests with children or party size >=4). Position as end-to-end: private pool + certified instructor, all in one booking.
Entry Trigger
Scheduled blast - swim lessons feature launch date (confirm with product; may differ from lifeguard launch)
Exit Condition
Single send
Audience
All guests for initial blast. Priority resend segment: Family tag or `party_size >= 4` attribute. Confirm child-signal attributes with Eng before segmenting.

Message Blocks

Block 01 Email ⏱ Feature launch day (may differ from G14a lifeguard launch)
Subject ANew: book private swim lessons at a Swimply pool near you. 🏊‍♀️
Subject BPrivate pool, private instructor, one booking. This changes everything. 🌊
PreviewLearn to swim in a private pool with a certified instructor. Just you and your family. 🏊
BodyImagine learning to swim — or teaching your kids — in a beautiful private pool, with a certified instructor, and nobody else around. That's what this is. 💦 Book a certified swim instructor alongside any Swimply pool. One booking covers the pool and the lesson. It's private, it's personal, and it's the way swim lessons should have always worked. For kids getting comfortable in the water. For adults who've been meaning to learn. For anyone who wants to get better without an audience. The backyard is all yours. Note: messaging can cross-reference lifeguard add-on (G14a) in follow-up campaigns.
CTAFind swim lessons near me 🌊
✅📌 Family segment: guests with `family` booking tag OR `party_size >= 4`. Confirm attribute names with Eng before segmenting. Do not assume child-related attributes exist without verification.
Block 02 Push ⏱ Same day as email
TitleNew: Private swim lessons in a private pool. The way it should be. 🏊‍♀️
BodyCertified instructor, beautiful private pool, just you and your family. Book your first lesson now. 🌊
CTAFind a lesson 🏊

Data Requirements

  • Swim lessons feature launch date from product (may differ from lifeguard launch - confirm before scheduling)
  • Family segment attributes: `family` booking tag OR `party_size >= 4` (confirm attribute names with Eng)
  • Deep link to swim lessons feature or instructor search
  • Swim lesson booking event for adoption tracking

Success Metrics

MetricTarget
Email open rate>=30% (announcement benchmark)
Swim lesson bookings in first 30 daysTrack as feature adoption baseline
Family segment CTR vs. all-guest CTRTrack to validate segment priority
G15
All in BrazeNot Started

Holiday Weekend Nudge (Guests)

Objective
Drive bookings ahead of the 5 highest-intent pool-day weekends of the year. Holiday weekends are the #1 occasion for private pool demand - and the #1 moment Swimply is invisible if they don't send.
Entry Trigger
Scheduled annual sends - 5 holiday windows: Memorial Day (7 days before), 4th of July (7 days before), Labor Day (7 days before), School's Out / First Week of Summer (around June 15), Father's Day (7 days before). Frequency cap: max 3 holiday sends per guest per summer.
Exit Condition
`BookingConfirmedToGuest` or send window passes
Audience
Guests who have NOT booked in the last 30 days, filtered by market. Active Summer Pass holders suppressed (SP flows handle them). Push/SMS opt-in required for those channels.

Message Blocks

Block 01 Email ⏱ 7 days before each holiday weekend
Subject [Memorial Day] AMemorial Day weekend in {{city}}: the kind of pool day you'll talk about all summer. 🌊
Subject [Memorial Day] BKick off summer right — private pool in {{city}} for Memorial Day weekend. 🏊
Subject [4th of July] A4th of July in {{city}}: private pool, your people, and a sunset you'll remember. 🎆
Subject [4th of July] BSkip the crowded park. Do the 4th the way it deserves — private pool in {{city}}. 💦
Subject [Labor Day] ALast big weekend of summer in {{city}}. Make it count with a private pool. 🌊
Subject [Labor Day] BSummer's finale deserves a proper send-off. Private pools in {{city}} are still open. 🏊
Subject [School's Out] ASchool's out and the kids need a pool. {{city}} has private ones ready. ☀️
Subject [School's Out] BFirst week of summer freedom? Start it in a private pool in {{city}}. 🌊
Subject [Father's Day] AThis Father's Day, skip the brunch line. Give dad a private pool afternoon. 🌞
Subject [Father's Day] BDad doesn't want a tie. He wants a pool day with the family. {{city}} has it. 🏊
Preview{{holiday_name}} pools fill up fast. Here's what's still available in {{city}}. 💦
Body{{holiday_name}} is one of those weekends that's made for a pool day — and private pools in {{city}} are the best way to do it right. Your people, a beautiful backyard, a host who makes it easy, and an afternoon nobody wants to end. 🌞 Here's what's still available near you: [CC: 3 top-rated available listings near {{city}}] The best spots always go first on holiday weekends. 🏊‍♀️
CTALock in my {{holiday_name}} pool ☀️
✅📌 Subject line and body rotate by `{{holiday_name}}` canvas entry attribute - set at send time. CC: 3 top-rated available listings near {{city}} (live endpoint, no new backend needed).
Block 02 Push ⏱ 3 days before the holiday weekend (follow-up to email non-bookers)
Title A{{holiday_name}} pools in {{city}} are filling up. Still some great ones left. 🌊
Title B{{holiday_name}} weekend is almost here. Private pools in {{city}} are going fast. 🏊
BodyHoliday weekends always book up — the best private pools in {{city}} tend to go first. See what's still available. ☀️
✅📌 Suppress if `BookingConfirmedToGuest` since Block 01. `{{holiday_name}}` = canvas entry attribute: 'Memorial Day', 'July 4th', 'Labor Day', etc.
Block 03 SMS ⏱ 1 day before the holiday (final nudge - highest-intent window)
Body{{first_name}}, {{holiday_name}} is tomorrow and great pools in {{city}} still have spots: [link] 🏊
✅📌 Under 160 chars. Suppress if booking confirmed since Block 01. Engagement-gated: only send to guests who opened Block 01 email OR tapped Block 02 push - prevents fatigue on non-holiday-intent users.

Data Requirements

  • Scheduled canvas entry points for 5 annual holiday dates (set annually in Braze, or use date-based Liquid conditional logic - no external API needed)
  • `{{holiday_name}}` canvas entry attribute - set at send time (e.g., 'Memorial Day', '4th of July')
  • Connected Content: 3 top-rated available listings near `{{city}}` (live now - same endpoint as GP1/G12)
  • Suppress active Summer Pass holders (SP flows handle them - use segment filter)
  • Frequency cap: max 3 holiday sends per guest per summer (Braze frequency cap rule)
  • Block 03 engagement gate: opened Block 01 email OR tapped Block 02 push (Braze in-canvas filter)

Success Metrics

MetricTarget
Holiday weekend booking rate vs. non-holiday baseline2–3x lift expected
Block 01 email open rate (holiday subject lines)>=35%
Block 03 SMS conversion rate (engagement-gated)>=8%
H-P1
All in BrazeCopy Approved

Host Onboarding: Application → First Booking (25 Steps)

Objective
Guide new hosts from application submission through listing publication and first booking. 25-step multi-channel sequence with primary focus on the Approved → Listed dropout phase.
Entry Trigger
`host_application_submitted`
Exit Condition
First `booking_confirmed` (host-side) or unsubscribe. 10% holdout group configured.
Audience
All new host applicants. No segment variants - universal copy. Source doc: swimply-host-onboarding-brief-v4.vercel.app

Message Blocks

Block 01 Email ⏱ Immediate post-application
SubjectYour Swimply host application is in 🎉
TitlePhase 1 / E1: Application Received
PreviewWe got it. Here's what happens next.
BodyHi {{first_name}}, We got it. Your application to become a Swimply host is in review. Our team reviews every application personally — you'll hear back within 1–2 business days. While you wait, here's what our top-earning hosts had ready on day one: ✅ At least 6 high-quality photos (bright, wide-angle, pool center-frame) ✅ A description that mentions what makes their space different ✅ Instant Book turned on — guests love skipping the request-and-wait step ✅ Competitive pricing (we'll show you the local range the moment you're approved) Hosts who nail these four things get their first booking fast. We'll walk you through each one the moment you're in. Talk soon, — Bunim & the Swimply Team
CTABrowse the Host Guide
📌 Transactional. Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 02 Email ⏱ Day 1 post-application (while under review)
SubjectWhile your application is under review…
TitlePhase 1 / E2: While You Wait
PreviewReal numbers from real Swimply hosts.
BodyHi {{first_name}},

Still reviewing — we'll be in touch soon. But here's something worth sitting with:

The average active Swimply host earns $5,000–$12,000/month during peak season. Our top hosts clear $200,000/year. And most of them started with the same pool you have.

Your pool costs $3,000–$6,000/year to maintain. It sits unused the vast majority of the time. Swimply turns that cost into income.

Here's how a typical weekend looks:
→ A 3-hour booking at $65/hr earns you $165
→ Three bookings over a weekend: $495
→ A peak summer month: real money — from your backyard

No extra work. No second job. Just your pool, doing something it wasn't doing before.

We'll send you everything you need the moment you're approved.

— Bunim & the Swimply Team
CTASee how other hosts do it
Block 03 Email ⏱ Immediate post-approval
SubjectWelcome to Swimply — joy + income, right in your backyard
TitlePhase 2 / E3: You're Approved — Welcome
PreviewEarn thousands while creating memories in your community.
BodyHi {{first_name}}, welcome to Swimply! You've joined 15,000+ hosts earning meaningful extra income while creating unforgettable moments for over 4 million guests and counting.

Your space isn't just a pool. It's a place where families laugh together, couples slow down, parents catch a breath, and friends choose connection over scrolling. A place where people can escape locally.

💸 Earn extra income — many hosts earn a few thousand dollars a month during peak season. 🎉 Share the joy — family afternoons, birthdays, photo shoots, swim lessons. 🛡️ Peace of mind — verified guests, $1M protection, secure payouts, 24/7 support.

How it works: 1. Publish your listing. 2. Accept or decline bookings on your terms. 3. Get paid automatically via Stripe 24–48 hours after each booking.

"Hosting isn't just about money — it's about seeing kids light up when they swim." — Sarah, CA
CTAFinish My Listing →
📌 CEO copy — Email 1. Welcome + community angle. Fires immediately post-approval.
Block 03a Push ⏱ 1–2 hours post-approval
TitlePhase 2 / Push-1: First Nudge
Body"Your pool is sitting pretty… but not earning 💸 Publish now →"
📌 CEO copy — Push 1. Fires 1–2 hours post-approval. No Intelligent Timing — send immediately.
Block 04 Email ⏱ Day 1 post-approval (if listing not published)
Subject🚀 Go Live in 48 Hours for a Booking Boost
TitlePhase 2 / E4: Go Live Boost Urgency
PreviewGet extra visibility and faster first bookings.
BodyHi [First Name], bookings are really picking up in your area! Right now, guests near [City] are searching for: 🌞 Peaceful backyard escapes with friends for $350 · 🏊 Family-friendly swims for $100 · 💦 Private pools for birthdays for $2,100 · 🎉 Unique spots to relax and reconnect for $120.

Publish within 48 hours to unlock your exclusive Host Boost: ✅ 14 days of priority placement in search results ✅ A feature in "New & Noteworthy" ✅ 3x faster first bookings — most boosted hosts get requests within days.

"I finished my listing over the weekend and got my first booking the very next day." — Emily, TX
CTAUnlock My Boost →
📌 CEO copy — Email 2. Boost urgency + geo demand signals. Requires {{city}} and {{benchmark_price}} for demand examples.
Block 04a SMS ⏱ Day 1 post-approval (if not yet listed)
TitlePhase 2 / SMS-1: Day 1 Earnings Nudge
Body💙 Families in [City] are booking pools right now. Local hosts earned $XXX this weekend. Publish today to be seen + start earning. 👉 [Go Live Now link]
📌 CEO copy — SMS 2. Under 160 chars. Day 3–4 post-approval. Requires {{city}} and dynamic weekend earnings.
Block 04b Push ⏱ Day 2 post-approval (if not yet listed)
TitlePhase 2 / Push-2: Geo Earnings
Body"Fun fact: Hosts in [City] made $X,XXX this week 🎉 Let's publish your spot!"
📌 CEO copy — Push 2. Day 2 post-approval. Requires {{city}} earnings variable. Intelligent Timing: Yes.
Block 05 Email ⏱ Day 2 post-approval
SubjectYour pool called… it wants to pay the bills 💸
TitlePhase 2 / E5: Real Host Earnings
PreviewTurn your backyard into your next income stream.
BodyHi [First Name], you're only a couple of clicks away from your first payout. Across the country, Swimply hosts are transforming a few spare hours a week into thousands of dollars — all while creating moments that matter.

💧 Sarah, CA: "I open my pool only on weekends and made $2,400 this month. Families, birthdays, even a proposal — it's pure joy." 🔥 Mike & Jenny, TX: "We listed to cover upkeep costs. Now we're booked most weekends — $5,200 last month!" 🌞 Alicia, FL: "Weeknight swims brought in $1,100 in 10 days. I can't believe how quickly it took off."

How Payments Work: Guests pay when they reserve. You're paid automatically via Stripe 24 hours after each booking. No chasing, no waiting.

You're {{progress}}% done. Complete your listing to start earning. Reminder: Publish within 48 hours to keep your Host Boost — 14 days of priority placement + 3x faster first bookings.
CTAFinish My Listing & Start Earning →
📌 CEO copy — Email 3. Real earnings + testimonials. Requires {{progress}} listing completion % attribute.
Block 06 Email ⏱ Day 3 post-approval
Subject100+ new hosts go live every day — join them!
TitlePhase 2 / E6: Social Proof + Community
PreviewJoin the movement and start earning today.
BodyHi [First Name], you're X% there! Every day, over 100 new hosts hit "Go Live." Within hours, they're welcoming their first guests.

💦 Emily, TX: "We just tried it for fun — two weekends later, 8 bookings and $1,700 earned." 🔥 James, AZ: "Never thought my hot tub would book. Made $900 in my first week!" 🌞 Maria, CA: "Families tell us our pool days are the highlight of their kids' summers. It's the best feeling."

You're already part of the community — your guests just can't find you yet. Your Host Boost expires soon. Publish to activate 14 days of extra exposure.
CTAFinish My Listing & Go Live →
📌 CEO copy — Email 4. Social proof + community momentum angle.
Block 07 Push ⏱ Day 3 post-approval (if listing <50% complete)
TitlePhase 2 / Push-1: Listing Progress
Body"Someone's searching for a pool like yours right now 👀 Don't ghost them!"
📌 CEO copy — Push 3. Conditional: fires only if listing completion % < 50. Day 3 post-approval.
Block 07a Email ⏱ Day 3–4 post-approval (if not yet listed)
SubjectYour pool, their best memories 💙
TitlePhase 2 / E5: Joy + Memories
PreviewFrom bored afternoons to unforgettable days — you make it happen.
BodyPicture this: It's a scorching day. A family's stuck inside — restless kids, tired parents. Then they find your pool. Hours later: laughter, splashing, joy. The parents are heroes. The kids go to bed smiling. You made it happen — and you got paid.

💧 Family Swim: $150 / 3 hours — "Best day of the summer!" 🔥 Date Night Swim: $120 / 2 hours — "Peaceful, private, perfect." 📸 Photo Shoot: $200 / 3 hours — "The photos turned out incredible."

A host in your area earned $6,320 this month doing exactly this. You're only a few steps away from making someone's day!
CTAFinish My Listing →
📌 CEO copy — Email 5. Joy/memories emotional angle. Day 5. Intelligent Timing: Yes.
Block 07b Push ⏱ Day 5 post-approval (if not yet listed)
TitlePhase 2 / Push-4: Hero
Body"Every hero needs a cape. Yours? 🦸‍♀️ Your pool. Let's get to hosting!"
📌 CEO copy — Push 4. Day 5 post-approval. Intelligent Timing: Yes.
Block 07c Email ⏱ Day 6 post-approval (if not yet listed)
SubjectYou're in control — always.
TitlePhase 2 / E6: Safety + Control
PreviewVerified guests. $1M protection. 24/7 support.
BodyHi [First Name], if you've ever thought, "I love the idea of hosting... but I'm nervous," you're not alone. Every great host felt that way — until they discovered how secure Swimply really is:

✅ You approve every booking — nothing is automatic. ✅ You set the rules — guests must agree before booking. ✅ You're protected — $1M coverage + secure payouts + 24/7 support. ✅ You can always be home — most hosts are!

"I was nervous at first, but every guest has been respectful and kind. Swimply made it easy and safe." — Marcia, NJ

Hosts in [City] earn $12,300 per season on average. Your boost window closes soon — publish now to lock in extra visibility.
CTAFinish My Listing & Go Live Safely →
📌 CEO copy — Email 6. Safety + trust + control angle. Day 6. Requires {{city}} seasonal earnings stat. Intelligent Timing: Yes.
Block 07d Push ⏱ Friday or Saturday morning (if still not listed, Day 5+)
TitlePhase 2 / Push-5: Weekend Hook
Body"It's the weekend 🥳 Pools are booking fast in [City]. Go live + get in on the fun!"
📌 CEO copy — Push 5. Conditional: send only on Fri or Sat morning. Requires {{city}}. Intelligent Timing off — use explicit morning send window.
Block 08 SMS ⏱ Day 5 post-approval (if not yet listed)
TitlePhase 2 / SMS-2: Day 3–4 Nudge
Body🚀 Don't leave money on the table, [First Name]. Hosts in [City] earned $X,XXX this week. Complete your listing in minutes + unlock 14 days of boosted placement. 👉 [Publish My Listing link]
📌 CEO copy — SMS 1. Under 160 chars. Requires {{city}} and dynamic earnings figure.
Block 09 Email ⏱ Day 7 post-approval
SubjectLast Call: Your Host Boost Ends Tonight 🚀
TitlePhase 2 / E7: Day 7 Final Push
PreviewBoost expires tonight — we'll even finish your listing for you.
BodyHi [First Name], this is it — you're almost there. Your Host Boost expires tonight. Publish now to unlock: ⭐ 14 days of featured placement ⭐ Faster path to your first booking ⭐ Dedicated Host Success support.

Hosts in [City] earned $X,XXX this week alone. Don't miss out. Too busy? Reply HELP and our team will finish your listing for you — free.

"I covered my summer vacation just from Swimply bookings." — Alex, AZ
CTAPublish My Listing Now →
📌 CEO copy — Email 7. Final urgency. Boost expiry tonight framing. Requires {{city}} for earnings stat.
Block 09a Push ⏱ Day 7 post-approval — evening (same day as Last Call email)
TitlePhase 2 / Push-6: Day 7 Expiry
Body"⏰ Your Boost expires tonight → 14 days of extra exposure if you publish now 🚀"
📌 CEO copy — Push 6. Reinforces the Last Call email. Intelligent Timing off — explicit evening window (6–8 PM local).
Block 09b Push ⏱ Day 8–9 post-approval (catch-all if still not listed)
TitlePhase 2 / Push-7: Cheeky Fallback
Body"Your pool called. It wants to pay the bills 😉 Tap to publish."
📌 CEO copy — Push 7. Fallback catch-all. Light, cheeky tone. Last push attempt before longer re-engagement cadence.
Block 10 Email ⏱ Day 9–10 post-approval (if not yet listed)
SubjectStill on the fence? Here's what you need to know.
TitlePhase 2 / E7: Day 9–10 Re-engagement
PreviewA quick note from a host who almost didn't do it.
BodyCopy TBD — Day 9–10 re-engagement email. Bridge between the Day 7 urgency push and the Day 14 final email. Suggested angle: address the most common hesitation ("I'm not sure my pool is good enough") with a relatable host story + direct offer of 1:1 support from the Swimply team. Pairs with CEO Email 5 (memories) or Email 6 (safety) themes if needed.
CTAFinish My Listing →
📌 Copy needed — Day 9–10 bridge email. Coordinate with CEO on angle: success story, safety reassurance, or custom 1:1 support offer.
Block 10a Email ⏱ Event-triggered: nearby host receives a confirmed booking. Max 2x/week per unlisted host.
HeadlineA host near you just approved a $[AMOUNT] booking
SubheadGrab the next one. Publish your spot now.
BodyHi {{first_name}}, A host {{proximity_miles}} miles from you just earned $[AMOUNT] on Swimply. Guests in your area are searching right now for: - Private pools for family swim days - Hot tubs for cozy date nights - Backyards for birthdays and celebrations - Yards for dog swims and playtime Finish your listing and be in front of them.
CTAFinish My Listing
📌 Event-triggered: fires when a host within [X] miles receives a new confirmed booking. Max 2x/week per unlisted host. Suppress if listing already published. Requires Eng: booking_confirmed event + geo proximity logic + privacy-safe booking value display. Source: host onboarding docx notes.
Block 11 In-App ⏱ First visit to listing builder
TitlePhase 2 / In-App 1: Listing Builder Tip
BodyStart with your best photo. Your cover photo is the first thing guests see - make it the one that makes them want to jump in.
📌 Tooltip format. Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 11a Email ⏱ Triggered: host views photo upload step and stalls 24+ hours without uploading
Subject📸 Stuck with photos? We've got you covered.
Preheader3 simple ways to move forward (no pro gear needed).
HeadlineGreat photos = more bookings 💡
SubheadBut don't stress — we'll help you get there.
BodyHi {{first_name}}, Looks like you paused at the photo section. Totally normal — it's one of the most common places hosts get stuck. Here's what we recommend: 1. Just upload what you have now. Even 3–4 good iPhone photos are enough to get your first booking. You can always improve them later. 2. Let your guests help. Once you're live, guests will often take great photos at your space. You can feature those over time. 3. Want professional photos? Swimply offers complimentary photography in select markets. Reply to this email to check availability in your area. "I launched with just a few iPhone photos I took in 20 minutes. I got my first booking in 24 hours." — Melissa, FL
CTAUpload My Photos
Secondary CTAView the Full Photo Guide
📌 Triggered: host views the photo upload step in listing builder and stalls 24+ hours without uploading any photos. Suppress if host has already uploaded photos or published listing. Requires Eng: listing_photo_step_viewed event + no photo_upload_complete within 24h. Source: host onboarding docx notes.
Block 12 In-App ⏱ Listing >50% complete, stalled for 2+ days
TitlePhase 2 / In-App 2: Almost Live Modal
BodyYou're almost live. Two more steps and guests can start finding your pool.
CTAFinish my listing
📌 Modal format. Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 13 Email ⏱ Day 14 post-approval (if still not listed)
SubjectYour pool deserves better 😉
TitlePhase 2 / E9: Day 14 Re-engagement
PreviewDon't let it sit on the sidelines — turn it into income + joy.
BodyHi [First Name], you're already X% done! Your pool isn't meant to just sit there. It's meant for laughter, birthdays, swim lessons, and yes — to earn you real income.

Right now, hosts in [City] earned $X,XXX this past week just by opening their pools. Families are searching every day… and your pool isn't showing up. Don't let another week pass. Publish your listing and give your pool the role it deserves.

"Listing my pool was the best decision — I had bookings within days and love the extra income." — Alex, AZ
CTAPublish My Listing →
📌 CEO copy — Email 8. Day 14 re-engagement. Requires {{city}} and dynamic weekly earnings stat.
Block 14 SMS ⏱ Day 7–9 post-approval (if still not listed)
TitlePhase 2 / SMS-3: Day 7–9 Final Nudge
Body⏰ Last chance to claim your New Host Boost (14 days of extra visibility). Hosts near you made $X,XXX this week. Hit publish before it expires tonight. 👉 [Complete My Listing link]
📌 CEO copy — SMS 3. Final urgency nudge. Requires {{city}} earnings figure and listing link.
Block 15 Email ⏱ Immediate post-publish (listing goes live)
SubjectYou're officially open for bookings.
TitlePhase 3 / E10: Listing Live
PreviewHere's how to get your first one fast.
BodyListing live confirmation with 3 quick-win optimizations: turn on Instant Book, add a seasonal photo, verify availability window is open.
CTAView my listing
📌 Transactional. Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 16 Push ⏱ Day 3 post-publish (if no booking received)
TitlePhase 3 / Push-2: Instant Book Tip
📌 Conditional: no booking_confirmed yet. Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 17 Email ⏱ Day 4 post-publish
SubjectSmall updates. Real impact.
TitlePhase 3 / E11: Listing Optimization
PreviewThree things top-performing listings do differently.
BodyTitle searchability (include pool type + city), description language (guest POV, not host POV), cover photo prominence. Each with a specific actionable fix.
📌 Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 18 Email ⏱ Day 7 post-publish (if no booking)
SubjectOne pricing adjustment can unlock your first booking.
TitlePhase 3 / E12: Pricing Check
PreviewSimilar pools in {{city}} charge {{benchmark_price}}/hr.
BodyDynamic price vs. local benchmark comparison. Gentle suggestion to undercut by 10-15% to win first reviews. No-judgment framing.
📌 Requires `{{benchmark_price}}` via Connected Content. Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 19 Push ⏱ Day 10 post-publish (if no booking)
TitlePhase 3 / Push-3: Three Easy Wins
📌 Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 20 In-App ⏱ When host views pricing tab
TitlePhase 3 / In-App 3: Pricing Tip Card
BodyNew hosts benefit from starting below market rate. Early bookings build reviews - reviews build your rate.
📌 Card format. Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 21 Email ⏱ Day 14 post-publish
SubjectWhat happens the moment a guest chooses your pool.
TitlePhase 3 / E13: What Happens When a Guest Books
PreviewStep by step - from browse to payout.
BodyStep-by-step booking flow: search → view listing → book → host notification → payout 48h post-swim. Removes uncertainty about the host experience.
📌 Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 22 Email ⏱ Day 21 post-publish (if no booking)
SubjectA few small tweaks could make all the difference.
TitlePhase 3 / E14: Day 21 Intervention
PreviewHere's a quick listing diagnostic.
BodyIssue/fix diagnostic table: 5 common blockers (price high, photos weak, availability narrow, Instant Book off, description generic) + specific fix for each. Reply CTA for free listing audit.
📌 Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 23 SMS ⏱ Day 21 post-publish (if no booking)
TitlePhase 3 / SMS-3: Day 21 Review Offer
BodyWant a quick listing review? Our team can often spot easy wins - just reply and we'll take a look.
📌 Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 24 Push ⏱ Day 21 post-publish (if no booking)
TitlePhase 3 / Push-4: First Booking Prompt
📌 Full approved copy at swimply-host-onboarding-brief-v4.vercel.app
Block 25 In-App ⏱ 7+ days post-publish with no booking
TitlePhase 3 / In-App 4: Listing Check Card
BodyLet's check your listing. Small changes often make the difference between browsed and booked.
CTAReview my listing
📌 Card format. Full approved copy at swimply-host-onboarding-brief-v4.vercel.app

Data Requirements

  • `host_application_submitted` event
  • Listing completion % attribute (for conditional push/in-app triggers)
  • `booking_confirmed` host-side for exit and phase 2→3 transition
  • `{{city}}` and `{{benchmark_price}}` for pricing emails (Connected Content endpoint required)
  • Instant Book on/off attribute for conditional messaging
  • 10% holdout group configured in canvas settings

Success Metrics

MetricTarget
Application-to-listing rate (14 days)>=60%
Listing-to-first-booking rate (30 days)>=45%
Phase 2 dropout (approved, never listed)<25%
Holdout group lift vs. no-onboardingTrack for first 90 days
H01
All in BrazeBriefing

Redo Host Listing Optimization Lifecycle

Objective
Help newly published hosts who haven't received their first booking optimize their listing. Deliver specific, actionable nudges across title, description, pricing, photos, and response time - escalating to a human review offer at day 21.
Entry Trigger
`listing_published` event - no `booking_confirmed` in window
Exit Condition
First booking confirmed OR 30 days post-publish
Audience
Newly published hosts with zero bookings after going live

Message Blocks

Block 01 Email ⏱ Day 2 post-publish, no booking
Subject AYour listing is live - here's how to get your first booking
Subject B2 tweaks that help new listings get booked faster
PreviewMost first bookings come from listings that do these two things well.
BodyYour listing is live - congrats. Now let's get it booked.

Two things move the needle most for new listings:

1. Your cover photo. It's the first thing guests see. A bright, wide shot of the pool on a sunny day outperforms everything else.

2. Your title. Skip the generic. Lead with what makes your pool unique: 'Private infinity pool with cabana' beats 'Nice pool in Austin' every time.

Take 5 minutes on these two and you'll see a difference.
CTAEdit my listing
📌 Deep link to listing edit screen
Block 02 Push ⏱ Day 3 (24h after email, no booking)
TitleQuick win: update your cover photo
BodyListings with great photos get 3x more views. Here's how to update yours.
CTAUpdate photo
Block 03 Email ⏱ Day 5, no booking
Subject ACheck your pricing - here's what similar pools charge
Subject BPricing tip: how to land your first booking faster
PreviewA competitive first-booking price builds reviews. Then you raise it.
BodyHere's a pricing insight from hosts who got booked fast: the first booking is about getting your first review, not maximizing revenue.

Similar pools in {{city}} charge ${{city_benchmark}} on average. If you're priced above that, consider lowering by 10–15% until you have 3 reviews. Then raise it back.

Reviews are the fastest path to a full calendar.
CTAAdjust my pricing
Block 04 Email ⏱ Day 7, no booking
Subject AResponse time matters more than you'd think
Subject BHosts who reply fast get booked fast
PreviewGuests choose between multiple listings. Fast responses win.
BodyHere's what guests do when they're ready to book: they message 2–3 hosts and go with whoever responds first.

If you haven't already, turn on notifications for new booking requests and respond within an hour. It's the single easiest way to improve your booking rate.
CTACheck my notification settings
Block 05 Email ⏱ Day 14, no booking
Subject ATwo weeks in - let's figure this out together
Subject BStill no bookings? Let's look at your listing
PreviewA few things might be holding your listing back. Here's a checklist.
BodyTwo weeks live and no bookings yet - let's troubleshoot.

Here's a quick checklist:
☐ Cover photo: bright, wide, shows the water
☐ Title: specific and benefit-led
☐ Description: mentions what makes this pool special, mentions amenities, mentions who it's great for
☐ Pricing: within 15% of local average
☐ Availability: at least 3 weekends open in the next 30 days
☐ Response time: under 2 hours

If all of those are checked, the final piece is patience - demand picks up in April.
CTAReview my listing
Block 06 Email ⏱ Day 21, no booking
Subject AWant a human to look at your listing?
Subject BFree listing review - offered to a few new hosts
PreviewOur team will look at your listing and send you specific feedback.
BodyYou've been live for 3 weeks and haven't had a booking yet. We want to help.

We're offering a free listing review to a small group of new hosts - our team looks at your listing and sends you specific, actionable feedback within 48 hours.

If you want in, just tap below.
CTARequest a free listing review
📌 Requires a review intake form / support ticket system

Data Requirements

  • `listing_published` event
  • `booking_confirmed` for exit
  • `{{city}}`, `{{city_benchmark}}` via Connected Content
  • Deep links to listing edit, pricing, notifications
  • `{{listing_completion_percentage}}` attribute

Success Metrics

MetricTarget
First booking rate within 30 days of publish≥ 40% (vs. current baseline)
Time to first bookingTarget: ≤ 14 days
H02
Needs EngNot Started

Host Wake-up - Listing Views Increasing

Objective
Alert hosts at milestone view counts (10 / 25 / 50 / 100 views) with escalating urgency. Each milestone is a signal that demand is real — prompt availability refresh, pricing review, and rapid inquiry response before the interest converts elsewhere.
Entry Trigger
Listing reaches a view milestone: 10, 25, 50, or 100 total views (requires Eng — milestone event per listing). One send per milestone level, no re-trigger at the same milestone. Stop sequence when host takes any action (listing update, pricing change, or inquiry response).
Exit Condition
Host takes any action (updates listing, adjusts pricing, responds to inquiry) OR all 4 milestones have triggered. Frequency cap: 1 send per milestone level per listing.
Audience
Active hosts whose listing has reached a view milestone (10 / 25 / 50 / 100 views)

Message Blocks

Block 01 Push ⏱ Real-time trigger, sent during host active hours (9 AM–8 PM local)
Title A (10 views){{listing_view_count}} people have looked at your pool 👀
Title B (25 views){{listing_view_count}} guests have viewed your listing this week
Title C (50+ views){{listing_view_count}} views and counting — are you ready to be booked?
Body (10–24 views)Guests are starting to notice your pool. Make sure your availability is open and your pricing is set.
Body (25–49 views){{listing_view_count}} people recently viewed your pool. Demand is real — open your availability and check your pricing before they book someone else.
Body (50+ views){{listing_view_count}} people have viewed your pool. This is peak interest. Make sure you're ready to capture it — open availability, check pricing, and turn on Instant Book.
CTACheck my listing
Block 02 Email ⏱ Same day as push, only if no listing update within 24 hours
Subject A{{listing_view_count}} people looked at your pool — are you ready to be booked?
Subject B{{listing_view_count}} views and no bookings yet. Here's why.
PreviewReal interest. A few quick actions can turn views into bookings.
Body{{listing_view_count}} people have looked at your pool recently. That's real interest — and they're comparing you to other listings right now.

Three things to do before they book someone else:
1. Open availability 6–8 weeks out
2. Check your pricing against nearby listings
3. Make sure push notifications are on so you can respond fast

Guests looking at multiple listings book with whoever responds first.
CTAUpdate my listing now

Data Requirements

  • Listing view milestone events (requires Eng): fire at 10, 25, 50, 100 total views per listing
  • `{{listing_view_count}}` attribute for dynamic copy personalization
  • Host action events for exit: listing_updated, pricing_changed, inquiry_responded
  • Frequency cap: 1 send per milestone level per listing (no re-trigger at same milestone)
  • Stop sequence when host takes any action (don't keep alerting a host who already responded)

Success Metrics

MetricTarget
Listing update rate after trigger>=30%
Booking rate in 7 days post-alert vs. non-alertedTrack lift
H03
All in BrazeNot Started

Host Wake-up: Proactive Season Prep

Objective
Proactively reach all active hosts before peak season with a concrete prep checklist. Drive availability opens, pricing updates, photo refreshes, and amenity accuracy before demand hits.
Entry Trigger
Scheduled blast - late February/early March, all active hosts
Exit Condition
Single send (annual)
Audience
All hosts with at least one active listing

Message Blocks

Block 01 Email ⏱ Late February / early March, Tuesday 9–11 AM
Subject A5 things to do before summer bookings start
Subject BGet your pool ready - peak season is coming
PreviewHosts who prep in March get booked first in May.
BodyPeak season starts sooner than you think.

Here are 5 things the busiest hosts do in February–March to make sure they're ready:

1. Open availability through August. Guests plan ahead, especially for summer weekends.
2. Refresh your photos. One new bright shot can move your listing up in search.
3. Update your amenities list. If you added a speaker, umbrella, or grill - add it.
4. Review your pricing. Compare it to nearby listings and adjust if needed.
5. Test your response speed. Set up push notifications if you haven't.

The hosts who prep now fill their calendars first. Here's your listing to get started.
CTAPrep my listing for summer
Block 02 Push ⏱ 3 days after email, if no listing update
TitleSummer is coming - prep your listing
BodyA few quick updates now = a full calendar in May. Tap to get started.
CTAUpdate my listing

Data Requirements

  • Active listing flag
  • `{{city}}`
  • Last listing update date (suppress if updated in last 14 days)

Success Metrics

MetricTarget
Listing update rate within 7 days≥ 35%
Q2 booking volume lift for updated hostsTrack vs. non-updated cohort
H04
All in BrazeNot Started

Spring Release 2026 - Feature Adoption Series

Objective
Drive adoption of all 5 Spring Release features through a coordinated launch blast and 4-part spotlight series. Each spotlight targets one feature and suppresses if the host has already used it.
Entry Trigger
Scheduled - Spring Release launch date (April 15, 2026) + weekly spotlight cadence
Exit Condition
Ongoing series (each message is a single send with feature-use suppression)
Audience
All active hosts

Message Blocks

Block 01 Email ⏱ Launch day - April 15, 2026
Subject ASpring Release is live - here's what's new for hosts
Subject BNew tools to help you earn more this season
PreviewSmarter pricing, AI descriptions, automated messages, and a redesigned host experience.
BodyFive new things just landed in your host dashboard:

1. Bookability Score - an AI rating that shows exactly what's holding your listing back and how to fix it
2. Advanced Pricing - set off-peak and last-minute rates automatically
3. Daisy AI Descriptions - generate a better listing description in under 2 minutes
4. Automated Messages - set up guest communication once, never think about it again
5. New host redesign - faster navigation, fewer taps to manage bookings

All live today.
CTASee what's new
Block 02 In-App ⏱ Launch day - first app open after April 15
HeadlineSpring Release is live 🎉
BodyNew tools to help you earn more: Bookability Score, Advanced Pricing, and more.
CTASee what's new
Block 03 Email ⏱ Day 7 post-launch - Bookability Score spotlight
Subject AHave you checked your Bookability Score?
Subject BYour AI listing score is waiting
PreviewSee what's holding your listing back - in one number.
BodyBookability Score is the new AI rating in your host dashboard. It shows you exactly what's affecting your listing's performance - pricing, photos, response speed, availability - and what to fix first.

It updates automatically every time you make a change. If you haven't checked it yet, this is the one to start with.
CTASee my Bookability Score
📌 Suppress if `bookability_score_viewed` event already fired
Block 04 Email ⏱ Day 10 post-launch - Advanced Pricing spotlight
Subject ASet it once: off-peak and last-minute pricing is now automatic
Subject BNew: Advanced Pricing is live in your dashboard
PreviewSet off-peak discounts and last-minute rates - then let Swimply handle the rest.
BodyAdvanced Pricing lets you set rules once and stop thinking about it. Off-peak discount for weekday slots? Last-minute rate drop when a weekend slot is still open 48 hours out? Configure it in your dashboard and it applies automatically.

Hosts who use dynamic pricing see higher booking rates on slots that used to sit empty.
CTASet up Advanced Pricing
📌 Suppress if `advanced_pricing_configured` event already fired
Block 05 Email ⏱ Day 14 post-launch - Daisy AI spotlight
Subject AYour listing description could be doing more work
Subject BNew: Daisy AI writes your listing description in 2 minutes
PreviewBetter descriptions = more bookings. Takes 2 minutes with Daisy AI.
BodyDaisy is the AI description tool we built specifically for Swimply hosts. Tell it three things about your pool - the vibe, who it's best for, what makes it different - and it generates a listing description that converts.

Takes about 2 minutes. Most hosts who've tried it say they wish they'd done it sooner.
CTATry Daisy AI on my listing
📌 Suppress if `daisy_description_generated` event already fired
Block 06 Email ⏱ Day 21 post-launch - Automated Messages spotlight
Subject ASet it up once: automatic guest messages are live
Subject BStop answering the same questions. Automate them.
PreviewOne setup. Guests get the right message at the right time, every booking.
BodyAutomated Messages sends the right thing at the right moment - booking confirmation details, day-before reminders, pool access instructions, post-swim follow-ups - without you lifting a finger after initial setup.

Takes about 10 minutes to configure. Then it runs on its own.
CTASet up Automated Messages
📌 Suppress if `automated_messages_configured` event already fired

Data Requirements

  • Spring Release feature launch date: April 15, 2026 (confirm with product)
  • Suppression events per spotlight: `bookability_score_viewed`, `advanced_pricing_configured`, `daisy_description_generated`, `automated_messages_configured` - confirm canonical event names with Eng
  • Deep links per feature in host dashboard

Success Metrics

MetricTarget
Bookability Score activation within 30 days>=40% of hosts
Advanced Pricing setup rate>=25%
Daisy AI description generation rate>=20%
Automated Messages configuration rate>=20%
H05
All in BrazeNot Started

Host Announcement: Lifeguard Bookings

?Question for Bunim
Do hosts earn a revenue share on the lifeguard fee? If yes, what % or flat amount per booking? This is the #1 hook for the opt-in copy. The brief cannot be finalized without this. Confirm with product before build.
Objective
Announce that guests can now add a certified lifeguard to any booking at a host's pool. Drive opt-in by framing it as a premium signal that attracts larger groups with higher booking value.
Entry Trigger
Scheduled blast - lifeguard feature launch date (same as G14a)
Exit Condition
Single send
Audience
All active hosts

Message Blocks

Block 01 Email ⏱ Feature launch day
Subject ANew: guests can now book a lifeguard at your pool
Subject BSwimply just added lifeguard bookings - here's what it means for you
PreviewGuests booking lifeguards tend to be larger groups. Here's how to opt in.
BodyStarting today, guests can add a certified lifeguard to any Swimply booking.

What this means for you: guests who book with lifeguards tend to come in larger groups - more people, longer sessions, higher booking value. It's a signal that attracts the kind of guests who are serious about the experience.

Opt in from your host dashboard. Takes about a minute.
CTAOpt in to lifeguard bookings
📌 [HOST_EARNINGS_PLACEHOLDER] must be replaced with actual economics before this goes live. If hosts earn nothing, reframe around booking quality signal instead.
Block 02 In-App ⏱ Same day - next app open
HeadlineNew: lifeguard bookings now available
BodyOpt in to let guests add a lifeguard to their booking at your pool.
CTALearn more

Data Requirements

  • Lifeguard feature launch date (same day as G14a guest blast)
  • Host opt-in event for tracking (`lifeguard_optin_completed` - confirm with Eng)
  • Deep link to lifeguard opt-in in host settings
  • Host revenue share amount (required before brief goes to build - see QUESTION above)

Success Metrics

MetricTarget
Host opt-in rate>=25% of active hosts
Lifeguard-included bookings as % of totalTrack post-launch
H06
Needs EngNot Started

Deactivated Pool Reactivation - FOMO Emails

Objective
Re-engage hosts with deactivated or inactive pools by showing real, proximate earnings from nearby active hosts. Use authentic social proof to make the opportunity cost of staying inactive feel concrete.
Entry Trigger
Pool inactive/deactivated for 30+ days AND a nearby host (within 10 miles) receives a confirmed booking
Exit Condition
Host reactivates listing OR 90 days without reactivation
Audience
Hosts with deactivated pools who are within proximity of recent bookings

Message Blocks

Block 01 Email ⏱ Triggered: within 24h of nearby booking, max 1 per week
Subject AA host {{nearby_distance}} miles away just earned ${{nearby_booking_amount}}
Subject BSomeone near you is making money with their pool
PreviewYour pool could be doing the same thing.
BodyA Swimply host {{nearby_distance}} miles from you just got a confirmed booking for ${{nearby_booking_amount}}.

Your pool is {{inactive_days}} days inactive. That's real money that didn't need to go to someone else.

Relisting takes 5 minutes. We'll walk you through it.
CTARelist my pool
📌 Proximity + booking amount from Eng event payload. Anonymized - no host name/address.

Data Requirements

  • Nearby booking event with anonymized host distance + booking amount (requires Eng)
  • `{{inactive_days}}` attribute
  • Pool reactivation event for exit
  • Frequency cap: 1/week

Success Metrics

MetricTarget
Reactivation rate from this flow≥ 15%
Time from first email to reactivationTrack median
H07
Needs Third PartyNot Started

Weather-Triggered Push Alerts (Hosts)

Objective
Alert hosts when a great-weather weekend is forecasted in their market so they open availability and maximize bookings during peak-intent windows.
Entry Trigger
OpenWeatherMap API: 70°F+ weekend forecast detected Thursday/Friday. Suppress if no API response for market.
Exit Condition
Single trigger per weather event (frequency cap: 1x/week per host)
Audience
Active hosts in markets with favorable weekend forecast
Timing Coordination
⏱ Two build paths - same as G13: **Now (All in Braze):** Weekly scheduled canvas, every Thursday 6–8 PM local, May–September. Push to all active hosts in major markets - 'Warm weather ahead - make sure your calendar is open for the weekend.' No API needed, available today. **Later (Needs Third Party):** OpenWeatherMap integration makes Block 01 conditional on actual 70°F+ forecast. Block 02 availability-check email (zero-slot hosts only) is also a Later build - requires CC availability endpoint (confirm with Eng). Start with the weekly push; add precision once the API is integrated and G13 is live.

Message Blocks

Block 01 Push ⏱ Thursday PM or Friday AM before 70°F+ weekend
Title APeak demand weekend ahead ☀️
Title B{{day}} looks like a busy one
BodyGreat weather coming to {{city}} this weekend. Make sure your calendar is open.
CTACheck my availability
Block 02 Email ⏱ Same trigger window - only to hosts with zero availability showing this weekend
Subject AYou're missing a big weekend - here's how to open up
Subject BHigh-demand weekend ahead: no availability showing for your listing
PreviewPeak demand is coming to {{city}}. Your listing isn't showing available times.
BodyThe forecast for {{city}} this weekend is looking great - the kind of weather that drives real booking intent.

Your listing isn't showing any available times for this weekend. If your pool is actually open, this is a 2-minute fix. Guests searching now will see you.

If you're genuinely unavailable, ignore this.
CTAOpen my availability
📌 Email sends only if Connected Content confirms zero availability slots for the upcoming weekend on the host's calendar. Requires availability data endpoint - confirm with Eng if this exists.

Data Requirements

  • OpenWeatherMap API (5-day forecast endpoint: `api.openweathermap.org/data/2.5/forecast`) - same integration as G13
  • If no API response for market: suppress send (do not error-send)
  • `{{city}}` and geo-coordinates per host listing
  • Host availability calendar endpoint via Connected Content (required for Block 02 condition - confirm with Eng)
  • Frequency cap: 1x/week per host regardless of forecast

Success Metrics

MetricTarget
Availability update rate after push>=20%
Weekend booking volume lift (alerted vs. non-alerted)Track
H08
Needs EngNot Started

Host Rehab: Pre-Inactive Warning

Objective
Warn hosts approaching the inactive threshold (4 expired bookings) before their listing is paused. Give them a clear path to fix the pattern and avoid removal.
Entry Trigger
4th expired booking detected on a single listing
Exit Condition
Host accepts a booking successfully OR listing is paused (H10 fires)
Audience
Hosts who have had 4 bookings expire without acceptance

Message Blocks

Block 01 Email ⏱ Triggered immediately after 4th expired booking
Subject AWarning: one more expired booking may pause your listing
Subject BAction required: your listing is at risk
PreviewYou've had 4 expired booking requests. Here's what to do before your listing is affected.
BodyYour listing has had 4 booking requests expire without a response.

We want to keep your listing active and visible - but if this pattern continues, your listing may be paused.

Here's the most common reason this happens and how to fix it:

→ Notifications aren't turned on. Booking requests expire if you don't respond within the required window. Make sure push notifications are enabled for the Swimply host app.

You can also set your listing to instant book to avoid needing to manually approve every request.
CTAFix my notification settings
📌 Include current expired count and response time requirement
Block 02 Push ⏱ 24 hours after email (if no setting update)
Title⚠️ Your listing needs attention
Body4 expired bookings. One more and your listing may be paused. Tap to fix it.
CTAFix now

Data Requirements

  • Expired booking counter per listing (requires Eng)
  • 4-expiry threshold trigger event
  • Notification settings deep link
  • Instant book settings deep link

Success Metrics

MetricTarget
Setting fix rate after warning≥ 50%
Listings that avoid pause after warning≥ 60%
H09
Needs EngNot Started

Host Rehab - Pre-Bad Behavior Warning

?Question for Bunim
How many combined failed bookings (expired + cancelled + declined) within 60 days triggers this pre-bad warning? We recommend 5 as a starting threshold - confirm with Trust and Safety team. This is a hard Engineering blocker: the trigger cannot be built without a specific number.
Objective
Warn hosts with booking-failure patterns before removal. Provide specific, actionable steps to correct the pattern and avoid listing removal.
Entry Trigger
Threshold reached: [QUESTION failure count] combined failed bookings (expired + cancelled + declined) within a 60-day rolling window
Exit Condition
Host completes 2 successful bookings without failure, or listing is removed (H11 fires)
Audience
Hosts with booking-failure patterns above the threshold

Message Blocks

Block 01 Email ⏱ Triggered immediately when threshold is reached
Subject AWarning: your listing is at risk of being removed
Subject BAction required: booking reliability issue detected
PreviewYou've had multiple failed bookings in the last 60 days. Here's what to do.
BodyYour listing has had {{failed_booking_count}} failed booking interactions in the last 60 days - a combination of expired requests, cancellations, and declines.

This affects how guests experience Swimply and how your listing performs in search. If this pattern continues, your listing may be removed.

The most common cause is notification lag - hosts who miss requests because alerts weren't on. The fastest fix:

1. Turn on push notifications for booking requests
2. Switch to instant book to remove the approval step entirely
3. Keep your calendar accurate so you're only shown when you're actually available

Two successful bookings from here clears this flag.
CTAReview my listing settings
📌 {{failed_booking_count}} requires Eng - confirm the counter attribute name and whether it's accessible in Braze
Block 02 Push ⏱ 48 hours after email if no corrective action taken
Title⚠️ Action needed: listing at risk
BodyMultiple failed bookings detected. Your listing may be removed if this continues.
CTAFix my listing

Data Requirements

  • Combined failure counter per listing within 60-day rolling window (requires Eng - see QUESTION above for threshold)
  • Failure type breakdown (expired / cancelled / declined) for `{{failed_booking_count}}`
  • 60-day rolling window logic - confirm with Eng if this is feasible in Braze or requires warehouse event
  • Deep links to notification settings and instant book setup

Success Metrics

MetricTarget
Corrective action rate after warning>=40%
Listings avoiding removal after warning>=60%
H10
Needs EngNot Started

Host Rehab - Inactive Removal + Relist Flow

Objective
Notify hosts of listing pause due to sustained inactivity and provide a clear, low-friction reinstatement path to recover supply removed for avoidable reasons.
Entry Trigger
`inactive_paused` listing status set by system after sustained inactivity threshold
Exit Condition
Listing relisted and first booking confirmed, or 90 days without relist
Audience
Hosts whose listings were just paused due to inactivity

Message Blocks

Block 01 Email ⏱ Same day listing is paused
Subject AYour listing has been paused - here's how to bring it back
Subject BYour Swimply listing is currently inactive
PreviewIt only takes a few minutes to relist. Your pool can be live again today.
BodyYour listing was paused because it's been inactive - no accepted bookings for an extended period.

Your content, photos, and settings are all saved. Relisting takes about 4 steps:

1. Open the host app and tap your listing
2. Review and update your availability calendar
3. Confirm your pricing and listing details are current
4. Tap Relist

If booking requests were the issue, the Help Center has guides on response time and instant book settings.
CTARelist my pool now
📌 Include direct deep link to listing management screen. `inactive_paused` status event requires Eng confirmation.
Block 02 Email ⏱ Day 7 if not relisted
Subject AStill want to earn with your pool?
Subject BYour listing is still paused - here's what you're missing
PreviewHosts in {{city}} are earning an average of ${{city_weekly_earnings}}/week this season.
BodyYour listing is still paused. Hosts in {{city}} with active listings are averaging ${{city_weekly_earnings}} per week this season.

Relisting takes about 5 minutes. Your saved content is still there - just update your availability and tap Relist.
CTARelist my pool
📌 ENG DEPENDENCY: `{{city_weekly_earnings}}` requires a real-time Connected Content endpoint returning weekly average earnings for active hosts in the guest's market. Confirm with Eng whether this endpoint exists. If not built, replace with a static benchmark or remove the earnings line entirely rather than showing a blank value.

Data Requirements

  • `inactive_paused` listing status event (requires Eng - confirm event name and trigger conditions)
  • `{{city_weekly_earnings}}` - ENGINEERING DEPENDENCY: requires real-time Connected Content endpoint for city-level host earnings. Confirm if this endpoint exists before committing to Block 02 copy.
  • Relisting event for exit tracking
  • Deep link to listing management screen

Success Metrics

MetricTarget
Relist rate within 7 days of pause notification>=30%
Post-relist booking rate within 30 days>=40%
H11
Needs EngNot Started

Host Rehab - Bad Behavior Removal + Relist Flow

Objective
Notify hosts of listing removal due to booking-failure patterns. Provide transparent explanation, clear appeal process, and a conditional reinstatement path with probationary standards.
Entry Trigger
`removed_bad_behavior` listing status set after failure threshold is reached (see H09 for threshold - same count)
Exit Condition
Listing relisted and passes 30-day probationary window, or no action in 90 days
Audience
Hosts whose listings were just removed due to repeated booking failures

Message Blocks

Block 01 Email ⏱ Same day listing is removed
Subject AYour listing has been removed - here's why and what's next
Subject BImportant: your Swimply listing has been removed
PreviewYour listing was removed due to multiple failed booking interactions. Here's how to appeal.
BodyYour listing was removed because of a pattern of failed booking interactions - expired requests, cancellations, and declines that impacted guests trying to book through Swimply.

Your content and account aren't deleted. You have two paths forward:

Option 1: Appeal - if there were extenuating circumstances, submit an appeal and our team will review it within 3 business days.

Option 2: Reinstatement - we can relist your pool on a 30-day probationary basis. Complete 2 successful bookings during that period and all restrictions are lifted. Any failure during probation results in permanent removal.

This message is direct because the situation is. We'd rather have you back.
CTAAppeal or start reinstatement
📌 Link to appeal form and support ticket. Tone calibration: direct but not punitive. This is a host who may have had a bad streak vs. a bad actor - keep the door open. Sensitive message - flag for legal/trust review before launch.
Block 02 Email ⏱ Day 14 - only to hosts with historically positive review history (>=4.0 average rating AND at least 1 completed review)
Subject AWe'd like to have you back - here's the path forward
Subject BYour listing can come back. Here's how.
PreviewWe reviewed your account. Here's a conditional path to relisting.
BodyWe looked at your account history. You've had good experiences on Swimply - guests rated you well when bookings went through.

We're offering a conditional reinstatement: relist your pool on a 30-day probationary period. Complete 2 successful bookings and all restrictions are lifted automatically. No further action needed.

Any booking failure during probation results in permanent removal. That's the threshold.

Start the reinstatement process below if you want to come back.
CTAStart reinstatement
📌 Day 14 send condition: host must have >=4.0 average rating AND at least 1 completed review on record. Skip this send for hosts with zero reviews or <4.0 average - this path is for hosts with demonstrated quality who hit a bad patch, not repeat bad actors. Confirm attribute availability with Eng.

Data Requirements

  • `removed_bad_behavior` listing status event (requires Eng - confirm event name)
  • Appeal form URL and support ticket deep link
  • Host average rating attribute (for Day 14 condition: >=4.0 AND at least 1 review)
  • Review count attribute (>=1 required for Day 14 gate)
  • Probationary period tracking (30-day window + 2-booking threshold)
  • Reinstatement event for exit tracking

Success Metrics

MetricTarget
Appeal submission rate>=25%
Reinstatement rate among appellants>=40%
Post-relist failure rate during probation<15%
H12
All in BrazeNot Started

Holiday Weekend Prep (Hosts)

Objective
Prime hosts to open availability, optimize pricing, and respond fast ahead of the 5 highest-demand weekends of the year. Hosts who aren't calendar-ready miss the biggest booking windows of the summer.
Entry Trigger
Scheduled annual sends - same 5 holiday windows as G15, but sent 10 days before (3 days earlier than guest sends - hosts need lead time to update calendars).
Exit Condition
Single send per holiday window
Audience
All active hosts with at least 1 published listing. Priority: hosts who earned income in the last 60 days. Suppress if listing has 0 bookings in last 90 days (likely inactive).

Message Blocks

Block 01 Push ⏱ 10 days before the holiday weekend
Title A{{holiday_name}} weekend in {{city}} - guests are searching now
Title BHigh demand coming to {{city}} - is your calendar ready?
Body{{holiday_name}} weekend is 10 days out. Open your availability and check your pricing before demand peaks.
CTAUpdate my listing
Block 02 Email ⏱ Same day as push (or next morning if push not opted in)
Subject A{{holiday_name}} weekend is 10 days out - here's how to prepare your listing
Subject BYour biggest weekend of the summer is coming. Is your pool ready?
PreviewGuests in {{city}} are searching for {{holiday_name}} weekend pools right now.
Body{{holiday_name}} weekend is one of the highest-demand booking windows of the year in {{city}}.

Guests are already searching. Here's what to do before demand peaks:

✅ Open your calendar for the full holiday weekend
✅ Review your pricing - holiday demand supports a 10–20% premium
✅ Update your photos if it's been more than 3 months
✅ Turn on Instant Book if you haven't - holiday guests book fast

Hosts who update their listings 7–10 days before a holiday see significantly higher booking rates than hosts who don't.
CTAPrepare my listing
📌 `{{holiday_name}}` set via canvas entry attribute - same as G15. Sends 10 days before vs. G15's 7-day guest send - 3-day head start so hosts are ready when guest campaign fires.

Data Requirements

  • Same 5 annual holiday send dates as G15 - trigger 10 days before each holiday (3 days before guest G15 sends)
  • `{{holiday_name}}` canvas entry attribute - same value set used in G15
  • Active host filter: at least 1 published listing + income event in last 60 days
  • Suppress if listing has 0 bookings in last 90 days (inactive signal)

Success Metrics

MetricTarget
Listing update rate after send (availability or pricing change)>=25%
Holiday weekend booking volume (alerted hosts vs. non-alerted)Track lift
Host earnings per holiday weekend (YoY)Long-term KPI
H13
All in BrazeNot Started

Friday Availability Check (Hosts)

Objective
Remind active hosts every Friday morning to ensure their weekend slots are open. Guests make weekend plans Friday and Saturday - hosts who aren't showing availability miss the highest-intent booking window of the week.
Entry Trigger
Weekly scheduled Canvas - every Friday, 8–10 AM local. Peak season (May–September): all active hosts in all markets. Off-peak (October–April): active hosts in warm-weather markets only (Miami, LA, Phoenix, San Diego, etc.).
Exit Condition
Unsubscribe or host deactivated
Audience
Active hosts with at least 1 published listing. Off-peak: warm-weather markets only.
Timing Coordination
⏱ Two build phases: **Now (All in Braze):** Send Friday push to all active hosts, every week. Slightly broad - reaches hosts who already have availability showing - but no Eng dep and available today. **Later (Needs Eng):** Add CC availability endpoint suppression - only ping hosts with zero or limited weekend slots showing. Removes noise, makes the push much more actionable. Confirm CC availability endpoint feasibility with Eng before committing to the Later build.

Message Blocks

Block 01 Push ⏱ Friday 8–10 AM local (Intelligent Timing or timezone-aware send)
Title AWeekend slots still open? Guests are searching right now.
Title BFriday morning: is your pool available this weekend?
Title CGuests are booking for this weekend - are you showing up?
BodyThe highest-intent booking window of the week is Friday–Saturday morning. Make sure your availability is showing.
CTACheck my calendar

Data Requirements

  • Weekly scheduled Canvas with Friday send window (8–10 AM local - requires Intelligent Timing or timezone-aware send)
  • Active host filter: at least 1 published listing
  • Off-peak seasonal filter: October–April → warm-weather markets only (confirm market list with data team)
  • LATER: CC host availability endpoint to suppress hosts already showing weekend slots (Eng dep - interim: send to all active hosts)

Success Metrics

MetricTarget
Availability update rate after Friday push (Fridays vs. non-Friday baseline)>=15%
Weekend booking volume on Fridays/Saturdays for alerted hostsTrack lift
Push opt-out rate (weekly cadence fatigue check)<0.5% per week
SP-01
All in BrazeCopy Approved

Post-1st Booking Drip (Re-Book Sequence)

Objective
Drive a second Summer Pass booking within 14 days of the first confirmed booking. Captures post-swim momentum at four key moments: booking confirmation, in-water peak, post-swim memory, and social proof.
Entry Trigger
`BookingConfirmedToGuest` (first Summer Pass booking only - filter: pass holder flag + booking count = 1)
Exit Condition
Second `BookingConfirmedToGuest` or Summer Pass expiry
Audience
Active Summer Pass holders who just confirmed their first booking. 3 segments: Family / Party / Pet. Source: swimply-copy-review-v6.vercel.app (Flow 3)
Timing Coordination
Block 02 (in-water push) fires 30 minutes before the booking window closes on the first swim - the GP2 mechanic applied to Summer Pass. For SP holders, this fires alongside the transactional `BookingConcludedToGuest` push. Coordinate with Eng: SP1 Block 02 should fire first, then the transactional push follows at window close (not simultaneous). The live Guest_Marketing_PassesUpsell_AfterBookingComplete_SP canvas also fires on `BookingConfirmedToGuest` - suppress it for active SP holders when SP1 is running to prevent double-stack.
Block 01 In-App ⏱ Next app open after first booking confirmation
TitleCelebration Modal
BodyYou just booked {{host_name}}'s pool — your Summer Pass is officially in action. 🎉 Credits are loaded, $0 fees on your next booking, and the best part? You've got an entire summer of pool days ahead of you. 🏊‍♀️
Variants3 segments: Family / Party / Pet
✅📌 Inject `{{host_name}}` and `{{listing_name}}` from the confirmed booking into the celebration modal - 'You just booked {{host_name}}\'s pool.' Makes it personal from the first touch. Full approved copy at swimply-copy-review-v6.vercel.app
Block 02 Push ⏱ 30 minutes before first-swim booking window closes (during the swim)
Title AWhile you're still in the water — your next one is already covered. 🌊
Title BThat feeling right now? Lock in the next one before it fades. 🏊‍♀️
BodyThis is your Summer Pass doing what it does best. 🌞 Book your next swim now while you're still riding the high. Same host next weekend, or try somewhere new — your credits are ready either way.
CTA A (same host)Book {{host_name}} again 🏊
CTA B (new pool)Try somewhere new 🌊
✅📌 New block - in-water push, highest-intent conversion moment. Requires booking window close timestamp (Eng dep - same mechanic as GP2 Block 04). For SP holders, framing is credits-forward: 'credits ready' removes the friction of price. A/B test: 'same host, next weekend' vs. 'different pool, your credits cover it' CTA angle. Do NOT fire if guest has no-push permission.
Block 03 Email ⏱ Day 1 post-booking (0–2 hours after swim ends)
SubjectYou just earned {{credits_earned}} back from that swim. Here's where to use it. 💦
TitlePost-Swim Credits + Re-Booking Nudge
Preview{{host_name}}'s pool earned you {{credits_earned}} back. Your next swim just got cheaper. 🎉
Body{{host_name}}'s pool in {{listing_city}} just earned you {{credits_earned}} back — and your next booking has zero service fee on top of that. 🌞 That's the Summer Pass working exactly how it's supposed to. Every pool day earns you credit toward the next one. Here's where to put those credits to work: {{listing_1_name}} — {{listing_1_city}} — {{listing_1_price}}/hr ⭐{{listing_1_rating}} {{listing_2_name}} — {{listing_2_city}} — {{listing_2_price}}/hr ⭐{{listing_2_rating}}
CTABook my next swim 🏊
✅📌 Connected Content (live now): `{{host_name}}`, `{{listing_city}}` from last completed booking attributes + 2 recommended listings near `{{city}}` via existing endpoint. `{{credits_earned}}` from pass credit balance attribute. Full approved copy at swimply-copy-review-v6.vercel.app - subject to this tone revision.
Block 04 Push ⏱ Day 3
TitleCasual Nudge Push
BodyYour credits are loaded and great pools in {{city}} have weekend spots open. This is what the pass is for. 🌊
NoteSingle general version — no segment variants.
✅📌 Full approved copy at swimply-copy-review-v6.vercel.app
Block 05 Email ⏱ Day 5
Subject AHow Summer Pass members are actually spending their weekends. 🌞
Subject BA birthday in Phoenix. A reunion in Austin. A golden retriever in Malibu. 🏊
TitleWhat Summer Pass Members Are Actually Doing
PreviewReal members, real pool days. You're part of this now. 🌊
BodyYour fellow Summer Pass members are using theirs in ways that might give you ideas. 👀 A 30th birthday that almost happened at a hotel found a pool in Phoenix instead — 15 people, a speaker, 4 hours, and a host who left a "happy birthday!" note on the gate. All on the pass. A family reunion that was headed for a resort landed in a backyard pool in Austin. 22 people, a grill going, and kids so happy they cried when it was time to leave. And there's a golden retriever in Malibu who now has a standing weekly pool date. 4.9 stars. Host says the dog is his favorite guest. 🐾 Your pass works for all of it. Here's what's available near you this weekend. 🏊‍♀️
CTAFind my next pool 🌊
Variants3 segments: lead story matched to segment (Pet → dog story, Party → group story, Family → kids story). Body pool grid via CC.
✅📌 Same story-first approach as GP1 Block 07. Match lead story to segment if available at Day 5. Pool recommendations via CC at bottom. Full approved copy at swimply-copy-review-v6.vercel.app - subject to this tone revision.
Block 06 SMS ⏱ Day 7
TitleDirect Reminder SMS
Body{{first_name}}, your pass is active and your credits are ready. Great pools in {{city}} have weekend spots open: [link] 🌊
Variants3 segments: Family / Party / Pet
✅📌 Full approved copy at swimply-copy-review-v6.vercel.app
Block 07 Email ⏱ Day 10 (if no second booking)
SubjectYour Summer Pass is live and the best pool weekends are still ahead. 🌊
TitleFinal Nudge with A/B Promo Test
PreviewCredits loaded, weekends open. Your next pool day is waiting. ☀️
BodyYour Summer Pass is active, your credits are loaded, and some truly beautiful pools in {{city}} have weekend availability right now. 🎉 The whole point of the pass is that pool days become effortless — you find a spot, you book it, and the credits and fee savings do the rest. This weekend is wide open. 🏊‍♀️
Variants3 segments x 2 promo variants (control vs. $10 credit)
✅📌 A/B test primary metric: second booking rate. Full approved copy at swimply-copy-review-v6.vercel.app

Data Requirements

  • `BookingConfirmedToGuest` event with Summer Pass holder flag + booking count = 1 filter
  • Booking window close timestamp for Block 02 in-water push (Eng dependency - coordinate with GP2 Block 04)
  • `{{host_name}}`, `{{listing_name}}`, `{{listing_city}}` from last confirmed booking (Connected Content - live now)
  • `{{credits_earned}}` from pass credit balance attribute (post-swim update)
  • Connected Content: 2 recommended listings near `{{city}}` for Block 03 + Block 05 (live now)
  • Guest segment attribute (Family / Party / Pet)
  • Promo code generation for Block 07 A/B arm B
  • `BookingConfirmedToGuest` count for exit filter

Success Metrics

MetricTarget
1st-to-2nd booking rate (14 days)>=40%
Block 02 in-water push tap rate>=15% (same-session booking intent benchmark)
Block 03 email open rate>=38% (personalized host-anchor subject)
Block 07 A/B promo lift vs. controlMeasure before scaling
🚩Turn Off When Ready
Suppress Guest_Marketing_PassesUpsell_AfterBookingComplete_SP for active Summer Pass holders when SP1 is live. SP1 owns the post-first-booking sequence for pass holders. The PassesUpsell canvas targets non-pass guests - do not let it fire for SP members.
SP-02
All in BrazeCopy Approved

Low Usage Re-Engagement (14+ Days Without Booking)

Objective
Re-engage Summer Pass holders who haven't booked in 14+ days. Remind them of unused pass value, credits on the table, and available pools before their pass expires.
Entry Trigger
Summer Pass active AND no `BookingConfirmedToGuest` in 14 days
Exit Condition
`BookingConfirmedToGuest` or pass expiry
Audience
Active Summer Pass holders with no booking activity in 14+ days. 3 segments: Family / Party / Pet. Source: swimply-copy-review-v6.vercel.app (Flow 4)
Block 01 Email ⏱ Day 14 of inactivity
Subject AMost members have had {{avg_swims}} swims. You've had {{guest_swim_count}}. Let's change that. 🌊
Subject B{{first_name}}, {{days_remaining}} days left on your pass and {{current_credit_balance}} in credits to use. 🏊
TitleSocial Norm Re-Engagement Email
PreviewYour credits are sitting there waiting to become an amazing pool day. ☀️
BodyHere's a quick look at where things stand. 👀 Most Summer Pass members have had {{avg_swims}} swims by now. You've got {{days_remaining}} days left on your pass and {{current_credit_balance}} in credits ready to go. That's a lot of great afternoons still on the table. Here's a spot in {{city}} that would be a perfect place to start: [CC: 1 top-rated listing near {{city}} - host name, price/hr, rating] {{listing_name}} · {{listing_city}} · {{listing_price}}/hr · ⭐{{listing_rating}} Your credits are there. The pools are there. All that's missing is you. 🏊‍♀️
CTAUse my credits 💦
Variants3 segments: Family / Party / Pet
✅📌 Social proof anchor: `{{avg_swims}}` vs. `{{guest_swim_count}}` creates a personal gap that drives action. `{{days_remaining}}` adds genuine urgency without manufactured scarcity. CC listing (live endpoint - no new backend needed). `{{guest_swim_count}}` flag: confirm with Eng if not already an attribute on Summer Pass holders.
Block 02 Push ⏱ Day 17 (if no booking after email)
TitleCasual Nudge Push
BodyGreat pools in {{city}} have spots open this week — and your pass covers it all. Credits are loaded and ready to go. 🌊
Variants3 segments: Family / Party / Pet
✅📌 Full approved copy at swimply-copy-review-v6.vercel.app
Block 03 In-App ⏱ Next app open after Day 14
TitleCC-Backed Pool Recommendation Modal
Body{{host_name}}'s pool in {{listing_city}} is open this weekend — and it's one of the best-rated in the area. 🌞 {{listing_price}}/hr · ⭐{{listing_rating}} Your Summer Pass covers this, and your {{current_credit_balance}} in credits makes it even better. 🏊‍♀️
CTABook that spot ☀️
Variants3 segments: Family / Party / Pet
Body (fallback — no CC in-app)There's an incredible private pool open in {{city}} this weekend. 🌞 Your Summer Pass covers it, and your {{current_credit_balance}} in credits is ready to go. 🏊‍♀️
CTA (fallback)Find my pool ☀️
✅📌 Connected Content: pull top-rated available listing near `{{city}}` - same live endpoint used in master general and SP1 Block 03. Host name + listing details make this feel concierge-level vs. a generic browse prompt. Interim fallback (while CC endpoint is configured for in-app): surface top-rated pool in guest's city segment without dynamic host name.
Block 04 Email ⏱ Day 21 (if still inactive)
Subject AMost members: {{avg_swims}} swims. You: {{guest_swim_count}}. There's still time to catch up. 👀
Subject B{{guest_swim_count}} swim{{#if guest_swim_count == 1}}{{else}}s{{/if}} in, {{days_remaining}} days left. Your best pool days are still ahead. 🌊
TitleSocial Proof + Usage Stats Email 2
Preview{{current_credit_balance}} in credits and {{days_remaining}} days of pool season left. 💦
BodyQuick check-in on your pass: {{guest_swim_count}} swims so far, and most members at this point have had {{avg_swims}}. 👀 You've got {{current_credit_balance}} in credits and {{days_remaining}} days to use them. That's still plenty of time for the kind of lazy afternoon floats, post-swim sunsets, and spontaneous weekend plans that make a summer feel like a summer. Your credits are ready. Go find the pool that's calling your name. 🏊‍♀️
CTAFind my next pool 🌊
Variants3 segments: Family / Party / Pet
✅📌 Requires `{{avg_swims}}`, `{{current_credit_balance}}`, `{{days_remaining}}`, and `{{guest_swim_count}}` attributes. Flag `{{guest_swim_count}}` as potential new Eng dep - confirm if already tracked on SP holder profile.
Block 05 SMS ⏱ Day 25 (final push if still inactive)
TitleDirect Last Call SMS
Body{{first_name}}, your Summer Pass credits expire {{pass_end_date}}. Great pools are still open — use them before they're gone: [link] 💦
Variants3 segments: Family / Party / Pet
✅📌 Full approved copy at swimply-copy-review-v6.vercel.app

Data Requirements

  • Summer Pass active status attribute
  • Last `BookingConfirmedToGuest` timestamp for 14-day inactivity trigger
  • `{{current_credit_balance}}`, `{{pass_end_date}}`, `{{days_remaining}}` attributes
  • `{{avg_swims}}` aggregate stat (Connected Content or static benchmark from data team)
  • `{{guest_swim_count}}` - total bookings under active pass (potential Eng dep - confirm if tracked on SP holder profile)
  • Connected Content: 1 top-rated available listing near `{{city}}` for Block 01 + Block 03 (live now)
  • Guest segment attribute (Family / Party / Pet)

Success Metrics

MetricTarget
Inactive-to-active rate (re-engagement)>=25%
Email 1 open rate>=30%
Credit utilization rate among re-engaged guests>=60%
SP-03
All in BrazeCopy Approved

Triggered Email Banner (Pre-Purchase)

Objective
Drive Summer Pass 2026 purchases from active guests who haven't bought yet. Two versions: standard launch and early bird ($67) pricing window.
Entry Trigger
Summer Pass promotion window active AND no `GuestPurchasedPremiumMembership` event
Exit Condition
`GuestPurchasedPremiumMembership` event
Audience
Active guests without Summer Pass 2026. Source: swimply-summer-pass-copy-review.vercel.app
Block 01 Email ⏱ Standard launch - campaign send
SubjectOne pass, every pool, the whole summer. Here's what Summer Pass gets you. 🌊
TitleStandard Banner Version
Preview$0 service fees + 10% back in credits every swim. Your summer just leveled up. ☀️
HeadlineYour whole summer, poolside. Every pool. Credits back every swim. 🏊
BodySummer Pass gives you $0 service fees on bookings under $300 and 10% back in Swimply Credits every time you swim. One pass covers the entire summer — every pool, every host, every beautiful backyard in your area. 🌞
CTAGet Summer Pass 🌊
✅📌 Full approved copy at swimply-summer-pass-copy-review.vercel.app
Block 02 Email ⏱ Early Bird window only ($67 price active)
SubjectEarly Bird: Summer Pass for $67. An entire summer of private pools. 🌊
TitleEarly Bird $67 Banner Version
Preview$67 gets you $0 fees and 10% back every swim. This price won't last. ☀️
HeadlineAn entire summer of private pools. $67 while the Early Bird window is open. 🏊
BodyThe $67 Early Bird price is live right now. That gets you $0 service fees and 10% back in credits on every single swim for the entire summer. Every pool, every host, every incredible backyard in your area. Price goes up when this window closes — lock it in while you can. 💦
CTAGet Summer Pass for $67 🌊
✅📌 Time-gated to early bird pricing window. Suppress after price increases. Full approved copy at swimply-summer-pass-copy-review.vercel.app

Data Requirements

  • `GuestPurchasedPremiumMembership` event for exit suppression
  • Early bird pricing window dates for version B conditional send
  • Current pass price variable for dynamic display

Success Metrics

MetricTarget
Pass purchase rate from bannerTrack against baseline
Early bird vs. standard conversion liftCompare version A vs. B
SP-04
All in BrazeCopy Approved

First Swim Nudge (48h Post-Purchase)

Objective
Drive the first Summer Pass booking within 48 hours of purchase while motivation and anticipation are highest. Activate perks and make first booking frictionless.
Entry Trigger
`GuestPurchasedPremiumMembership` event
Exit Condition
First `BookingConfirmedToGuest` event
Audience
All Summer Pass 2026 purchasers who have not yet made a booking. Source: swimply-summer-pass-copy-review.vercel.app
Block 01 Email ⏱ Immediately post-purchase (or within 1 hour)
Subject A{{first_name}}, your Summer Pass is active. Here are the best pools near {{city}}. 🌊
Subject BSummer Pass is live. Your first pool day in {{city}} is waiting. 🏊
TitleFirst Swim Nudge Email
Preview$0 service fees, 10% back in credits, and incredible pools near you. Your pass is ready. ☀️
HeadlineYour Summer Pass is active. Time to pick your first pool. 🌞
BodyYour Summer Pass is live and your perks are loaded. 🎉 Here's what you've got: $0 service fees on bookings under $300, plus 10% back in Swimply Credits every time you swim. Every pool day earns you credit toward the next one — so the more you swim, the more you save. And there are some genuinely beautiful spots near {{city}} waiting for your first booking: [CC: 2 top-rated listings near {{city}}] • {{listing_name_1}} · {{listing_price_1}}/hr · ⭐{{listing_rating_1}} · {{listing_city_1}} • {{listing_name_2}} · {{listing_price_2}}/hr · ⭐{{listing_rating_2}} · {{listing_city_2}}
CTABook my first swim 🏊
✅📌 Connected Content: 2 top-rated available listings near `{{city}}` - same live endpoint used in GP1 Block 01 and SP1. No new backend needed. Host-forward framing ('Here's your first pool in {{city}}') signals concierge intent on the very first touchpoint. City personalization in subject line drives opens.
Block 02 Push ⏱ 48 hours post-purchase (if no booking yet)
TitleFirst Swim Push
Title AYour Summer Pass is active but you haven't booked yet. Great pools in {{city}} are open. 🏊
Title B{{city}} has incredible pools open this weekend. Your pass makes them even better. ☀️
BodyPick a pool in {{city}} and make your first Summer Pass swim official. Your credits are loaded and the best spots have weekend availability. 🌊
CTAFind my pool 🌊
✅📌 `{{city}}` personalization in push title lifts tap rate. Coordinate with Block 01 - suppress if block 01 drove a booking.

Data Requirements

  • `GuestPurchasedPremiumMembership` event as trigger
  • `BookingConfirmedToGuest` event for exit + Block 02 suppression
  • `{{city}}` user attribute for personalized pool recs
  • Connected Content: 2 top-rated available listings near `{{city}}` (live now)
  • Summer Pass perk details for email (static copy - no new dep)

Success Metrics

MetricTarget
Post-purchase first booking rate (48h)>=55%
Post-purchase first booking rate (7 days)>=80%
SP-05
All in BrazeCopy Approved

First Booking Celebration

Objective
Celebrate the first Summer Pass booking, reinforce pass value (credits earned), and seed the next booking immediately after confirmation.
Entry Trigger
`BookingConfirmedToGuest` (first Summer Pass booking)
Exit Condition
Immediate - single send
Audience
Summer Pass holders who just confirmed their first booking. Source: swimply-summer-pass-copy-review.vercel.app
Block 01 Email ⏱ Immediately post first booking confirmation
Subject AConfirmed: {{host_name}}'s pool in {{listing_city}} on {{booking_date}}. 🎉
Subject BYour pool day at {{listing_name}} is locked in. Let's go. 🏊
TitleFirst Booking Celebration Email
PreviewYour first Summer Pass swim is on the books. Here's everything you need to know. 🌊
HeadlineYour first Summer Pass pool day is officially booked. 🙌
BodyFirst Summer Pass booking: confirmed. 🎉 {{listing_name}} with {{host_name}} on {{booking_date}} at {{booking_time}}. After this swim, you'll earn 10% back in Swimply Credits — which means your next pool day gets even better. That's how the pass works: every swim makes the next one easier. Already thinking about round two? Here's what {{host_name}} has open next: [CC: next available booking slot at {{listing_id}} - date + time]
CTASee my booking 🌊
✅📌 Host name + listing name in subject (via CC from BookingConfirmedToGuest event attributes) drives opens by confirming the specific booking - not generic. Footer seeding next booking while host name is fresh is the Airbnb 'complete your trip' play. CC: next available slot at same listing (live now). Booking date/time from `BookingConfirmedToGuest` event payload.
Block 02 Push ⏱ Same trigger as email
TitleFirst Booking Confirmation Push
Title A{{host_name}}'s pool is yours on {{booking_day}}. See you there. 🌊
Title BPool day in {{listing_city}} confirmed for {{booking_day}}. The countdown starts now. 🏊
BodyTap to see the details and start the countdown. Your first Summer Pass pool day is going to be great. ☀️
✅📌 `{{host_name}}` + `{{booking_day}}` (formatted as day of week, e.g. 'Saturday') from `BookingConfirmedToGuest` event payload. Specific beats generic every time.

Data Requirements

  • `BookingConfirmedToGuest` event with Summer Pass holder flag
  • `{{host_name}}`, `{{listing_name}}`, `{{listing_city}}`, `{{listing_id}}` from booking event payload (or CC lookup on listing ID)
  • `{{booking_date}}`, `{{booking_time}}`, `{{booking_day}}` from booking event payload
  • Connected Content: next available slot at `{{listing_id}}` for footer seed (live now)

Success Metrics

MetricTarget
Email open rate>=45% (high-intent moment)
Click-through to booking details>=30%
SP-06
All in BrazeCopy Approved

Credits Waiting (Post-Swim Credit Reminder)

Objective
Alert Summer Pass holders when they have accumulated credits available to use. Drive next booking by surfacing concrete credit balance as a booking incentive.
Entry Trigger
Summer Pass holder with `{{current_credit_balance}}` > 0. Scheduled daily check, 7-day send cap.
Exit Condition
`BookingConfirmedToGuest` using credits, or credits expire
Audience
Active Summer Pass holders with positive credit balance. Source: swimply-summer-pass-copy-review.vercel.app
Block 01 Email ⏱ Daily scheduled - first send when credits available, up to 7-day cap
Subject A{{current_credit_balance}} in credits + {{host_name}}'s pool has a Saturday slot. 🌊
Subject B{{listing_name}} in {{listing_city}} is open — your credits cover {{credits_cover_amount}}. 🏊
TitleCredits + Pool Recommendation Email (Airbnb Availability Alert Play)
PreviewYour credits + a great pool = the kind of Saturday everyone needs. 💦
HeadlineYour credits are ready. Here's a pool that's worth every one of them. 🌞
BodyYou've got {{current_credit_balance}} in Swimply Credits and we found the perfect place to use them: 👇 {{listing_name}} · {{listing_city}} · {{listing_price}}/hr · ⭐{{listing_rating}} Available: [next Saturday date] Your credits cover {{credits_cover_amount}} of this booking. This is one of the best-rated pools in your area, and it has a Saturday slot open. Your credits apply automatically at checkout. 🏊 [CC: top-rated available listing near {{city}} with next Saturday availability]
CTABook {{host_name}}'s pool 🏊
✅📌 This is the Airbnb 'saved home is available this weekend' play - applied to credits. The combination of a specific pool + a specific date + 'your credits cover X' removes every friction point in one email. CC: top-rated available listing near `{{city}}` with weekend availability (live now - same endpoint). `{{credits_cover_amount}}` = formatted string e.g. '$18 of this booking' - calculated from `{{current_credit_balance}}` vs. `{{listing_price}}`. Flag as Eng dep if not already computed. Interim fallback: show credit balance without computed coverage amount.
Block 02 Push ⏱ Same daily trigger (alternate days from email to avoid over-messaging)
TitleCredits Waiting Push
Title A{{host_name}}'s pool has a Saturday spot. Your {{current_credit_balance}} in credits is ready. 🌊
Title B{{current_credit_balance}} in credits and great pools in {{city}} have weekend spots. 🏊
BodyYour credits are loaded and beautiful pools in {{city}} have weekend availability. They apply automatically at checkout. 💦
✅📌 Host name + credit amount in push title is the hook. Specific beats 'Pool day upgrade' every time.

Data Requirements

  • `{{current_credit_balance}}` user attribute (updated in real-time or near real-time)
  • Credit balance > 0 as entry filter
  • 7-day send frequency cap to prevent over-messaging
  • `BookingConfirmedToGuest` with credit redemption flag for exit
  • Connected Content: top-rated available listing near `{{city}}` with weekend availability (live now)
  • `{{credits_cover_amount}}` - computed field: credit balance applied to listing price (flag as potential Eng dep - confirm if calculable in Braze liquid or requires backend)

Success Metrics

MetricTarget
Credit utilization rate (credits used / credits earned)>=70%
Email open rate>=32%
Booking rate after credits reminder>=20%
SP-07
All in BrazeCopy Approved

Members First: Early Access to Summer Pass 2027

Objective
Convert 2026 Summer Pass holders into 2027 renewals during the member-only early access window at lowest-of-year pricing.
Entry Trigger
Summer Pass 2027 member pricing window opens. Segment: 2026 Summer Pass holders.
Exit Condition
`GuestPurchasedPremiumMembership` (2027) event or offer window closes (`{{offer_end_datetime}}`)
Audience
Active or recently expired Summer Pass 2026 holders. Source: swimply-summer-pass-copy-review.vercel.app
Block 01 Email ⏱ Day of member pricing window opening
SubjectMembers first: Summer Pass 2027 is open at the lowest price of the year. 🌊
TitleMembers First Early Access Email
PreviewYour member pricing window closes {{offer_end_datetime}}. Don't miss it. ☀️
HeadlineYou were here first. You get the best price. 🏊‍♀️
BodyAs a 2026 Summer Pass holder, you get first access to 2027 — and the lowest price anyone will see this year. 💦 Your member price: ${{member_price}}. Everyone else will pay ${{full_price}}. Here's what you're locking in: another full summer of private pool access, $0 fees, 10% back on every swim, and any unused credits carrying over. Same incredible hosts, same beautiful backyards, another summer of pool days worth remembering. 🏊 This window closes {{offer_end_datetime}}.
CTAClaim my member price 🌊
✅📌 Requires `{{member_price}}`, `{{full_price}}`, `{{offer_end_datetime}}` variables. Full approved copy at swimply-summer-pass-copy-review.vercel.app
Block 02 Push ⏱ Same day as email
TitleVIP Lane Push
Push TitleSummer Pass 2027: your member price is live. 🏊‍♀️
Push Body${{member_price}} for you vs. ${{full_price}} for everyone else. This price won't last. 💦
✅📌 Full approved copy at swimply-summer-pass-copy-review.vercel.app

Data Requirements

  • Summer Pass 2026 holder segment in Braze
  • `{{member_price}}`, `{{full_price}}`, `{{offer_end_datetime}}` attributes
  • `{{member_savings}}` for Last Chance email (Block SP-08)
  • `GuestPurchasedPremiumMembership` 2027 event for exit suppression
  • Credits carry-over confirmation from product team

Success Metrics

MetricTarget
Member renewal rate (2026 → 2027) during window>=45%
Email open rate>=38%
Conversion within 24h of email send>=25%
SP-08
All in BrazeCopy Approved

Last Chance: Member Pricing Ends Tonight

Objective
Final push to convert 2026 Summer Pass holders who opened but didn't purchase during the member early access window. Hard deadline urgency.
Entry Trigger
Final day of member pricing window. Filter: 2026 pass holder, no 2027 pass purchased.
Exit Condition
`GuestPurchasedPremiumMembership` (2027) or midnight of offer deadline
Audience
Summer Pass 2026 holders who have NOT yet purchased 2027 pass. Source: swimply-summer-pass-copy-review.vercel.app
Block 01 Email ⏱ Morning of deadline day
SubjectTonight at midnight, your member price goes up. Last chance. 🌊
TitleLast Chance Email
PreviewSave {{member_savings}} on Summer Pass 2027 before the window closes tonight. ☀️
HeadlineYour member price expires tonight at midnight. 💦
BodyThis is the last day at this price. At midnight, it goes up. 👇 Your member price: ${{member_price}}. Starting tomorrow, everyone pays ${{full_price}}. This gets you another full summer of private pool access — $0 fees, 10% back on every swim, credits that carry over. All the incredible hosts and beautiful backyards you discovered this year, plus all the new ones opening next summer. 🏊 Lock it in before midnight tonight.
CTALock in Summer Pass 2027 🌊
✅📌 Requires `{{member_savings}}` = `${{full_price}}` - `${{member_price}}`. Full approved copy at swimply-summer-pass-copy-review.vercel.app
Block 02 Push ⏱ Evening of deadline day (6-8 PM local)
TitleLast Chance Push
Push TitleMember pricing ends at midnight. Don't miss it. 🏊‍♀️
Push Body${{member_price}} today, ${{full_price}} tomorrow. Lock in your 2027 Summer Pass now. 🌊
✅📌 Full approved copy at swimply-summer-pass-copy-review.vercel.app

Data Requirements

  • Summer Pass 2026 holder segment
  • No 2027 purchase filter
  • `{{member_price}}`, `{{full_price}}`, `{{member_savings}}` variables
  • Offer deadline timestamp for Intelligent Timing suppression after deadline

Success Metrics

MetricTarget
Same-day conversion rate (deadline urgency lift)>=15% of remaining non-purchasers
Push open rate on deadline day>=20%
SP-09
All in BrazeCopy Approved

Credit Expiration Drip (30d → 14d → 7d → 48h)

Objective
Drive final Summer Pass bookings before pass expiration by sending a 4-step countdown drip tied to `{{pass_end_date}}`. Prevents credit waste, drives urgency.
Entry Trigger
Summer Pass active with `{{pass_end_date}}` approaching. Scheduled at 30, 14, 7, and 2 days before expiry.
Exit Condition
`BookingConfirmedToGuest` using credits or pass expiry
Audience
All active Summer Pass 2026 holders with remaining credit balance. Source: swimply-summer-pass-copy-review.vercel.app
Block 01 Email ⏱ 30 days before `{{pass_end_date}}`
Subject30 days left on your Summer Pass — and plenty of great pool days ahead. 🌊
Title30-Day Reminder
Preview{{pass_end_date}} is coming. You've got {{currentCreditsAmount}} in credits ready to use. 💦
BodyYour pass expires {{pass_end_date}} and your credits expire with it. You've got {{currentCreditsAmount}} ready to go — that's a lot of incredible pool afternoons still on the table. 🌞 Whether it's a midweek reset, a Saturday with friends, or a family day at a pool with a slide, your credits cover it. The best pool weather of the year is still ahead. 🏊
CTAUse my credits ☀️
✅📌 Full approved copy at swimply-summer-pass-copy-review.vercel.app
Block 02 Email ⏱ 14 days before `{{pass_end_date}}`
SubjectTwo weeks left on your pass. Your {{currentCreditsAmount}} in credits is waiting. 💦
Title14-Day Reminder
Preview{{currentCreditsAmount}} in credits and two more weekends to use them. 🏊
BodyTwo weeks left on your Summer Pass, and your {{currentCreditsAmount}} in credits expires with it. 👀 That's at least one or two more incredible pool afternoons — the kind where everyone leaves sun-tired and happy. Don't let them go unused. ☀️
CTABook with Summer Pass 🌊
✅📌 Full approved copy at swimply-summer-pass-copy-review.vercel.app
Block 03 Email ⏱ 7 days before `{{pass_end_date}}`
SubjectOne week left on your Summer Pass. Time to squeeze in one more great day. 🏊
Title7-Day Reminder
Preview7 days until {{pass_end_date}}. Credits expire with the pass. ☀️
Body7 days until {{pass_end_date}}. Your credits expire with the pass, and there's still time for one or two more incredible pool days. 🌞 This is the stretch of summer where the best pool weather happens and the best memories get made. Your credits are still there — go use them before the season wraps. 🏊‍♀️
CTAUse my credits 💦
✅📌 Full approved copy at swimply-summer-pass-copy-review.vercel.app
Block 04 Email ⏱ 48 hours before `{{pass_end_date}}`
Subject48 hours left. One more pool day before your credits expire. 🌊
TitleFinal 48-Hour Warning
PreviewCredits apply automatically at checkout. Book today before they're gone. 💦
Body48 hours left on your Summer Pass. After that, the credits are gone. 🏊 One more afternoon in a private pool with your people — the kind of day where the sun does its thing, nobody checks the time, and everyone says "we need to do this more." Your credits apply automatically at checkout. No code needed. Just pick a pool and book it. Today's the day. ☀️
CTABook with Summer Pass 🏊
✅📌 Full approved copy at swimply-summer-pass-copy-review.vercel.app

Data Requirements

  • `{{pass_end_date}}` attribute (ISO date)
  • `{{currentCreditsAmount}}` user attribute (real-time or near real-time)
  • Scheduled canvas entry at 30/14/7/2 days before `{{pass_end_date}}`
  • `BookingConfirmedToGuest` with credit redemption flag for suppression between sends

Success Metrics

MetricTarget
Credit utilization rate by expiry drip stageTrack per email - escalating urgency should show lift
Final 48h email conversion rate>=22%
Total credit waste rate (credits that expire unused)<15%
SP-10
Needs EngNot Started

Mid-Pass Momentum Check-In

Objective
Re-activate Summer Pass holders at the halfway point. Show them how they're tracking vs. other members, surface their remaining value, and give them a specific pool to book this week.
Entry Trigger
Day 45 of active Summer Pass (halfway point of 90-day pass)
Exit Condition
`BookingConfirmedToGuest` or pass expiry
Audience
Active Summer Pass holders who have not booked in the last 14 days at Day 45
Timing Coordination
Coordinate with SP-02 (low-usage re-engagement at Day 14). SP-10 is a separate, more substantial mid-point check - different frame (progress report vs. nudge). Do not send SP-10 if SP-02 Block 05 (Day 25 SMS) fired within last 20 days. Requires cross-canvas suppression logic - Eng dependency.
Block 01 Email ⏱ Day 45 of active pass
Subject AYour Summer Pass at the halfway mark — and the best part is still coming. 🌊
Subject B{{first_name}}, 45 days in. {{days_remaining}} days of incredible pool weather ahead. ☀️
Preview{{guest_swim_count}} swims so far, {{current_credit_balance}} in credits, and {{days_remaining}} days left. 🏊
BodyYou're at the halfway mark. Here's where your Summer Pass stands: 📊 🏊 Pool days so far: {{guest_swim_count}} 📊 Most members at Day 45: {{avg_swims_at_day45}} 💳 Credits ready to use: {{current_credit_balance}} 📅 Days remaining: {{days_remaining}} The good news? The hottest pool weather of the year — and the best pool afternoons — are still ahead of you. Late-summer evenings in the water, spontaneous weekend plans that actually work out, the kind of days that feel like the whole point of summer. Here's what's open in {{city}} this week: 🌞 [CC: 2 top-rated listings near {{city}}]
CTABook my next swim 🌊
✅📌 Progress card format - use visual stat layout if possible (icons + numbers). `{{avg_swims_at_day45}}` is a static benchmark (confirm with data team: what's the actual median at Day 45?). CC: 2 listings via existing endpoint. This is the Airbnb mid-trip inspiration play: you're halfway to an amazing summer - here's your next move.
Block 02 Push ⏱ Day 47 (if no booking after Block 01)
Title AHalfway through your pass and the best pool weather is still ahead. 🌞
Title B{{days_remaining}} days left on your pass and {{current_credit_balance}} in credits to spend. 🏊
Body{{days_remaining}} days left and the hottest pool weekends of the summer are coming. Your credits are ready — go find a great one. 💦
CTAFind my pool 🌊

Data Requirements

  • Day-45 pass milestone trigger (Eng - requires pass activation date + day counter attribute)
  • `{{guest_swim_count}}` - total bookings under active pass (Eng dependency - confirm if tracked)
  • `{{avg_swims_at_day45}}` - static benchmark from data team (confirm median before launch)
  • `{{days_remaining}}` - calculated from `{{pass_end_date}}`
  • `{{current_credit_balance}}` - existing attribute
  • Connected Content: 2 top-rated available listings near `{{city}}` (live now)
  • Suppress if SP-02 Block 05 fired within last 20 days (cross-canvas logic - Eng)

Success Metrics

MetricTarget
Day-45 → booking conversion rate>=18%
Block 01 open rate>=35% (personalized subject + progress angle)
Credit utilization lift post-sendTrack vs. non-triggered control
Archive
Source DocNew user drip copy (7).docx

Host Stuck Steps + "Stuck with Photos?" Email

Source
New user drip copy (7).docx — raw content extracted March 2026. Preserved here as historical record before changes were applied to HP1. These notes drove Block 10a (FOMO Proximity Email) and Block 11a (Stuck with Photos Email) insertions into the HP1 onboarding canvas.

Part 1: Stuck Onboarding Steps

Doc NoteRaw notes on where hosts commonly stall in onboarding
Stuck StepsSteps identified where hosts commonly get stuck and may need triggered interventions: 1. Stripe (payment setup) 2. Check-in (setting check-in instructions) 3. Photos (uploading listing photos) 4. Video (adding a listing video) 5. Pricing (setting pricing) 6. Instant Book (enabling instant book) 7. Weekends (configuring weekend availability) 8. Memberships (setting up membership options) 9. Marketing (understanding marketing tools) 10. Fans (enabling fan/follower features) 11. Instagram (connecting Instagram) 12. Sharing link (sharing their listing link)

Part 2: "Stuck with Photos?" Email — Original Copy

Doc NoteFull email copy as provided in source doc — applied as Block 11a in HP1
Subject📸 Stuck with photos? We've got you covered.
Preheader3 simple ways to move forward (no pro gear needed).
Hero HeadlineGreat photos = more bookings 💡
Hero SubheadBut don't stress — we'll help you get there.
Body Option 1Hi {{first_name}}, Looks like you paused at the photo section. Totally normal — it's one of the most common places hosts get stuck. Here's what we recommend: 1. Just upload what you have now. Even 3–4 good iPhone photos are enough to get your first booking. You can always improve them later. 2. Let your guests help. Once you're live, guests will often take great photos at your space. You can feature those over time. 3. Want professional photos? Swimply offers complimentary photography in select markets. Reply to this email to check availability in your area. "I launched with just a few iPhone photos I took in 20 minutes. I got my first booking in 24 hours." — Melissa, FL
CTA PrimaryUpload My Photos
CTA SecondaryView the Full Photo Guide
Testimonial"I launched with just a few iPhone photos I took in 20 minutes. I got my first booking in 24 hours." — Melissa, FL
📌 This copy was applied verbatim (with minor formatting) as Block 11a in HP1. Trigger: host views photo upload step and stalls 24+ hours without uploading photos.
Archive
Source DocNew user drip copy (8).docx

FOMO Proximity Email — "A host near you just got booked"

Source
New user drip copy (8).docx — raw content extracted March 2026. Preserved here as historical record before changes were applied to HP1. These notes drove Block 10a (FOMO Proximity Email) insertion into the HP1 onboarding canvas. Send rule: max 2x/week per unlisted host.

FOMO Proximity Email — Original Copy

Doc NoteFull email copy as provided in source doc — applied as Block 10a in HP1
Send RuleEmail when the host near them gets booked. Max 2 times a week.
HeadlineA host near you just approved a $250 booking
SubheadGrab the next one! Publish your spot now.
BodyHi {{first_name}}, A host [X] miles from you just earned $250 on Swimply. Guests in your area are actively searching for: - Private pools for family swim days - Hot tubs for cozy date nights - Backyards for birthdays and celebrations - Yards for dog swims and playtime Finish your listing and be in front of them.
CTAFinish my listing
📌 This copy was applied (with variable name updates to use {{proximity_miles}} and $[AMOUNT]) as Block 10a in HP1. Trigger: nearby host receives a confirmed booking. Max 2x/week per unlisted host. Requires Eng: booking_confirmed event + geo proximity logic.