# 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.

- Workflow type: agent
- Services: Recurly, Slack, Google Sheets
- Categories: Finance, Operations
- Published: 2026-08-09

## What it does

- 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 you'll need

- 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

## Prompt

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.

## How to customize

- 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.

## FAQ

### Do I need to build spreadsheet formulas or a dashboard to get this?

No. The digest is written for you in plain English and posted to Slack, and the spreadsheet is only used to keep a simple weekly history so the comparison to last week is accurate.

### What happens on the very first run, when the tracker is still empty?

You get the full digest for the week, with a note that there is no prior week to compare against yet. The first row is written to the tracker, and from the second week onward every digest includes a real week over week comparison.

### Will it work if we bill customers in more than one currency?

Yes. The totals are grouped by currency so that amounts are never added together across currencies, and the Slack message reports each one separately.

### Can I run this more often than once a week?

Yes. You can change the schedule to daily, twice weekly, or monthly, and the reporting window and the tracker rows follow whatever schedule you pick.

### How does it decide which accounts are the biggest revenue risks?

It looks at the accounts carrying the largest unpaid balances, accounts with repeated failed payments in the week, and any high value subscription that was just cancelled, then calls out the two or three worth your attention.

Use this prompt in General Input: https://www.generalinput.com/prompts/weekly-recurly-subscription-revenue-and-churn-digest-in-slack