Retail · AI Retention Automation

Retention and abandonment automation for D2C, retail and consumer brands.

Cart recovery sequences, WhatsApp checkout agents, RFM cohorts and behavioural personalisation — with AI only where it earns its keep.

See the abandonment code
A shopper checking out on a phone — the moment a good retention layer either wins or loses

What we build

Six layers of retention, one composable stack.

Cart & Checkout Abandonment Recovery

Event-driven flows the moment a cart goes cold. WhatsApp first (highest open rate in India), email fallback, retry with an incentive only if the earlier nudges fail. Every step measured.

WhatsApp Checkout Agent

Conversational checkout in the customer's WhatsApp thread — product questions answered, size chart shared, address collected, payment link delivered. Sits on top of the WhatsApp Business API.

RFM Segmentation & Cohorts

Recency, Frequency, Monetary scoring runs nightly against your order history. Cohorts feed into audience sync (Meta, Google, WhatsApp) — no manual list exports.

Predictive LTV & Churn

Lightweight models (not black-box) that predict which customers are about to churn and which are on a high-LTV trajectory. Actionable — hooks into retention flows automatically.

Behavioural Personalisation

Product recommendations informed by browse behaviour, past purchases and similar-cohort patterns. Vector-indexed catalogue, refreshed nightly, served in under 50ms.

Loyalty Tier & Reward Logic

Tier progression, birthday flows, referral tracking and reward redemption — modelled as a rules engine you can edit without a deploy. Sales team owns the calendar.

The commercial case

Where AI actually earns its keep.

A lot of "AI retention" pitches are rules with a nicer sticker. That's fine — RFM segmentation, abandonment sequences and loyalty tiers are rules problems, and rules are the right tool for them. Trying to LLM your way through cart sequencing is expensive theatre.

Where models genuinely earn their keep: the conversational checkout agent (understanding "is this available in medium?" and returning the right answer from your catalogue), personalisation ranking (ordering the next-most relevant product from thousands), and predictive LTV/churn (spotting the customer who's about to disappear before they do).

Our default posture: build the rules layer first — that's most of the recovered revenue. Layer models in only where the data and the return justify them. Everything measurable, everything attributable, no black boxes you can't explain to a founder.

An ecommerce analytics dashboard — where a good retention layer earns its keep

Rules first, AI where it earns its keep

"RFM segmentation and abandonment sequences are rules problems — solve them with rules. Bring in models where they genuinely change the answer."

The pattern

Cart abandonment — WhatsApp-first, incentive last

Node.js / TypeScript. Fires from your cart webhook, respects opt-in, checks for a purchase before every send. Discount only triggers if the earlier nudges failed.

// Cart abandonment: WhatsApp first, email fallback, no incentive until step 3.
// Fires from your cart's webhook — no polling, no cron.

import { addHours, differenceInMinutes } from 'date-fns';
import { sendWhatsAppTemplate, sendEmail } from './messaging';
import { getOrderForCart } from './orders';

type CartEvent = {
  cartId: string;
  customerId: string;
  channel: 'whatsapp' | 'email' | 'both';
  optedInAt: Date | null;      // WhatsApp opt-in timestamp
  abandonedAt: Date;
  cartValueInr: number;
};

const STEPS = [
  { after: '30m',  key: 'nudge_reminder',   incentive: null,             channelPref: 'whatsapp' },
  { after: '4h',   key: 'nudge_question',   incentive: null,             channelPref: 'whatsapp' },
  { after: '24h',  key: 'nudge_email',      incentive: null,             channelPref: 'email'    },
  { after: '48h',  key: 'nudge_incentive',  incentive: 'FLAT10',         channelPref: 'both'     },
] as const;

export async function scheduleAbandonmentFlow(event: CartEvent) {
  for (const step of STEPS) {
    const fireAt = addHours(event.abandonedAt, parseHours(step.after));
    await enqueue({ cartId: event.cartId, stepKey: step.key, fireAt });
  }
}

// The worker that picks up each scheduled step.
export async function runStep({ cartId, stepKey }: { cartId: string; stepKey: string }) {
  const step = STEPS.find((s) => s.key === stepKey);
  if (!step) return;

  // Cheapest correctness check — did they buy in the meantime?
  const order = await getOrderForCart(cartId);
  if (order) return { skipped: 'already_purchased' };

  const cart = await loadCart(cartId);
  if (cart.recovered || cart.expired) return { skipped: 'cart_state' };

  // Respect opt-in — WhatsApp without consent is a channel-killing move.
  const canWhatsApp = Boolean(cart.customer.optedInAt);
  const channel = pickChannel(step.channelPref, canWhatsApp);

  if (channel === 'whatsapp') {
    await sendWhatsAppTemplate(cart.customer.phone, stepKey, {
      first_name: cart.customer.firstName,
      cart_link: cart.recoveryUrl,
      incentive_code: step.incentive ?? '',
    });
  } else if (channel === 'email') {
    await sendEmail(cart.customer.email, {
      template: stepKey,
      vars: { cart, incentive: step.incentive },
    });
  }
  return { sent: channel, stepKey };
}

function pickChannel(pref: 'whatsapp' | 'email' | 'both', canWA: boolean) {
  if (pref === 'whatsapp') return canWA ? 'whatsapp' : 'email';
  if (pref === 'email')    return 'email';
  return canWA ? 'whatsapp' : 'email';
}

// ...enqueue/loadCart/parseHours are your queue (BullMQ, SQS, Cloud Tasks)
// and data layer of choice. Keep the retention logic itself platform-free.

What it changes

What D2C teams see a quarter after launch.

Abandonment recovery

A well-tuned WhatsApp-first sequence recovers a meaningful share of abandoned carts — comfortably ahead of email-only sequences for Indian D2C brands.

Repeat purchase rate

Segmented retention flows lift repeat purchases within the 30–60 day window. Effect is strongest on the middle-frequency cohort, where a nudge tips them from occasional to habitual.

Support ticket volume

A conversational checkout agent absorbs a large share of pre-purchase questions — size, delivery, materials — that would otherwise land in support inboxes.

Attributable revenue lift

Retention channels typically move from a small fraction of revenue to a defensible 20–35% share once the sequences, segmentation and personalisation layer are live and tuned.

Directional patterns from D2C, salon-tech and multi-tenant SaaS rollouts in our portfolio. Actual impact depends on baseline abandonment rate, catalogue and cohort mix.

FAQ

Questions founders ask.

Do these flows need customers to opt in to WhatsApp?

Yes — Meta requires explicit opt-in for WhatsApp Business messaging. We build the opt-in into checkout as a pre-ticked (where permissible) or clearly ticked box that documents consent. Every message respects opt-out. Non-compliance risks the WhatsApp channel entirely, so we don't cut corners there.

Which ecommerce platforms do you integrate with?

Shopify, WooCommerce, Magento, custom Node/Rails/Django storefronts. The retention layer is platform-agnostic — it listens to webhooks (cart events, order created, order fulfilled) and writes back via API. If your platform emits the events, we can hook in.

How do you decide when to send an incentive versus a plain reminder?

Rule of thumb: incentive is the last resort, not the first. Sequence usually goes reminder → soft nudge → question-based ("any hesitations?") → incentive. Sending 10% off in message one is expensive discount training. Sending it only when the earlier steps failed captures the customers who genuinely needed a push.

Is the AI actually AI, or is it just rules?

Both. RFM segmentation and abandonment flows are largely rules — that's the right tool. LLM classification kicks in for the WhatsApp conversational agent (understanding "is this available in Medium?" and returning the actual answer from your catalogue) and for personalisation ranking. We use models where they earn their keep — not to sound impressive.

How long from kick-off to live retention flows?

3–4 weeks for the first working abandonment sequence and RFM segmentation live. Conversational checkout agent adds 2–3 weeks. Predictive LTV and personalisation ranking are a separate phase (~4 weeks) once you have enough transaction data for the model to learn from.

A retention layer you can attribute.

Send us your platform, abandonment rate and current retention channels. We'll come back with a scoped first-phase plan and a projection based on brands we've shipped for.

Back to Retail