Monthly SaaS cohort retention and MRR report in Slack

By General Input

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.

Integrations

  • Stripe
  • Daytona
  • Slack Bot

Type

Agentic Task

Categories

  • Finance

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.

Related prompts

Explore more prompts
Let support send one-off Loops emails without an engineerA brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonCustomer lifecycle inspector for Loops, Stripe and PostHogLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsLinkedIn Ads budget pacing dashboard for every client account