Work every subscription about to cancel from one save desk

See every customer scheduled to cancel or sitting paused, ranked by revenue at risk, then offer a pause, a downgrade or a straight save in one click.

App
ChargebeeHubSpotSlack BotCustomer SupportFinanceFeedback TriageNotifications & Alerts
PromptCreate

Build me a save desk app that my retention team opens every morning to work the customers who have told us they are leaving but have not actually left yet. The whole app is one ranked queue plus a detail panel, and the job of the detail panel is to get a rep from the stated cancellation reason to the matching offer in as few clicks as possible.

The queue is the landing view. Load it from Chargebee with List Subscriptions, using typed operator filters: status[is]=non_renewing for subscriptions that are scheduled to cancel when the current term closes, and status[is]=paused for anything currently paused. These are two separate calls that both feed the queue. Do not include cancelled subscriptions, because those customers are already gone and are not saveable. Page through with limit and the next_offset token so the queue is complete rather than just the first ten rows.

Rank the queue by revenue at risk and by how many days remain before the term closes. Revenue at risk comes from the subscription's recurring amount, and days remaining is the difference between now and current_term_end. Put the highest value, soonest closing rows at the top, and show a clear urgency treatment on anything closing within about seven days. Each row shows the customer name, the plan they are on, revenue at risk, days remaining, whether the row is scheduled to cancel or already paused, the stated cancellation reason if we have one, and the account owner. Let the rep filter the queue by status and by reason, and search it by customer name or email.

Each row carries the full context a rep needs so they never have to leave the app. Pull the billing record with Retrieve Customer. Pull payment history with List Invoices filtered to that customer, and show the last several invoices with their amounts, dates and paid or unpaid state, so the rep can see at a glance whether this is a long-paying loyal account or a recent signup. Pull the account owner and recent CRM context from HubSpot: find the contact with Get Contact by email using the idProperty parameter, or fall back to Search Contacts when the email does not resolve cleanly, then resolve the owning rep with List Owners so the row shows a real name rather than an internal id.

Opening a row shows the detail panel with the offer buttons, and the offers are matched to the stated cancellation reason, because reason-to-offer matching is the pattern that actually converts. A customer who says the timing is wrong gets a pause. A customer who says the plan is too big gets a downgrade to a smaller item price. A customer who is only wavering gets a straight save, which just removes the scheduled cancellation and leaves everything else alone. Surface the offer that matches the recorded reason as the primary button, but keep the others available, because the reason on file is often wrong and the rep learns the real one on the call. If no reason is recorded, let the rep pick one in the panel first, and store what they picked.

Every offer previews before it commits. Never wire a bare action button. For the pause offer, call Pause Subscription Estimate first and show the rep what the pause does to billing, then commit with Pause Subscription. For the downgrade offer, let the rep choose the target price from List Item Prices filtered to cheaper prices in the same currency and period, call Update Subscription Estimate For Items to show the prorated result, then commit with Update Subscription For Items. For the straight save, commit with Remove Scheduled Cancellation, which is the undo for a subscription scheduled to cancel at term end and is the single highest value button on this page. For a subscription that is already fully cancelled rather than merely scheduled to cancel, use Reactivate Subscription instead. Show the estimate result in plain language, including any prorated credit or charge, and require an explicit confirm before the commit call fires.

After any offer commits, log it in two places automatically. Write a HubSpot note on the contact with Create Note, recording which offer was made, the reason it was matched to, the revenue at risk, the estimated financial impact and who on our team took the action. Then push the same summary to the account owner with Slack Bot's Send a Message, so the person who owns the relationship knows what just happened to their customer without having to check anywhere. If the owner has no resolvable Slack destination, fall back to a shared retention channel rather than silently dropping the notification.

The header tracks the outcome that matters: what share of this month's at-risk revenue we actually saved. Compute total at-risk revenue for the current month from the queue, track the revenue attached to every subscription that got a successful save action this month, and show the saved percentage alongside the raw amounts and a count of saves made. Persist each row's disposition, meaning the offer made, the outcome and the rep who worked it, so the queue remembers what has already been touched today and the header total survives a reload.

Two data handling details to get right. Chargebee amounts are integers in the smallest currency unit, so divide before displaying and always render them as proper formatted currency rather than raw integers. Chargebee timestamps are Unix epoch seconds, so convert them before showing dates or computing days remaining.

What does this prompt do?

  • Builds a daily queue of every customer who has told you they are leaving but has not actually left yet, including subscriptions set to end when the current term closes and anything currently paused.
  • Ranks the queue by how much recurring revenue is at risk and how many days remain before the term closes, so the most urgent saves sit at the top.
  • Opens each customer into a full picture: their billing record, their payment history, and the account owner plus recent notes from your CRM.
  • Offers save actions matched to the reason the customer gave for leaving, a pause for bad timing, a smaller plan for too much plan, or a straight undo for someone who is only wavering.
  • Shows the financial result of any offer before you commit to it, then applies the change and logs what you did as a note on the customer and a message to their account owner.
  • Tracks the share of this month's at-risk revenue your team has actually saved, right in the header.

What do I need to use this?

  • A Chargebee account with permission to view and change subscriptions
  • A HubSpot login where your customer contacts and account owners live
  • A Slack workspace so account owners can be notified when a save is made
  • Your smaller or cheaper plans already set up in Chargebee, so the downgrade offer has something to move customers to

How can I customize it?

  • Change how the queue is ranked, for example putting days remaining ahead of revenue at risk, or hiding anything below a certain monthly value
  • Edit the save offers and the reasons they are matched to, such as adding a longer pause option or a second downgrade tier
  • Choose where the save notification lands, a shared retention channel or a direct message to the account owner
  • Adjust the header goal so the saved revenue percentage is measured against your own monthly target

FAQs

What is the difference between a customer who is scheduled to cancel and one who has already cancelled?
A customer scheduled to cancel is still paying and still yours until the current billing term ends, which is exactly who this desk is built for. Someone who has already cancelled is gone, and those are kept out of the queue so your team spends its time on saves that are still winnable.
Does this change anything in my billing account without asking me?
No. Every offer shows you the financial outcome first, including any prorated amounts, and nothing is applied until you confirm. You always see the result before you commit.
Why does it offer a pause instead of just a discount?
Pausing is heavily under-used and works well when the customer says the timing is wrong rather than the price. Matching the offer to the reason they gave is the part that actually converts, so a pause, a smaller plan and a straight save are each pointed at a different reason for leaving.
Do I need HubSpot and Slack for this to work?
The queue and the save actions run on your billing data alone. HubSpot adds the account owner and recent customer context to each row and stores the note afterwards, and Slack tells the owner what happened. You can drop either one, but you lose that record and hand-off.
Who on my team should be using this?
It is built for a retention or customer success team to open every morning and work top to bottom. Each person can see the same queue, and the header shows how much of the month's at-risk revenue the team has saved so far.

Related templates

Prospecting desk that builds account lists from the live web

Stop buying stale lists. Reps run a saved search, work the results like an inbox, and only the accounts they approve ever reach your CRM.

Hyperbrowser
HubSpot
Google Sheets
App
Plan a field sales day around drive time and neglected accounts

Pick a date, a starting point and a radius, then build a sequenced day of customer visits that lands straight on your calendar.

Geolocation
HubSpot
Google Calendar
App
Share of voice dashboard for your brand and competitors

See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.

GDELT
Notion
Slack Bot
App
Find ICP accounts, verify the emails, file them in HubSpot

One screen where reps filter for companies that fit, see who is actually reachable at each account, and save only the addresses that verify.

Hunter
HubSpot
App
Approval war room for every social post awaiting sign-off

One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.

Hootsuite
Slack Bot
App
Turn champion job changes into new pipeline in Attio

Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.

Boomerang
Attio
Slack Bot
Agentic Task

Stop letting cancellations run out the clock.

Give your retention team one screen that shows who is leaving, what it costs you, and the offer most likely to bring them back.