Sequences

Compose the emails and waits for dunning, save, and win-back.

What a sequence is

Automations → Sequences. A sequence is the plan that runs when a recovery event fires: messages (emails built from your templates) separated by waits (delays), a Split when two paths need to diverge, and — on payment-failed sequences — a Retry invoice step.

You compose it on a visual canvas: click a block to edit it in the inspector, add or remove steps, reorder them. Write the emails under Automations → Templates, or straight from a Message block without leaving the canvas.

Three possible triggers, picked when you create the sequence:

TriggerStartsWhen
Payment failedDunningStripe can't collect an invoice.
Cancellation scheduledSaveA still-live subscription is set to end at period close.
Subscription canceledWin-backThe subscription is gone.

The default sequence (Save with a discount offer) starts 3 days before the subscription ends (or immediately if less time is left) and sends one email with an offer link. It ships without a Stripe coupon attached — duplicate it to attach one from your Connect account.

Platform sequences vs. your own

  • Platform sequences ship with churnhook by default. You can deactivate them, but not edit them directly — duplicate one to get your own editable version.
  • Your sequences are fully editable. New ones are created inactive by default, so nothing fires by accident: activate from the list or the editor when they're ready.

Only one sequence can be live per trigger at a time. Activating yours automatically turns off the matching platform sequence for your workspace — a confirmation reminds you before you commit, and names the sequence that will be turned off.

Runs already in flight keep the plan they started with. Deactivating or replacing a sequence only changes future runs.

Enroll (on Unpaid, Leaving, and Canceled) always uses whichever sequence is live at the moment you click.

Wait steps

A wait is more than "N hours later". On your own sequences you can pick:

  • Hours after the previous step — the classic delay.
  • A calendar moment — this or next week, a specific day of the month, with an hour window (for example 8–9 AM). Working days run Monday to Friday; there's no holiday calendar.
  • Before period end — N days before the subscription ends, at a set hour. Available on dunning and save, not on win-back since the subscription is already gone.

Times follow the workspace timezone (Settings → General). The editor shows a sample date so you can preview when a step would actually fire.

Retry invoice (dunning only)

On a Payment failed sequence, you can add a Retry invoice block. When the run reaches it, churnhook asks Stripe to pay the latest open invoice — the same collect as the button on the Unpaid list.

If Stripe marks the invoice paid, the run becomes Recovered and later emails don't send. If it stays open, the sequence continues. A decline or Stripe error fails this step; you can retry the run from its detail.

This block doesn't exist on save and win-back sequences — there's no open invoice to collect there.

Split and merge

On any of the three triggers, you can add a Split: two branches, one question. The available questions depend on the trigger. The answer is frozen when the run starts — a later Stripe change doesn't flip the run onto the other branch.

QuestionTrue whenPayment failedSave / win-back
Tenure ≥ N monthsThe subscription is at least N months old (default 12)yesyes
Hard declineThe invoice's decline is final (expired card, stolen, invalid number…)yeshidden
Amount ≥ NThe compared amount reaches N eurosunpaid invoicemonthly plan amount
Exit survey reasonA survey exists and its reason is checkedhiddenyes
Stripe priceThe subscription's price is in the list you pickedyesyes

Missing data always takes the No branch — the run never fails because of it.

Merge joins two branches back into one queue for the rest of the sequence, so shared steps aren't duplicated. You can chain several Splits by merging between each one.

Simulate on the canvas previews which branch a given example would take, without saving anything.

Save offers (keep, coupon, or pause)

On a Cancellation scheduled sequence, a Message block can carry one offer at a time: None, Keep, Coupon, or Pause. Switching modes clears the others.

OfferWhat it does
KeepOne click to undo the scheduled cancel, same price, same plan
CouponA Stripe discount already created on your Connect account, applied to the next invoice
Pause1 or 2 months of paused billing (monthly plans only)

The customer acts from the page the email links to; nothing is applied until they click the confirm button on that page. Accepting applies the chosen offer and undoes the scheduled cancel; the save run becomes Recovered.

Declining an offer just acknowledges it — the offer stays valid until period end. Sending a new offer email on the same run expires any earlier unclaimed offers.

The offer and the template must match: a Keep offer needs the "keep" link in the template, a Coupon offer needs the "offer" link, a Pause offer needs the "pause" link. Saving a mismatch is rejected, and so is later editing a template in a way that would break that pairing. The exact link names ({{keep_url}}, {{offer_url}}, {{pause_url}}) are covered in Templates.

Win-back coupons

On a Subscription canceled sequence, the same coupon picker is available. You also choose how long the offer stays valid: 3, 7, 14, or 30 days from send (14 by default). The customer is sent to Stripe Checkout, on their previous plan, discount already applied. The run becomes Recovered when that exact Checkout is paid.

Win-back Checkout needs your connected account's public business name set in the Stripe Dashboard — churnhook can't fill it in for you.

Editing safely

Clicking a sequence opens it read-only; Edit switches to edit mode. Two safety rules:

  • A sequence must be valid to activate: every message block needs a template.
  • Runs already in flight are never affected by an edit or a deactivation — each one keeps the plan it started with.

A sequence can have at most 20 steps and 5 emails. Past that, the editor greys out adding new steps; an older sequence that's already larger keeps running normally.

Sequences — churnhook