Push notifications are the most immediate channel for reaching users on their devices. When combined with deep links, a push notification becomes a one-tap path to a specific product, sale, or cart in your app. The user doesn't navigate, doesn't search, doesn't browse. They tap and buy.
For general push notification strategy, see Push Notification Strategy for App Growth. For push notification deep link setup, see Universal Links in Push Notifications. For broader e-commerce deep linking patterns, see Deep Linking for E-Commerce Apps.
Push Notification Types for E-Commerce
Price Drop Alerts
When a product the user has viewed or wishlisted drops in price:
{
"notification": {
"title": "Price Drop: Running Shoes V2",
"body": "Now $69.99 (was $89.99). 22% off."
},
"data": {
"deep_link": "https://go.yourapp.com/product/SKU-12345?alert=price_drop"
}
}
Why it works: The user already showed interest. The notification provides new, actionable information (the lower price). The deep link removes all friction between interest and purchase.
Back-in-Stock Notifications
{
"notification": {
"title": "Back in Stock",
"body": "The Blue Knit Sweater (size M) is available again."
},
"data": {
"deep_link": "https://go.yourapp.com/product/SKU-67890?variant=blue-m&restock=true"
}
}
Include the variant in the deep link so the app opens to the exact SKU the user wanted.
Flash Sale Announcements
{
"notification": {
"title": "Flash Sale: 40% Off (4 Hours Only)",
"body": "Shop our biggest sale of the season before it's gone."
},
"data": {
"deep_link": "https://go.yourapp.com/sale/flash-friday?promo=FLASH40"
}
}
Order Updates
Transactional pushes with deep links to tracking:
{
"notification": {
"title": "Your order has shipped!",
"body": "Order #ORD-12345 is on its way. Estimated delivery: Thursday."
},
"data": {
"deep_link": "https://go.yourapp.com/orders/ORD-12345/tracking"
}
}
Personalized Recommendations
Based on browsing or purchase history:
{
"notification": {
"title": "Picked for you",
"body": "New arrivals in your favorite categories."
},
"data": {
"deep_link": "https://go.yourapp.com/recommendations?user_segment=active_buyer"
}
}
Abandoned Cart Recovery
Cart recovery is one of the highest-value push notification use cases. For a deeper look at abandoned cart strategies with deep links, see Abandoned Cart Deep Linking: Recover Lost Revenue.
{
"notification": {
"title": "Still thinking about it?",
"body": "Your cart has 3 items. Complete your order and save 10%."
},
"data": {
"deep_link": "https://go.yourapp.com/cart?promo=COMEBACK10"
}
}
Implementation
iOS (APNs)
{
"aps": {
"alert": {
"title": "Price Drop!",
"body": "Running Shoes V2 - now $69.99"
},
"sound": "default",
"badge": 1
},
"deep_link": "https://go.yourapp.com/product/SKU-12345?alert=price_drop"
}
In your AppDelegate or notification handler:
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void
) {
let userInfo = response.notification.request.content.userInfo
if let deepLink = userInfo["deep_link"] as? String,
let url = URL(string: deepLink) {
// Handle the deep link
DeepLinkRouter.shared.handle(url)
}
completionHandler()
}
Android (FCM)
{
"message": {
"notification": {
"title": "Price Drop!",
"body": "Running Shoes V2 - now $69.99"
},
"data": {
"deep_link": "https://go.yourapp.com/product/SKU-12345?alert=price_drop"
},
"android": {
"notification": {
"click_action": "OPEN_DEEP_LINK"
}
}
}
}
In your Activity or FirebaseMessagingService:
override fun onMessageReceived(remoteMessage: RemoteMessage) {
val deepLink = remoteMessage.data["deep_link"]
// Store deep link for when user taps notification
}
// In your notification tap handler
fun handleNotificationTap(deepLink: String?) {
deepLink?.let {
val uri = Uri.parse(it)
DeepLinkRouter.handle(uri)
}
}
React Native
import messaging from '@react-native-firebase/messaging';
// Handle notification tap when app is in background/quit
messaging().onNotificationOpenedApp((remoteMessage) => {
const deepLink = remoteMessage.data?.deep_link;
if (deepLink) {
handleDeepLink(deepLink);
}
});
// Check for notification that launched the app
messaging().getInitialNotification().then((remoteMessage) => {
if (remoteMessage?.data?.deep_link) {
handleDeepLink(remoteMessage.data.deep_link);
}
});
Timing Optimization
Best Send Times for E-Commerce
| Notification Type | Optimal Timing | Reasoning |
|---|---|---|
| Flash sale | 10am-12pm or 7pm-9pm | Peak shopping hours |
| Price drop | Within 1 hour of price change | Urgency while interest is fresh |
| Back in stock | Immediately | Limited inventory creates urgency |
| Abandoned cart | 30 min and 24 hours after | Balance between reminder and annoyance |
| Order updates | Immediately (transactional) | Users expect real-time updates |
| Recommendations | Weekend mornings | Leisure browsing time |
Frequency Caps
Don't overdo it:
- Maximum 1-2 promotional pushes per day
- Maximum 5-7 per week
- Transactional pushes (order updates) are exempt from frequency caps
- Let users set their own notification preferences in the app
Personalized Send Times
Some push notification services support per-user optimal send times based on when each user is most likely to engage. This increases open rates by 15-30%.
Targeting Strategies
Behavioral Triggers
| User Action | Push + Deep Link |
|---|---|
| Viewed product 3+ times | "Still interested in [product]?" → Product page |
| Added to wishlist | Price drop or back-in-stock → Product page |
| Abandoned cart | "Complete your order" → Cart |
| Browsed category | "New arrivals in [category]" → Category page |
| Made a purchase | "You might also like…" → Recommendations |
| Haven't opened app in 7 days | "We miss you! Here's 15% off" → Sale page |
Cohort-Based Campaigns
- New users (< 7 days): Welcome offer with deep link to featured products
- Active buyers: Early access to sales with deep link to exclusive sale page
- Lapsed users: Win-back offer with deep link to personalized recommendations
- High-value customers: VIP access with deep link to premium or exclusive products
Measuring Performance
Metrics
| Metric | Formula | E-Commerce Benchmark |
|---|---|---|
| Delivery rate | Delivered / Sent | 95%+ |
| Open rate | Opens / Delivered | 5-15% |
| Click-through rate | Deep link opens / Opens | 15-30% |
| Conversion rate | Purchases / Deep link opens | 3-10% |
| Revenue per push | Total revenue / Pushes sent | Varies |
| Unsubscribe rate | Opt-outs / Delivered | < 0.5% |
Attribution
Tag each push notification deep link with campaign identifiers:
https://go.yourapp.com/product/SKU-12345?utm_source=push&utm_campaign=price_drop&utm_content=running_shoes
This connects the purchase to the specific notification, product, and campaign.
A/B Testing
Test variations of:
- Title and body copy: Which message drives more opens?
- Deep link destination: Product page vs. cart vs. sale page
- Timing: Morning vs. evening
- Incentive: With promo code vs. without
- Rich media: With image vs. text-only
For deep linking features, see Tolinku deep linking. For e-commerce use cases, see the e-commerce documentation.
Get deep linking tips in your inbox
One email per week. No spam.