Guides
Abandoned cart recovery on WhatsApp
Cart recovery has two halves that fail on their own: capturing a phone number at checkout, and sending an approved template afterwards. Get capture working first, because a perfect journey sends nothing to a cart with no phone number.
Short answer
Install the three storefront tracking layers so abandoned checkouts arrive with a phone number, and get three cart-recovery templates approved. Then publish a journey on the cart abandoned trigger with waits of about 25 minutes, 6 hours and 24 hours. Recovered revenue is credited on last touch within seven days.
Before you start
- Shopify and WhatsApp both connected — Connect Shopify, Connect WhatsApp.
- Storefront tracking installed and green — Store growth.
- Three cart-recovery templates Approved in Meta Manager.
- A test product you can add to cart and abandon.
How recovery actually works#
Customer leaves checkout
Shopify records an abandoned checkout, and TopEdge saves it as a cart lead.
The lead is enrolled
A scheduler finds your live cart journeys and enrols the lead. Each wait in the journey becomes a scheduled send.
The customer orders
If they order at any point, the remaining steps cancel and the cart is marked recovered.
Step 1 — get the phone number#
About 15 minutes
Open website tracking
Store growth → Website tracking. You should see one health row per layer.
Install each layer
Use one-click install for the theme app embed, the web pixel and the checkout extension. Each must report green.
Enable the app embed on your live theme
Shopify admin → Online Store → Themes → Customize on the live theme → App embeds → enable the TopEdge embeds → Save.
A preview theme does not count. This is the most common reason tracking looks installed but captures nothing.
Run a test abandonment
In an incognito window, add to cart and reach checkout. Enter a real phone number, then close the tab without paying.
Confirm the cart row
Open Store growth → Abandoned carts. Within a few minutes a row should appear with the phone number filled in.
If you use a third-party checkout#
One-page and COD-optimised checkouts replace Shopify’s native checkout, so the checkout extension never runs.
Open the third-party checkout section in Website tracking and copy the webhook URL into your provider’s dashboard. Then run the same test abandonment through their flow and confirm the phone reaches TopEdge.
If you have a custom phone or OTP page#
A hand-built login or OTP step is not detected automatically. Mark the phone input so TopEdge can read it:
<input type="tel" autocomplete="tel" data-topedge-phone="true" />data-topedge-phone="true" or autocomplete="tel" is enough. Without one of them a custom OTP page captures nothing.Step 2 — get three templates approved#
Meta Manager ships a cart recovery blueprint of three WhatsApp templates. Each has a live product image header, mapped body variables and a button back to checkout.
Create and submit all three. Do not take a cart journey live with only the first one approved.
| Message | Timing | Job |
|---|---|---|
| Reminder 1 | ~25 minutes | Show what they left. Product image, item name, one link back to checkout. No discount. |
| Reminder 2 | ~6 hours | Handle the objection — shipping time, returns, payment options, COD availability. |
| Reminder 3 | ~24 hours | Last nudge. This is where a discount earns its place, if you use one at all. |
Step 3 — publish the cart journey#
Open or create the cart journey
Journeys → the cart recovery playbook, or a new journey on the cart abandoned trigger.
Set the capture delay
The trigger’s cart delay is how long after abandonment the customer is enrolled. Start with the 25-minute default.
Map each WhatsApp step to an approved template
Each cart-recovery node takes one approved template. The product image and checkout link fill from the live cart at send time.
Set the waits between steps
Wait nodes send nothing; they delay the next step that does. Chain them as 6 hours, then 24 hours.
Optionally also send email
Cart-recovery nodes can send a matching email alongside WhatsApp. This needs Gmail connected; see Email.
Add trigger filters if you need them
You can filter by cart value or specific products. Rules combine with AND, so two narrow rules can exclude every cart.
Publish
Publish freezes the graph and the trigger. Drafts send nothing, and edits to a published journey apply only after you publish again.
Check it worked
- A test abandonment creates a cart row with a phone number.
- The journey shows Published with the cart abandoned trigger.
- All three templates read Approved.
- Reminder 1 arrives after the capture delay — not instantly.
- Completing the checkout marks the cart recovered and stops remaining messages.
How recovered revenue is counted#
Attribution is last touch within seven days. If a cart message was the latest TopEdge touch before the order, that journey gets the revenue.
The customer does not have to click your link. Someone who gets the reminder and then visits your site directly still counts.
If recovery is not working#
Abandoned carts list is empty
- Confirm every layer on Store growth → Website tracking is green.
- Enable the TopEdge app embed on the live theme, not a preview.
- Test in incognito with ad blockers off — blockers stop the pixel.
- On a third-party checkout, configure the partner webhook and retest through their flow.
Cart rows exist but the phone column is blank
- The customer left before the phone step. For browse abandonment this is expected.
- On a custom phone or OTP page, add
data-topedge-phone="true"to the input. - Check your checkout is not suppressing the phone field for logged-in customers.
Carts have phone numbers but no message is sent
- The journey is in Draft. Publish it.
- A template is still pending. All three should read Approved.
- Trigger filters exclude the cart — a minimum cart value rule is the usual culprit.
- You have reached your plan’s send cap for the cycle — see limits.
Recovered revenue stays at zero
- Nobody has completed a checkout after receiving a message yet — attribution needs a real order.
- Confirm the test order used the same phone number as the cart.
- Orders placed more than seven days after the last touch fall outside the attribution window.
Frequently asked questions
- How soon should the first abandoned cart message go out?
- Around 25 to 30 minutes after abandonment. Sending instantly annoys customers who simply switched tabs, and waiting several hours loses the people who were still deciding. The default capture delay is 25 minutes and most stores never need to change it.
- Why is my abandoned cart missing a phone number?
- Because the customer left before reaching a step that collects one, or because the checkout extension is not capturing. Adding to cart alone never produces a phone number. Check that all three tracking layers are green and that the TopEdge app embed is enabled on your live theme.
- How many cart recovery messages should I send?
- Three is the standard ladder: a reminder, an objection-handling message, and a final nudge. More than three starts costing you more in conversation fees and goodwill than it recovers, and it raises your chance of being blocked or reported.
- Does cart recovery need marketing opt-in?
- Cart recovery templates are reviewed by Meta like any other template, and promotional framing belongs in the Marketing category, which does require consent. Keep the ladder transactional in tone and treat consent as a requirement whenever a message carries an offer.
