A/B Testing Push Notifications for Subscription Apps (What to Test by Lifecycle Stage)
Learn what to A/B test in push notifications at each subscription lifecycle stage: copy, timing, deep links, plus honest metrics for indie scale apps.
Most push notification A/B tests in subscription apps fail before they start, because they measure the wrong thing. A trial reminder that gets fewer opens but produces more trial conversions is the better notification. A dunning push that nobody taps, but that precedes more recovered payments, is doing its job. Opens are the easiest number to read, so opens are what most teams optimize, and that habit quietly steers your whole notification strategy toward whatever is most clickable instead of whatever moves revenue.
This guide covers what is actually worth testing at each stage of the subscription lifecycle, which metric to hold each test against, and how to run honest experiments when your audience is a few thousand users rather than a few million.
The four levers worth testing
Every push variant differs on one or more of these levers. Knowing them by name keeps your tests clean, because a good test changes one lever and holds the rest constant.
Copy angle and length. The angle is the argument the notification makes: value ("Your sleep report is ready"), urgency ("Trial ends tomorrow"), identity ("Day 12 of your streak"), or plain utility ("Payment failed, tap to fix"). Length matters separately: iOS truncates long notifications on the lock screen, so a short punchy line and a longer explanatory one are genuinely different treatments. Apple documents how notifications are presented and truncated in the UserNotifications framework docs.
Send timing. Both the hour of day and the day within the lifecycle. A trial nudge on day 2 is a different product decision than the same copy on day 5. Time of day interacts with your audience's routine: a meditation app and an invoicing app do not share a best hour, so measure it in your app rather than importing someone else's "optimal send time".
Frequency. How many pushes a stage gets in total. Two reminders during a seven day trial versus four is a testable choice, and one where the guardrail metrics (opt-outs, permission revocations) matter as much as the goal metric.
Deep-link destination. Where the tap lands: the paywall, or the feature that demonstrates value. This is the most underrated lever in subscription apps. Sending a trial user to the paywall asks for the sale; sending them to the feature that proves the product earns the sale first. Which one wins depends on how activated the user already is, which is exactly why it deserves a test rather than an opinion.
What to test at each lifecycle stage
Subscription apps have a lifecycle with sharp edges: signup, trial, conversion, renewal, billing failure, cancellation. Each stage has a different job, so each stage has a different test worth running. If you want the full map of which events exist and which pushes belong to each, the overview in push notifications for subscription apps covers the whole lifecycle.
Onboarding and activation
The job: get a new user to the moment your product proves itself, before their trial clock runs out.
What to test first: deep-link destination and copy angle. A task-forward variant ("Finish setting up your first workout, it takes two minutes") against a value-forward variant ("Your personalized plan is ready to see"). Both can point at the same screen or different ones; keep the destination fixed while testing copy, then test destinations with the winning copy.
Example variant pair:
- Variant A: "Your first scan is ready. See what we found." (deep link: results screen)
- Variant B: "One step left to finish setup." (deep link: setup checklist)
Metric: completion of your activation event (first workout logged, first document scanned, whatever "aha" means in your app). Not opens.
Active trial
The job: convert the trial. This is where deep-link tests earn their keep, because the paywall-versus-feature question is sharpest here. We break down a full sequence in the trial-to-paid push sequence guide, but the testable levers are:
Copy angle. Feature value ("You have analyzed 3 contracts this week") versus time framing ("4 days left in your trial") versus benefit projection ("Keep your history when your trial ends").
Send timing within the trial. An early nudge (day 2) tests whether momentum pushes convert; a late nudge (day 5 of 7) tests whether deadline proximity does. These are different hypotheses, so treat them as different tests.
Deep-link destination. Paywall versus the feature screen. A user who has barely used the app probably needs the feature; a heavy user might just need the ask.
Example variant pair:
- Variant A: "Your trial ends Friday. Lock in your progress." (deep link: paywall)
- Variant B: "You have 3 unread insights waiting." (deep link: insights screen)
Metric: trial conversion rate, measured on the RevenueCat "trial converted" event. Opens on these pushes are noise; a variant can win opens and lose conversions.
Trial expiry window
The last day or two before expiry is its own stage, with its own psychology. Urgency works here in a way it does not earlier, but urgency also burns trust if it is manufactured. Test honest urgency against reassurance:
- Variant A: "Your trial ends tomorrow. After that, your reports are locked."
- Variant B: "Trial ending tomorrow. Your data stays safe either way, here is what Pro keeps unlocked."
Deep link: the paywall, almost always, at this stage. Metric: conversions within the expiry window, with opt-out rate as a guardrail. If the aggressive variant converts slightly better but doubles opt-outs, it is losing you the audience for every future stage.
Billing issues (dunning)
When RevenueCat fires a billing issue event, the user usually does not know their payment failed. This is a service message, not a marketing message, and the tests reflect that.
What to test: tone and timing. Neutral utility ("Your payment did not go through. Tap to update your card.") versus loss framing ("Your Pro access is about to pause. Fix your payment in 30 seconds."). On timing: an immediate push versus one delayed a few hours, since app stores retry cards on their own schedule and some failures resolve themselves.
Deep link: subscription management or the payment update screen. Never the paywall; the user already bought.
Metric: recovered payments. Count billing issues that end in a successful renewal, not taps. A dunning push can be read on the lock screen, never tapped, and still prompt the user to fix their card in the App Store settings. Judging it by taps would kill your best variant.
Cancellation and winback
Cancellation (auto-renew turned off while access continues) and expiration (access actually ended) are different moments and deserve different pushes. For the cancelled-but-active user, test what argument you make before access ends: a "here is what you will lose" summary versus a "here is what shipped since you subscribed" update. For expired users, frequency discipline is the test: one well-aimed push versus a short series, with opt-outs watched closely.
Metric: resubscriptions. And keep in mind that on Android, users can silence your notification channel entirely, so a winback barrage has a permanent cost; see how notification channels put that control in the user's hands.
Metric discipline: match the metric to the stage
This is the part most A/B testing advice skips, and it is the part that decides whether your tests make the product better or just noisier.
The rule: every test is judged by the metric the stage exists to move.
- Activation pushes: activation event completion
- Trial pushes: trial conversions
- Expiry pushes: conversions in the expiry window
- Dunning pushes: recovered payments
- Winback pushes: resubscriptions
Opens and taps are diagnostics, not goals. They tell you whether the copy and timing earned attention, which is useful for debugging a losing variant (nobody converted because nobody opened, versus everyone opened and nobody converted, are very different problems). But the decision of which variant wins belongs to the stage metric.
Alongside the goal metric, watch two guardrails on every test: opt-out rate and permission revocations. A variant that wins its stage metric while training users to disable notifications is borrowing against every future stage. Pushlane honors opt-outs automatically (consent-aware sending), so a user who opts out simply stops receiving, but the damage of causing the opt-out is already done.
Because the metrics that matter are subscription events, your push tool needs to see them. Pushlane gets them through the RevenueCat webhook integration: trial started, trial converted, billing issue, cancellation and expiration all arrive as events, matched to the right user through the shared app user id, with no client-side purchase tracking code to write. That is what makes "judge the dunning test by recovered payments" a practical instruction rather than a nice idea.
Sample size honesty for indie scale apps
If your app starts a few dozen trials a week, you cannot run tests the way a company with millions of users does. Pretending otherwise produces confident decisions built on coin flips. Here is what honest testing looks like at indie scale:
Conversion events are rare, so tests take longer than you want. Opens accumulate fast; trial conversions trickle. A test judged on conversions needs to run until both variants have accumulated enough conversion events to compare at all, and at small scale that can mean weeks, not days.
Run in full week cycles. Weekday and weekend users behave differently. A test that starts Monday and ends Thursday has quietly excluded a chunk of your audience's behavior. Whole weeks, always.
Test big contrasts, not micro-tweaks. At small sample sizes, only large effects are readable. "Paywall versus feature deep link" or "urgency versus reassurance angle" might produce a difference you can see. "Emoji versus no emoji" almost certainly will not, and any difference you observe is likely noise wearing a costume.
Expect directional reads, not certainty. With small audiences, most results will be directional: one variant looks better, and you cannot rule out chance. That is fine. Say it out loud, ship the direction, and keep watching after you ship. What is not fine is dressing a directional read up as "statistically significant" because a calculator produced a number. Do not invent significance.
Decide the rules before you start. Before the test goes live, write down: the metric, how long it runs, and what you do on a tie (a reasonable default: keep the simpler variant). Deciding after you have peeked at results is how every team accidentally p-hacks itself.
One test per stage at a time. Overlapping tests on the same users at the same lifecycle moment contaminate each other, and at indie scale you do not have the volume to untangle them.
How A/B test steps work inside Pushlane flows
Pushlane's visual flow builder has A/B testing built in as a step you drop into a flow, not a separate product bolted on the side.
The shape of it: a flow is triggered by an event, usually a RevenueCat subscription event like trial started or billing issue (see the RevenueCat docs for wiring, and RevenueCat's own webhook events reference for what each event means). Inside the flow, an A/B test step splits users across variant branches. Each branch is a normal flow branch, which means variants are not limited to copy: one branch can send at a different time, deep link to a different screen, or send a different number of pushes. All four levers are testable because a variant is a branch, not just an alternate message body.
A few things that make day-to-day testing less tedious:
- Segments scope a test to the users it is about, so your trial expiry test does not leak to annual subscribers (audiences docs).
- AI-generated push copy is useful for drafting genuinely different angles for variants, rather than three rewordings of the same sentence.
- Flow and notification templates give you a tested starting structure so the experiment is your variant, not your plumbing.
- Downstream subscription events flow back in from RevenueCat, so the stage metrics described above (trial converted, billing resolved) are the same events your flows already react to.
One honesty note on delivery: iOS delivery through APNs is proven end to end in Pushlane. On Android, the SDK registers FCM tokens, but we do not claim end-to-end Android delivery today. If your test population spans both platforms, segment by platform so delivery differences do not masquerade as copy effects.
For a broader look at structuring the flows these tests live inside, see subscription push notification flows.
Start testing on your real lifecycle events
The fastest way to make push testing honest is to anchor it to real subscription events instead of vanity metrics, and that starts with the integration, not the copy. Pushlane connects to RevenueCat in minutes, triggers flows off trial, billing and cancellation events, and lets you drop an A/B test step into any flow. There is a free tier, so you can wire it up and run your first real test before paying anything: start at https://pushlane.io.