Health and fitness/Lapse flags

Reach a lapsing member while they are still a member.

Signals tells your CRM and your app when a daily member has stopped opening the app, is on the cancel screen or has a failed card, so the check-in reaches them before the membership ends.

Lower subscriber churn

Keep more members by making the check-in the week the training stops.

Churn in a fitness app starts weeks before the cancellation, when a daily member stops opening the app, and the renewal is where it shows up. Signals gives your CRM and your app how often each member has opened the app this month, how long since their last workout, what they usually train, whether they are on the cancel screen right now and whether their last payment went through. Your CRM decides who gets the check-in, and your app decides what the screen shows.

Send the check-in the week the training stops

A member who trained most mornings has opened the app once this week. The drop reaches the churn report at renewal, weeks after the habit broke, and by then the win-back goes to someone who has made up their mind. One week of silence from a daily member is the earlier moment. They are still paying, and the habit is still close enough to pick back up.

What Signals knows
sessions_30d
Separate app sessions in the last 30 days
days_since_workout
Days since their last completed workout
top_workout_30d
The workout type they completed most in the last 30 days
What your CRM and app do

Sends a check-in built around the workout they do most once a member who trained most days this month has gone a week without one. It leaves alone the member whose sessions say they are still training, and your CRM picks the message and the channel.

crm-sync.ts · 14 lines
// In the job that syncs member state to your CRM
const member = await signals.getServiceAttributes({
  name: "fit_lapses_quiet",
  attribute_key: "user_id",
  identifier: userId,
});
// { sessions_30d: 14, days_since_workout: 6.8, top_workout_30d: "strength" }

if (member.days_since_workout >= 6 && member.sessions_30d >= 12) {
  crm.send({
    campaign: "weekly_check_in",
    workout: member.top_workout_30d,
  });
}

Try it on your own site.

Add the SDK, define one thing you want to know about a visitor, and watch it update while you click around. The free tier runs on the real engine: no card, no sales call.