One screen for Keap recurring revenue and at risk renewals
See monthly recurring revenue by plan, what bills in the next 30 days, and every subscription that quietly stopped charging.
Build me an app that is one screen for all of my Keap recurring revenue. Keap's own reporting can show me a cash forecast but it cannot tell me what is actually billing and what quietly broke, so I want a browsing surface first and a recovery workspace second.
The main view is a table of every active subscription. Load it with Keap List Subscriptions, then join each row to its plan with List Subscription Plans, to the underlying product with List Products, and to the subscriber with List Contacts. Each row shows the subscriber name and email, the plan and product name, the billing amount, the billing cycle and frequency, the next expected bill date, the normalized monthly value of that subscription, the subscription status, and the subscriber's lifetime spend. Lifetime spend comes from summing that contact's paid orders via List orders, and it sits right next to the subscriber name so I can tell at a glance which saves are worth a phone call and which are worth an email. Above the table put a summary strip with total monthly recurring revenue, active subscription count, and a breakdown of monthly recurring revenue totalled by plan, sorted with the biggest plans first. Let me search by subscriber, filter by plan and by status, and sort by any column.
A Renewals tab shows everything due to bill in the next 30 days, built from the next expected bill date on each active subscription, grouped by day with a running total of the expected billing amount per day and for the window overall. The window length should be a setting so I can change 30 days to whatever suits my billing rhythm.
An At Risk tab is the working queue. Build it by cross referencing List orders against each active subscription: a subscription is at risk when its last expected cycle date has passed and there is no successful order for that contact covering that cycle. This needs a grace window rather than flagging the instant a cycle date passes, because Keap makes three automatic charge attempts two days apart before a charge is considered failed. Default the grace window to five days so a row only surfaces once Keap's own retry sequence is finished, and expose the window as a setting. Each at risk row shows days overdue, the amount at risk, the last successful order date, lifetime spend, the plan, and the contact's applied tags. Sort the queue by amount at risk by default and let me flip to sorting by lifetime spend.
From any row I can act without leaving the app. A Retry billing action calls Invoice a Subscription to generate invoices for the due cycles of that subscription. An Apply recovery tag action calls Apply Tag with a tag I configure once in app settings. A Log what I did action opens a small composer and calls Create a Note against the contact. An Open follow up action calls Create a Task with a title, description and a date I pick. Every action confirms before it fires, shows the result inline, and refreshes the affected row.
A Slack button in the At Risk tab uses Slack Bot Send a Message to push the day's at risk list to a revenue channel I configure. The message should be readable in Slack: a headline with the count and the total amount at risk, then a line per subscription with the subscriber, the plan, days overdue, the amount, and lifetime spend, capped at a sensible number of rows with an overflow count at the bottom.
Each row also gets a Build a save play button that kicks off a background agent for that one subscription. The agent reads that contact's order history with List orders, their applied tags with List Applied Tags (Contact), and the subscription record itself, then decides whether the right move is to retry billing or to reach out to a human. It drafts a personalized card update message in my voice referencing what they actually subscribe to and how long they have been a customer. It writes its reasoning back into Keap as a note with Create a Note and opens a dated follow up with Create a Task so the thinking is on the record even if I never open the app again. It then returns the recommendation, the drafted message, and its confidence into the app, where it appears on the row as a pending save play I can read, edit and approve. Nothing customer facing and no billing retry happens off the back of the agent: a human approves in the app before anything sends.
Bake in these Keap details. Monetary amounts are decimal values in whole units of the account currency, for example 12.50, not minor units, so never divide by one hundred. Keap v2 resource IDs are strings and v1 resource IDs are integers, so never cross an ID from one version into the other. The v2 list endpoints use cursor pagination with page_size plus page_token and return a next_page_token, so page through fully when building the subscription, order and contact sets rather than reading only the first page, and cache the joined result so the tabs do not refetch everything on every switch.
The app should remember its own settings across sessions: the recovery tag, the Slack channel, the grace window, the renewals window, and the lifetime spend threshold above which a subscriber is marked as worth a call. It should also keep a local action log of what was retried, tagged, noted, tasked or approved and when, so an at risk row I already handled today shows as handled instead of nagging me again tomorrow.
What does this prompt do?
- Totals your monthly recurring revenue across every active subscription and breaks it down by plan, so you can finally see what your book of recurring business is worth.
- Gives you a renewals tab showing everything due to bill in the next 30 days, and an at risk queue of subscriptions whose last expected charge never produced a successful order.
- Lets you act straight from a row: retry the due billing cycle, apply a recovery tag, log a note, open a dated follow up task, and push the day's at risk list to Slack.
- Adds a Build a save play button that sends a background assistant to read that customer's order history and tags, decide between retrying the card and reaching out, and hand you a drafted message to approve.
What do I need to use this?
- A Keap account (formerly Infusionsoft) with active subscriptions and order history
- Permission to connect Keap so the app can read subscriptions, plans, products, contacts and orders, and write notes, tasks and tags back
- The name of the Keap tag you want applied when a subscription goes into a recovery play
- A Slack workspace and a revenue channel, if you want the one click at risk push (optional)
How can I customize it?
- Change the grace window before a subscription counts as at risk. The default waits out Keap's own three retry attempts rather than flagging the moment a cycle date passes.
- Swap the renewals window from 30 days to whatever matches your billing rhythm, and choose whether to group renewals by day or by week.
- Pick the Slack channel that receives the at risk list, the recovery tag that gets applied, and the lifetime spend figure above which a subscriber is worth a phone call rather than an email.
FAQs
Does this change anything in my Keap account on its own?
How is the monthly recurring revenue figure worked out?
Why is a subscription flagged as at risk when the customer says they already paid?
Can I use this without Slack?
Will the assistant email my customers directly?
Related templates
Plan every email and SMS send on one calendar, see how past campaigns performed inline, and let an assistant write and file the next draft in Klaviyo.
Open any campaign, pick this month versus last, and have a written client report drafted into Google Docs and posted to their Slack channel.
Work every form enquiry from one queue that already tells you who is new, who is a duplicate and who has a deal open, then push only what you approve.
See every sending domain as Active, Reserve or Retiring, watch your bench against the 20 to 25 percent target, and refill it before a domain burns.
See duplicate Keap contacts side by side with their orders and tags in view, merge the right record on purpose, and retire the tags nobody uses.
Pick a client, get ranked domain suggestions with live prices, and buy domains and mailboxes in one confirmed step instead of juggling tabs and a spreadsheet.
Stop finding out about broken subscriptions a month late.
Build the Keap recurring revenue screen your reporting never gave you, with a renewal calendar and a working at risk queue in one place.