Workflow

Win back inactive users with AI push notifications

A step-by-step workflow for re-engaging dormant mobile-app users with push notifications that are written fresh on every send — so the same user never sees the same line twice.

If you're a marketer or product owner trying to bring users back into the app after they've gone quiet — this is the right place to start. The workflow below is what we'd set up for you ourselves: three time-windowed campaigns (7-day, 14-day, 30-day inactive), each with its own tone, frequency, and AI-generated copy. You can ship the whole thing in an afternoon with no SDK changes.

+38%

Average open-rate lift on win-back sends

3 cohorts

7-day, 14-day, 30-day inactive — different tones

0 SDK changes

Layers on top of Firebase / OneSignal

When to use this workflow

If any of these match your situation, this is the right workflow to start with:

  • You have measurable drop-off after week one or month one — classic mobile retention cliff.
  • Most of your users don't churn loudly. They just stop opening the app, and you have nothing automated to bring them back.
  • You've tried generic 'we miss you' notifications and noticed they perform worse over time as the same wording gets ignored.
  • You want different messaging for users who've been gone 7 days vs. 30 days, but you don't have time to write three campaigns by hand.
  • You're already on Firebase Cloud Messaging or OneSignal — both layer in cleanly. We recommend OneSignal for win-back specifically, because it sends open events and user behaviour back to PushPilot, which makes the AI's win-back copy meaningfully smarter over time.

How it works, step by step

Plain-language walkthrough, exactly how you'd set this up inside PushPilot. No jargon, no hand-waving.

1

Identify your inactivity windows

Most apps see meaningful retention drop at three points: 7 days inactive (slipping), 14 days inactive (drifting), and 30 days inactive (genuinely lapsed). Each cohort needs a different tone — gentle nudge for 7-day, more substantive for 14-day, real value re-pitch for 30-day. You'll create three separate campaigns, one per cohort.

Concrete settings

  • 7-day cohort: tone is gentle, single short message, no images
  • 14-day cohort: tone is curious, references a specific change since they left
  • 30-day cohort: tone is value-led, leads with what's new, includes an image
2

Connect Firebase or OneSignal — we recommend OneSignal

Inside PushPilot, click 'Add push project'. Both providers work. We recommend OneSignal because it sends open events and user-level behaviour back to PushPilot via webhooks, which closes the feedback loop on win-back specifically — the AI learns which 7-day messages are bringing people back vs. which are being silently dismissed. Firebase Cloud Messaging delivers fine but doesn't expose engagement signal, so the AI tunes purely off send-side data. Credentials are AES-encrypted (Fernet) in PushPilot. No code changes to your app either way.

Concrete settings

  • OneSignal (recommended): paste App ID + REST API Key (Settings → Keys & IDs)
  • Firebase: upload service-account.json (Project Settings → Service accounts)
3

Describe each cohort to the AI Campaign Builder

Instead of writing notifications by hand, you describe the campaign in plain language. The AI Campaign Builder reads your description, picks the audience targeting, and configures send frequency. For win-back, the description is the most important part — be specific about who the user is and what voice you want.

Concrete settings

  • Audience: filter by 'last_active' attribute (your app sends this through FCM/OneSignal)
  • Frequency: 7-day cohort = once, 14-day cohort = every 7 days, 30-day cohort = every 14 days
  • Cap: max 3 win-back notifications per user per quarter
4

Review the AI-generated preview

Before activating any campaign, the AI shows you 3 sample notifications it would generate for the next send. If the tone or angle is wrong, edit the campaign description and regenerate. This is the only place you actually 'review copy' — once activated, every send pulls fresh AI output.

5

Activate, then watch (don't tweak weekly)

Activate all three campaigns. From here on, you check analytics, not a content calendar. Each scheduled send pulls a unique AI-generated title and body. The 7-day cohort feels different from the 30-day cohort because you wrote the campaign descriptions differently. Open-rate trends over 4 weeks will tell you if you need to adjust.

Example notifications PushPilot generates

These are the kind of messages the AI writes for this workflow. Each notification is fresh on every send — you never repeat the same line.

7-day inactive · gentle

Your app

Quiet around here without you

A few things have changed since you last visited. Want to see?

7-day inactive · gentle

Your app

Pick up where you left off

Your draft, your settings, your saved items — all still here.

14-day inactive · curious

Your app

Three things that are new since you've been gone

Tap to see what we built while you were away. Two minutes, max.

14-day inactive · curious

Your app

We didn't reset your account

Everything you had is still there. The new bit is on the home tab.

30-day inactive · value-led

Your app

We saved your spot

Your data, your progress, your saved items — exactly where you left them. Welcome back.

30-day inactive · value-led

Your app

If you come back today, here's what's different

Three real changes since last month. None of them ask you to do anything new.

Recommended configuration

These are the exact settings we recommend for this workflow. You can change any of them later.

pushpilot · campaign settings
Campaign nameWin-back · 7-day inactive (gentle)
Push projectOneSignal (recommended) | Firebase
Audience filterlast_active >= 7 days AND < 14 days
Notifications per day1 (sent once per cohort entry)
Send time10:00 user local time (timezone-aware)
Tonegentle, observational, no urgency words
Generate imagesfalse (text-only for win-back)
Frequency capmax 3 win-back sends per user per quarter
Stop conditionuser opens the app (auto-removes from cohort)

Edge cases & honest gotchas

Things people miss the first time they set this up. Worth a two-minute read before you go live.

Don't send win-back to users who recently churned at checkout

If a user uninstalled or explicitly disabled notifications, your win-back will simply not deliver — that's fine. But if a user just had a bad experience (refund, failed payment), a generic 'we miss you' lands badly. Exclude users who hit a refund or failure event in the last 30 days from win-back cohorts.

Avoid running win-back during your normal engagement campaigns

If you have a daily reminder campaign running for active users, exclude any user who's already in a win-back cohort. Otherwise an inactive user who briefly opens the app gets bombarded with both win-back and daily nudges in the same week, which feels desperate.

Two-week minimum before evaluating performance

Win-back open rates are inherently noisy because the audience by definition isn't checking their phone for your app. Don't tweak campaign descriptions based on the first week's data. Wait two weeks per cohort before you change anything.

Image notifications hurt win-back delivery on iOS

Rich images are great for active-user campaigns but for win-back specifically, plain-text notifications consistently outperform image notifications on iOS. Why: iOS Focus modes more aggressively suppress rich notifications, and your win-back audience is more likely to have Focus on for your app. Default to text-only for win-back.

Frequently asked questions

What is a push notification win-back campaign?

A win-back campaign is a series of push notifications sent specifically to users who have stopped opening your app. The goal is to bring them back without annoying them or seeming desperate. A good win-back workflow uses inactivity windows (7, 14, 30 days) to send different messages depending on how long the user has been gone, with frequency caps so a user never receives more than a small number of win-back notifications.

How do I send a win-back push notification with PushPilot?

Inside PushPilot you create a campaign, set the audience filter to your inactivity window (e.g. last_active >= 7 days), describe the campaign in plain language to the AI Campaign Builder, and activate. PushPilot generates fresh notification copy on every send — you don't write the messages by hand. The notifications deliver through your existing Firebase Cloud Messaging or OneSignal integration with no SDK changes.

What's a good open rate for a win-back push notification?

Win-back open rates vary widely by app category and how long the user has been inactive. As a rough benchmark: 7-day inactive cohorts typically see 6–12% open rates, 14-day cohorts see 4–8%, and 30-day cohorts see 2–5%. Apps using AI-generated unique copy per send (instead of repeating the same template) tend to land at the higher end of these ranges because users don't pattern-match the message and ignore it.

How often should I send win-back push notifications?

Less often than you think. We recommend a maximum of 3 win-back notifications per user per quarter — once when they hit 7 days inactive, once at 14 days, once at 30 days. Sending more aggressively trains users to disable your push notifications entirely, which is a much worse outcome than them being briefly inactive. Frequency caps inside PushPilot enforce this automatically.

Should win-back push notifications include an image?

For win-back specifically, no. Plain-text notifications outperform image notifications for inactive users, especially on iOS where Focus modes more aggressively suppress rich notifications. Use AI-generated images for active-user campaigns and product launches; keep win-back text-only.

Can I run a win-back workflow if I'm already on OneSignal?

Yes — and OneSignal is actually the recommended provider for win-back specifically. PushPilot connects to your existing OneSignal app via your App ID and REST API Key, no SDK migration required. OneSignal sends open events and user behaviour back to PushPilot, which lets the AI learn which 7-day vs. 14-day vs. 30-day win-back messages are actually bringing people back. PushPilot becomes the layer that writes and schedules; OneSignal continues to deliver and report engagement.

Should I use OneSignal or Firebase Cloud Messaging with PushPilot?

Both are first-class — but if you have a choice, use OneSignal. Firebase Cloud Messaging is a delivery pipe: it sends notifications and tells you whether they were delivered. OneSignal additionally reports back per-user open events, click events, and segment-level engagement. PushPilot's AI uses that signal to refine campaign copy over time. On Firebase alone the AI tunes purely off campaign description and send-side data, which is still good — just not as sharp as the OneSignal feedback loop.

How is this different from just writing a 'we miss you' notification?

Two things. First, the messaging is cohort-aware: a 7-day inactive user gets a different tone than a 30-day inactive user, because their relationship with your app is different. Second, every send generates fresh copy via AI — so if a user receives multiple win-back notifications over a quarter, they don't see the same wording twice. Repeating the same 'we miss you' message is what trains users to ignore your notifications entirely.

Related workflows & resources

Try it free

Set this workflow up in 4 minutes

Connect Firebase or OneSignal, paste the campaign description, watch the AI write your notifications. Free plan — no credit card.

Start free