Workflow
Run a daily engagement push notification on autopilot
A single set-and-forget workflow for sending one fresh, AI-written push notification per day to your active users — without writing 365 messages a year by hand.
If you've ever set up a daily reminder notification, watched it perform well for two weeks, then watched the open rate decay to nothing as users started ignoring the same wording — this is the workflow that fixes that. You configure one daily campaign with a description, a tone, and a send time. From then on, every day's notification is generated fresh by AI from your description. Same campaign, never the same wording. Open rates stay flat over months instead of cratering.
365 unique sends/yr
Without writing 365 notifications by hand
Stable open rate
Unique copy stops the 'ignore' pattern from forming
1 campaign
Set-and-forget — review analytics, not a content calendar
When to use this workflow
If any of these match your situation, this is the right workflow to start with:
- Your app benefits from daily user engagement: streak apps, learning apps, fitness apps, news apps, journaling apps, productivity apps.
- You've tried daily reminder notifications before and watched open rates collapse after 2–3 weeks because users learned to ignore the repeating message.
- You don't have time or headcount to write a different notification every day, but you know that's what would actually work.
- You want to maintain a consistent brand voice across every send without manually approving each one.
- You'd like to be able to change the tone or angle of the campaign with a single edit (your campaign description) instead of editing dozens of pre-written templates.
How it works, step by step
Plain-language walkthrough, exactly how you'd set this up inside PushPilot. No jargon, no hand-waving.
Pick the right send time for your audience
Daily campaigns live or die on send time more than copy. Different app categories perform best at different times: fitness apps at 6–7am, news/content apps at 8–9am, productivity apps at 9–10am, social/streak apps at 7–9pm, sleep/meditation apps at 9–10pm. Pick one anchor time and let PushPilot deliver it timezone-aware so a 7am send reaches each user at 7am their local time, not 7am yours.
Concrete settings
- Send time: anchor to your category's natural moment (see above)
- Timezone-aware: enabled (this is the default in PushPilot)
- Send window: ±15 minutes (avoids exactly-on-the-hour notification cliff)
Write the campaign description carefully — this is the only manual step
Because the AI generates a fresh notification from your campaign description every day, the description is the highest-leverage thing you'll write all year. Be specific about who the user is, what your app does, what tone you want, and what you absolutely don't want. Spend 20 minutes on this. Generic descriptions produce generic notifications that don't perform any better than a static template.
Concrete settings
- Bad: 'Daily reminder for our app'
- Good: 'Daily morning reminder for our 5-minute meditation app. Audience: stressed knowledge workers, 25–45. Tone: calm, observational, never preachy. Avoid: corporate marketing language, exclamation marks, the words "unlock" or "transform".'
Connect OneSignal (recommended) or Firebase, pick the audience
Both providers work. We recommend OneSignal for daily campaigns specifically — it reports open and click events back to PushPilot, which is how the auto-pause condition (open rate < 4% for 14 days → pause) actually fires. On Firebase Cloud Messaging alone the auto-pause has nothing to measure against, so it falls back to send-success-rate only. Either way: paste your OneSignal App ID + REST key OR upload your Firebase service-account.json, then pick the audience.
Concrete settings
- OneSignal (recommended): App ID + REST API Key (Settings → Keys & IDs)
- Firebase: service-account.json (Project Settings → Service accounts)
- Audience: all subscribed users OR a specific topic OR users with a 'daily_opt_in: true' attribute
- Frequency cap: 1 notification per user per day (PushPilot enforces this automatically for daily campaigns)
- Honor quiet hours: enabled (don't deliver between 10pm and 7am user local time)
Preview a week's worth of generated notifications before going live
PushPilot's preview tool generates 7 sample notifications based on your campaign description, so you can see the variety the AI will produce. If too many feel similar, your description is too narrow. If they feel off-brand, your description needs more specificity about voice. Iterate the description until 7 previewed notifications feel right.
Activate, then leave it alone for at least 4 weeks
Activate the campaign and don't touch it. The single biggest mistake with daily campaigns is over-tweaking based on the first few days of data. Open rates are noisy; trends only emerge after 3–4 weeks. After a month, look at the analytics dashboard. If the open rate is stable (good — your AI variety is working), leave it. If it's slowly declining (your description is too narrow and the AI is producing repetitive output), expand the description.
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.
Your app
Two minutes before the day starts
A short breathing reset. We'll cue it for you — open the app.
Your app
A week in. Want today's session?
Today's is shorter — 90 seconds, eyes open. Tap to start.
Your app
The kind of morning that needs a slow start
Today's session is built for that. Three minutes, ambient sound.
Your app
30 days. Same time. Different practice today.
We chose a noticing exercise — no breathing focus, just observation.
Your app
Today's 5-minute lesson is ready
We picked up where you left off. Tap to start.
Your app
Your Python streak is at 14 days
Most people quit at 7. You're past that. Today's lesson: list comprehensions.
Recommended configuration
These are the exact settings we recommend for this workflow. You can change any of them later.
Edge cases & honest gotchas
Things people miss the first time they set this up. Worth a two-minute read before you go live.
Daily ≠ every-day-without-fail
If a user has the app open at the moment your daily notification fires, PushPilot suppresses the notification by default — sending one to a user actively using the app feels broken. Similarly, if the user has explicitly turned off notifications inside your app's settings, the daily campaign should respect that. Both are on by default but worth confirming in your campaign settings.
Too narrow a campaign description = repetitive AI output
If your description is something like 'remind users to log their workout,' the AI has very little room to vary the message — every send will essentially be a paraphrase. Expand the description to give the AI more to work with: tone, audience details, what to avoid, examples of phrases you like. The richer the description, the more variety in the output.
Watch for delivery during local holidays
A daily 7am workout reminder on December 25th lands badly in regions that observe Christmas. PushPilot supports holiday-aware exclusions per region — turn this on for any campaign that runs every day. The default is off because not every app cares.
Don't run multiple daily campaigns to the same audience
Two 'daily' campaigns hitting the same user in the same day = two notifications, which trains users to disable your push permission entirely. If you have multiple daily-cadence ideas (morning reminder, evening reflection), set them up as separate campaigns to non-overlapping audiences. Or merge them into one campaign with a wider description and let the AI vary which angle it takes per send.
Frequently asked questions
How do I send a daily push notification automatically?
Inside PushPilot, create a campaign with frequency set to 'daily,' pick your send time, write a campaign description (tone, audience, what your app does), and connect your Firebase or OneSignal project. From then on, PushPilot's AI generates a fresh, unique notification every day from your description and delivers it through your existing push provider. You don't write the daily messages — you write the description once and let the AI handle the rest.
Why do daily push notifications stop working over time?
Because users pattern-match the wording. If they receive 'Don't forget your daily lesson!' for 14 days in a row, by day 15 their brain categorises it as 'that app's daily reminder' and ignores it without reading. The fix is to send a unique message every day so there's no pattern to match. AI-generated daily campaigns address this by design — every send pulls a fresh title and body from the same campaign description, so the message is genuinely different each day.
What's a good open rate for a daily push notification?
It varies wildly by app category and how relevant the daily send is to the user's actual life. Streak / habit apps tend to land at 8–15% sustained over time. News / content apps land at 4–8%. Productivity apps land at 5–10%. The number that matters most isn't the absolute open rate — it's the trend. A campaign that holds 6% for six months is far better than one that starts at 12% and drops to 2%. AI-generated unique copy is what keeps the trend flat.
Should daily push notifications include images?
Usually no. For daily-cadence campaigns, plain-text notifications consistently outperform image notifications. Why: at high frequency, images become visual noise — the user starts dismissing the notification before they read it. Images work much better for occasional, high-impact sends like product launches or promotions. Default daily campaigns to text-only.
Can I run daily push notifications with Firebase Cloud Messaging?
Yes. PushPilot connects to your existing Firebase project via service account JSON — no SDK changes, no app updates, no migration. That said, for daily campaigns specifically we recommend OneSignal if you have a choice: it reports open and click events back to PushPilot, which powers features like the auto-pause condition (open rate < 4% for 14 days). On Firebase Cloud Messaging alone you still get send delivery confirmations, but per-notification open data isn't exposed by FCM, so the AI's optimisation loop is shorter.
How do I avoid annoying users with daily push notifications?
Three things. First, respect quiet hours per user local timezone (PushPilot does this by default — no notifications between 10pm and 7am local). Second, suppress the notification if the user has the app open at send time. Third, set up an auto-pause condition: if the open rate drops below 4% for 14 consecutive days, the campaign pauses itself and prompts you to revisit the description. Users who disable your notifications outright are much harder to recover than users who you simply don't message.
How is this different from a CRM tool's daily notification feature?
Most CRM and engagement tools (OneSignal, Iterable, Braze, CleverTap, Customer.io) support daily-cadence campaigns, but they all require you to write the message yourself. They also tend to charge enterprise pricing for any AI features. PushPilot's daily campaigns are AI-generated by default at every plan tier including free — you write the campaign description once, the AI writes 365 unique notifications a year.
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.