ChurnaheadSign in

How to get alerted before a Stripe customer cancels

Last updated 1 November 2026

A cancellation in Stripe is usually not sudden. The customer schedules it at period end, or their card fails and Stripe retries for days, or their card expires next month. Each of those is a window in which a short conversation can keep the account. The question is how to hear about them in time, without watching the Stripe dashboard all day.

Option 1: Stripe’s own notifications

Stripe can email you about some events. Under Settings, Notifications in the Stripe dashboard you can turn on emails for successful and failed payments and disputes, and Stripe’s Smart Retries and dunning emails to the customer handle part of the failed-payment problem for you.

What it catches: failed payments and disputes, as they happen.

What it misses: scheduled cancellations, expiring cards, downgrades, trials about to end without a card, discounts ending, and any sense of which customers matter most. On a busy account the emails are noise, and there is no list, no reason, and no way to record that you dealt with it.

Option 2: Webhooks into your own tooling

Point a Stripe webhook endpoint at a small service, or at Zapier, Make or n8n, and subscribe to customer.subscription.updated (check cancel_at_period_end), customer.subscription.deleted, invoice.payment_failed and customer.updated. Post each one into a Slack channel.

What it catches: scheduled cancellations and failed payments, within seconds.

What it misses: everything that isn’t an event. A card expiring in three weeks never fires a webhook. Neither does a shrinking invoice, a trial ending with no payment method, or a discount about to end; those are states you have to look for. Webhooks also tell you about one subscription at a time, with no ranking, so on a real account the channel fills up and the one that mattered scrolls past. And you’ll need to handle signature verification, retries and the occasional duplicate yourself.

Option 3: A scored daily list, plus instant alerts for the urgent ones

Read the whole Stripe account every day, score each customer from all the signals at once, and send one message in the morning with the accounts at risk, biggest revenue first, each with its reason. Keep webhooks for the two things that can’t wait: a cancellation scheduled and a payment failed.

What it catches: the events and the states. Cancellations and failed payments at once, and expiring cards, downgrades, ending trials and discounts, approaching annual renewals and new customers on the daily pass.

What it costs: either a few days of scripting against the Stripe API plus somewhere to run it, or a product that does it.

Setting it up with Churnahead

  1. Sign in at app.churnahead.com with a work email. There is no password; a link signs you in.
  2. Connect Stripe in one click. Churnahead asks for the read-only scope. Or paste a restricted key with Read on Customers, Subscriptions, Invoices, Charges and PaymentMethods. See read-only access.
  3. Wait for the first sync. The backtest then shows which of last year’s cancellations the rules would have flagged, and how early.
  4. Under Settings, set the address for the morning email and, if you like, a Slack incoming webhook.

From then on:

  • Every morning you get the list, with the reasons and the money at stake, and links to mark each account contacted, saved or snoozed without signing in.
  • Within seconds of a cancellation being scheduled or a payment failing, you get an alert, by email and Slack, with the same links. The same goes for an account that moves up to high risk.
  • Thirty days after you mark an account contacted, the outcome closes itself: saved if the customer still pays, churned if not. The dashboard keeps revenue saved and lost.

Nothing is written to Stripe and nothing is sent to your customers. It is free up to 25 paying customers; see plans. The exact signals are in the documentation, and the digest and alerts page has the details of what goes out and when.

If you bill with Paddle or Lemon Squeezy

The same list works from a Paddle or Lemon Squeezy API key. Those providers have no webhooks in Churnahead yet, so accounts are rescored every four hours instead of within seconds, and a few signals are unavailable where the provider doesn’t record the data. See Stripe, Paddle and Lemon Squeezy.