WIN-BACKRECURLY

How to win back churned customers on Recurly

Win-back on Recurly: reactivation before expiry, churned customers by expiration reason, unique coupon codes and returning customers on the same account.

Published 5 min read

Customers who cancelled already know your product, which makes them some of the easiest people to sell to again, if you ask at the right time with the right offer. This guide explains what Recurly gives you to run win-back: the window before expiry, the data on why customers left, coupons built for one-off offers, and how a returning customer starts again on their existing account.

It sticks to Recurly’s own documentation: expire or cancel a subscription, the subscription lifecycle webhook guide, subscription notifications, the churned subscriptions export, Recurly’s support article on finding reactivation MRR, coupons, bulk unique coupons, multiple subscriptions and hosted payment pages (all accessed November 2026).

Two windows: before and after expiry

In Recurly, a cancelled subscription does not end right away. It stays in the canceled state, still valid, until expires_at, then becomes expired (expire or cancel). That gives you two different win-back moments.

Before expiry After expiry
Subscription state canceled expired
Customer access Still active Gone
How they come back Reactivate the same subscription A new subscription
Webhook to start from canceled expired

Before expiry: reactivation

A canceled subscription can be reactivated before it expires; it then renews at the end of the current cycle as if nothing happened. The API has a reactivate endpoint for this, and Recurly sends a reactivated notification when it happens (lifecycle guide). In SCA regions, Recurly notes the customer may need to authenticate their stored billing information again.

This window is the cheapest win-back there is. A message a few days before expires_at (“Your plan ends on 30 November. Keep it with one click”) needs no new checkout and no new card. Only send it if the customer’s reason suggests they might stay; someone who left for a competitor will not appreciate a countdown.

After expiry: a new subscription

Once a subscription has expired it cannot be reactivated. A returning customer needs a new subscription. Recurly’s multiple subscriptions page says the purchase endpoint works for both new and existing accounts, so the customer can come back on the same account, with their history.

On hosted pages: each plan has a hosted payment page URL, but Recurly marks Hosted Payment Pages as deprecated and supported for legacy use only, recommends Recurly Checkout instead, and describes the plan page as creating a new account on purchase. For returning customers, a checkout in your own app built on the purchase endpoint, or Recurly Checkout, keeps everything on one account.

Find who left, and why

Recurly’s churned subscriptions export (Analytics › Exports) lists expired subscriptions with an expiration_reason column. Values include Canceled, Non-payment, Fixed billing cycles and Tax Location Invalid, plus nonpayment variants (one applies only to cardless trials). Two points from the docs:

  • A subscription does not count as churned until it has expired; canceled_at and expires_at are different dates.
  • Filtering expiration_reason splits churn into voluntary (Canceled) and involuntary (Non-payment).

The two groups need different win-back messages. A customer lost to non-payment may still want the product; the first message should be “your card failed and your plan ended, here is how to restart”, not a discount. A customer who cancelled needs a reason to come back.

Recurly’s export does not tell you why a customer cancelled beyond “Canceled”. If you run a cancel flow, store the reason the customer gave with their account code, so you can choose the win-back message by reason.

Offers that suit win-back

Recurly coupons have two features that fit win-back well:

  • Bulk unique codes. One-time-use codes generated in batches, up to five million per campaign, each redeemable once by default (bulk unique coupons). One code per former customer means the offer cannot be posted on a coupon site.
  • Relative expiration. For bulk codes, you can set an expiry period such as 7 days, 2 weeks or 1 month that starts for each code when it is generated. That gives each email a real deadline without managing dates by hand.

For duration, Recurly recommends billing-period coupons, which apply for an exact number of cycles. “Two months at half price” is clearer than “50% off for 60 days”.

Not every reason calls for a discount. Match the offer to the reason:

Cancel reason Win-back message
Too expensive A unique coupon, or a cheaper plan
Missing a feature Tell them when it ships; no discount needed
Not using it Show what changed, or suggest a lighter plan
Switched to another tool One honest message about what you do differently
Non-payment Restart link; no offer

A win-back sequence, step by step

  1. Listen to canceled and expired notifications. Recurly’s pages use more than one naming style (for example “canceled” and canceled_subscription_notification), so check the names in your payloads, and confirm state through the API, as Recurly advises.
  2. Store the reason from your cancel flow or support conversation, keyed by account code.
  3. Before expiry, for reasons that suggest the customer might stay, send one reactivation reminder.
  4. After expiry, wait. Contact the customer at intervals rather than the day after they leave, each time with a message that answers their reason.
  5. Generate a unique code per customer from a bulk coupon with a relative expiry, if the offer is a discount.
  6. Bring them back on the same account through the purchase endpoint or Recurly Checkout.
  7. Stop the sequence as soon as a new subscription starts on the account, and stop for anyone who unsubscribes.

Measure reactivations

Recurly’s support article on reactivation MRR shows how to find returning customers in exports: look for duplicate account_code values with one expired and one active subscription, and a gap of at least a month between expires_at of the old one and activated_at of the new one. Use the same method to compare win-back offers, and look at whether reactivated customers stay longer than a couple of cycles.

Doing this with NoChurn

NoChurn follows Recurly’s webhooks and sends win-back emails at day 30, 60 and 90 after a customer leaves, written from the reason they gave in the cancel flow, with a link to come back. The cancel flow itself offers a coupon, a pause or a plan change on the Recurly subscription before anyone leaves, with a one-click cancel always visible, hosted or headless through the API. Coupons, checkout, invoicing and the charge stay in Recurly. NoChurn is free under $300 MRR, with every feature on every plan. See NoChurn + Recurly.

PROMPT

Read https://www.nochurn.sh/llms.txt,
then follow https://www.nochurn.sh/docs/quickstart/
to add NoChurn to this app. Use a test key
(nc_test_…) until I say we go live.

Stop leaking revenue.

  • Free until $300 MRR
  • No card needed
  • Live in 10 minutes
  • Never a cut of what we recover