Cart abandonment recovery

Recover shoppers who start checkout but leave without buying, using checkout.started → wait_until order.placed.

Most abandoned checkouts are recoverable — the shopper got distracted, not disinterested. EngageApp models that as an ordinary event-triggered campaign: enroll on checkout.started, wait for order.placed, and send only if they still have not bought. There is no cart_abandoned event in the product vocabulary.

Clone it

Open the Gallery (not the Campaigns list) and clone Cart recovery. Search for cart there — a SaaS workspace's campaign list will be empty until you clone. The draft already has the trigger, the wait_until step, Liquid line items, and a conversion goal on order.placed. Bind your email channel (and optionally SMS) before you activate — you do not need to hand-author the graph. Cloning this campaign does not retarget Autopilot from a SaaS onboarding lifecycle to commerce; that needs a connected store emitting these events.

Connected Shopify and WooCommerce stores emit these names via CommerceEventMap: intent is checkout.started, conversion is order.placed. Custom ingest should use the same dotted names if you want the gallery campaign to enroll without remapping.

Build it

  1. Send checkout.started. From a connected store this arrives automatically when checkout begins with an identifiable email. From your own backend, POST it via the Events API or an SDK. Properties are spread onto event.* — include line_items and checkout_recovery_url so the reminder can list the cart and link back.
  2. Create an event-triggered campaign (or clone the gallery blueprint). Set the trigger to event checkout.started. Each contact who fires that event enrolls.
  3. Wait for the purchase. Add a wait_until step on order.placed with a 1–4 hour timeout (gallery default is 4 hours). If they buy, the true edge is a noop — no recovery email. On timeout (false), send email.
  4. Write the reminder in Liquid. Loop {% for item in event.line_items %} and link {{ event.checkout_recovery_url }}. That snapshot is the enrolling checkout, even on the timeout edge.
  5. Optional SMS later. A second wait_until order.placed (~44 hours after the email) is in the cloned graph but does not send on clone. It only sends if you keep the step, connect an SMS channel, and the contact has SMS consent. Delete the step in email-only workspaces. The dispatcher already skips SMS without consent.
  6. Set the conversion goal to order.placed (window 2 days, exit on conversion, value on total). Buyers leave the flow even if they convert after the first wait timed out.

Tips

  • Do not teach or emit cart_abandoned, cart.abandoned, or underscore checkout_started for connected stores — ingest and Autopilot expect dotted checkout.started.
  • A delay-only “wait then send” graph will email people who already bought. Prefer wait_until on order.placed.
  • Keep the first reminder friendly and reserve any incentive for a later timeout — you do not want to train shoppers to abandon for a discount.

Next steps