Skip to Content

Cart recovery (organic)

The organic-side cart recovery playbook reaches shoppers who abandoned their cart with a WhatsApp / SMS / email follow-up that includes a payment link letting them complete the order in one tap. It pairs with the paid cart recovery playbook for shoppers who don’t respond to the first touch.

Why server-side, not browser-side

Some platforms detect abandonment with a browser timer (“sat on checkout for 30 seconds, fire a popup”). That model breaks down for almost every real scenario:

  • Misses tab-close, browser-crash, lost-network abandonments
  • Burns battery
  • Leaks timing logic into the browser

Active Reach detects abandonment server-side via a Celery beat scan over ClickHouse — storefront_cart_abandonment_scanner.py. The scanner finds carts where:

  • cart.added fired
  • No transaction.purchase followed within the abandonment window
  • The contact hasn’t been touched by recovery in this window

This catches everything. The trade-off: detection latency is 15–30 minutes, not seconds. For cart recovery this is the right trade-off — most abandonments resolve themselves within 5 minutes; the 15–30 min lag means you only follow up with genuine abandoners. The same server-side beat model applies to search, browse, and checkout abandonment.

The playbook

T+30m First touch — WhatsApp template with cart contents + payment link T+4h Second touch — same channel, gentler nudge if still unconverted T+24h Third touch — different channel (email if first touches were WA) T+48h Handoff to paid cart recovery (Meta DPA / Google Shopping) (any point) Conversion → suppress every pending touch

Each touch is gated by the journey-driven dispatch policy — chat-first override, frequency caps, warm-offer collapse, and platform suppression all apply.

Every cart-recovery touch includes a one-tap payment link. The link is generated automatically — operators don’t need to think about it:

LayerBehaviour
EngineAuto-injects {{generated.payment_link}} into every cart-recovery template
AI playbook generatorWhen the AI assistant drafts a cart-recovery journey, the payment-link node is auto-emitted
UIThe drawer shows a “payment link will be generated” confirmation when the operator drafts the journey

If you remove the placeholder by mistake, it gets re-injected at send-time so the link is never absent.

The link itself routes through your configured payment processor — see Cashfree integration for the wiring.

Activating the playbook

Discover

Go to Engage → Automations → Discover → Cart recovery (organic). The card shows estimated weekly recoveries based on your historical abandonment rate.

Review the template

Click into the playbook. You see:

  • Trigger: cart.added + no purchase within 30 min
  • Touch schedule (3 touches over 48 hours)
  • Channel mix (defaults to WhatsApp + email)
  • Suppression rules (recent buyers, opted-out, in support thread)

Customise (optional)

The defaults work for most workspaces, but you can:

  • Tighten or widen the touch schedule
  • Swap channels (e.g. SMS instead of WhatsApp if your audience prefers it)
  • Edit message copy (a creative profile is applied automatically; you can override per-touch)

Activate

Click Activate. The playbook enters Live state and starts enrolling abandoners on the next scanner cycle (within 30 min).

Cross-channel personalisation

The same playbook adapts the message to whichever channel ends up delivering:

ChannelWhat the touch looks like
WhatsAppApproved template with cart contents (product images), price total, payment link button
SMSConcise text — Your cart is waiting. Tap to finish: {link}
EmailRich HTML with full cart, recommendation block, payment link CTA
In-appRendered as a banner when the contact next opens your storefront

You don’t author per-channel copies — the engine picks the right template family from your channel templates library based on the channel that actually delivers.

Recovery vs reminder

The first touch is a recovery — the shopper got distracted; here’s the cart, here’s a one-tap finish. The third touch is a reminder + incentive — they didn’t come back; here’s a small offer to nudge.

You configure the incentive ladder per playbook:

  • Touch 1: no incentive
  • Touch 2: no incentive
  • Touch 3: 5% off (optional)

Some workspaces find that any incentive trains shoppers to abandon-and-wait for the discount. Run an experiment via the Incrementality framework before defaulting to incentives.

Measurement

The recovery dashboard at Engage → Automations → Cart recovery → Analytics shows:

  • Carts detected — total abandonments
  • Touches sent — by leg
  • Recoveries — carts that purchased after a touch
  • Net incremental — using the holdout configured in Incrementality
  • Channel conversion — which channel converted highest (for tuning the channel mix)

What’s next