Shopify's built-in abandoned checkout email treats every incomplete checkout the same way. That is the single biggest reason merchants see mediocre recovery numbers: a shopper who left at the shipping step and a shopper whose card was declined at authorisation need completely different messages.
# TL;DR
- Split incomplete checkouts into abandoned and payment failed; they recover differently.
- Drive the workflow from
checkouts/updateand close it onorders/paid. - Follow up where the shopper opted in — WhatsApp or SMS beat email on speed.
- Run the queue outside the store so recovery is unaffected by traffic spikes.
- Judge success on attributed recovered orders, not on total recovered checkouts.
# Two problems in one funnel
Abandoned checkout. The shopper never reached a payment attempt. This is a persuasion problem: shipping cost, trust, comparison shopping. A reminder plus reassurance is the right response.
Failed payment. The shopper committed and the payment was declined. This is a mechanics problem. The right response is a link to complete the payment, sent fast.
Merging them means sending "did you forget something?" to a customer who did not forget anything — their bank declined the card. It reads as incompetence.
# Wiring it up
Register a webhook for the checkout and order topics:
curl -X POST "https://your-store.myshopify.com/admin/api/2026-01/webhooks.json" \
-H "X-Shopify-Access-Token: $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"webhook": {
"topic": "checkouts/update",
"address": "https://rrlabs.online/api/public/webhooks/shopify/<workspace>",
"format": "json"
}
}'
Then, on each event:
- Verify the HMAC header against your shared secret.
- Determine whether a payment attempt occurred.
- Enqueue the matching cadence.
- On
orders/paidororders/cancelled, cancel anything queued.
Never queue follow-ups without a suppression path. The most common recovery complaint is a reminder that arrives after the order completed.
# Cadence that respects the cause
| Cause | First touch | Second touch | Final |
|---|---|---|---|
| Payment failed | 5 minutes, WhatsApp or SMS | 24 hours, email | 72 hours, email |
| Abandoned early | 1 hour, email | 24 hours, email | none |
The failed-payment path is short and mechanical. The abandonment path is longer and softer. Neither should include a discount by default — discounting a recoverable payment failure simply gives away margin you were going to collect anyway.
# What to measure
Track recovered orders that can be traced to a specific message. Shopify will happily report a recovered checkout that would have recovered by itself. The honest number is the difference between customers who received a message and a holdout group who did not.
# FAQ
# Does this work with third-party payment gateways on Shopify?
Yes. The checkout and order webhooks fire regardless of which gateway processes the payment.
# Should I turn off Shopify's native abandoned checkout email?
If you run your own sequence, yes — otherwise customers receive two overlapping reminders and both look automated.
# How long should I keep chasing an abandoned checkout?
Three touches over 72 hours is the practical ceiling. Beyond that, response rates collapse and unsubscribe rates rise.
# Can I send WhatsApp messages to all my Shopify customers?
No. Business-initiated WhatsApp messages require prior opt-in and approved templates. Fall back to email for everyone else.