Skip to content
← Blog
Technicalby Goodspeed Team

Push Notification Best Practices for Mobile Apps

Data-backed best practices for push notifications: timing, frequency, content, and personalization that drives engagement without annoying users.

## The Double-Edged Sword

Push notifications are the most powerful engagement tool in mobile. They're also the fastest way to get your app uninstalled.

The difference between a notification users appreciate and one that makes them reach for the "uninstall" button comes down to three things: relevance, timing, and frequency. Get all three right, and notifications become a retention engine. Get any one wrong, and they become spam.

## The Permission Request

Everything starts with asking for permission. On iOS, you get one chance. If the user says no, they have to go deep into Settings to reverse it. So don't blow it.

### Don't Ask on First Launch

The worst time to request notification permission is the first time someone opens your app. They don't know what you'll send. They don't trust you yet. They'll say no.

Instead, use a pre-permission screen. After the user has experienced some value from your app, show a screen that explains: - What types of notifications you'll send - How often they'll arrive - Why they're useful

Then ask. The opt-in rate jumps from around 40% (cold ask on first launch) to 70%+ (after value delivery and explanation).

### The Right Moment to Ask

Ask after a positive interaction. The user just completed their first task? Great time. They just saved something for later? That's a natural moment to say "Want us to remind you about this?"

Context matters. If your app tracks habits, ask when they set up their first habit: "Want a daily reminder to check in?" That's a notification they actually want.

## Timing: When to Send

### The Data

Industry data consistently shows the same patterns:

- **Highest open rates**: Tuesday through Thursday, 10 AM - 1 PM local time (user's timezone, not yours) - **Secondary peak**: 6 PM - 9 PM for lifestyle and entertainment apps - **Worst times**: Before 8 AM, after 10 PM, weekends for productivity apps - **Best day overall**: Tuesday

But these are averages. Your app's optimal timing depends on what it does. A meditation app should send morning reminders. A recipe app should send before meal prep time. A news app should send when news breaks, regardless of the clock.

### Time Zone Awareness

This seems obvious, but many apps get it wrong. Send notifications in the user's local timezone. A notification at 3 AM is not just unhelpful; it actively damages trust.

Store the user's timezone at signup and use it for all scheduled notifications. If you can't determine the timezone, default to not sending rather than guessing.

## Frequency: How Often to Send

### The Magic Number

Research from Localytics and others consistently shows:

- **1 notification per day**: Optimal for daily-use apps (habits, news, social) - **2-5 per week**: Works for most utility apps - **1-2 per week**: Right for shopping, travel, and infrequent-use apps - **More than 1 per day**: Only acceptable for messaging and real-time apps

When in doubt, send less. Users rarely uninstall because they got too few notifications. They uninstall constantly because they got too many.

### Let Users Choose

Offer notification preferences in your settings screen. Categories like "Daily reminders," "Weekly summaries," and "Important updates" let users control their experience. This isn't just good UX; it's required on some platforms.

A user who chooses to receive daily notifications is worth ten users who grudgingly accept your default schedule.

## Content: What to Say

### Be Specific

Bad: "Check out what's new!" Good: "3 new threads in r/startups match your interests"

Bad: "Don't forget to open the app!" Good: "Your 7-day streak is at risk. 2 minutes to keep it going."

Specific notifications tell the user exactly why they should open the app. Generic notifications feel like marketing. People hate marketing.

### Personalization

Use the data you have. Mention the user's name, their specific interests, or their recent activity. A notification that says "Sarah, your budget tracker found 3 subscriptions you might want to review" is dramatically more effective than "Check your subscriptions."

Personalization increases open rates by 25-40% across every study we've seen. It's worth the engineering effort.

### Keep It Short

iOS truncates notifications at about 110 characters. Android shows more, but attention is limited. Your entire message needs to fit in one glance:

- **Title**: 5-10 words max - **Body**: 1-2 short sentences - **Action**: What should the user do?

### Rich Notifications

iOS and Android both support images, action buttons, and expanded content in notifications. Use them when appropriate:

- **Images**: Product photos, charts, maps - **Action buttons**: "Reply," "Mark as done," "Snooze" - **Expanded content**: Preview of the content waiting inside the app

Rich notifications get 56% higher engagement rates than text-only notifications. But don't use them for every notification. Reserve rich content for notifications where the visual adds real value.

## Technical Implementation in React Native

### Expo Notifications

If you're using Expo (and in 2026, you probably should be), the notification setup is straightforward:

```typescript import * as Notifications from 'expo-notifications';

// Request permission const { status } = await Notifications.requestPermissionsAsync();

// Get the push token const token = await Notifications.getExpoPushTokenAsync({ projectId: 'your-project-id', });

// Store the token on your backend await savePushToken(token.data); ```

### Token Management

Push tokens change. Users reinstall apps, switch devices, or update their OS. Your backend needs to handle token updates gracefully:

1. Store the token with the user ID and platform 2. Update the token on every app launch 3. Handle invalid tokens by removing them from your database 4. Support multiple tokens per user (they might have multiple devices)

### Notification Categories

Define categories on the client so users can manage preferences:

```typescript Notifications.setNotificationCategoryAsync('daily_reminder', [ { identifier: 'complete', buttonTitle: 'Mark Done' }, { identifier: 'snooze', buttonTitle: 'Remind Later' }, ]); ```

## Measuring Success

Track these metrics for your notification system:

- **Opt-in rate**: Percentage of users who accept notifications - **Open rate**: Percentage of delivered notifications that users tap - **Opt-out rate**: Percentage of users who disable notifications over time - **Uninstall correlation**: Does notification frequency correlate with uninstalls?

Use your [analytics setup](/tech/posthog) to correlate notification engagement with retention. Users who engage with notifications typically retain at 3-4x the rate of users who don't.

## Quick Reference: Do's and Don'ts

**Do:** - Wait for a positive moment before asking permission - Send in the user's local timezone - Be specific about what's waiting inside the app - Let users customize notification preferences - A/B test timing and content - Track open rates and adjust

**Don't:** - Ask for permission on first launch - Send more than once per day (for most apps) - Use notifications as a re-engagement spam tool - Send the same message to every user - Forget to handle token expiration - Ignore opt-out rates

Push notifications done right are a growth engine. Done wrong, they're a churn accelerator. Invest the time to get them right, and your retention numbers will thank you.

For more on building production-ready mobile apps with proper notification systems, check out our [build pipeline](/features/building) and [tech stack](/tech/expo).

Ready to build?

Score your first idea free. See the pipeline in action.