Skip to content
Tolinku
Tolinku
Sign In Start Free
Use Cases · · 6 min read

Abandoned Cart Recovery with Deep Links

By Tolinku Staff
|
Tolinku e commerce deep linking dashboard screenshot for use cases blog posts

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.

Shopping cart with money next to a laptop symbolizing abandoned cart recovery Photo by www.kaboompics.com on Pexels

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:

  1. User receives a push notification or email
  2. User taps the notification/link
  3. App opens directly to their cart (items still there)
  4. 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.

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.

<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)

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

  1. User abandons cart
  2. Your app sends the abandonment event to your ad network (Facebook, Google Ads)
  3. The user sees a retargeting ad showing their abandoned products
  4. 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

  1. Don't spam: Two recovery messages per abandoned cart is usually the maximum. More than that risks unsubscribes and negative brand perception.
  2. Respect opt-outs: If a user dismisses a recovery notification, don't send another for the same cart.
  3. 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.
  4. Personalize the message: Include the actual product name and image, not generic "You left items in your cart" messaging.
  5. 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.

Ready to add deep linking to your app?

Set up Universal Links, App Links, deferred deep linking, and analytics in minutes. Free to start.