Automate Your Stripe MRR Digest With a Telegram AI Agent
Get a 9am Telegram digest with MRR delta, new subs, cancels and one-line context. Read-only Stripe key, no $108/mo dashboard, no dashboards to open.

You Already Check Stripe Every Morning. Stop Opening The Dashboard.
If you run a small SaaS, the first thing you do most mornings is open Stripe. You look at the same three or four numbers. MRR. New subscriptions overnight. Any cancellations. Maybe failed payments. Then you close the tab and start your day.
The dashboards that promise to solve this start at real money. Baremetrics Metrics is $208 per month for the standalone analytics product. ChartMogul is free under $10K MRR, then jumps to $100 per month at Scale and adds $25 per month for each additional $10K of MRR you cross. Both will email or Slack-message you a digest. Both will also give you a churn cohort matrix, a forecasting model, a dunning workflow and ten other features you do not use.
If the only thing you actually want is "what changed in Stripe overnight, in one message, at 9am" you are paying $108 to $474 per month for the wrong product. The thing you want is a daily report, not an analytics suite. Those are completely different problems and the second one is solvable in an afternoon with a Telegram AI agent, a read-only Stripe key and a single scheduled task.
What An Actually Useful Stripe Digest Contains
Before you automate anything, write the digest you wish you woke up to. For a bootstrapped SaaS the useful set is small:
- MRR right now, and the delta vs 24 hours ago. One headline number with a sign.
- New paying subscriptions overnight. Plan, customer email, MRR contribution.
- Cancellations overnight. Plan, customer email, MRR you just lost.
- Plan changes. Upgrades and downgrades net out into expansion and contraction MRR.
- Failed payments worth knowing about. Anything over $50, anything on a customer with more than 3 months of tenure.
- One contextual line. "Net +$47 MRR, expansion outpaced churn 3 to 1, biggest move was Acme upgrading to Pro" hits very differently than a list of numbers.
That is a 10 line message. You do not need a $208 dashboard. You need a read-only Stripe key, a Telegram chat and one scheduled job that runs at 9am local time.

The Recipe: One Skill, One Daily Job, One Read-Only Key
The trick is keeping the scope very small. You do not need to recompute MRR from raw invoice.payment_succeeded events. You do not need a queryable database. You need one daily summary, written by the agent, delivered to your phone.
Step 1: Create a read-only Stripe key
This is the single most important security step. Stripe's restricted API keys let you grant Read permission on specific resources and None on everything else. For an MRR digest you only need read on:
- Subscriptions
- Customers
- Invoices
- Prices and products
Set every other resource to None. The key cannot create charges, cannot refund anything, cannot change a subscription, cannot read your Connect platform data. If the key leaks, the worst an attacker can do is see the same numbers you are seeing. Stripe explicitly recommends restricted keys over secret keys, especially when giving the key to an AI agent.
Store the key in your agent's secrets, never in code, never in a prompt. Hermes Agent encrypts secrets at rest and never exposes them to the model.
Step 2: Write a small stripe-reader skill
The skill is a thin wrapper around the Stripe API that returns one JSON blob per morning:
# skills/stripe-reader/main.py
import stripe, os, datetime as dt
stripe.api_key = os.environ["STRIPE_RESTRICTED_KEY"]
since = int((dt.datetime.now(dt.timezone.utc) - dt.timedelta(hours=24)).timestamp())
# Active MRR right now
active = stripe.Subscription.list(status="active", limit=100, expand=["data.items"])
mrr_now = sum(_monthly_normalize(item) for sub in active.auto_paging_iter() for item in sub["items"]["data"])
# Events in the last 24 hours that affect MRR
new_subs = list(stripe.Subscription.search(query=f"status:'active' AND created>{since}").auto_paging_iter())
canceled = list(stripe.Subscription.search(query=f"canceled_at>{since}").auto_paging_iter())
plan_changes = list(stripe.Event.list(type="customer.subscription.updated", created={"gte": since}).auto_paging_iter())
return {
"mrr_now_cents": mrr_now,
"new_subs": [_pluck(s) for s in new_subs],
"canceled": [_pluck(s) for s in canceled],
"plan_changes": [_pluck_event(e) for e in plan_changes],
"failed_payments": _list_recent_failed_invoices(since),
}
Two notes on the math. First, Stripe's own definition of MRR is the sum of monthly-normalized amounts of all active subscriptions, so an annual $290 plan contributes $24.17 to MRR, not $290 (Stripe's MRR docs). Second, a cancellation only stops counting toward MRR once it expires, not the moment the customer clicks Cancel - so "cancellations overnight" in your digest should include both canceled_at events and current_period_end events that landed in the last 24 hours.
This is exactly the kind of nuance that makes calculating MRR from raw Stripe data tricky when you try to build a full analytics pipeline. For a once-a-day digest you can afford to be slightly imprecise - the dashboards your eyes are calibrated against do the same.

Step 3: One scheduled job at 9am
Give your Hermes Agent a single cron line in natural language:
every weekday at 9am Madrid time, run the stripe-reader skill
and send me a Telegram digest. Headline: MRR right now and delta
vs yesterday. Then list new subs, cancels, plan changes and
failed payments over $50. End with one line of context about
what dominated the day.
That is the entire prompt. The agent calls the skill, gets the JSON, writes the message, and sends it to your Telegram chat. With enabled_toolsets=["stripe-reader","telegram"] scoped to this job, the LLM only ever sees the numbers it needs and the Telegram send tool - it cannot accidentally call anything else. This is the same pattern we used in the crypto digest playbook and the general scheduled-tasks guide for Hermes Agent.
Why The Agent Layer Earns Its Keep
A flat report could be done by a 50-line Python script. The reason to put an agent in front of it is the contextual line at the end of the message.
A bare report says:
MRR $4,217. +$47 vs yesterday. 2 new subs. 1 cancel. 3 plan changes. 1 failed payment.
A contextual report says:
MRR $4,217 (+$47, +1.1%). Expansion beat churn 3 to 1 - Acme upgraded from Starter to Pro ($30 MRR), Beta Co added a seat ($10). One Starter cancel ($19) cited "moving to Notion AI" in the exit survey. Net +$47, second-best day this month.
Same numbers, very different message. The first one is something you skim. The second one is something you act on - you might reach out to the Starter cancel, you might message Acme to thank them, you might check whether the exit survey reason is showing up in other cancels. That diagnosis layer is what costs $108 per month at Baremetrics and it is what a small AI agent gives you for the price of a cheap VPS plus your own model usage.
What This Costs
Honest math for a bootstrapped SaaS in the $0 - $10K MRR range:
| Tool | Monthly cost | What you get | |---|---|---| | Baremetrics Metrics | $208 | Full analytics suite, weekly digest email | | ChartMogul Scale | $100 + $25 per +$10K MRR | Full analytics suite, configurable alerts | | ProfitWell | $0 baseline | Limited free metrics, upsells into Recover and Retain | | Hermes Agent + Hermify Starter | $19/mo + ~$2 in model usage | One Telegram digest at 9am, full ownership of read-only key and prompt |
You do not get cohort retention curves, you do not get a public dashboard, you do not get a dunning workflow. You get the one report you actually open and you get it on your phone before you sit down. For most bootstrapped founders under $10K MRR, that is the entire job.
If you cross $10K MRR and start needing the dunning piece, you can keep the agent for the daily digest and add ChartMogul Launch (free under $10K) or a focused tool for the specific gap. The agent does not lock you in.
Getting Started
The full setup is:
- Create a restricted Stripe API key with read on subscriptions, customers, invoices, prices and products. None on everything else.
- Drop the key into your Hermes Agent secrets.
- Add the
stripe-readerskill - you can write your own or fork the public Hermes skills repo. - Add one cron line in natural language.
- Verify the first 9am digest lands in your Telegram.
If you want the whole stack hosted, monitored, and on a managed Telegram bot, get started with Hermify on the $19/mo Starter plan. You bring your own model key and your read-only Stripe key, we run the runtime, the cron and the bot. The same pattern works for crypto digests, competitor tracking, and the rest of the automation cluster we have been shipping over the past month.
The dashboard you open every morning costs $108. The dashboard that comes to you costs $19.
Sources
- Calculating MRR in Stripe Billing - Stripe Help & Support
- Impact of subscription cancellations on MRR - Stripe Help & Support
- Common events that affect MRR totals - Stripe Help & Support
- Restricted API keys - Stripe Documentation
- Best practices for managing secret API keys - Stripe Documentation
- ChartMogul vs Baremetrics vs MRR.io pricing - Baremetrics blog
- ChartMogul pricing on G2
- Calculating MRR from raw Stripe data is tricky - Steven Wang on Medium
Run Your Own Hermes Agent
Bring your API key, connect Telegram, and get a self-improving AI agent live in 60 seconds.
Get Started