Cart abandonment rates in mobile apps typically range from 70-85%. That's a lot of revenue sitting in carts that never reach checkout. Deep links make recovery more effective by removing the friction between the reminder and the purchase: one tap brings the user back to their exact cart, ready to buy.
For cart pre-fill mechanics, see Cart Deep Links. For the broader strategy, see Deep Linking for E-Commerce Apps.
Photo by www.kaboompics.com on Pexels
Why Deep Links Improve Cart Recovery
Traditional cart recovery sends users to the app's home screen or a generic web page. The user then has to navigate to their cart, remember what they were buying, and restart the checkout flow. Each step is a drop-off point.
With deep links, the recovery flow is:
- User receives a push notification or email
- User taps the notification/link
- App opens directly to their cart (items still there)
- User taps "Checkout"
Two steps instead of five. The conversion rate difference is significant.
Recovery Channel 1: Push Notifications
Push notifications are the fastest recovery channel. They appear directly on the user's device within minutes of abandonment.
Timing Strategy
| Timing | Message Type | Expected Recovery Rate |
|---|---|---|
| 30 minutes after abandonment | Gentle reminder | Highest (user may still be considering) |
| 3 hours after | Urgency prompt | Moderate |
| 24 hours after | Incentive offer | Lower but still valuable |
| 3 days after | Final reminder | Last chance |
Don't send all four. A/B test to find which timing works best for your audience. Most apps see the best results from the 30-minute and 24-hour touchpoints.
Push Notification with Deep Link
iOS:
{
"aps": {
"alert": {
"title": "You left something behind",
"body": "Your cart is waiting. Complete your order before items sell out."
},
"sound": "default"
},
"deep_link": "https://go.yourapp.com/cart?recover=true&session=abc123"
}
Android (FCM):
{
"notification": {
"title": "You left something behind",
"body": "Your cart is waiting. Complete your order before items sell out."
},
"data": {
"deep_link": "https://go.yourapp.com/cart?recover=true&session=abc123"
}
}
App-Side Handling
When the user taps the notification:
function handleCartRecovery(url) {
const parsed = new URL(url);
const isRecovery = parsed.searchParams.get('recover') === 'true';
if (isRecovery) {
// Track recovery attempt
analytics.track('cart_recovery_opened', {
channel: 'push',
session: parsed.searchParams.get('session'),
});
// Navigate to cart
navigation.navigate('Cart');
}
}
The cart contents are already persisted on the server or local storage. The deep link just needs to route the user to the cart screen.
Incentive Escalation
If the first push doesn't convert, the second can include an incentive:
{
"aps": {
"alert": {
"title": "10% off your cart",
"body": "Use code COMEBACK10 at checkout. Expires in 24 hours."
}
},
"deep_link": "https://go.yourapp.com/cart?promo=COMEBACK10"
}
The deep link includes the promo code, which the app auto-applies when the cart loads.
Recovery Channel 2: Email
Email recovery has a longer shelf life than push notifications. Users may open the email hours or days later, and the link still needs to work.
Email Deep Link Strategy
<a href="https://go.yourapp.com/cart?recover=true&user=USER_ID&promo=SAVE15">
Complete Your Order →
</a>
When the user taps this link:
- App installed: Opens the app directly to the cart
- App not installed: Opens the web checkout (with items restored, if your web platform supports session recovery)
Handling Email Link Wrapping
Email service providers (Mailchimp, SendGrid, etc.) often wrap links for click tracking. The link becomes something like https://click.mailchimp.com/redirect?url=.... This can break Universal Links/App Links because the OS sees the wrapper domain, not your app's domain.
Solutions:
- Use your deep linking platform's link wrapping compatibility (most handle this automatically)
- Place the deep link on a button/CTA element (some ESPs don't wrap button links)
- Test with your specific ESP to verify the deep link opens the app
For detailed email deep link strategies, see Universal Links in Email Campaigns.
Email Content
Include product images and details in the email so users remember what's in their cart:
Subject: You left 3 items in your cart
[Product Image 1] Running Shoes V2 - $89.99
[Product Image 2] Athletic Socks (3-pack) - $14.99
[Product Image 3] Water Bottle - $19.99
Subtotal: $124.97
[Complete Your Order →]
Each product image can also be a deep link to that specific product page, in case the user wants to review before buying.
Recovery Channel 3: Retargeting Ads
Retargeting ads on social media and display networks can include deep links to the abandoned cart.
How It Works
- User abandons cart
- Your app sends the abandonment event to your ad network (Facebook, Google Ads)
- The user sees a retargeting ad showing their abandoned products
- The ad's CTA deep links back to the cart
Implementation
Facebook Dynamic Ads:
- Use the Facebook SDK to send "AddToCart" and "InitiateCheckout" events
- Create a Dynamic Ads campaign targeting users who triggered "AddToCart" but not "Purchase"
- Set the deep link as the ad destination
Google Ads:
- Send cart events via Google Analytics
- Create a remarketing audience based on cart abandoners
- Use App Campaigns with deep link destinations
The deep link in the ad should be:
https://go.yourapp.com/cart?source=retargeting&campaign=abandoned_cart
Cart Restoration Strategies
Server-Side Cart Persistence
Store cart data on your server, keyed by user ID:
- Cart survives app reinstalls
- Cart is available across devices (web and app)
- Deep link only needs to identify the user; the server provides the cart contents
Client-Side Cart Recovery
If carts are stored locally (e.g., in AsyncStorage or SharedPreferences):
- Cart is only available on the same device
- If the user reinstalled the app, the cart is lost
- Deep link can include the items as URL parameters (see Cart Deep Links) as a backup
Hybrid Approach
Use server-side cart as the primary source, with the deep link including item IDs as a fallback:
https://go.yourapp.com/cart?recover=true&fallback_items=SKU-123:1,SKU-456:2
The app first tries to load the server-side cart. If that fails (user logged out, account issue), it uses the fallback items from the URL.
Measuring Recovery Performance
Key Metrics
- Recovery rate: Percentage of abandoned carts recovered (purchased after receiving a recovery message)
- Revenue recovered: Total revenue from recovered carts
- Channel effectiveness: Recovery rate broken down by push, email, and retargeting
- Time to recover: Average time between abandonment and completed purchase
- Promo code cost: Revenue from promo incentives vs. what was given away in discounts
Attribution
Tag each recovery link with the channel and timing:
https://go.yourapp.com/cart?recover=true&channel=push&timing=30min
https://go.yourapp.com/cart?recover=true&channel=email&timing=24hr
https://go.yourapp.com/cart?recover=true&channel=retarget&timing=3day
This lets you compare which combination of channel and timing produces the highest recovery rate.
Baseline Comparison
Compare against users who abandoned carts but did NOT receive recovery messages (your control group). The difference is the true impact of your recovery program.
Best Practices
- Don't spam: Two recovery messages per abandoned cart is usually the maximum. More than that risks unsubscribes and negative brand perception.
- Respect opt-outs: If a user dismisses a recovery notification, don't send another for the same cart.
- Time-limit incentives: If you offer a discount, make it expire. "10% off, expires in 24 hours" creates urgency without creating an expectation of permanent discounts.
- Personalize the message: Include the actual product name and image, not generic "You left items in your cart" messaging.
- Test on both platforms: Push notification deep links behave differently on iOS vs Android. Test both.
Automating Cart Abandonment Detection with Tolinku
If you are using Tolinku's ecommerce analytics, cart abandonment detection is built in. The platform monitors begin_checkout events and flags carts as abandoned when no purchase event follows within a configurable time window (default: 24 hours).
When a cart is detected as abandoned, Tolinku fires an ecommerce.cart_abandoned webhook with the user ID, cart ID, and time since checkout began. Your backend can use this webhook to trigger recovery campaigns automatically: send a push notification, queue a recovery email, or add the user to a retargeting audience.
The ecommerce dashboard also shows aggregate abandonment metrics: overall abandonment rate, number of abandoned carts, and estimated abandoned revenue. These numbers help you size the opportunity and track whether your recovery campaigns are working.
To get started, enable ecommerce tracking in your SDK, configure the abandonment window in Appspace Settings > Ecommerce, and set up a webhook endpoint to receive ecommerce.cart_abandoned events. See the ecommerce analytics documentation for the full setup guide.
For re-engagement strategies beyond cart recovery, see Re-Engagement Campaigns. For deep linking features, see Tolinku deep linking.
Get deep linking tips in your inbox
One email per week. No spam.