Back to Blog

Win Back Churned Users with Re-engagement Workflows

Growth TeamJan 15, 20257 min read

Win Back Churned Users with Re-engagement Workflows

Acquiring a new customer costs 5x more than retaining an existing one. Here's how to win back users who've gone quiet.

The Re-engagement Opportunity

Not all churned users are lost forever. Many leave because:

  • Life got busy
  • They forgot about your product
  • They hit a temporary roadblock
  • Your product evolved past their last impression

A well-designed win-back campaign can recover 5-10% of inactive users.

Defining "Inactive"

First, define what inactive means for your product:

TSTypeScript
// Track activityawait fbf.identify({  userId: 'user-123',  traits: {    lastActiveAt: new Date().toISOString(),    activityScore: calculateActivityScore(user)  }});
Ln 8

Common definitions:

  • SaaS: No login in 14-30 days
  • E-commerce: No purchase in 60-90 days
  • Mobile app: No session in 7-14 days

The Win-Back Sequence

Phase 1: The Gentle Reminder (Day 14-30)

Start soft. They might just be busy.

{}JSON
{  "trigger": "user.inactive",  "condition": "daysSinceLastActive >= 14 && daysSinceLastActive < 30",  "actions": [    {      "type": "notify",      "channel": "email",      "template": "we-miss-you",      "variables": {        "lastActivity": "{{user.lastActiveAt}}",        "newFeatures": "{{getRecentFeatures()}}"      }    }  ]}
Ln 15

Email content ideas:

  • "Here's what you missed" - new features, updates
  • "Your projects are waiting" - remind them of their work
  • "Need help?" - offer support

Phase 2: The Value Reminder (Day 30-45)

Show them what they're missing.

{}JSON
{  "trigger": "user.inactive",  "condition": "daysSinceLastActive >= 30 && daysSinceLastActive < 45",  "actions": [    {      "type": "notify",      "channel": "email",      "template": "value-reminder",      "variables": {        "achievements": "{{user.previousAchievements}}",        "peersActivity": "{{getSimilarUserActivity()}}"      }    },    {      "type": "wait",      "duration": 86400    },    {      "type": "notify",      "channel": "push",      "title": "Quick tip for {{user.firstName}}",      "body": "Did you know you can {{relevantFeature}}? Tap to try →"    }  ]}
Ln 25

Content ideas:

  • "Users like you are seeing X results"
  • "You achieved Y - keep the momentum"
  • Customer success stories

Phase 3: The Incentive (Day 45-60)

If reminders don't work, offer value.

{}JSON
{  "trigger": "user.inactive",  "condition": "daysSinceLastActive >= 45 && daysSinceLastActive < 60 && !user.hasReceivedWinbackOffer",  "actions": [    {      "type": "notify",      "channel": "email",      "template": "comeback-offer",      "variables": {        "discount": "25%",        "expiresIn": "7 days",        "offerCode": "{{generateOfferCode(user)}}"      }    },    {      "type": "update_user",      "attributes": {        "hasReceivedWinbackOffer": true,        "winbackOfferSentAt": "{{now}}"      }    }  ]}
Ln 23

Incentive ideas:

  • Discount on next purchase/renewal
  • Extended trial period
  • Free month of premium
  • Exclusive feature access

Phase 4: The Last Chance (Day 60-90)

Create urgency and finality.

{}JSON
{  "trigger": "user.inactive",  "condition": "daysSinceLastActive >= 60 && daysSinceLastActive < 90",  "actions": [    {      "type": "notify",      "channel": "email",      "template": "account-notice",      "variables": {        "dataRetentionDays": 30,        "exportUrl": "{{getDataExportUrl(user)}}"      }    },    {      "type": "wait",      "duration": 604800    },    {      "type": "notify",      "channel": "sms",      "message": "{{user.firstName}}, your {{appName}} account will be archived in 7 days. Save your data: {{exportUrl}}",      "condition": "user.smsOptIn"    }  ]}
Ln 25

Segmented Win-Back Strategies

By Value Tier

JSJavaScript
// High-value users get personal outreachuser.lifetimeValue > 500 && daysSinceLastActive >= 14
Ln 2

For high-value users:

  • Personal email from account manager
  • Phone call offer
  • Concierge re-onboarding

By Churn Reason

If you track why users leave:

JSJavaScript
// Price-sensitive churns get discount offersuser.churnReason == "too_expensive" && daysSinceLastActive >= 30
Ln 2

By Previous Engagement

JSJavaScript
// Previously highly engaged usersuser.previousActivityScore > 0.8 && daysSinceLastActive >= 14
Ln 2

These users loved your product once - find out what changed.

Exit Intent Prevention

Don't wait for churn. Catch signals early:

JSJavaScript
// Declining engagementuser.activityScore < 0.3 && user.previousActivityScore > 0.7
Ln 2
{}JSON
{  "trigger": "engagement.declining",  "actions": [    {      "type": "notify",      "channel": "in_app",      "template": "engagement-survey",      "message": "Quick question - how can we help you get more value?"    }  ]}
Ln 11

Measuring Success

Track these metrics:

  • Reactivation rate: % of inactive users who return
  • Reactivation by channel: Which touches work best
  • Time to reactivate: How long the sequence takes
  • Retained reactivations: Do they stay active?
  • Revenue recovered: LTV of reactivated users

Don't Spam

Important rules:

  1. Respect unsubscribes - if they opt out, stop
  2. Limit frequency - don't email daily
  3. Have an end - stop after 90 days
  4. Easy opt-out - every message should have one

Getting Started

  1. Define your inactivity threshold
  2. Segment by user value/behavior
  3. Design your sequence (4 phases)
  4. Set up tracking for measurement
  5. Test with a small cohort first

Build your win-back workflow →

Ready to get started?

Start building automated workflows today.

Fourbyfour | Revenue workflows on autopilot