Most founders I know refresh the Stripe dashboard five or six times a day. They scroll the timeline, mentally subtract this morning's failed-payment notification, and decide whether the week is good or bad based on a vibe. The vibe is usually wrong, in both directions. A few good days bury a slow churn drift; a few bad days panic a quarter that is fine. Stripe is a system of record, not a reporting tool, and using it that way costs an hour a day in scroll plus a percentage of conviction.

The fix is a 90-second morning digest. One Slack message with MRR, net new, churn, expansion, failed payments, and any flagged anomalies. Posted at 9 a.m. local time, before the inbox opens. A weekly version on Monday with cohort retention and plan-level breakdown. Pulled nightly from the Stripe API, computed with the same math Baremetrics and ChartMogul use, never touching the account. This post is how that agent is built and what it should and should not do.

What this agent does

Once a night, the agent pulls subscriptions, invoices, charges, refunds, and balance transactions from Stripe. It normalizes every recurring price to a monthly equivalent, computes the five MRR movements for the previous day and the trailing 7 and 30 days, breaks the numbers down by plan and signup cohort, runs anomaly detection on every series, and posts a digest to Slack or email at the time you configured.

What it does not do: charge customers, refund customers, change subscriptions, send dunning emails, or modify any Stripe object. That is a different agent. Specifically, the failed-payment recovery one. See AI agent for Stripe failed-payment recovery for that pattern. This agent reports, the sibling agent acts. Keeping them separate is the whole point of the read-only scope. For the broader read-only versus write distinction, see what an AI agent can actually do.

Sources of truth

Stripe is the only source for revenue numbers. The agent does not maintain a parallel ledger. It reads, normalizes, and reports.

The first run reads the trailing 13 months so the agent can compute year-over-year and the full cohort grid. Subsequent runs are incremental, using the created[gte] filter on each list endpoint and a saved cursor for events. Stripe's API is paginated and rate limited; the agent respects both, with retries on 429 and an exponential backoff. The math itself is well documented; ChartMogul and Baremetrics both publish how they compute MRR, and the agent follows the same rules with no creative deviation.

The metrics that matter

Six metrics matter for a founder running a subscription business. The agent computes all six on every run.

Each metric carries a breakdown by plan and a cohort overlay. The plan breakdown is what stops a founder from being surprised when a single popular plan is masking a problem in another.

Anomaly detection logic

Anomaly detection on small subscription businesses is a trap if you use generic thresholds. A 3 percent daily churn is alarming for a 10,000-customer SaaS and meaningless for a 200-customer one. The agent uses your own rolling baseline, not a textbook number.

Four detectors run on every batch.

Each anomaly is one line in Slack with the metric, the magnitude, the affected customer count, and a link to the underlying list of subscription IDs. The agent never speculates on cause; it surfaces what changed and lets the founder click through.

Digest formats

Two digests, both pushed.

Daily, 9 a.m. local. Six lines. Yesterday's net new MRR with the delta against the 14-day average. Count of new paying customers. Count of churns. Count of failed payments. Anomaly flags, if any. A link to the full snapshot page. The whole thing fits on a phone screen and reads in under 30 seconds. The Slack integration pattern is in how to connect an agent to Slack.

Weekly, Monday 8 a.m. local. Longer. MRR by plan with last-week comparison. Expansion and contraction broken out. Cohort retention heatmap for the last 6 months as an embedded image. Top 5 expansions and top 5 churns, each with the plan and customer tenure, no names or emails. A trailing-30 versus prior-30 view of the failed-payment rate. The weekly is for the Monday review meeting or the solo planning hour.

Both digests are also available as a static HTML snapshot in case Slack is down or the founder wants to share the link with an investor.

Guardrails

Common mistakes

Frequently asked questions

Does the agent touch my Stripe account?

No. The agent is read-only. It uses a restricted Stripe API key with read scopes on customers, subscriptions, invoices, charges, and balance transactions. It cannot create, modify, or refund anything. If you want an agent that acts on failed payments, that is a separate sibling agent with its own narrow write scope.

How does the agent calculate MRR so I can trust the number?

It walks active subscriptions, normalizes every interval to a monthly equivalent (annual divided by 12, quarterly divided by 3), subtracts coupon and percentage-off discounts, ignores one-time invoice items, and excludes subscriptions in trialing or incomplete status. Movements are decomposed into new, expansion, contraction, churn, and reactivation. The math matches the ChartMogul and Baremetrics definitions, with the same exclusion rules.

What anomalies does it flag?

Spikes or drops in MRR larger than the rolling 14-day standard deviation, a cluster of three or more churns from the same plan or signup cohort in a 48-hour window, a refund rate that exceeds the 30-day baseline, and a failed-payment rate that exceeds the 7-day baseline. Each anomaly is a Slack message with the underlying customer count and the suggested next step. The agent never guesses cause; it surfaces signal.

What goes in the daily digest versus the weekly digest?

Daily is a 6-line Slack post: yesterday's net new MRR, count of new customers, count of churns, count of failed payments, anomaly flags, and a link to the full snapshot. Weekly is longer: MRR by plan, expansion and contraction, retention cohort heatmap for the last 6 months, top 5 expansions, top 5 churns with their plan and tenure, and a comparison to last week. The daily fits on a phone screen; the weekly is for the Monday review.

Why not just use Baremetrics or ChartMogul?

You can. The agent is for founders who do not want a third dashboard, do not want another login, and want the numbers pushed to where they already work each morning. The math is the same. The difference is delivery surface and anomaly detection that is tuned to your own baseline rather than a generic threshold.

Three takeaways before you close this tab

Sources