How Shopify Stores Can Automate Cart Recovery with Webhooks (2025 Guide)
Share
Most Shopify stores know cart recovery is important. Very few are using webhooks properly to power real-time, high-conversion automations on channels like WhatsApp.
If you’re relying only on default Shopify abandoned checkout emails, you’re leaving a lot of money on the table.
In this guide, you’ll learn:
- What Shopify webhooks are
- Which webhook events matter for cart recovery
- How to send those events into a platform like Setu 360
- How to trigger WhatsApp cart reminders from them
- Sample payloads you can share with developers
What Are Webhooks (In Simple English)?
Think of a webhook as a real-time “notification call” from Shopify to your server or automation tool whenever something happens.
Example:
- A customer starts checkout → Shopify sends a webhook
- A checkout is updated → Shopify sends a webhook
- A checkout is abandoned → Shopify sends a webhook (indirectly, via state + timing)
- An order is created → Shopify sends a webhook
Instead of “pulling” data again and again via API, webhooks push data to you instantly.
For cart recovery, that means:
“The moment a customer abandons the checkout, your system already knows what’s in the cart, who the customer is, and what their phone number is.”
Perfect trigger for WhatsApp reminders.
Why Use Webhooks for Cart Recovery (Instead of Only Shopify’s Default)?
Shopify has a default abandoned checkout email flow. But:
- Email open rates: 15-20%
- Often lands in promotions/spam
- No WhatsApp
- No deep personalization
Webhooks let you:
- Send WhatsApp cart reminders in real time
- Build advanced flows (1 hr, 6 hr, 24 hr)
- Trigger COD verification
- Handle failed payments
- Sync with CRM or CDP
- Fire events to Setu360 automation builder
In short: webhooks = raw event feed, Setu 360 = brain that turns them into flows.
Key Shopify Webhook Events for Cart Recovery
The main events you care about:
checkout/createcheckout/updateorders/create- (Optional)
carts/update/carts/create
Here’s how they’re used:
🔹 checkout/create
Fires when a customer starts checkout.
Use it to:
- Capture phone number
- Capture cart items
- Start a timer for potential abandonment
🔹 checkout/update
Fires when checkout is updated:
- Customer changes address
- Adds/removes item
- Reaches payment page
Use it to refine:
- Cart value
- Product list
- Customer details
🔹 orders/create
Fires when checkout is successfully converted to order.
Use it to:
- Mark recovery flow as completed
- Stop further reminders
🔹 carts/create / carts/update (Optional)
Used if you want to trigger:
- Browse abandonment
- Early signals before checkout
Shopify Webhook → Setu360 → WhatsApp Flow

To understand how webhooks automate cart recovery, visualize this flow:
Shopify Checkout → Webhook Event → Setu360 Webhook Endpoint → Automation Flow → WhatsApp Cart Reminder → Customer Clicks → Checkout → Order Created → Flow Stops
How the Cart Recovery Logic Works with Webhooks
At a high level, the logic looks like this:
-
checkout/createwebhook fires - You store checkout data (customer, cart, phone, total, etc.)
- You start a timer (e.g., 10 minutes)
- If after 10 minutes:
-
- No
orders/createfor that checkout - Status is still incomplete
→ Fire WhatsApp Reminder 1
- No
- Wait 6 hours
- If still no order
→ fire WhatsApp Reminder 2 - Wait 24 hours
- Still no order
→ fire WhatsApp Reminder 3 - Once
orders/createis received → mark “recovered” and stop flow.
This is exactly what Setu360 does for the merchant under the hood.
Sample Webhook Payloads (For Your Developer)
A. Example: checkout/create Webhook Payload (Simplified)
json code -
{
"id": 987654321,
"token": "abc123xyz",
"abandoned_checkout_url": "https://yourstore.com/12345/checkouts/abc123xyz",
"email": "john@example.com",
"phone": "+9198XXXXXXXX",
"customer": {
"first_name": "John",
"last_name": "Doe",
"phone": "+9198XXXXXXXX"
},
"shipping_address": {
"first_name": "John",
"last_name": "Doe",
"address1": "123 Street",
"city": "Jodhpur",
"country": "India",
"phone": "+9198XXXXXXXX"
},
"line_items": [
{
"id": 11111,
"product_id": 22222,
"title": "Premium T-Shirt",
"quantity": 2,
"price": "899.00",
"sku": "TSHIRT-01",
"variant_title": "Size M / Black",
"image": "https://cdn.yourstore.com/products/tshirt.jpg"
}
],
"subtotal_price": "1798.00",
"total_price": "1898.00",
"currency": "INR"
}
From this, Setu360 (or your backend) extracts:
customer_namephone-
checkout_url(or recovery URL) product_nameproduct_imageamount
…and then prepares a WhatsApp cart reminder.
B. Example: orders/create Webhook Payload (Simplified)
json code -
{
"id": 5555555,
"email": "john@example.com",
"phone": "+9198XXXXXXXX",
"name": "#1001",
"customer": {
"first_name": "John",
"last_name": "Doe",
"phone": "+9198XXXXXXXX"
},
"total_price": "1898.00",
"financial_status": "paid",
"fulfillment_status": null,
"line_items": [
{
"name": "Premium T-Shirt - Size M / Black",
"quantity": 2,
"price": "899.00"
}
],
"checkout_id": 987654321,
"created_at": "2025-02-01T10:11:12+05:30"
}
Here you:
- Map
checkout_idback to checkout - Close the recovery flow
- Mark the cart as recovered
Use Cases: What Shopify Can Do with Webhooks + WhatsApp
Once your webhooks are flowing into Setu360, you can power multiple automations:
✅ Use Case 1: Standard Cart Recovery
Trigger:
-
checkout/create/checkout/update
Logic: - Wait 10 minutes → send reminder
- Wait 6 hours → send discount or free shipping
- Wait 24 hours → send urgency message
✅ Use Case 2: COD Check & Prepaid Upsell
Trigger:
-
orders/createwhere payment method = COD
Logic:
- Send WhatsApp: “Confirm your COD order”
- Offer prepaid upsell: “Pay now & get ₹50 off + faster shipping”
Result: lower RTO, higher prepaid share.
✅ Use Case 3: Payment Failed Recovery
Trigger:
-
checkout/updatewithpayment_failedin logs (or status from payment gateway)
Logic:
- Send WhatsApp with “Retry Payment” button
- Include support link if needed
✅ Use Case 4: High-Value Cart Nurturing
Trigger:
-
checkout/createwheretotal_price > X(e.g. ₹3000)
Logic:
- More personalized reminder
- Offer priority shipping or special assistance
✅ Use Case 5: Browse Abandonment (Optional)
Trigger:
- Custom events when a user views a product multiple times
Logic:
- Soft WhatsApp nudge: “Still thinking about {{product_name}}?”
This is more advanced, but powerful.
Webhook Payload Anatomy

This is what a typical Shopify checkout webhook payload looks like.
Your automation platform only needs a few key fields:
- Customer name
- Phone
- Cart items
- Total amount
- Recovery URL
How Setu 360 Fits Into This (Without Getting Too Salesy)
From a Shopify merchant’s POV:
- They connect Shopify to Setu 360
- Setu360 auto-registers necessary webhooks
- Merchant selects / edits a prebuilt cart recovery flow
- Merchant picks WhatsApp templates
- Merchant clicks Activate
Under the hood:
- Webhooks come into Setu 360
- Flows run based on conditions (events, delays, statuses)
- Dynamic data → WhatsApp templates
- Analytics logged after each message
No dev team needed on their side.
Best Practices for Webhook-Based Cart Recovery
To make this setup robust:
- ✅ Always verify webhook signatures (Shopify HMAC)
- ✅ Log incoming events for debugging
- ✅ Map checkout → order using
checkout_id/token - ✅ Make flows idempotent (don’t resend same reminder twice)
- ✅ Add error handling (e.g. missing phone number)
- ✅ Respect opt-ins: only send to users who allowed WhatsApp communication
Webhooks are the nervous system of your Shopify store.
When you connect them to WhatsApp via Setu360, you can:
- Recover more abandoned carts
- Reduce RTO with COD flows
- Handle payment failures
- Personalize reminders
- Track results in a single dashboard
In 2025, the combination of:
Shopify + Webhooks + WhatsApp Automation
…is one of the highest-ROI setups a brand can implement.
If your store isn’t using webhooks for cart recovery yet, you’re operating blind.