Weekly Recurly subscription revenue and churn digest in Slack
Every Monday at 8am, see what your subscription base actually did last week: new signups, cancellations, cash collected, and which accounts are at risk.
Every Monday at 8am, produce a subscription revenue and churn digest for the previous seven days from Recurly, post it as a short narrative message in Slack, and append the week's numbers to a Google Sheets tracker.
The reporting window is the week that just ended: Monday 00:00:00 through Sunday 23:59:59 in our billing timezone. Use that window for every movement metric. The one exception is the past due balance, which is a point in time snapshot taken at the moment the workflow runs, not a windowed figure.
Pull the data with the Recurly List Subscriptions, List Invoices and List Transactions operations. Filter each one with begin_time and end_time for the window, and sort by updated_at ascending so the cursor stays stable while records change underneath. Page through every result set while has_more is true by following the next path, and use a page size near the 200 maximum so the run stays well inside the rate limit. Recurly is not a polling source here, so the seven day window comes entirely from these filters rather than from the trigger.
From that data, work out five numbers. New subscriptions started: subscriptions that became active inside the window. Subscriptions cancelled or expired: subscriptions that moved to cancelled or expired inside the window, counted together as churn for the tracker but worth separating in the narrative when one dominates. Total successfully collected: the sum of successful payment transactions in the window. Declined transaction value: the sum of failed or declined transactions in the window. Outstanding past due balance: the total unpaid balance across invoices currently in a past due state. Amounts are decimal values in each resource's own currency, so if the site bills in more than one currency, group the totals by currency and never add across them.
Before writing anything, read the most recent existing row from the tracker with the Google Sheets Get Values operation and treat it as the real prior week baseline. The week over week comparison must come from that row, not from re-deriving history out of Recurly and not from an estimate. If the tracker is empty because this is the first run, say plainly in the digest that there is no prior week to compare against yet.
Then send the digest to Slack with the Send a Message operation, to the revenue channel I select. Write it as a short narrative rather than a table dump. Lead with the headline numbers: new subscriptions, cancellations, collected, declined, and past due. Follow with one or two plain English sentences on what actually changed versus the prior week, naming the direction and the rough size of each move, for example collections up 12 percent while declined value nearly doubled. Close by naming the two or three accounts that are the biggest revenue risks right now, each with the account name or code, the amount at stake, and a one line reason such as the largest past due balance, repeated declines this week, or a high value subscription that just cancelled. Keep the whole message under about 200 words and skip filler.
After the Slack message goes out, append exactly one row to the tracker with the Google Sheets Append Values operation, in this fixed column order: week ending date as YYYY-MM-DD using the Sunday of the window, new subscriptions, cancellations, collected, declined, past due. The row must carry the same numbers that were reported in Slack so the trend and the narrative never disagree. Append after reading the prior row, never before, so the comparison is never made against the row this run just wrote.
If a Recurly call fails or the window returns no usable data, post a short Slack message saying the digest could not be produced and why, and do not append a row to the tracker. A missing week is recoverable, but a zero filled row silently corrupts the trend.
What does this prompt do?
- Every Monday morning, pulls last week's subscriptions, invoices and payments from your billing account and works out the numbers that actually matter.
- Posts a short, readable Slack update with new signups, cancellations, money collected, failed payments, and the total still owed.
- Names the two or three accounts putting the most revenue at risk right now, with the amount at stake and a one-line reason.
- Adds one row a week to a Google Sheets tracker and reads the previous row first, so the week over week comparison is real rather than guessed.
What do I need to use this?
- A Recurly login with permission to view billing data
- A Slack workspace and the channel where the digest should land
- A Google account and a spreadsheet to use as the weekly tracker
- About five minutes the first time to pick the channel and the tracker sheet
How can I customize it?
- Change the timing. Monday at 8am is just a default, and month end or twice weekly works the same way.
- Send it wherever your team already looks, whether that is a revenue channel, a leadership channel, or a direct message.
- Set your own risk threshold, for example only flag accounts with a past due balance above a number you choose.
- Add columns to the tracker, such as refunds or net revenue, and they get filled in every week from then on.
FAQs
Do I need to build spreadsheet formulas or a dashboard to get this?
What happens on the very first run, when the tracker is still empty?
Will it work if we bill customers in more than one currency?
Can I run this more often than once a week?
How does it decide which accounts are the biggest revenue risks?
Related templates
When your flight moves, your calendar times get corrected automatically and you get a Slack note naming the meetings you're about to miss.
Every 15 minutes, forwarded phishing reports get traced back to the server that really sent them, with a verdict in Slack and the worst senders reported.
Every Monday, check every S3 bucket for public exposure, missing encryption and weak backup settings, then get the risks ranked in Slack.
Every weekday at 7am, sign in to the tender portals you track, filter new notices against your bid criteria, and open a deal for the ones worth chasing.
Every weekday at 4pm, spot the threads that went quiet, stage a ready-to-send nudge in your mailbox, and get a ranked Slack recap.
Every Monday, rank the week's matches by expected demand, put the big ones on your venue calendar, and post a rota-ready summary to Slack.
Stop rebuilding your churn numbers every Monday morning.
Let the weekly revenue and churn digest write itself, land in Slack before your first meeting, and build your trend line while you read it.