Win-back Triggers

Fire a win-back only where the predicted return exceeds the outreach cost. Combines _recommend, _predict and _estimate.

Win-back Triggers: screenshot from the E-commerce demo
🛒 E-commerce_recommend_predict_estimateE-commerce
Production anchorIn the demo every suggested send carries its response probability × predicted order value minus the email cost, and every action its gain over doing nothing after its cost, so the ones worth firing are the positive ones. The firing itself is left to the application.

The problem

Win-back campaigns are usually run as scheduled batches — once a quarter, send the lapsed-customer outreach to the whole list. The scheduling is convenient but it misses the win-back signal: customers lapse on different timelines, and the optimal outreach window is per-customer, not per-calendar.

The data shows when each customer becomes win-backable. The conditional probability of "will respond to outreach in the next 30 days" rises and falls per customer based on their pattern (recency of lapse, prior engagement, seasonality). Mature win-back triggers fire when that probability crosses a confidence threshold — not on the calendar.

How it works

Win-back triggers compose _recommend (which product to send), _predict (the chance the customer orders after an action, and after doing nothing) and _estimate (the order value) with a cost model. Per customer and action: (chance after it − chance after no action) × order value − its cost. When that is positive the action is worth firing; when every action comes out negative, "no action" is the best choice and nothing fires. In the demo, a €5 voucher comes out negative for the first listed customer.

Costs differ by outreach type. A discount or a voucher is paid on every order, including the ones that would have come anyway, while an email or an ad costs when sent; the demo prices both kinds. The same conditional probability machinery drives every decision; the cost model and any threshold are application-level configuration.

{
  "from": "customer_actions",
  "where": {
    "recency_bucket": "0-90d",
    "spend_band": "high",
    "offer_buyer": "sometimes",
    "open_issue": "none",
    "email_history": "never_sent",
    "tracking_consent": "yes",
    "action_x_recency_bucket": "ad|0-90d",
    "action_x_spend_band": "ad|high",
    "action_x_offer_buyer": "ad|sometimes",
    "action_x_open_issue": "ad|none",
    "action_x_email_history": "ad|never_sent",
    "action_x_tracking_consent": "ad|yes",
    "action": "ad",
    "discount_pct": "0",
    "voucher_eur": "0"
  },
  "predict": "purchased_30d",
  "limit": 2,
  "select": [
    "$p",
    "feature"
  ]
}

For the full architecture, see the technology overview. For the broader narrative across multiple use cases, read The Predictive Application.

See it live

This use case runs in the 🛒 E-commerce demo today. Click through to the live application and inspect the queries that produce the result.

Open the live demo →

Frequently asked

How is this different from win-back ranking?

Win-back ranking sorts the queue by predicted recoverable revenue for human-driven outreach. Win-back triggers fire automated outreach when the predicted value crosses a threshold. Ranking is for the retention team's call queue; triggers are for the marketing system's auto-send.

How frequently should the trigger evaluation run?

Daily for typical e-commerce; hourly for high-cadence categories (food delivery, consumables). The conditional probability updates with every customer signal; running the trigger evaluation on a faster cadence catches windows that close quickly.

Can different outreach types compete for the same customer?

Yes. Multiple triggers can fire for the same customer; the application picks the highest-value path. Most deployments prioritize: discount-offer trigger > email-only trigger > app-notification trigger, with cooldowns to prevent over-contact.

Does this work for B2B customer win-back (longer cycles, fewer customers)?

Yes. The probability calibration is per-domain — B2B win-back probabilities are lower (longer sales cycles, smaller pool of lapsed customers). The threshold tunes accordingly. Mature B2B deployments use win-back triggers to surface account-management calls, not automated emails.

How does the trigger handle customers who recently unsubscribed?

Unsubscribe is a hard exclusion at the application layer, not a soft input to the prediction. Unsubscribed customers do not appear in the trigger queue regardless of predicted recoverable revenue. The prediction respects channel preferences set at the application level.