TL;DR: Indian D2C shoppers check WhatsApp far more often than email, yet most cart-recovery tools either email everyone or send the same discount to every abandoned cart. Wapsi makes one decision per cart: it checks consent, orders on any device, stock and quiet hours, reminds only when it should, offers a discount only to shoppers it rates as persuadable, and measures lift against a holdout group.
Concept product · Product owner · Live demo (sample data)
Live demo · Case study page · PRD · Code
The problem
A shopper who fills a cart has already done the hard part. Four things go wrong after that:
- Email reminders go unread. Many shoppers check WhatsApp far more often than their inbox, and plenty check out without giving an email at all.
- Blanket discounts burn margin. Sending 10% off to every abandoned cart rewards people who were coming back anyway.
- Nobody knows the real lift. Tools count every order that follows a message as recovered, including orders that would have happened regardless.
- Careless sending gets punished. Shoppers block brands that message too often, and WhatsApp limits accounts with poor feedback.
Evidence
The problem framing comes from how WhatsApp Business messaging works in India: only pre-approved templates can be sent outside the 24-hour customer window, cart reminders are billed as marketing messages, and WhatsApp caps how many marketing messages one person receives across all brands. The product has been tested only as a demo on sample data. No store has used it yet.
How it works
flowchart LR
A["Cart goes quiet"] --> B["Sweep every 5 min<br>picks up carts idle 45 min"]
B --> C{"Pre-send checks<br>consent, orders, stock,<br>quiet hours, limits"}
C -->|fail| D["Stop, hold or skip<br>with a logged reason"]
C -->|pass| E{"Holdout draw"}
E -->|10%| F["No message<br>outcome still tracked"]
E -->|90%| G["Intent model"]
G --> H["Reminder"]
H -->|persuadable, no reply in 24 h| I["Offer"]
H --> J["Signed link rebuilds cart"]
I --> J
J --> K["Order counted<br>against the holdout"]
Decisions and trade-offs
- Capture the phone number before the cart, not after it. OTP login or a phone field at the first checkout step, with an unticked WhatsApp opt-in. The share of carts with a number and consent caps everything downstream, so it became the first metric.
- Templates for the first message, an assistant only after a reply. WhatsApp allows only approved templates outside the 24-hour window. Working within that rule keeps every first touch brand-safe and reviewable.
- Sweep idle carts on a schedule instead of a timer per cart. No orphaned timers, nothing to cancel, and a missed run fixes itself on the next sweep.
- Give discounts by expected lift, not by default. Shoppers who would return anyway don't need an offer, and casual browsers rarely convert with one. A reply or an order cancels a queued offer.
- Hold out a control group from day one. A random 10% of eligible carts receive no message, so the dashboard reports sales the product truly added.
What I cut