Subscription
A Stripe subscription bills a customer on a repeating schedule until it is canceled. Learn its statuses, the events it fires, and which changes to watch.
Updated October 1, 2026
A subscription is an agreement to charge a customer on a repeating schedule, such as $49 every month or $480 every year, until someone stops it. For a SaaS product, membership, or subscription box, it's the object that turns one signup into revenue you can count on next month. Its changes decide whether that revenue grows or shrinks.
How Stripe subscriptions work
A Stripe Subscription links a customer to one or more recurring prices. Each billing period, the subscription creates an invoice, and Stripe tries to collect it from the customer's saved payment method. For automatically charged invoices, Stripe waits about an hour after creating the invoice before it attempts payment.
If changes need to happen on a timeline, such as an introductory price that rises after three months, attach a subscription schedule to the subscription.
Stripe subscription statuses
The status field shows where the subscription stands.
trialingmeans the customer is in a free trial and hasn't paid yet.activemeans the subscription is in good standing.incompletemeans the first payment failed or needs customer authentication. The customer has 23 hours to pay. After that the status becomesincomplete_expiredand the subscription never bills.past_duemeans a renewal payment failed and Stripe is retrying.unpaidandcanceledare where a subscription can land after retries run out, depending on your Dashboard settings.pausedmost often means a free trial ended without a payment method and you chose to pause instead of cancel.
Subscription events
Every change fires an event. These are the ones to know:
customer.subscription.createdfires when a subscription is created, even if its status istrialingorincomplete.customer.subscription.updatedfires when the plan, quantity, coupon, or status changes, including a trial becoming active.customer.subscription.trial_will_endfires three days before a trial ends.customer.subscription.deletedfires when the subscription ends.customer.subscription.pausedandcustomer.subscription.resumedfire when a subscription enters or leavespaused.
Why the lifecycle matters
A new subscription isn't money collected. customer.subscription.created fires for trials and for first payments that haven't gone through, so a team that celebrates every creation event will overcount wins. The reliable signal that you got paid is invoice.paid.
Status changes after that matter more. When a renewal fails and the subscription goes past_due, the revenue is still on your books, but time is running out. Stripe's recommended Smart Retries setting is 8 tries within 2 weeks. After the last attempt, the subscription moves to whatever you configured, which is canceled, unpaid, or left past due. Customers who lapse this way become involuntary churn, often without ever deciding to leave.
Scheduled cancellations are easy to miss. When a customer cancels at period end, Stripe sets cancel_at_period_end and fires customer.subscription.updated, not deleted. The deletion event arrives when the paid-through period is over, which can be weeks later.
Each of these changes moves your MRR, which is why subscription events feed your revenue metrics.
What to do at each stage
- New subscription. The founder or success team checks the status. If it's
active, start onboarding while the customer is engaged. If it'strialing, plan for the conversion date. - Plan change. An upgrade is a reason to talk to the customer. A downgrade is worth a short, personal note asking what changed.
- Past due. Finance or support reaches out before retries run out. A personal email asking the customer to update their card often works faster than automated reminders.
- Scheduled cancellation. You have until the period ends to learn why and make an offer.
- Canceled. Record the reason. Stripe's
cancellation_details.reasonseparatescancellation_requestedfrompayment_failedandpayment_disputed, which tells you whether you have a product problem or a billing problem. - Engineering. Grant and revoke access from webhook events, not from checkout redirects, so your app matches what Stripe has on record.
Subscriptions in ChargeBell
ChargeBell turns subscription events into plain-English Slack messages. The new subscription alert posts the plan, the customer when Stripe provides it, and the MRR change as a monthly figure. Trial and incomplete signups post without an MRR figure. The alert doesn't show the status itself, so check it in Stripe. Separate alerts cover plan upgrades and downgrades, trials ending soon, cancellations with their lost MRR, failed payments, and recovered payments.
Each alert type can go to its own channel, for example new subscribers to #wins and failed payments and cancellations to #billing or #founders. The Stripe connection is read-only, so ChargeBell reports on a subscription but can never create, change, or cancel one. For a full setup, see how to monitor Stripe subscriptions in Slack.
Get alerted in Slack
Stripe events: customer.subscription.created, customer.subscription.updated, customer.subscription.deleted, customer.subscription.trial_will_end, customer.subscription.paused, customer.subscription.resumed
ChargeBellAPP
🎉 New subscriber: $49.00/month
Acme Corp · Pro Monthly
MRR impact: +$49.00/mo