Monthly SaaS cohort retention and MRR report in Slack
On the first business day of every month, build a real cohort retention matrix and MRR chart from your Stripe data and post it to Slack. No ChartMogul subscription needed.
On the first business day of every month at 9am ET, build a real SaaS cohort retention and MRR report from my Stripe account and post it to Slack so I do not have to pay for ChartMogul or Baremetrics.
Trigger: cron, first business day of each month at 9am America/New_York.
Step 1. Pull the last 24 months of data from Stripe. Use List Customers, List Subscriptions, and List Invoices, paginating through every page. Keep the raw records as JSON so the analysis script can pivot them however it needs.
Step 2. Spin up a fresh Daytona sandbox with Create Sandbox using a Python image that has pandas and matplotlib available. Write the Stripe JSON into a working directory inside the sandbox.
Step 3. Run the analysis with Run Code in Sandbox. The Python script should do the work an aggregate digest cannot:
A logo retention cohort matrix with acquisition month on the y-axis and months since signup on the x-axis, rendered as a heatmap PNG.
An MRR-by-month line chart with stacked layers for new MRR, expansion MRR, contraction MRR, and churned MRR, rendered as a PNG.
Computed current MRR, net revenue retention (NRR), and gross revenue retention (GRR), printed as structured output the agent can read back.
Normalize annual subscriptions into monthly MRR (annual amount divided by 12). Treat a customer as churned in the month their last active subscription cancels.
Step 4. Use Daytona Download File to pull the two generated PNG charts out of the sandbox.
Step 5. Post the report to Slack. Use Slack Bot Upload a File twice (once per chart) into the configured channel, then use Slack Bot Send a Message to post a short written summary in the same channel. The summary should call out current month MRR, NRR and GRR percentages, the largest cohort drop observed, and any new churn pattern worth investigating. The agent's judgement matters here: which cohorts to highlight, how to phrase the narrative, and what counts as a real anomaly versus normal noise.
Step 6. Clean up with Delete Sandbox so nothing keeps running between monthly reports.
Keep the Slack summary tight, three to six sentences plus a one-line headline. Use plain English, no jargon dump. If the script fails or Stripe returns no data for the period, post a single message explaining what went wrong instead of charts.
Additional information
What does this prompt do?
- Pulls the last 24 months of customers, subscriptions, and invoices from your Stripe account on the first business day of every month.
- Builds a logo retention cohort matrix that shows how many customers from each signup month are still around, plus an MRR chart split into new, expansion, contraction, and churned layers.
- Calculates current MRR, net revenue retention, and gross revenue retention the same way Baremetrics and ChartMogul do.
- Posts the charts as image attachments in Slack along with a short written summary that calls out the largest cohort drop and any churn pattern worth investigating.
What do I need to use this?
- A Stripe account with read access to customers, subscriptions, and invoices.
- A Daytona account, used to run the Python analysis in a clean sandbox.
- A Slack workspace and the channel where the report should be posted.
How can I customize it?
- Change the cadence. Monthly on the first business day is the default, but a weekly Monday run works the same way.
- Pick the Slack channel and choose whether the agent posts to a finance channel, a founders DM, or both.
- Adjust the lookback window if you want more or less than 24 months of cohort history.
Frequently asked questions
Why use this instead of paying for ChartMogul or Baremetrics?
How accurate are the numbers compared to a dedicated SaaS analytics tool?
Can I get this weekly instead of monthly?
What if I sell a mix of monthly and annual subscriptions?
Where do the charts in Slack come from?
Stop paying for SaaS analytics tools you barely open.
Connect Stripe, Daytona, and Slack once. Geni runs your cohort retention and MRR report on the first business day of every month and posts it where your team already lives.