Introduction
It starts the same way every time.
You install a push notification app. The free plan looks generous — 500 subscribers, unlimited notifications, no credit card required. You set up your abandoned cart flow, your back-in-stock alerts, your promotional broadcasts. Results look promising. Subscribers start accumulating.
Then sixty days later you open your Shopify billing statement and there's a charge you weren't expecting. You go back to the app's pricing page and suddenly the math makes sense — in the worst possible way. You've scaled past the free tier. You're now on the $49/month plan. Your subscriber count is growing toward the next tier threshold. In three months you'll be on the $99/month plan whether your push campaigns are profitable or not.
This is the push notification app billing loop: pricing that looks flat but scales with your audience size, thresholds that trigger automatic plan upgrades, and a subscriber list that only ever grows larger — never smaller — regardless of engagement.
You didn't read the fine print. You didn't audit your store metrics before installing. And now you're paying for an audience that includes thousands of subscribers who haven't engaged with a notification in months.
This guide gives you the three metrics you must audit before installing any push notification app — and the framework to calculate whether the app will ever be profitable for your specific store.
Who This Guide Is For
- Merchants evaluating push notification apps for the first time
- Store owners who have unexpected app billing charges from push apps
- Merchants with large existing email or SMS lists considering push as an additional channel
- Developers advising merchants on app stack cost management
- Anyone who has ever been surprised by a Shopify app billing upgrade
How Push Notification App Billing Actually Works
Before the three metrics, understand the billing architecture that creates the trap.
The Subscriber-Scaled Pricing Model
Almost every push notification app on the Shopify App Store uses one of these pricing structures:
Model 1 — Tiered by subscriber count (most common):
Free: 0–500 subscribers → $0/month
Starter: 501–2,000 subscribers → $19/month
Growth: 2,001–5,000 subscribers → $49/month
Pro: 5,001–10,000 subscribers → $99/month
Business: 10,001–25,000 subscribers → $199/month
Enterprise: 25,001+ subscribers → Custom pricing
Model 2 — Tiered by notifications sent per month:
Free: Up to 10,000 sends → $0/month
Basic: Up to 50,000 sends → $29/month
Growth: Up to 200,000 sends → $79/month
Scale: Unlimited sends → $149/month
Model 3 — Hybrid (subscribers + sends):
The worst of both worlds — you pay more as your list grows
AND more as you send more campaigns.
The Automatic Upgrade Trap
Here is the mechanic that catches merchants off guard:
- You install the app on the free plan (500 subscriber limit)
- Your store accumulates subscribers passively — every visitor who accepts the browser prompt
- At subscriber #501, the app automatically upgrades you to the paid tier
- Shopify's billing system charges the app fee immediately — no warning email, no confirmation step in many cases
- You may not notice for 30–60 days
- You cannot retroactively remove subscribers to drop back to the free tier
- Your list continues growing — next tier upgrade is inevitable
The trigger for billing is subscriber accumulation, not campaign usage. Even if you never send a single push notification after hitting a threshold, you pay for the subscriber count.
The Engagement Decay Problem
Push notification subscribers are not like email subscribers. The opt-in mechanism (browser prompt) is lower-friction — which means lower intent. The typical engagement decay curve looks like this:
Week 1 after opt-in: Click rate ~8-12%
Month 1: Click rate ~4-6%
Month 3: Click rate ~2-3%
Month 6: Click rate ~0.5-1.5%
Month 12+: Click rate ~0.2-0.8%
Your subscriber count only grows. Your engagement rate only falls. Your monthly cost only increases. The revenue generated per subscriber declines every month while the cost per subscriber stays flat or increases as you move to higher tiers.
This is the structural billing loop. Now here are the three metrics that determine whether you can escape it.
The 3 Metrics to Audit Before Installing
Run these three audits before you install any push notification app. They take 30 minutes total and will tell you definitively whether the app's pricing model will work for your store.
Metric 1 — Your Monthly Traffic Volume
What it tells you: How fast your subscriber list will grow — and therefore how quickly you'll hit paid tier thresholds.
Why it matters: Push notification opt-in rates from browser prompts typically run 2-8% of unique visitors on a Shopify store. Your traffic volume directly predicts your subscriber accumulation rate, which directly predicts when you'll hit each billing tier.
How to Find Your Monthly Traffic
In Shopify Admin → Analytics → Reports:
- Go to Analytics → Overview
- Look at Sessions (not pageviews — sessions are unique visits) over the last 30 days
- Also check Online store sessions broken down by device type
Or via Google Analytics / your analytics tool:
Look for Users (not Sessions) over the last 90 days — average the monthly unique visitor count.
Subscriber Growth Projection Formula
Monthly New Subscribers = Monthly Unique Visitors × Opt-in Rate
Conservative estimate (2%): 10,000 visitors × 0.02 = 200 new subscribers/month
Typical estimate (5%): 10,000 visitors × 0.05 = 500 new subscribers/month
Optimistic estimate (8%): 10,000 visitors × 0.08 = 800 new subscribers/month
Time to hit each billing tier:
function projectTierHitDates(monthlyVisitors, currentSubscribers = 0) {
const tiers = [
{ name: 'Free tier limit', subscribers: 500, monthlyFee: 0 },
{ name: 'Starter', subscribers: 2000, monthlyFee: 19 },
{ name: 'Growth', subscribers: 5000, monthlyFee: 49 },
{ name: 'Pro', subscribers: 10000, monthlyFee: 99 },
{ name: 'Business', subscribers: 25000, monthlyFee: 199 }
];
const optInRate = 0.05; // 5% typical
const monthlyNewSubscribers = monthlyVisitors * optInRate;
console.log(`Monthly traffic: ${monthlyVisitors.toLocaleString()} visitors`);
console.log(`Projected new subscribers/month: ${Math.round(monthlyNewSubscribers)}`);
console.log('---');
tiers.forEach(tier => {
if (tier.subscribers <= currentSubscribers) return;
const subscribersNeeded = tier.subscribers - currentSubscribers;
const monthsToTier = subscribersNeeded / monthlyNewSubscribers;
console.log(`${tier.name} (${tier.subscribers.toLocaleString()} subs, $${tier.monthlyFee}/mo):`);
console.log(` Reached in: ~${Math.ceil(monthsToTier)} months`);
console.log(` Annual cost once reached: $${tier.monthlyFee * 12}/year`);
});
}
// Example: 15,000 monthly visitors, starting from 0
projectTierHitDates(15000, 0);
/*
Output:
Monthly traffic: 15,000 visitors
Projected new subscribers/month: 750
---
Free tier limit (500 subs, $0/mo):
Reached in: ~1 months
Growth (2,000 subs, $19/mo):
Reached in: ~3 months
Pro (5,000 subs, $49/mo):
Reached in: ~7 months
Business (10,000 subs, $99/mo):
Reached in: ~14 months
Enterprise (25,000 subs, $199/mo):
Reached in: ~34 months
*/
What this audit reveals: A store with 15,000 monthly visitors will exhaust the free tier in one month, reach a $49/month plan within 7 months, and be paying $99/month within 14 months — automatically, whether the campaigns are profitable or not.
Red flag thresholds:
| Monthly Visitors | Free Tier Exhausted | Reaching $99/mo Plan |
|---|---|---|
| 2,000 | ~5 months | ~6 years |
| 5,000 | ~2 months | ~2.5 years |
| 10,000 | ~1 month | ~14 months |
| 25,000 | ~1 week | ~6 months |
| 50,000+ | Days | ~3 months |
High-traffic stores reach expensive pricing tiers extremely fast. If you have more than 10,000 monthly visitors, assume you will be paying $99+/month within a year.
Metric 2 — Your Average Order Value and Purchase Frequency
What it tells you: The minimum revenue a push notification must generate to break even — and whether your products can realistically generate that revenue per notification.
Why it matters: Push notifications must generate enough attributable revenue to cover the monthly app fee. This sounds obvious — but most merchants install push apps without calculating the break-even threshold for their specific AOV and purchase frequency.
How to Find Your AOV and Purchase Frequency
In Shopify Admin → Analytics:
- Average Order Value: Analytics → Overview → "Average order value" metric (last 90 days)
- Purchase Frequency: Orders ÷ Unique Customers over 90 days
Or use this GraphQL query via your analytics tool:
Average Order Value = Total Revenue ÷ Total Orders (90 days)
Purchase Frequency = Total Orders ÷ Unique Customers (90 days)
Break-Even Revenue Calculation
function calculateBreakEven(monthlyAppFee, averageOrderValue, conversionRate = 0.02) {
// How much revenue must push campaigns generate monthly to cover the app fee?
const revenueNeeded = monthlyAppFee;
// How many orders must push campaigns generate?
const ordersNeeded = revenueNeeded / averageOrderValue;
// How many push notification clicks must convert to orders?
// Industry average conversion rate from push click to purchase: 1-3%
const clicksNeeded = ordersNeeded / conversionRate;
// Assuming 3% click rate on notifications sent
const clickRate = 0.03;
const notificationsSentNeeded = clicksNeeded / clickRate;
return {
revenueNeeded: revenueNeeded.toFixed(2),
ordersNeeded: Math.ceil(ordersNeeded),
clicksNeeded: Math.ceil(clicksNeeded),
notificationsSentNeeded: Math.ceil(notificationsSentNeeded),
revenuePerSubscriberNeeded: (revenueNeeded / 1000).toFixed(4) // per 1,000 subscribers
};
}
// Example: $49/month plan, $65 AOV
const breakEven = calculateBreakEven(49, 65);
console.log(breakEven);
/*
Output:
{
revenueNeeded: "49.00", // Need $49 in attributable revenue
ordersNeeded: 1, // Need at least 1 order ($65 > $49)
clicksNeeded: 38, // Need 38 clicks converting at 2%... wait
notificationsSentNeeded: 1267, // Need to send 1,267 notifications to get 38 clicks
revenuePerSubscriberNeeded: "0.0490" // Need $0.049 revenue per 1,000 subscribers
}
*/
The real calculation most merchants miss — profit margin:
function calculateProfitableBreakEven(monthlyAppFee, averageOrderValue, grossMargin) {
// You only keep the margin — not the full order value
const profitPerOrder = averageOrderValue * (grossMargin / 100);
// How many orders to cover the app fee from profit (not revenue)?
const ordersNeededFromProfit = monthlyAppFee / profitPerOrder;
// At 2% push-to-purchase conversion and 3% click rate:
const subscribersNeededToBreakEven =
(ordersNeededFromProfit / 0.02) / 0.03;
return {
profitPerOrder: profitPerOrder.toFixed(2),
ordersNeededFromProfit: Math.ceil(ordersNeededFromProfit),
subscribersNeededToBreakEven: Math.ceil(subscribersNeededToBreakEven),
summary: `You need ${Math.ceil(subscribersNeededToBreakEven).toLocaleString()} active subscribers to break even at $${monthlyAppFee}/month`
};
}
// Example: $49/month, $65 AOV, 40% gross margin
const profitableBreakEven = calculateProfitableBreakEven(49, 65, 40);
console.log(profitableBreakEven);
/*
Output:
{
profitPerOrder: "26.00",
ordersNeededFromProfit: 2,
subscribersNeededToBreakEven: 3334,
summary: "You need 3,334 active subscribers to break even at $49/month"
}
*/
What this audit reveals:
A store with a $65 AOV and 40% margin needs 3,334 actively engaged subscribers to make a $49/month plan profitable. If your engagement rate is 1% (typical after 6 months), you need 333,400 total subscribers on your list to have 3,334 engaged ones.
AOV danger zones:
| AOV | Gross Margin | Subscribers to Break Even at $49/mo |
|---|---|---|
| $25 | 30% | 21,778 |
| $50 | 35% | 8,381 |
| $75 | 40% | 3,733 |
| $100 | 45% | 2,449 |
| $150 | 50% | 1,307 |
| $200+ | 55%+ | <1,000 |
Conclusion: Push notifications work best for high-AOV, high-margin products. If your AOV is below $50 and margin below 35%, the math is almost never favorable at paid tier pricing.
Metric 3 — Your Existing Subscriber Re-Engagement Rate
What it tells you: The real engagement performance you should expect from push — based on your existing audience's behavior, not the app's claimed industry averages.
Why it matters: Push notification apps market click rates of 5-15%. These are cherry-picked best-case figures from their highest-performing merchants. Your real click rate depends on your audience, your category, your sending frequency, and how long your subscribers have been on your list.
If you already have an email or SMS list, you can predict your push performance with high accuracy — because the same audience is involved.
How to Audit Your Existing Re-Engagement Rate
From your email marketing platform (Klaviyo, Mailchimp, etc.):
- Pull your last 90 days of email campaign data
-
Calculate:
- Average open rate across all campaigns
- Average click-through rate (CTR) on clicked emails
- Re-engagement rate of subscribers inactive for 90+ days
Email re-engagement benchmark for push prediction:
If your email click rate is: Your push click rate will likely be:
< 1% 0.2 - 0.5% (extremely poor)
1 - 2% 0.5 - 1.5% (poor)
2 - 4% 1.5 - 3% (average)
4 - 6% 3 - 5% (good)
> 6% 5 - 8% (excellent)
Push notifications typically perform at 30-50% of your email click rate — not better. If your email campaigns get 2% CTR, expect 0.6-1% from push.
Calculating Real Revenue Per Notification
function calculateRealPushRevenue(config) {
const {
subscriberCount,
estimatedClickRate, // As decimal e.g. 0.01 for 1%
purchaseConversionRate, // Of clicks, what % buy
averageOrderValue,
grossMarginPercent,
monthlyCampaigns // How many push campaigns per month
} = config;
const clicksPerCampaign = subscriberCount * estimatedClickRate;
const ordersPerCampaign = clicksPerCampaign * purchaseConversionRate;
const revenuePerCampaign = ordersPerCampaign * averageOrderValue;
const profitPerCampaign = revenuePerCampaign * (grossMarginPercent / 100);
const monthlyRevenue = revenuePerCampaign * monthlyCampaigns;
const monthlyProfit = profitPerCampaign * monthlyCampaigns;
return {
clicksPerCampaign: Math.round(clicksPerCampaign),
ordersPerCampaign: ordersPerCampaign.toFixed(1),
revenuePerCampaign: revenuePerCampaign.toFixed(2),
profitPerCampaign: profitPerCampaign.toFixed(2),
monthlyRevenue: monthlyRevenue.toFixed(2),
monthlyProfit: monthlyProfit.toFixed(2)
};
}
// Real-world example: 5,000 subscribers, honest metrics
const projection = calculateRealPushRevenue({
subscriberCount: 5000,
estimatedClickRate: 0.01, // 1% — realistic after 6 months
purchaseConversionRate: 0.02, // 2% of clicks buy
averageOrderValue: 65,
grossMarginPercent: 40,
monthlyCampaigns: 8 // 2 campaigns per week
});
console.log(projection);
/*
Output — this is what $49/month actually looks like:
{
clicksPerCampaign: 50,
ordersPerCampaign: "1.0",
revenuePerCampaign: "65.00",
profitPerCampaign: "26.00",
monthlyRevenue: "520.00", ← $520 revenue for 8 campaigns
monthlyProfit: "208.00" ← $208 profit before app fee
}
Net profit after $49 app fee: $159/month
ROAS: 10.6x — profitable but barely at this subscriber count
*/
// What happens at 10,000 subscribers on the $99/month plan?
const projectionAtScale = calculateRealPushRevenue({
subscriberCount: 10000,
estimatedClickRate: 0.008, // Rate decays as list ages
purchaseConversionRate: 0.018, // Slightly lower as audience dilutes
averageOrderValue: 65,
grossMarginPercent: 40,
monthlyCampaigns: 8
});
/*
Output at $99/month plan:
monthlyRevenue: "748.80"
monthlyProfit: "299.52"
Net profit after $99 app fee: $200.52/month
ROAS: 7.6x — still profitable but declining efficiency
*/
What this audit reveals: The economics work — but only if your click rate holds. If engagement decays to 0.3% (common after 12 months without list hygiene), the math collapses completely.
The Hidden Costs Most Merchants Miss
Beyond the tiered plan fee, push notification apps carry these additional costs that rarely appear in the marketing:
1. Subscriber Churn Doesn't Reduce Your Bill
When a subscriber unsubscribes or their browser token expires, you still paid for them while they were in your count. Unsubscribes don't trigger a plan downgrade — they just reduce your active audience while your tier stays the same.
Month 1: 2,000 subscribers → $19/month
Month 4: 5,100 subscribers → $49/month (auto-upgraded)
Month 7: 5,000 subscribers (100 unsubscribed) → STILL $49/month
Month 10: 4,800 subscribers → STILL $49/month (no downgrade until below 2,001)
You must manually contact the app to request a plan downgrade in most cases — and many apps require you to drop significantly below the tier threshold before they'll allow it.
2. The Abandoned Cart Notification Attribution Problem
Most push apps report assisted revenue — any order placed by someone who clicked a push notification in the last 24 hours, whether or not the notification caused the purchase.
Customer's actual journey:
→ Visited store and added to cart
→ Received abandoned cart push notification (clicked it)
→ Went to Google, searched for a coupon code
→ Found coupon, returned to store via Google
→ Completed purchase
Push app attributes: This is a push-driven sale ✅ (they clicked the notification)
Google Analytics attributes: This is organic/search sale ✅
Reality: The purchase would likely have happened anyway
Ask any push app: "What is your attribution window and do you count assisted or last-click conversions?"
If the answer is "24-hour assisted" — cut the reported revenue numbers by 40-60% for your real ROI calculation.
3. The Opt-In Prompt Conversion Rate Impact
Browser push opt-in prompts reduce your store's overall conversion rate — particularly on mobile. Every visitor who sees the "Allow Notifications?" prompt and clicks "Block" has a slightly worse impression of your store. Studies vary, but aggressive push prompts can reduce checkout conversion by 0.3-1%.
Calculate the cost:
function calculateOptInConversionImpact(
monthlyVisitors,
currentConversionRate,
estimatedImpact = 0.005, // 0.5% conversion rate reduction
averageOrderValue
) {
const ordersLost = monthlyVisitors * estimatedImpact;
const revenueLost = ordersLost * averageOrderValue;
return {
ordersLostMonthly: ordersLost.toFixed(1),
revenueLostMonthly: revenueLost.toFixed(2),
annualRevenueLost: (revenueLost * 12).toFixed(2)
};
}
// Example: 15,000 monthly visitors, $65 AOV
const impact = calculateOptInConversionImpact(15000, 0.025, 0.005, 65);
console.log(impact);
/*
Output:
{
ordersLostMonthly: "75.0",
revenueLostMonthly: "4,875.00", ← $4,875 potential revenue lost per month
annualRevenueLost: "58,500.00" ← from conversion rate suppression alone
}
*/
This is a hidden cost almost never discussed in push notification marketing — and it can easily exceed the value the app generates.
The Pre-Install Decision Framework
Run this complete audit before installing any push notification app:
STEP 1: Traffic audit
Monthly unique visitors: _______
Projected monthly new subscribers (×5%): _______
Months to exhaust free tier: _______ months
Months to reach $49/month tier: _______ months
Months to reach $99/month tier: _______ months
STEP 2: Revenue potential audit
Average Order Value: $_______
Gross margin: _______%
Profit per order: $_______
Realistic click rate (from email CTR ×40%): _______%
Monthly campaigns planned: _______
Projected monthly profit from push: $_______
STEP 3: Break-even audit
Monthly app fee at 12-month projected tier: $_______
Monthly profit from push at that tier: $_______
Net monthly profit: $_______
Annual net profit: $_______
Is it positive? YES / NO
STEP 4: Hidden cost audit
Conversion rate impact estimated: _______%
Monthly revenue at risk from opt-in prompt: $_______
Attribution inflation factor: _______× (divide reported revenue by this)
Real adjusted ROI: _______×
Only install if:
- Break-even audit shows positive net profit at the 12-month projected tier
- Your AOV is above $75 OR your gross margin is above 45%
- Your email click rate is above 2% (predictor of push engagement)
- You have a plan to manage list hygiene (remove inactive subscribers quarterly)
- You understand the attribution model the app uses
What to Do If You're Already Trapped in a Billing Loop
If you're reading this after already installing a push app and finding the billing unsustainable:
Step 1 — Audit Your Active vs. Inactive Subscribers
Most push apps have a segment for "subscribers who have not clicked in 90+ days." This is your dead weight — you're paying for these subscribers but they generate zero revenue.
Calculate:
Active subscribers (clicked in 90 days) ÷ Total subscribers = Engagement ratio
If engagement ratio < 10% → Your list is primarily dead weight
If engagement ratio < 5% → Immediate action required
Step 2 — Request a List Purge
Contact the app's support team and request removal of:
- Subscribers inactive for 180+ days
- Subscribers who never clicked a single notification
- Expired browser tokens (many apps accumulate these silently)
This can reduce your subscriber count significantly — potentially dropping you to a lower billing tier. Most apps will do this on request but won't proactively offer it.
Step 3 — Pause the Opt-In Prompt
Stop accumulating new subscribers while you evaluate:
- Go to the app's settings
- Disable or delay the browser opt-in prompt
- Your existing subscribers remain — you just stop growing into higher tiers
- Evaluate performance for 60 days with the existing list
Step 4 — Negotiate or Cancel
If the app isn't profitable after honest attribution:
Before cancelling — check:
□ Are you in a minimum contract period? (some annual plans have penalties)
□ Is there a lower-tier option if you purge your list?
□ Can you export your subscriber list before cancelling?
(Most push subscriber tokens are NOT portable — they stay with the app)
Subscriber tokens are not portable. Unlike email lists, browser push tokens are tied to the app's sending domain infrastructure. If you cancel and switch to a different push app, your existing subscribers cannot be migrated. You start from zero.
Evaluating Push Apps: Questions to Ask Before Installing
Use this as your pre-install checklist when evaluating any push notification app:
Billing questions:
- What triggers an automatic plan upgrade — subscriber count or sends?
- Is the upgrade instant or at the next billing cycle?
- How much notice do I get before an upgrade?
- Can I set a hard subscriber limit to prevent upgrades?
- What is the process for a plan downgrade if my list shrinks?
Attribution questions:
- What is your attribution window?
- Do you count last-click or assisted conversions?
- Can I see revenue reports filtered by last-click only?
- How do you handle multi-touch journeys?
List management questions:
- Can I automatically remove subscribers inactive for 90+ days?
- Do expired browser tokens count against my subscriber limit?
- Can I export my subscriber list if I cancel?
- Do you clean the list automatically or do I have to request it?
Performance questions:
- What is the average click rate in my store category?
- What click rate should I realistically expect after 6 months?
- Do you have case studies from stores with similar AOV to mine?
Summary: The 3-Metric Rule
| Metric | What to Measure | Red Flag |
|---|---|---|
| 1. Monthly traffic | Unique visitors/month × 5% = subscriber growth rate | >10,000 visitors: you'll hit $99/mo plan within 14 months |
| 2. AOV + margin | (AOV × margin) ÷ app fee = orders needed to break even | AOV <$50 or margin <35%: rarely profitable |
| 3. Re-engagement rate | Email CTR × 40% = expected push click rate | Email CTR <2%: push will underperform significantly |
The one question that summarizes all three:
"At the billing tier I'll reach in 12 months, can my push campaigns generate enough profit — after accounting for realistic click rates and proper attribution — to cover the app fee AND outperform what that same budget would achieve in email, SMS, or paid ads?"
If the answer is no — don't install. If the answer is yes — install with a 90-day review checkpoint built into your calendar.