Table of Contents
- Why Meal Kits Have a Unique Retention Problem
- Events to Track in OneSignal
- Core Subscription Events
- Behavioral Attributes to Store
- Segments to Build
- Lifecycle Segments
- Preference Segments
- Automations to Build
- 1. Onboarding Sequence (Days 0–14)
- 2. Weekly Selection Reminder (Ongoing)
- 3. Skip Intervention Sequence
- 4. Cancellation Recovery
- Industry-Specific Challenges with OneSignal
- Frequently Asked Questions
- What's the right push notification frequency for meal kit subscribers?
- Should we use SMS or push notifications for at-risk subscribers?
- How do we handle subscribers who've opted out of push notifications?
- How long should win-back sequences run for churned subscribers?
OneSignal gives meal kit operators a direct line to subscribers at the exact moments that determine whether someone stays, skips, or cancels. Most companies use it for basic order reminders. The ones winning retention use it as a lifecycle engine.
This guide covers how to build that engine — from the events you need to track on day one to the automations that recover subscribers before they ever hit the cancel button.
---
Why Meal Kits Have a Unique Retention Problem
The meal kit model has a structural weakness: subscribers decide every single week whether your service is worth keeping. That weekly decision point means churn signals appear faster than in most subscription categories — but it also means you have more intervention opportunities.
Your biggest risk windows are:
- Days 1–7: Post-signup anxiety. The box hasn't arrived yet, the subscriber doesn't know what to expect.
- Week 3–6: The novelty wears off. Life gets busy. Skipping feels easier than canceling.
- Post-skip: Once someone skips two consecutive weeks, cancellation probability spikes significantly.
- Price increase moments: Any billing change that isn't pre-communicated kills trust fast.
OneSignal's push, in-app messaging, and SMS channels — used together — address each of these windows if you set them up correctly.
---
Events to Track in OneSignal
OneSignal works on events and attributes. The more precisely you define these for the meal kit model, the more surgical your automations become.
Core Subscription Events
Tag every user record with these events as they happen:
- `subscription_started` — date, plan type, box size
- `first_box_delivered` — critical trigger for onboarding sequences
- `meal_selected` — weekly cadence; absence of this event is your earliest churn signal
- `week_skipped` — track skip count as a running attribute (`skip_count`)
- `skip_streak_started` — fires when `skip_count` reaches 2 in a row
- `cancellation_initiated` — subscriber hit the cancel flow (not necessarily completed)
- `cancellation_completed` — subscription ended
- `reactivation_completed` — returning subscriber
Behavioral Attributes to Store
Beyond events, keep these attributes current on each user profile:
- `current_plan` (e.g., "2-person / 3 meals")
- `consecutive_skips` (integer, updated weekly)
- `meals_rated` (count of rated meals — proxy for engagement)
- `last_selection_date`
- `preferred_meal_category` (vegetarian, family, etc.)
- `ltv_to_date`
These attributes power your segments. Without them, you're sending the same message to your most engaged subscriber and your most at-risk one.
---
Segments to Build
Segment logic in OneSignal is only as good as the data you push into it. Build these segments using your tracked attributes and events.
Lifecycle Segments
- New Subscribers (Days 0–14): `subscription_started` within last 14 days AND `first_box_delivered` = false or recent
- Active Engaged: `consecutive_skips` = 0 AND `meals_rated` > 3 AND last active within 30 days
- Early Skip Risk: `consecutive_skips` = 1 AND subscription age < 60 days
- High Skip Risk: `consecutive_skips` ≥ 2
- Cancellation Saved: `cancellation_initiated` = true AND `cancellation_completed` = false (they started but didn't finish)
- Churned — Win-Back Eligible: `cancellation_completed` = true within last 90 days
Preference Segments
Build these for content relevance:
- Subscribers who have rated vegetarian meals 4+ stars
- Subscribers who consistently select quick/easy meals (under 30 min)
- Family plan subscribers with `box_size` ≥ 4
Sending a message about "30-minute weeknight meals" to someone in your quick-meal preference segment will consistently outperform a generic "this week's menu" blast. Personalization at this level requires the preference data — which means your app needs to pass it to OneSignal.
Getting the most out of OneSignal?
I'll audit your OneSignal setup and show you where revenue is hiding.
---
Automations to Build
These are the sequences that do the retention work without manual effort.
1. Onboarding Sequence (Days 0–14)
Your goal here is to get the subscriber to their second box. First-box delivery is the inflection point.
- Day 0 (post-signup): Welcome push. Set expectations. "Your first box ships [date]. Here's what to expect."
- Day 2: In-app message surfacing meal selection if they haven't chosen yet. Trigger: `meal_selected` = false.
- Day of first delivery: Push notification timed to estimated delivery window. "Your box is on its way."
- Day 1 post-delivery: Push prompting first meal rating. Engagement here predicts 90-day retention.
- Day 7: If no meal has been rated, send an SMS. Push open rates drop when the novelty of a new app fades. SMS cuts through.
2. Weekly Selection Reminder (Ongoing)
Every week you have a selection window before the cutoff. A subscriber who doesn't select is one step closer to skipping.
- Send a push notification 48 hours before the selection deadline for subscribers where `meal_selected` = false for the current week.
- If no action at 24 hours, send a second push with a specific meal recommendation pulled from `preferred_meal_category`.
- Personalize the message body: "Your [preferred_meal_category] picks for this week are ready" outperforms "Don't forget to select your meals."
3. Skip Intervention Sequence
This is your most important automation. Build it before anything else.
- Skip 1: Send a push within 24 hours of the skip event. Acknowledge it without guilt. Highlight something new — a chef collaboration, a limited menu item — that creates a reason to come back next week.
- Skip 2 (consecutive): Trigger the "Skip Streak" sequence. This is where you offer a concrete incentive — not a vague "we miss you" message, but a specific offer: "Come back next week and your box ships at 20% off." Include a direct link to the meal selection screen.
- Skip 3: Move to SMS if push hasn't driven re-engagement. Escalating channels at this stage increases recovery rate meaningfully. This is also where a human touchpoint (customer success outreach) makes sense for high-LTV subscribers.
4. Cancellation Recovery
When `cancellation_initiated` fires but `cancellation_completed` has not:
- Send an in-app message within the same session offering a pause option instead of cancellation. Many subscribers want a break, not an exit.
- If they close the app without canceling, send a push 2 hours later with a specific retention offer — free box, extended pause, plan downgrade option.
The "pause vs. cancel" framing alone can reduce cancellation completion rates by a meaningful margin. OneSignal's in-app messaging is the right channel here because you're catching them mid-session.
---
Industry-Specific Challenges with OneSignal
Delivery timing complexity: Meal kit subscriptions have variable delivery windows by zip code. Your push notification timing for delivery-day messages needs to pull from your logistics data, not a fixed schedule. Use OneSignal's API to trigger these dynamically rather than relying on scheduled sends.
Weekly cadence fatigue: You're competing for attention every seven days, which means subscribers will mute or unsubscribe from notifications faster than users of less frequent services. Keep your notification volume to 2–3 pushes per week maximum, and make sure each one is relevant to where the subscriber is in their cycle.
Multi-household complexity: Family plan subscribers often have multiple adults making decisions. You're influencing a household decision, not an individual one. Frame your messaging accordingly — "enough for the whole week" beats "perfect for you."
Data sync lag: If your subscription management platform and OneSignal aren't syncing in near real-time, your automations will fire on stale data. A subscriber who re-activates an hour ago will still get a win-back push if your sync runs nightly. Prioritize a real-time or near-real-time data pipeline.
---
Frequently Asked Questions
What's the right push notification frequency for meal kit subscribers?
Two to three pushes per week is the ceiling for most subscribers. The weekly selection reminder and a delivery notification are non-negotiable. Any additional messages need to be triggered by behavior — a skip, a missed selection, a new menu drop — not sent on a fixed schedule. Frequency without relevance accelerates unsubscribes.
Should we use SMS or push notifications for at-risk subscribers?
Both, in sequence. Push notifications are lower cost and higher volume. SMS is higher cost but significantly higher open rate — often 90%+ within three minutes. Reserve SMS for skip streak 2 and beyond, or for high-LTV subscribers showing cancellation signals. Using SMS too early trains subscribers to ignore it.
How do we handle subscribers who've opted out of push notifications?
Build your in-app messaging strategy for this group. When they open your app, surface contextual banners and modals based on the same lifecycle triggers you'd use for push. Email remains your fallback channel for subscribers who've opted out of both. Ensure your OneSignal user records include email identifiers so you can coordinate across channels.
How long should win-back sequences run for churned subscribers?
Ninety days is the practical window for most meal kit operators. Subscribers who haven't reactivated within 90 days of cancellation have significantly lower conversion rates. Within that window, a three-touch sequence — at days 7, 30, and 60 post-cancellation — is a reasonable starting structure. Use a specific offer on each touch rather than repeating the same message.