Free planner, runs in your browser

Plan a win-back campaign from your Stripe or RevenueCat export

Load a subscriptions or events export. See who you lost and why, set offer limits, and get one personal message per person with a unique return code. Later, load a newer export to see who came back.

Your files never leave this browser. Nothing is uploaded.

Updated 17 Oct 2026 · Works with Stripe Billing and RevenueCat CSV exports

Step 1 of 5

Load your export

Stripe: Billing, Subscriptions, Export, all columns. RevenueCat: a customer export or an event export with app_user_id, type, period_type and expiration_at.

Where is the export from?
Drop your CSV here or choose a file. Press Enter to browse.

No export to hand? Load an example: a fictional app called Lifted, about 80 rows covering every status.

Column mapping

Detected from the header row. Change any column the planner got wrong; everything below updates.

Load a file to see the columns.

Step 2 of 5

Who you lost

Each person lands in one segment. Active subscribers are left out. Monthly revenue lost is each person's price turned into a monthly figure.

Load an export in step 1 to see your segments.

How each segment is decided
SegmentStripeRevenueCat
CancelledStatus canceled after a paid periodCANCELLATION or EXPIRATION after a paid period, cancel_reason not BILLING_ERROR
Billing failedpast_due, unpaid, or canceled with reason payment_failedBILLING_ISSUE, or cancel_reason BILLING_ERROR
Trial never convertedCancelled inside the trial, or incomplete_expiredTrial EXPIRATION or CANCELLATION with no normal purchase
Active (left out)active or trialingLatest purchase or UNCANCELLATION still in date
Step 3 of 5

Set the rules

Offers stay inside the limits you set. Billing failed gets no discount by default: the card needs fixing, not a price cut.

Load an export to see who gets a message.
Step 4 of 5

Write the messages

One short email per person, in your voice. Edit the templates, then copy single messages or download the whole campaign as a CSV for any email tool.

Edit the templates

Merge fields:

{first_name}{app}{plan}{days_subscribed}{progress}{offer}{return_code}{sender}{fix_link}

An empty field falls back to plain words (Hi there, your subscription). Text inside [[ ]] is dropped when a field in it is empty. A line with an empty field and no fallback is dropped. Write {plan|your plan} to set your own fallback.

Columns: email, first_name, segment, subject, body, offer, return_code, send_after.

Messages appear here once an export is loaded.

Step 5 of 5

Who came back?

A few weeks after sending, export again and load the newer file. A return counts when the same email or customer is paying again, or their return code shows up in a coupon or offer column, within 60 days of the message.

Drop the newer export here or choose a file. Same source as step 1.

Using the sample? Load the same fictional app 30 days later.

Want this running on your webhook automatically?

During early access we connect your RevenueCat or Stripe webhook by hand, message each lost subscriber when they lapse, and report who came back. No monthly fee: 15% of the revenue from subscribers who return, for 6 months.

Rate it

Did the planner help?

Tell us straight. With your permission we publish reviews with your first name and company, and only real ones.

Thank you. We read every one.