The default move for most small teams is to send the new-feature push to “all users.” The next-default is to send a milestone push to “active users.” Both burn trust. The data is blunt about why: in 2026, sending more than 3 low-relevance notifications in a 24-hour window is the single most-cited cause of push opt-out, and users who get more than 6 pushes a week from one app are 3.4x more likely to uninstall within 30 days than users getting 1-2 (Airship / Business of Apps, 2026). A one-page targeting brief, segment, moment, message, silence rule, is the cheapest discipline that stops you from spraying. AI is genuinely useful here because the brief is structured and repeatable. The trap is letting AI invent segments your data cannot actually identify.
TL;DR
- Write a one-page brief per send: who gets it, at what behavioral moment, what it says, and who must NOT get it (the silence rule).
- Feed the AI only the segments your tools can query today (RevenueCat, Mixpanel, internal events). Forbid invented segments.
- The silence rule is the load-bearing section. Floor: 1 promo push/day, hard cap 3/day total; quiet hours are local-time-bounded, not optional.
- Use GPT-5.5 or Claude Sonnet 4.6 for the draft; both follow the “do not invent segments, flag [DATA GAP]” constraint reliably as of June 2026.
- A 90-second teammate review of the brief catches silence-rule gaps almost every time.
The task
You are about to ship a notification, in-app message, lifecycle email, or paid retargeting set. You want a one-page brief that names: which users get it, at what moment in their behavior, what the message actually says, and which other users explicitly do NOT get it. The brief should fit on a screen and be reviewable by a non-PM teammate in 90 seconds.
When this is the right job for AI
- You have segments your analytics actually supports (you can query them today, not “once we add cohort analysis”).
- You can describe the trigger moment behaviorally (logged in 7 days running, opened settings 3+ times this week).
- You will write the silence rule yourself, the list of users who must NOT receive this. AI will skip this if you let it.
- The team treats “send to all” as a real cost, not a free action.
What to feed the AI
- The campaign goal in one sentence (“get users who tried premium and downgraded to retry premium with a clearly different angle”).
- Segments you actually have in your tools (Mixpanel, RevenueCat, internal, name them).
- The behavioral trigger (event or state, plus the time window).
- The 2-3 user types who should explicitly NOT receive this (recently churned, paid-and-canceled-with-refund, and so on).
- Any prior message you sent these users in the last 30 days.
Which model to use
As of June 2026, GPT-5.5 (ChatGPT default; Instant or Thinking is plenty here) and Claude Sonnet 4.6 (the Pro-tier workhorse at $20/mo) both handle this brief well. The deciding factor is constraint-following, not raw IQ: you need a model that respects “do not invent segments not in this list” and emits a [DATA GAP: ...] tag instead of fabricating an event. In testing both comply when the rule is stated explicitly. Either tier’s free option works for a one-off brief; pay only if you are batching many sends a week.
Copy-ready prompt
You are writing a one-page targeting brief for a single in-app notification.
Campaign goal: re-engage users who tried our premium 7-day trial in the last 60 days, did not convert, but have remained active in the free tier.
Segments available in our tools:
- RevenueCat: trial_started, trial_expired, trial_converted, subscription_cancelled
- Mixpanel: daily_active, weekly_active, last_open_within_7d, free_tier_active, premium_active
- Internal: refund_issued, support_ticket_open
Behavioral trigger I am thinking of:
- trial_expired + did NOT convert + last_open_within_7d + at least 5 daily_active days in the 30 days after trial
Users who must NOT receive this:
- refund_issued in the last 90 days
- support_ticket_open right now
- received any premium-related notification in the last 14 days
- subscription_cancelled (different segment, they paid; this brief is trial-only)
Prior messages to this segment in the last 30 days: one feature-launch push (14 days ago).
Write the brief as exactly seven sections, each 2-4 lines:
1. **Goal.** One sentence, names the metric we are moving.
2. **Segment.** The exact segment definition in the language of our tools above.
3. **Trigger moment.** The event or state that fires the send, in user-behavior terms.
4. **Message angle.** One sentence on what we are saying that is DIFFERENT from the trial-end push they already saw.
5. **Copy draft.** Title (under 50 chars), body (under 140 chars). No exclamation points. No "act now."
6. **Silence rule.** The exclusion segments. Bullet list. This is the most important section.
7. **Success and stop conditions.** What metric, what threshold to declare it worked or pull it.
Rules:
- Do not invent segments not in the tools list above.
- Do not assume CRM features we did not name.
- If the trigger cannot be expressed in the available events, flag it as [DATA GAP: ...] instead of guessing.
Sample output structure
Goal. Lift premium subscription rate from the post-trial-active segment by 1.5 points over 30 days (current baseline: 3.1% lifetime conversion after a missed trial).
Segment. Users where RevenueCat trial_expired = true AND trial_converted = false AND Mixpanel last_open_within_7d = true AND daily_active_days_in_30d_post_trial >= 5.
Trigger moment. The user has just completed their 5th daily-active day post-trial-expiry. Send within 1 hour of that 5th-day boundary, between 09:00 and 20:00 local.
Message angle. Not “your trial ended.” Instead, acknowledge the user has stayed active for a month on free and offer one specific premium capability they have demonstrably hit friction with (top friction: hitting the export limit).
Copy draft. Title: “Export got in your way 4 times this month.” Body: “Premium removes the cap. Same price you saw last month. Tap to see a clean diff with free.”
Silence rule.
- refund_issued in last 90d, exclude.
- support_ticket_open right now, exclude.
- any premium-related push in last 14d, exclude (the feature-launch push counts).
- subscription_cancelled (paid-then-canceled), exclude, different brief.
- notification-permission revoked, exclude (will arrive as silent).
Success and stop conditions. Lift trial-to-paid conversion of this segment by +1.5pts over 30 days. Stop the send if the 7-day window opt-out rate on this push is >2x baseline, OR if the support_ticket rate spikes >1.5x baseline within 48h.
The numbers that should constrain the brief
These are the floors and ceilings every brief should respect. They are not opinions; they track the 2026 push benchmarks below.
| Lever | Concrete rule (as of June 2026) | Source |
|---|---|---|
| Promo frequency | 1 promo push/day is the practical ceiling for most consumer apps; productivity/fintech: 1 per 2-3 days | vmobify / MoEngage 2026 |
| Hard daily cap | 3 total notifications/day across all tiers (excludes transactional) | vmobify 2026 |
| Uninstall trigger | >6 pushes/week from one app = 3.4x more likely to uninstall in 30 days | Business of Apps 2026 |
| Opt-in reality | iOS opt-in ~44-54%, Android ~91-97%; on iOS roughly half your base never sees a push | Airship 2026 |
| Re-engagement ceiling | Win-back campaigns typically re-engage 10-15% of dormant users; treat that as the upper bound, not a baseline | Klaviyo / Brevo 2026 |
The opt-in line matters most: on iOS, the brief’s reach is already halved before you exclude anyone, so a “send to all” instinct is even more wasteful than it looks.
How to refine
- Brief misses the silence rule. Reject and re-prompt: “rewrite section 6 with at least 4 explicit exclusion conditions, expressed in the tools above.”
- Copy uses “act now” / exclamation / emoji. Make it a strict rule in the prompt; if the model repeats it, add the offending line to a bad-example list inside the prompt.
- Trigger expressed in events you do not have. Require a
[DATA GAP: ...]tag instead of substitution. - Segment too broad (“all free users”). Demand “the segment must be expressible as an intersection of at least 3 events or states.”
- No stop condition. Require section 7 to include a kill-switch threshold, not just a success threshold.
Common mistakes
- Sending to “all active users” because the segment was hard to define. Hard-to-define means the campaign is not ready.
- Skipping the silence rule. The people you accidentally include damage trust faster than the campaign helps anyone else.
- Reusing the same angle as the last push. If a user saw “your trial ended” three weeks ago, the new push needs a different reason to care.
- Sending at the wrong local time. A “20:00 UTC” send is 03:00 in Sydney. Time-of-day-local is not optional.
- Ignoring the daily cap. If three other campaigns also fire today, your “one push” is actually push number four, and you are over the uninstall line.
- No kill switch. A bad campaign that runs all weekend is a small disaster you could have stopped Friday afternoon.
FAQ
What if the AI gives a segment my data cannot implement? Feed the available event list and attribute list into the prompt first, “you may only use these 12 events plus 5 attributes to define a segment.” Otherwise the model writes pretty-but-unqueryable segments like “users showing moderate activity signals in the last 30 days” that no SQL can express.
How strict should the silence rule be? Minimum three conditions: do not send within 48h of a similar message, do not send to anyone who tapped “turn off notifications” in the last 7 days, and do not send to users mid-payment or mid-cancellation flow. Make the AI write all three into the brief; if you do not name them, it drops them.
Is writing a brief for every push too heavy? Every-time-full = over-engineering; never = spraying. Ask the AI for a “light brief” template (4 lines) for routine sends, and reserve the full seven-section version for big features and promos.
The push went out and converted poorly. Can AI diagnose it? Yes, but only if you feed it all five funnel numbers: sent, delivered, opened, clicked, converted. With the funnel visible it can tell you whether the push did not arrive, the copy had no hook, or the landing page failed to catch. Given only the conversion number it returns generic advice.
How small should a segment be? Small enough to name the person archetype in one sentence. If you cannot, the brief is not done. On iOS, remember roughly half the addressable base never even receives the push, so the real reachable segment is smaller than the query suggests.
Related
- AI App Review Appeal Draft
- AI feature prioritization for indie apps
- AI retention cohort analysis
- AI user interview question generator
- AI weekly priorities reflection
Tags: #AI writing #segmentation #notifications #app-product-ops #Indie dev