How to Monitor Stripe Subscriptions in Slack
Stripe gives you no upgrade, downgrade, or cancel event and no MRR number — just a raw firehose. Here's how to turn it into clean Slack alerts with the MRR delta on every message.
Stripe gives you no upgrade, downgrade, or cancel event and no MRR number — just a raw firehose. Here's how to turn it into clean Slack alerts with the MRR delta on every message.
To monitor Stripe subscriptions in Slack, you need three things Stripe doesn't hand you: a way to tell an upgrade from a downgrade from a cancellation, a monthly-normalized MRR number for each change, and a channel where the whole team can see it. Stripe fires one raw customer.subscription.updated firehose for almost everything — no upgrade event, no cancel event, no MRR figure. This guide covers which events actually matter, the gotchas that trip people up, and how ChargeBell turns each change into a plain-English Slack alert with a signed MRR delta on every message.
Short answer
Watch four subscription events — created, updated, trial_will_end, and deleted — and inspect status plus previous_attributes to tell new subs, plan changes, trials ending, and cancellations apart. Normalize each amount to a monthly figure yourself, or let ChargeBell do the diffing and post a Slack alert with the MRR delta already computed.
Stripe emits a handful of subscription-lifecycle webhooks, but only four map cleanly to the moments a SaaS operator cares about. The rest are variations on these.
incomplete if you use payment_behavior=default_incomplete, so a brand-new sub isn't always immediately paying.cancel_at_period_end toggle. This is the firehose. Everything interesting and everything boring arrives here.trial_end (or immediately if the trial is shorter than 3 days). Your cue to remind the customer to add a card before the trial converts.canceled is a terminal state that can't be updated, so this is your signal to revoke access.Two more show up if you use pause behavior: customer.subscription.paused (a trial ends with no payment method and trial_settings.end_behavior.missing_payment_method is set to pause, so invoicing stops) and customer.subscription.resumed (a card gets attached and billing un-pauses). Most teams can start with the four above. If you're deciding the full set to watch, see what Stripe events a founder should monitor.
Here's the catch: there is no `upgrade`, `downgrade`, or `cancel` event. All three arrive as customer.subscription.updated, and it's on you to tell them apart. Every payload carries an object (the new state) and a previous_attributes object (only the fields that changed, with their old values). To know what really happened, you diff one against the other.
previous_attributes. If the price didn't change, the updated event is probably just a metadata edit or a status flip, not something worth a Slack ping.trialing → active (converted), trialing → canceled (churned), or trialing → past_due/incomplete (payment failed). Same event, very different meaning.The costly bug
If you handle subscription.updated without checking status, you'll treat canceled trials and failed payments as successful conversions — granting paid access to people who never paid. Always read status before you act on the change.
There's a config trap too: `trial_will_end` has to be added explicitly to your webhook endpoint's event list in the Stripe Dashboard (Developers → Webhooks). A generic "all subscription events" selection commonly misses it, so trial reminders silently never fire. This is one of many reasons founders eventually stop maintaining their own handler — see ChargeBell vs. custom Stripe webhook code.
Stripe never tells you the MRR impact of a change — it just reports raw amounts on whatever billing interval each price uses. To get a comparable monthly number you have to normalize every item:
interval_count (a price billed every 3 months isn't the same as monthly).quantity — forget this and a 5-seat plan under-reports by 80%.Get this right and a subscription change slots into one of five MRR-movement buckets: New (new customers), Expansion (upgrades and add-ons), Contraction (downgrades), Churned (cancellations), and Reactivation. Net new MRR = New + Expansion − Contraction − Churned. Tracking the buckets tells you not just *whether* MRR moved but *why*. (Historical MRR from raw Stripe data is famously fiddly — the subscription object only holds current state, so you can't reconstruct past price changes from it alone.)
ChargeBell does the diffing and the monthly normalization for you, then posts a plain-English Slack alert with a signed MRR delta on every subscription message. It reads the same webhooks described above through official read-only Stripe Connect OAuth — it can see subscription events but can never move money or change anything. Its subscription alert catalog maps exactly to the four moments that matter:
The delta is normalized to monthly using the same year ÷ 12, week × 4, day × 30, times-quantity method above — so the number on the alert is the real MRR impact, not a raw price. Here's what a new subscriber looks like in Slack:
🎉 New subscriber — Acme Corp on Pro (monthly)
$49.00/mo
MRR impact: +$49.00/mo · View in Stripe
And a plan change, where the signed delta tells the whole story at a glance:
⬆️ Plan upgraded — Growth (annual)
+$83.33 per month, effective today
Starter → Growth, billed yearly · MRR impact: +$83.33/mo
Cancellations and trial reminders land the same way — a lost-MRR figure on the churn, and a dated heads-up before a trial converts:
😕 A subscriber canceled — Pro plan
Subscription ended · $99.00/mo
MRR impact: −$99.00/mo · View in Stripe
Every message carries a deep-link back to the exact Stripe object, so a one-line ping in Slack is one click from the full record. That per-event, per-object precision — with the MRR delta inline — is the core difference from generic recipes and metrics dashboards. For the money-in side of the same feed, see how to get Stripe payment notifications in Slack.
Create your account
Sign up at app.chargebell.com — no card needed on the free plan.
Connect Stripe
One-click, read-only OAuth. ChargeBell sees subscription events and can never move money or edit anything in your account.
Connect Slack
Add the app and pick a channel — send wins to #wins and churn to #founders if you like. It only posts to channels you choose.
Turn on the subscription alerts
new_subscriber, plan_changed, and subscription_canceled are on already. Toggle trial_ending on if you run trials.
Send a test alert
Confirm it works before your next real subscription change lands. You'll get your first alert before your coffee cools.
Per-event alerts are great for the moment something happens, but you also want the shape of the week. ChargeBell's weekly digest sums the stored MRR delta from every delivery into New MRR (new subscribers), Upgrade MRR (positive plan changes), and Churned MRR (all negative deltas), then reports a Net change and a "biggest win" line for the largest single positive mover:
📊 Weekly MRR movement (last 7 days)
New: +$294 (6 subs) · Upgrades: +$166 · Churned: −$148 (2 cancels)
Net change: +$312 · Biggest win: Acme Corp upgraded, +$83/mo
It also caches a live MRR and active-subscriber snapshot for your org. Digests are part of the Pro plan; on the free plan you still get every subscription alert in real time, up to 100 alerts a month with 7 days of history.
The most direct comparison for "MRR movements in Slack" is ProfitWell Metrics (now maintained by Paddle). It's genuinely strong and 100% free: it posts real-time Slack notifications for new signups, upgrades, downgrades, cancellations, and failed payments, lets you pick notification types, adjust frequency, and filter by transaction size — plus full revenue dashboards (MRR, churn, LTV) beyond the alerts. Setup is a few clicks. Here's an honest side-by-side:
| Criterion | ChargeBell | ProfitWell Metrics |
|---|---|---|
| Free Slack alerts for subscription events | ||
| Signed MRR delta inline on every alert | ||
| Deep-link to the exact Stripe object per message | ||
| Distinguishes upgrade vs. downgrade automatically | ||
| Full revenue-metrics dashboards (churn, LTV) | ||
| Data source | Direct read-only Stripe OAuth | ProfitWell ingestion of Stripe |
| Quiet hours, per-channel routing, digests | ||
| Pricing | Free 100/mo · Pro $24/mo | Free |
ChargeBell
Strengths
Trade-offs
ProfitWell Metrics
Strengths
Trade-offs
ProfitWell is excellent if you primarily want a free metrics dashboard with occasional Slack summaries. ChargeBell is the better fit if you want a precise, per-subscription-event Slack feed with the MRR delta and a Stripe link on every message. Generic Zapier "Stripe → Slack" recipes can send the events too, but you'd build the MRR normalization and upgrade/downgrade detection yourself — more on that in ChargeBell vs. Zapier.
Key takeaways
previous_attributes and normalize intervals yourself.status, or canceled trials and failed payments look like successful conversions.customer.subscription.trial_will_end to your webhook endpoint explicitly — it's easy to miss.Connect Stripe and Slack, pick a channel, and get new subs, plan changes, and cancellations with the MRR delta on every alert. Free plan, no card needed.
Four cover almost everything: customer.subscription.created (new sub), customer.subscription.updated (any change — plan switch, coupon, status flip), customer.subscription.trial_will_end (3 days before a trial converts), and customer.subscription.deleted (fully ended). Add subscription.paused and subscription.resumed if you use pause behavior.
There's no dedicated event — both arrive as customer.subscription.updated. Compare the old price in previous_attributes against the new price on the object: higher is an upgrade (expansion MRR), lower is a downgrade (contraction MRR). ChargeBell does this diff for you and prints a signed MRR delta on the alert.
Yes. Every subscription alert carries a signed MRR delta, normalized to a monthly figure (yearly ÷ 12, weekly × 4, daily × 30, times item quantity): positive for new subs and upgrades, negative for downgrades and cancellations. The weekly digest sums these into New, Upgrade, Churned, and Net MRR.
customer.subscription.trial_will_end has to be added explicitly to your webhook endpoint's event list in the Stripe Dashboard. A generic "all subscription events" selection often misses it. In ChargeBell the trial_ending alert is off by default — toggle it on if you run trials.
No. ChargeBell connects through official read-only Stripe Connect OAuth. It can see subscription events to send alerts, but it can never move money, cancel, upgrade, or edit anything in your Stripe account. You can disconnect in one click and your data is deleted with it.
Yes. ChargeBell's free plan sends every subscription alert in real time — up to 100 alerts a month with 7 days of history. Daily and weekly MRR digests and full history are on the Pro plan ($24/month or $240/year). ProfitWell Metrics is another free option, geared more toward dashboards than a per-event feed.
You don't need another dashboard. You need the handful of Stripe events that actually move the business pushed into Slack — new subs to celebrate, failed payments to save. Here's the setup.
July 6, 2026
Stripe emits hundreds of event types. Only about a dozen deserve a founder's attention — and only three should ever interrupt your day. Here's the shortlist, ranked.
July 6, 2026
There are three free ways to pipe Stripe payments into Slack, and each stops at a bare 'you got paid' message. Here's how each works — and the fast path to alerts that actually show net, customer, and MRR.
July 6, 2026